more on skinning : replaced ugly blue rectangle with a subtle glow. more tweakings necessary to make it good everywhere
git-svn-id: svn+ssh://svn.code.sf.net/p/supertuxkart/code/main/branches/irrlicht@3378 178a84e3-b1eb-0310-8ba1-8eac791a3b58
This commit is contained in:
parent
6955c8214c
commit
b057267db1
Binary file not shown.
Before Width: | Height: | Size: 75 KiB After Width: | Height: | Size: 28 KiB |
Binary file not shown.
Before Width: | Height: | Size: 57 KiB After Width: | Height: | Size: 33 KiB |
Binary file not shown.
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 27 KiB |
@ -329,7 +329,7 @@ void IrrDriver::update(float dt)
|
|||||||
m_device->getVideoDriver()->beginScene(true, true, video::SColor(255,100,101,140));
|
m_device->getVideoDriver()->beginScene(true, true, video::SColor(255,100,101,140));
|
||||||
m_scene_manager->drawAll();
|
m_scene_manager->drawAll();
|
||||||
|
|
||||||
GUIEngine::render();
|
GUIEngine::render(dt);
|
||||||
|
|
||||||
m_device->getVideoDriver()->endScene();
|
m_device->getVideoDriver()->endScene();
|
||||||
} // update
|
} // update
|
||||||
|
@ -19,6 +19,12 @@ namespace GUIEngine
|
|||||||
std::vector<Screen*> g_loaded_screens;
|
std::vector<Screen*> g_loaded_screens;
|
||||||
Screen* g_current_screen = NULL;
|
Screen* g_current_screen = NULL;
|
||||||
|
|
||||||
|
float dt = 0;
|
||||||
|
|
||||||
|
float getLatestDt()
|
||||||
|
{
|
||||||
|
return dt;
|
||||||
|
}
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
IrrlichtDevice* getDevice()
|
IrrlichtDevice* getDevice()
|
||||||
{
|
{
|
||||||
@ -111,8 +117,10 @@ void transmitEvent(Widget* widget, std::string& name)
|
|||||||
g_event_callback(widget, name);
|
g_event_callback(widget, name);
|
||||||
}
|
}
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
void render()
|
void render(float elapsed_time)
|
||||||
{
|
{
|
||||||
|
GUIEngine::dt = elapsed_time;
|
||||||
|
|
||||||
// on one end, making these static is not too clean.
|
// on one end, making these static is not too clean.
|
||||||
// on another end, these variables are really only used locally,
|
// on another end, these variables are really only used locally,
|
||||||
// and making them static avoids doing the same stupid computations every frame
|
// and making them static avoids doing the same stupid computations every frame
|
||||||
|
@ -22,13 +22,15 @@ namespace GUIEngine
|
|||||||
extern IVideoDriver* getDriver();
|
extern IVideoDriver* getDriver();
|
||||||
extern IGUIFont* getFont();
|
extern IGUIFont* getFont();
|
||||||
|
|
||||||
|
float getLatestDt();
|
||||||
|
|
||||||
void init(irr::IrrlichtDevice* device, irr::video::IVideoDriver* driver, void (*eventCallback)(Widget* widget, std::string& name) );
|
void init(irr::IrrlichtDevice* device, irr::video::IVideoDriver* driver, void (*eventCallback)(Widget* widget, std::string& name) );
|
||||||
void switchToScreen(const char* );
|
void switchToScreen(const char* );
|
||||||
void clear();
|
void clear();
|
||||||
|
|
||||||
Screen* getCurrentScreen();
|
Screen* getCurrentScreen();
|
||||||
|
|
||||||
void render();
|
void render(float dt);
|
||||||
void transmitEvent(Widget* widget, std::string& name);
|
void transmitEvent(Widget* widget, std::string& name);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -253,6 +253,8 @@ void Skin::drawButton(const core::rect< s32 > &rect, const bool pressed, const b
|
|||||||
}
|
}
|
||||||
void Skin::drawRibbon(const core::rect< s32 > &rect, const Widget* widget, const bool pressed, bool focused)
|
void Skin::drawRibbon(const core::rect< s32 > &rect, const Widget* widget, const bool pressed, bool focused)
|
||||||
{
|
{
|
||||||
|
return;
|
||||||
|
|
||||||
// only combo ribbons need a border
|
// only combo ribbons need a border
|
||||||
if ( ((RibbonWidget*)widget)->getRibbonType() != RIBBON_COMBO ) return;
|
if ( ((RibbonWidget*)widget)->getRibbonType() != RIBBON_COMBO ) return;
|
||||||
|
|
||||||
@ -284,6 +286,7 @@ void Skin::drawRibbonChild(const core::rect< s32 > &rect, const Widget* widget,
|
|||||||
|
|
||||||
const bool parent_focused = GUIEngine::getGUIEnv()->getFocus() == widget->m_parent->m_element;
|
const bool parent_focused = GUIEngine::getGUIEnv()->getFocus() == widget->m_parent->m_element;
|
||||||
|
|
||||||
|
/* tab-bar ribbons */
|
||||||
if(widget->m_type == WTYPE_BUTTON)
|
if(widget->m_type == WTYPE_BUTTON)
|
||||||
{
|
{
|
||||||
// ribbons containing buttons are actually tabs
|
// ribbons containing buttons are actually tabs
|
||||||
@ -309,13 +312,9 @@ void Skin::drawRibbonChild(const core::rect< s32 > &rect, const Widget* widget,
|
|||||||
left_border, right_border,
|
left_border, right_border,
|
||||||
border_above, border_below, 0);
|
border_above, border_below, 0);
|
||||||
}
|
}
|
||||||
/*
|
|
||||||
if(mark_selected)
|
|
||||||
GUIEngine::getDriver()->draw2DRectangle( SColor(255, 0, 150, 150), rect );
|
|
||||||
else
|
|
||||||
GUIEngine::getDriver()->draw2DRectangle( SColor(255, 150, 0, 0), rect );
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
/* icon ribbons */
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if(widget->m_parent != NULL && widget->m_parent->m_type == WTYPE_RIBBON &&
|
if(widget->m_parent != NULL && widget->m_parent->m_type == WTYPE_RIBBON &&
|
||||||
@ -324,10 +323,50 @@ void Skin::drawRibbonChild(const core::rect< s32 > &rect, const Widget* widget,
|
|||||||
|
|
||||||
if(mark_selected)
|
if(mark_selected)
|
||||||
{
|
{
|
||||||
const core::rect< s32 > rect2 = core::rect< s32 >(rect.UpperLeftCorner.X - 5, rect.UpperLeftCorner.Y - 5,
|
int grow = 45;
|
||||||
rect.UpperLeftCorner.X + rect.getWidth() + 5,
|
static float glow_effect = 0;
|
||||||
rect.UpperLeftCorner.Y + rect.getHeight() + 5);
|
|
||||||
GUIEngine::getDriver()->draw2DRectangle( SColor(2555, 0, 175, 255), rect2 );
|
if(focused || parent_focused)
|
||||||
|
{
|
||||||
|
const float dt = GUIEngine::getLatestDt();
|
||||||
|
glow_effect += dt*3;
|
||||||
|
if (glow_effect > 6.2832 /* 2*PI */) glow_effect -= 6.2832;
|
||||||
|
grow = 45 + 10*sin(glow_effect);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
const core::rect< s32 > rect2 = core::rect< s32 >(rect.UpperLeftCorner.X - 5 - grow,
|
||||||
|
rect.UpperLeftCorner.Y - 5 - grow,
|
||||||
|
rect.UpperLeftCorner.X + rect.getWidth() + 5 + grow,
|
||||||
|
rect.UpperLeftCorner.Y + rect.getHeight() + 5 + grow);
|
||||||
|
*/
|
||||||
|
|
||||||
|
const int glow_center_x = rect.UpperLeftCorner.X + rect.getWidth()/2;
|
||||||
|
const int glow_center_y = rect.UpperLeftCorner.Y + rect.getHeight() - 5;
|
||||||
|
|
||||||
|
const core::rect< s32 > rect2 = core::rect< s32 >(glow_center_x - 45 - grow,
|
||||||
|
glow_center_y - 25 - grow/2,
|
||||||
|
glow_center_x + 45 + grow,
|
||||||
|
glow_center_y + 25 + grow/2);
|
||||||
|
|
||||||
|
// GUIEngine::getDriver()->draw2DRectangle( SColor(2555, 0, 175, 255), rect2 );
|
||||||
|
|
||||||
|
const int texture_w = m_tex_ficonhighlight->getSize().Width;
|
||||||
|
const int texture_h = m_tex_ficonhighlight->getSize().Height;
|
||||||
|
|
||||||
|
core::rect<s32> source_area = core::rect<s32>(0, 0, texture_w, texture_h);
|
||||||
|
|
||||||
|
if(!focused && !parent_focused)
|
||||||
|
{
|
||||||
|
GUIEngine::getDriver()->draw2DImage(m_tex_iconhighlight, rect2, source_area,
|
||||||
|
0 /* no clipping */, 0, true /* alpha */);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
GUIEngine::getDriver()->draw2DImage(m_tex_ficonhighlight, rect2, source_area,
|
||||||
|
0 /* no clipping */, 0, true /* alpha */);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user