From: <au...@us...> - 2009-04-11 18:13:14
|
Revision: 3376 http://supertuxkart.svn.sourceforge.net/supertuxkart/?rev=3376&view=rev Author: auria Date: 2009-04-11 18:13:06 +0000 (Sat, 11 Apr 2009) Log Message: ----------- improved spinner skin Modified Paths: -------------- main/branches/irrlicht/src/gui/skin.cpp main/branches/irrlicht/src/gui/skin.hpp Added Paths: ----------- main/branches/irrlicht/data/gui/glassspinner_down.png Added: main/branches/irrlicht/data/gui/glassspinner_down.png =================================================================== (Binary files differ) Property changes on: main/branches/irrlicht/data/gui/glassspinner_down.png ___________________________________________________________________ Added: svn:mime-type + image/png Modified: main/branches/irrlicht/src/gui/skin.cpp =================================================================== --- main/branches/irrlicht/src/gui/skin.cpp 2009-04-11 16:43:24 UTC (rev 3375) +++ main/branches/irrlicht/src/gui/skin.cpp 2009-04-11 18:13:06 UTC (rev 3376) @@ -19,6 +19,8 @@ m_tex_fbutton = GUIEngine::getDriver()->getTexture( (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::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,27 +176,56 @@ core::rect<s32> dest_area_bottom_left = core::rect<s32>(hx, hy, lx, ly); core::rect<s32> dest_area_bottom_right = core::rect<s32>(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 @@ 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) + { + 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 ); + 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 ); */ } Modified: main/branches/irrlicht/src/gui/skin.hpp =================================================================== --- main/branches/irrlicht/src/gui/skin.hpp 2009-04-11 16:43:24 UTC (rev 3375) +++ main/branches/irrlicht/src/gui/skin.hpp 2009-04-11 18:13:06 UTC (rev 3376) @@ -14,6 +14,13 @@ 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 @@ 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 @@ 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 @@ 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 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |