From aa37c894fe306ff1d0a4e98445f8eaf7ee383ded Mon Sep 17 00:00:00 2001 From: auria Date: Sat, 11 Apr 2009 18:13:06 +0000 Subject: [PATCH] improved spinner skin git-svn-id: svn+ssh://svn.code.sf.net/p/supertuxkart/code/main/branches/irrlicht@3376 178a84e3-b1eb-0310-8ba1-8eac791a3b58 --- data/gui/glassspinner_down.png | Bin 0 -> 28086 bytes src/gui/skin.cpp | 124 +++++++++++++++++++++++++-------- src/gui/skin.hpp | 13 +++- 3 files changed, 105 insertions(+), 32 deletions(-) create mode 100644 data/gui/glassspinner_down.png diff --git a/data/gui/glassspinner_down.png b/data/gui/glassspinner_down.png new file mode 100644 index 0000000000000000000000000000000000000000..2b88cf3833530d4880caf0cfe1daf251d03c9c27 GIT binary patch literal 28086 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�<>@hcmWE3Jd8vb#J0n-tUw+o^+e2=T~y=)R4U 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 aogetTexture( (file_manager->getGUIDir() + "/glassbutton_focused.png").c_str() ); m_tex_spinner = GUIEngine::getDriver()->getTexture( (file_manager->getGUIDir() + "/glassspinner.png").c_str() ); m_tex_fspinner = GUIEngine::getDriver()->getTexture( (file_manager->getGUIDir() + "/glassspinner_focus.png").c_str() ); + m_tex_dspinner = GUIEngine::getDriver()->getTexture( (file_manager->getGUIDir() + "/glassspinner_down.png").c_str() ); + m_tex_tab = GUIEngine::getDriver()->getTexture( (file_manager->getGUIDir() + "/glasstab.png").c_str() ); m_tex_ftab = GUIEngine::getDriver()->getTexture( (file_manager->getGUIDir() + "/glasstab_focus.png").c_str() ); m_tex_iconhighlight = GUIEngine::getDriver()->getTexture( (file_manager->getGUIDir() + "/glass_iconhighlight.png").c_str() ); @@ -48,7 +50,7 @@ void Skin::draw2DRectangle (IGUIElement *element, const video::SColor &color, co void Skin::drawBoxFromStretchableTexture(const core::rect< s32 > &dest, ITexture* source, const int left_border, const int right_border, const int top_border, const int bottom_border, - const float border_out_portion) + const float border_out_portion, int areas) { // FIXME? - lots of things here will be re-calculated every frame, which is useless since // widgets won't move, so they'd only need to be calculated once. @@ -174,26 +176,55 @@ void Skin::drawBoxFromStretchableTexture(const core::rect< s32 > &dest, ITexture core::rect dest_area_bottom_left = core::rect(hx, hy, lx, ly); core::rect dest_area_bottom_right = core::rect(jx, jy, nx, ny); - GUIEngine::getDriver()->draw2DImage(source, dest_area_left, source_area_left, - 0 /* no clipping */, 0, true /* alpha */); - GUIEngine::getDriver()->draw2DImage(source, dest_area_center, source_area_center, - 0 /* no clipping */, 0, true /* alpha */); - GUIEngine::getDriver()->draw2DImage(source, dest_area_right, source_area_right, - 0 /* no clipping */, 0, true /* alpha */); + if((areas & LEFT) != 0) + { + GUIEngine::getDriver()->draw2DImage(source, dest_area_left, source_area_left, + 0 /* no clipping */, 0, true /* alpha */); + } - GUIEngine::getDriver()->draw2DImage(source, dest_area_top, source_area_top, - 0 /* no clipping */, 0, true /* alpha */); - GUIEngine::getDriver()->draw2DImage(source, dest_area_bottom, source_area_bottom, - 0 /* no clipping */, 0, true /* alpha */); + if((areas & BODY) != 0) + { + GUIEngine::getDriver()->draw2DImage(source, dest_area_center, source_area_center, + 0 /* no clipping */, 0, true /* alpha */); + } - GUIEngine::getDriver()->draw2DImage(source, dest_area_top_left, source_area_top_left, - 0 /* no clipping */, 0, true /* alpha */); - GUIEngine::getDriver()->draw2DImage(source, dest_area_top_right, source_area_top_right, - 0 /* no clipping */, 0, true /* alpha */); - GUIEngine::getDriver()->draw2DImage(source, dest_area_bottom_left, source_area_bottom_left, - 0 /* no clipping */, 0, true /* alpha */); - GUIEngine::getDriver()->draw2DImage(source, dest_area_bottom_right, source_area_bottom_right, - 0 /* no clipping */, 0, true /* alpha */); + if((areas & RIGHT) != 0) + { + GUIEngine::getDriver()->draw2DImage(source, dest_area_right, source_area_right, + 0 /* no clipping */, 0, true /* alpha */); + } + + if((areas & TOP) != 0) + { + GUIEngine::getDriver()->draw2DImage(source, dest_area_top, source_area_top, + 0 /* no clipping */, 0, true /* alpha */); + } + if((areas & BOTTOM) != 0) + { + GUIEngine::getDriver()->draw2DImage(source, dest_area_bottom, source_area_bottom, + 0 /* no clipping */, 0, true /* alpha */); + } + + if( (areas & LEFT != 0) && (areas & TOP != 0) ) + { + GUIEngine::getDriver()->draw2DImage(source, dest_area_top_left, source_area_top_left, + 0 /* no clipping */, 0, true /* alpha */); + } + if( (areas & RIGHT != 0) && (areas & TOP != 0) ) + { + GUIEngine::getDriver()->draw2DImage(source, dest_area_top_right, source_area_top_right, + 0 /* no clipping */, 0, true /* alpha */); + } + if( (areas & LEFT != 0) && (areas & BOTTOM != 0) ) + { + GUIEngine::getDriver()->draw2DImage(source, dest_area_bottom_left, source_area_bottom_left, + 0 /* no clipping */, 0, true /* alpha */); + } + if( (areas & RIGHT != 0) && (areas & BOTTOM != 0) ) + { + GUIEngine::getDriver()->draw2DImage(source, dest_area_bottom_right, source_area_bottom_right, + 0 /* no clipping */, 0, true /* alpha */); + } } } @@ -282,22 +313,55 @@ void Skin::drawSpinnerBody(const core::rect< s32 > &rect, const Widget* widget, left_border, right_border, border_above, border_below, 0); /* - if(focused) - GUIEngine::getDriver()->draw2DRectangle( SColor(255, 255, 0, 0), rect ); - else - GUIEngine::getDriver()->draw2DRectangle( SColor(255, 150, 0, 0), rect ); + if(focused) + GUIEngine::getDriver()->draw2DRectangle( SColor(255, 255, 0, 0), rect ); + else + GUIEngine::getDriver()->draw2DRectangle( SColor(255, 150, 0, 0), rect ); */ } -void Skin::drawSpinnerChild(const core::rect< s32 > &rect, const Widget* widget, const bool pressed, bool focused) +void Skin::drawSpinnerChild(const core::rect< s32 > &rect, Widget* widget, const bool pressed, bool focused) { - /* + // FIXME - move these numbers to a config file + const int left_border = 110; + const int right_border = 110; + const int border_above = 0; + const int border_below = 36; + if(pressed) - GUIEngine::getDriver()->draw2DRectangle( SColor(255, 255, 0, 0), rect ); - else if(focused) - GUIEngine::getDriver()->draw2DRectangle( SColor(255, 150, 0, 0), rect ); - else - GUIEngine::getDriver()->draw2DRectangle( SColor(255, 0, 150, 0), rect ); + { + Widget* spinner = widget->m_parent; + int areas = 0; + + //std::cout << "drawing spinner child " << widget->m_properties[PROP_ID].c_str() << std::endl; + + if (widget->m_properties[PROP_ID] == "left") areas = LEFT; + else if (widget->m_properties[PROP_ID] == "right") areas = RIGHT; + else return; + + core::rect< s32 > rect2 = core::rect< s32 >( spinner->x, spinner->y, + spinner->x + spinner->w, + spinner->y + spinner->h ); + + //std::cout << "proceeding to render " << areas << std::endl; + + drawBoxFromStretchableTexture(rect2, m_tex_fspinner, + left_border, right_border, + border_above, border_below, 0, LEFT | RIGHT); + + drawBoxFromStretchableTexture(rect2, m_tex_dspinner, + left_border, right_border, + border_above, border_below, 0, areas); + + } + + /* + if(pressed) + GUIEngine::getDriver()->draw2DRectangle( SColor(255, 255, 0, 0), rect ); + else if(focused) + GUIEngine::getDriver()->draw2DRectangle( SColor(255, 150, 0, 0), rect ); + else + GUIEngine::getDriver()->draw2DRectangle( SColor(255, 0, 150, 0), rect ); */ } diff --git a/src/gui/skin.hpp b/src/gui/skin.hpp index d552928b7..03091fa49 100644 --- a/src/gui/skin.hpp +++ b/src/gui/skin.hpp @@ -14,6 +14,13 @@ namespace GUIEngine class Widget; + // areas + const int BODY = 1; + const int LEFT = 2; + const int RIGHT = 4; + const int TOP = 8; + const int BOTTOM = 16; + class Skin : public IGUISkin { IGUISkin* m_fallback_skin; @@ -22,6 +29,7 @@ class Skin : public IGUISkin ITexture* m_tex_fbutton; ITexture* m_tex_spinner; ITexture* m_tex_fspinner; + ITexture* m_tex_dspinner; ITexture* m_tex_tab; ITexture* m_tex_ftab; ITexture* m_tex_iconhighlight; @@ -30,7 +38,8 @@ class Skin : public IGUISkin void drawBoxFromStretchableTexture(const core::rect< s32 > &dest, ITexture* source, const int left_border, const int right_border, const int top_border, const int bottom_border, - const float border_out_portion = 0.5); + const float border_out_portion = 0.5, + int areas = BODY | LEFT | RIGHT | TOP | BOTTOM); public: Skin(IGUISkin* fallback_skin); @@ -41,7 +50,7 @@ public: void drawButton(const core::rect< s32 > &rect, const bool pressed, const bool focused); void drawRibbon(const core::rect< s32 > &rect, const Widget* widget, const bool pressed, bool focused); void drawRibbonChild(const core::rect< s32 > &rect, const Widget* widget, const bool pressed, bool focused); - void drawSpinnerChild(const core::rect< s32 > &rect, const Widget* widget, const bool pressed, bool focused); + void drawSpinnerChild(const core::rect< s32 > &rect, Widget* widget, const bool pressed, bool focused); void drawSpinnerBody(const core::rect< s32 > &rect, const Widget* widget, const bool pressed, const bool focused); // irrlicht's callbacks