diff options
27 files changed, 141 insertions, 156 deletions
diff --git a/data/graphics/gui/CMakeLists.txt b/data/graphics/gui/CMakeLists.txt index 2fefbfe6c..67c1352d7 100644 --- a/data/graphics/gui/CMakeLists.txt +++ b/data/graphics/gui/CMakeLists.txt @@ -9,12 +9,6 @@ SET (FILES colors.xml deepbox.png equipmentbox.png - hscroll_left_default.png - hscroll_left_highlight.png - hscroll_left_pressed.png - hscroll_right_default.png - hscroll_right_highlight.png - hscroll_right_pressed.png item_shortcut_bgr.png mouse.png progress-indicator.png @@ -23,6 +17,11 @@ SET (FILES radioout.png radioout_highlight.png resize.png + scroll.xml + scroll_background.xml + scroll_highlighted.xml + scrollbuttons.xml + scrollbuttons_pressed.xml selection.png slider.png slider_hilight.png @@ -38,14 +37,6 @@ SET (FILES target-cursor-normal-m.png target-cursor-normal-s.png unknown-item.png - vscroll_down_default.png - vscroll_down_highlight.png - vscroll_down_pressed.png - vscroll_grey.png - vscroll_highlight.png - vscroll_up_default.png - vscroll_up_highlight.png - vscroll_up_pressed.png window.png window.xml ) diff --git a/data/graphics/gui/Makefile.am b/data/graphics/gui/Makefile.am index 0e3e13a1e..e59e2d79a 100644 --- a/data/graphics/gui/Makefile.am +++ b/data/graphics/gui/Makefile.am @@ -12,12 +12,6 @@ gui_DATA = \ colors.xml \ deepbox.png \ equipmentbox.png \ - hscroll_left_default.png \ - hscroll_left_highlight.png \ - hscroll_left_pressed.png \ - hscroll_right_default.png \ - hscroll_right_highlight.png \ - hscroll_right_pressed.png \ item_shortcut_bgr.png \ mouse.png \ progress-indicator.png \ @@ -26,6 +20,11 @@ gui_DATA = \ radioout.png \ radioout_highlight.png \ resize.png \ + scroll.xml \ + scroll_background.xml \ + scroll_highlighted.xml \ + scrollbuttons.xml \ + scrollbuttons_pressed.xml\ selection.png \ slider.png \ slider_hilight.png \ @@ -41,14 +40,6 @@ gui_DATA = \ target-cursor-normal-m.png \ target-cursor-normal-s.png \ unknown-item.png \ - vscroll_down_default.png \ - vscroll_down_highlight.png \ - vscroll_down_pressed.png \ - vscroll_grey.png \ - vscroll_highlight.png \ - vscroll_up_default.png \ - vscroll_up_highlight.png \ - vscroll_up_pressed.png \ window.png \ window.xml diff --git a/data/graphics/gui/hscroll_left_default.png b/data/graphics/gui/hscroll_left_default.png Binary files differdeleted file mode 100644 index 2f763d302..000000000 --- a/data/graphics/gui/hscroll_left_default.png +++ /dev/null diff --git a/data/graphics/gui/hscroll_left_highlight.png b/data/graphics/gui/hscroll_left_highlight.png Binary files differdeleted file mode 100644 index 6be5ae259..000000000 --- a/data/graphics/gui/hscroll_left_highlight.png +++ /dev/null diff --git a/data/graphics/gui/hscroll_left_pressed.png b/data/graphics/gui/hscroll_left_pressed.png Binary files differdeleted file mode 100644 index b8ebcb463..000000000 --- a/data/graphics/gui/hscroll_left_pressed.png +++ /dev/null diff --git a/data/graphics/gui/hscroll_right_default.png b/data/graphics/gui/hscroll_right_default.png Binary files differdeleted file mode 100644 index 33fdddd0a..000000000 --- a/data/graphics/gui/hscroll_right_default.png +++ /dev/null diff --git a/data/graphics/gui/hscroll_right_highlight.png b/data/graphics/gui/hscroll_right_highlight.png Binary files differdeleted file mode 100644 index e9e633eac..000000000 --- a/data/graphics/gui/hscroll_right_highlight.png +++ /dev/null diff --git a/data/graphics/gui/hscroll_right_pressed.png b/data/graphics/gui/hscroll_right_pressed.png Binary files differdeleted file mode 100644 index 53972f2bb..000000000 --- a/data/graphics/gui/hscroll_right_pressed.png +++ /dev/null diff --git a/data/graphics/gui/scroll.xml b/data/graphics/gui/scroll.xml new file mode 100644 index 000000000..0bcdf9ad8 --- /dev/null +++ b/data/graphics/gui/scroll.xml @@ -0,0 +1,18 @@ +<skinset name="Default" image="window.png"> + <widget type="Window" xpos="41" ypos="164"> + <!-- Top Row --> + <part type="top-left-corner" xpos="0" ypos="0" width="4" height="4" /> + <part type="top-edge" xpos="4" ypos="0" width="3" height="4" /> + <part type="top-right-corner" xpos="7" ypos="0" width="4" height="4" /> + + <!-- Middle Row --> + <part type="left-edge" xpos="0" ypos="4" width="4" height="11" /> + <part type="bg-quad" xpos="4" ypos="4" width="3" height="11" /> + <part type="right-edge" xpos="7" ypos="4" width="4" height="11" /> + + <!-- Bottom Row --> + <part type="bottom-left-corner" xpos="0" ypos="15" width="4" height="4" /> + <part type="bottom-edge" xpos="4" ypos="15" width="3" height="4" /> + <part type="bottom-right-corner" xpos="7" ypos="15" width="4" height="4" /> + </widget> +</skinset> diff --git a/data/graphics/gui/scroll_background.xml b/data/graphics/gui/scroll_background.xml new file mode 100644 index 000000000..4a63cf25c --- /dev/null +++ b/data/graphics/gui/scroll_background.xml @@ -0,0 +1,18 @@ +<skinset name="Default" image="window.png"> + <widget type="Window" xpos="41" ypos="186"> + <!-- Top Row --> + <part type="top-left-corner" xpos="0" ypos="0" width="4" height="4" /> + <part type="top-edge" xpos="3" ypos="0" width="26" height="4" /> + <part type="top-right-corner" xpos="28" ypos="0" width="4" height="4" /> + + <!-- Middle Row --> + <part type="left-edge" xpos="0" ypos="3" width="4" height="26" /> + <part type="bg-quad" xpos="3" ypos="3" width="26" height="26" /> + <part type="right-edge" xpos="28" ypos="3" width="4" height="26" /> + + <!-- Bottom Row --> + <part type="bottom-left-corner" xpos="0" ypos="28" width="4" height="4" /> + <part type="bottom-edge" xpos="3" ypos="28" width="26" height="4" /> + <part type="bottom-right-corner" xpos="28" ypos="28" width="4" height="4" /> + </widget> +</skinset> diff --git a/data/graphics/gui/scroll_highlighted.xml b/data/graphics/gui/scroll_highlighted.xml new file mode 100644 index 000000000..4833972cf --- /dev/null +++ b/data/graphics/gui/scroll_highlighted.xml @@ -0,0 +1,18 @@ +<skinset name="Default" image="window.png"> + <widget type="Window" xpos="57" ypos="164"> + <!-- Top Row --> + <part type="top-left-corner" xpos="0" ypos="0" width="4" height="4" /> + <part type="top-edge" xpos="4" ypos="0" width="3" height="4" /> + <part type="top-right-corner" xpos="7" ypos="0" width="4" height="4" /> + + <!-- Middle Row --> + <part type="left-edge" xpos="0" ypos="4" width="4" height="11" /> + <part type="bg-quad" xpos="4" ypos="4" width="3" height="11" /> + <part type="right-edge" xpos="7" ypos="4" width="4" height="11" /> + + <!-- Bottom Row --> + <part type="bottom-left-corner" xpos="0" ypos="15" width="4" height="4" /> + <part type="bottom-edge" xpos="4" ypos="15" width="3" height="4" /> + <part type="bottom-right-corner" xpos="7" ypos="15" width="4" height="4" /> + </widget> +</skinset> diff --git a/data/graphics/gui/scrollbuttons.xml b/data/graphics/gui/scrollbuttons.xml new file mode 100644 index 000000000..2c57cd0ba --- /dev/null +++ b/data/graphics/gui/scrollbuttons.xml @@ -0,0 +1,8 @@ +<skinset name="Default" image="window.png"> + <widget type="Window" xpos="41" ypos="100"> + <part type="left" xpos="0" ypos="0" width="12" height="12" /> + <part type="right" xpos="0" ypos="16" width="12" height="12" /> + <part type="down" xpos="0" ypos="32" width="12" height="12" /> + <part type="up" xpos="0" ypos="48" width="12" height="12" /> + </widget> +</skinset> diff --git a/data/graphics/gui/scrollbuttons_pressed.xml b/data/graphics/gui/scrollbuttons_pressed.xml new file mode 100644 index 000000000..f4fb89f15 --- /dev/null +++ b/data/graphics/gui/scrollbuttons_pressed.xml @@ -0,0 +1,8 @@ +<skinset name="Default" image="window.png"> + <widget type="Window" xpos="57" ypos="100"> + <part type="left" xpos="0" ypos="0" width="12" height="12" /> + <part type="right" xpos="0" ypos="16" width="12" height="12" /> + <part type="down" xpos="0" ypos="32" width="12" height="12" /> + <part type="up" xpos="0" ypos="48" width="12" height="12" /> + </widget> +</skinset> diff --git a/data/graphics/gui/vscroll_down_default.png b/data/graphics/gui/vscroll_down_default.png Binary files differdeleted file mode 100644 index c4292489e..000000000 --- a/data/graphics/gui/vscroll_down_default.png +++ /dev/null diff --git a/data/graphics/gui/vscroll_down_highlight.png b/data/graphics/gui/vscroll_down_highlight.png Binary files differdeleted file mode 100644 index ac88f7c73..000000000 --- a/data/graphics/gui/vscroll_down_highlight.png +++ /dev/null diff --git a/data/graphics/gui/vscroll_down_pressed.png b/data/graphics/gui/vscroll_down_pressed.png Binary files differdeleted file mode 100644 index 9dcc89f6f..000000000 --- a/data/graphics/gui/vscroll_down_pressed.png +++ /dev/null diff --git a/data/graphics/gui/vscroll_grey.png b/data/graphics/gui/vscroll_grey.png Binary files differdeleted file mode 100644 index f99da4676..000000000 --- a/data/graphics/gui/vscroll_grey.png +++ /dev/null diff --git a/data/graphics/gui/vscroll_highlight.png b/data/graphics/gui/vscroll_highlight.png Binary files differdeleted file mode 100644 index 2e0fcbfc1..000000000 --- a/data/graphics/gui/vscroll_highlight.png +++ /dev/null diff --git a/data/graphics/gui/vscroll_up_default.png b/data/graphics/gui/vscroll_up_default.png Binary files differdeleted file mode 100644 index 1cecc3512..000000000 --- a/data/graphics/gui/vscroll_up_default.png +++ /dev/null diff --git a/data/graphics/gui/vscroll_up_highlight.png b/data/graphics/gui/vscroll_up_highlight.png Binary files differdeleted file mode 100644 index 7b5009f39..000000000 --- a/data/graphics/gui/vscroll_up_highlight.png +++ /dev/null diff --git a/data/graphics/gui/vscroll_up_pressed.png b/data/graphics/gui/vscroll_up_pressed.png Binary files differdeleted file mode 100644 index 2320ec42f..000000000 --- a/data/graphics/gui/vscroll_up_pressed.png +++ /dev/null diff --git a/data/graphics/gui/window.png b/data/graphics/gui/window.png Binary files differindex a0d5da63c..81a1526dc 100644 --- a/data/graphics/gui/window.png +++ b/data/graphics/gui/window.png diff --git a/src/gui/theme.cpp b/src/gui/theme.cpp index 779d98768..9bf5adcf6 100644 --- a/src/gui/theme.cpp +++ b/src/gui/theme.cpp @@ -410,6 +410,14 @@ Skin *Theme::readSkin(const std::string &filename) loadSkinImage(7, "bottom-edge") else loadSkinImage(8, "bottom-right-corner") + else + loadSkinImage(0, "up") + else + loadSkinImage(1, "down") + else + loadSkinImage(2, "left") + else + loadSkinImage(3, "right") } else if (xmlNameEqual(partNode, "option")) { @@ -818,3 +826,21 @@ void Theme::loadColors(std::string file) } } } + +void Theme::loadRect(ImageRect &image, std::string name, int start, int end) +{ + Skin *skin = load(name); + if (skin) + { + const ImageRect &rect = skin->getBorder(); + for (int f = start; f <= end; f ++) + { + if (rect.grid[f]) + { + rect.grid[f]->incRef(); + image.grid[f] = rect.grid[f]; + } + } + unload(skin); + } +} diff --git a/src/gui/theme.h b/src/gui/theme.h index 8c5675454..144cfd274 100644 --- a/src/gui/theme.h +++ b/src/gui/theme.h @@ -269,6 +269,9 @@ class Theme : public Palette, public ConfigListener void optionChanged(const std::string &); + void loadRect(ImageRect &image, std::string name, + int start = 0, int end = 8); + private: Theme(); ~Theme(); diff --git a/src/gui/widgets/button.cpp b/src/gui/widgets/button.cpp index 990faaaeb..ba789f2c5 100644 --- a/src/gui/widgets/button.cpp +++ b/src/gui/widgets/button.cpp @@ -173,30 +173,10 @@ void Button::init() if (mInstances == 0) { - // Load the skin - Image *btn[BUTTON_COUNT]; - if (Theme::instance()) { for (int mode = 0; mode < BUTTON_COUNT; mode ++) - { - Skin *skin = Theme::instance()->load(data[mode]); - if (skin) - { - const ImageRect &rect = skin->getBorder(); - - for (int f = 0; f < 9; f ++) - { - if (rect.grid[f]) - { - rect.grid[f]->incRef(); - button[mode].grid[f] = rect.grid[f]; - } - } - - Theme::instance()->unload(skin); - } - } + Theme::instance()->loadRect(button[mode], data[mode]); } updateAlpha(); 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++; diff --git a/src/gui/widgets/scrollarea.h b/src/gui/widgets/scrollarea.h index 582033071..53a79d20f 100644 --- a/src/gui/widgets/scrollarea.h +++ b/src/gui/widgets/scrollarea.h @@ -121,7 +121,8 @@ class ScrollArea : public gcn::ScrollArea, public gcn::WidgetListener UP = 0, DOWN, LEFT, - RIGHT + RIGHT, + BUTTONS_DIR }; /** |