diff options
Diffstat (limited to 'src/gui/widgets/scrollarea.cpp')
-rw-r--r-- | src/gui/widgets/scrollarea.cpp | 135 |
1 files changed, 29 insertions, 106 deletions
diff --git a/src/gui/widgets/scrollarea.cpp b/src/gui/widgets/scrollarea.cpp index 021bd3d15..4e15bc167 100644 --- a/src/gui/widgets/scrollarea.cpp +++ b/src/gui/widgets/scrollarea.cpp @@ -43,6 +43,12 @@ ImageRect ScrollArea::vMarker; ImageRect ScrollArea::vMarkerHi; Image *ScrollArea::buttons[4][2]; +static std::string const buttonFiles[2] = +{ + "scrollbuttons.xml", + "scrollbuttons_pressed.xml" +}; + ScrollArea::ScrollArea(): gcn::ScrollArea(), mX(0), @@ -87,29 +93,6 @@ ScrollArea::~ScrollArea() instances--; - if (instances == 0) - { - for_each(background.grid, background.grid + 9, dtor<Image*>()); - for_each(vMarker.grid, vMarker.grid + 9, dtor<Image*>()); - for_each(vMarkerHi.grid, vMarkerHi.grid + 9, dtor<Image*>()); - - if (buttons[UP][0]) - buttons[UP][0]->decRef(); - if (buttons[UP][1]) - buttons[UP][1]->decRef(); - if (buttons[DOWN][0]) - buttons[DOWN][0]->decRef(); - if (buttons[DOWN][1]) - buttons[DOWN][1]->decRef(); - if (buttons[LEFT][0]) - buttons[LEFT][0]->decRef(); - if (buttons[LEFT][1]) - buttons[LEFT][1]->decRef(); - if (buttons[RIGHT][0]) - buttons[RIGHT][0]->decRef(); - if (buttons[RIGHT][1]) - buttons[RIGHT][1]->decRef(); - } delete mVertexes; mVertexes = nullptr; } @@ -126,99 +109,39 @@ void ScrollArea::init() if (instances == 0) { - // Load the background skin - Image *textbox = Theme::getImageFromTheme("deepbox.png"); - const int bggridx[4] = {0, 3, 28, 31}; - const int bggridy[4] = {0, 3, 28, 31}; - int a = 0, x, y; - - for (y = 0; y < 3; y++) + for (int f = 0; f < 9; f ++) { - for (x = 0; x < 3; x++) - { - if (textbox) - { - background.grid[a] = textbox->getSubImage( - bggridx[x], bggridy[y], - bggridx[x + 1] - bggridx[x] + 1, - bggridy[y + 1] - bggridy[y] + 1); - background.grid[a]->setAlpha( - Client::getGuiAlpha()); - } - else - { - background.grid[a] = nullptr; - } - a++; - } + background.grid[f] = nullptr; + vMarker.grid[f] = nullptr; + vMarkerHi.grid[f] = nullptr; } - if (textbox) - textbox->decRef(); - - // Load vertical scrollbar skin - Image *vscroll = Theme::getImageFromTheme("vscroll_grey.png"); - Image *vscrollHi = Theme::getImageFromTheme("vscroll_highlight.png"); - - int vsgridx[4] = {0, 4, 7, 11}; - int vsgridy[4] = {0, 4, 15, 19}; - a = 0; + if (Theme::instance()) + { + Theme::instance()->loadRect(background, "scroll_background.xml"); + Theme::instance()->loadRect(vMarker, "scroll.xml"); + Theme::instance()->loadRect(vMarkerHi, "scroll_highlighted.xml"); + } - for (y = 0; y < 3; y++) + for (int i = 0; i < 2; i ++) { - for (x = 0; x < 3; x++) + Skin *skin = Theme::instance()->load(buttonFiles[i]); + if (skin) { - if (vscroll) - { - vMarker.grid[a] = vscroll->getSubImage( - vsgridx[x], vsgridy[y], - vsgridx[x + 1] - vsgridx[x], - vsgridy[y + 1] - vsgridy[y]); - vMarker.grid[a]->setAlpha( - Client::getGuiAlpha()); - } - else - { - vMarker.grid[a] = nullptr; - } - if (vscrollHi) - { - vMarkerHi.grid[a] = vscrollHi->getSubImage( - vsgridx[x], vsgridy[y], - vsgridx[x + 1] - vsgridx[x], - vsgridy[y + 1] - vsgridy[y]); - vMarkerHi.grid[a]->setAlpha( - Client::getGuiAlpha()); - } - else + const ImageRect &rect = skin->getBorder(); + for (int f = UP; f < BUTTONS_DIR; f ++) { - vMarkerHi.grid[a] = nullptr; + rect.grid[f]->incRef(); + buttons[f][i] = rect.grid[f]; } - a++; } + else + { + for (int f = UP; f < BUTTONS_DIR; f ++) + buttons[f][i] = nullptr; + } + Theme::instance()->unload(skin); } - - if (vscroll) - vscroll->decRef(); - if (vscrollHi) - vscrollHi->decRef(); - - buttons[UP][0] = - Theme::getImageFromTheme("vscroll_up_default.png"); - buttons[DOWN][0] = - Theme::getImageFromTheme("vscroll_down_default.png"); - buttons[LEFT][0] = - Theme::getImageFromTheme("hscroll_left_default.png"); - buttons[RIGHT][0] = - Theme::getImageFromTheme("hscroll_right_default.png"); - buttons[UP][1] = - Theme::getImageFromTheme("vscroll_up_pressed.png"); - buttons[DOWN][1] = - Theme::getImageFromTheme("vscroll_down_pressed.png"); - buttons[LEFT][1] = - Theme::getImageFromTheme("hscroll_left_pressed.png"); - buttons[RIGHT][1] = - Theme::getImageFromTheme("hscroll_right_pressed.png"); } instances++; |