void drawMenuBackground(video::IVideoDriver* driver) { core::dimension2d<u32> screensize = driver->getScreenSize(); video::ITexture *bgtexture = driver->getTexture(getTexturePath("menubg.png").c_str()); if(bgtexture) { s32 scaledsize = 128; // The important difference between destsize and screensize is // that destsize is rounded to whole scaled pixels. // These formulas use component-wise multiplication and division of v2u32. v2u32 texturesize = bgtexture->getSize(); v2u32 sourcesize = texturesize * screensize / scaledsize + v2u32(1,1); v2u32 destsize = scaledsize * sourcesize / texturesize; // Default texture wrapping mode in Irrlicht is ETC_REPEAT. driver->draw2DImage(bgtexture, core::rect<s32>(0, 0, destsize.X, destsize.Y), core::rect<s32>(0, 0, sourcesize.X, sourcesize.Y), NULL, NULL, true); } video::ITexture *logotexture = driver->getTexture(getTexturePath("menulogo.png").c_str()); if(logotexture) { v2s32 logosize(logotexture->getOriginalSize().Width, logotexture->getOriginalSize().Height); logosize *= 4; video::SColor bgcolor(255,50,50,50); core::rect<s32> bgrect(0, screensize.Height-logosize.Y-20, screensize.Width, screensize.Height); driver->draw2DRectangle(bgcolor, bgrect, NULL); core::rect<s32> rect(0,0,logosize.X,logosize.Y); rect += v2s32(screensize.Width/2,screensize.Height-10-logosize.Y); rect -= v2s32(logosize.X/2, 0); driver->draw2DImage(logotexture, rect, core::rect<s32>(core::position2d<s32>(0,0), core::dimension2di(logotexture->getSize())), NULL, NULL, true); } }
void drawMenuBackground(video::IVideoDriver* driver) { core::dimension2d<u32> screensize = driver->getScreenSize(); video::ITexture *bgtexture = driver->getTexture(getTexturePath("menubg.png").c_str()); if(bgtexture) { s32 texturesize = 128; s32 tiled_y = screensize.Height / texturesize + 1; s32 tiled_x = screensize.Width / texturesize + 1; for(s32 y=0; y<tiled_y; y++) for(s32 x=0; x<tiled_x; x++) { core::rect<s32> rect(0,0,texturesize,texturesize); rect += v2s32(x*texturesize, y*texturesize); driver->draw2DImage(bgtexture, rect, core::rect<s32>(core::position2d<s32>(0,0), core::dimension2di(bgtexture->getSize())), NULL, NULL, true); } } video::ITexture *logotexture = driver->getTexture(getTexturePath("menulogo.png").c_str()); if(logotexture) { v2s32 logosize(logotexture->getOriginalSize().Width, logotexture->getOriginalSize().Height); logosize *= 4; video::SColor bgcolor(255,50,50,50); core::rect<s32> bgrect(0, screensize.Height-logosize.Y-20, screensize.Width, screensize.Height); driver->draw2DRectangle(bgcolor, bgrect, NULL); core::rect<s32> rect(0,0,logosize.X,logosize.Y); rect += v2s32(screensize.Width/2,screensize.Height-10-logosize.Y); rect -= v2s32(logosize.X/2, 0); driver->draw2DImage(logotexture, rect, core::rect<s32>(core::position2d<s32>(0,0), core::dimension2di(logotexture->getSize())), NULL, NULL, true); } }
void GUIMainMenu::drawMenu() { gui::IGUISkin* skin = Environment->getSkin(); if (!skin) return; video::IVideoDriver* driver = Environment->getVideoDriver(); /*video::SColor bgcolor(140,0,0,0); driver->draw2DRectangle(bgcolor, AbsoluteRect, &AbsoluteClippingRect);*/ video::SColor bgcolor(140,0,0,0); if(getTab() == TAB_SINGLEPLAYER) { { core::rect<s32> rect(0, 0, m_size_client.X, m_size_client.Y); rect += AbsoluteRect.UpperLeftCorner + m_topleft_client; driver->draw2DRectangle(bgcolor, rect, &AbsoluteClippingRect); } } else if(getTab() == TAB_MULTIPLAYER) { { core::rect<s32> rect(0, 0, m_size_client.X, m_size_client.Y); rect += AbsoluteRect.UpperLeftCorner + m_topleft_client; driver->draw2DRectangle(bgcolor, rect, &AbsoluteClippingRect); } } else if(getTab() == TAB_ADVANCED) { { core::rect<s32> rect(0, 0, m_size_client.X, m_size_client.Y); rect += AbsoluteRect.UpperLeftCorner + m_topleft_client; driver->draw2DRectangle(bgcolor, rect, &AbsoluteClippingRect); } { core::rect<s32> rect(0, 0, m_size_server.X, m_size_server.Y); rect += AbsoluteRect.UpperLeftCorner + m_topleft_server; driver->draw2DRectangle(bgcolor, rect, &AbsoluteClippingRect); } } else if(getTab() == TAB_SETTINGS) { { core::rect<s32> rect(0, 0, m_size_client.X, m_size_client.Y); rect += AbsoluteRect.UpperLeftCorner + m_topleft_client; driver->draw2DRectangle(bgcolor, rect, &AbsoluteClippingRect); } } else if(getTab() == TAB_CREDITS) { { core::rect<s32> rect(0, 0, m_size_client.X, m_size_client.Y); rect += AbsoluteRect.UpperLeftCorner + m_topleft_client; driver->draw2DRectangle(bgcolor, rect, &AbsoluteClippingRect); } video::ITexture *logotexture = driver->getTexture(getTexturePath("menulogo.png").c_str()); if(logotexture) { v2s32 logosize(logotexture->getOriginalSize().Width, logotexture->getOriginalSize().Height); logosize *= 2; core::rect<s32> rect(0,0,logosize.X,logosize.Y); rect += AbsoluteRect.UpperLeftCorner + m_topleft_client; rect += v2s32(130, 50); driver->draw2DImage(logotexture, rect, core::rect<s32>(core::position2d<s32>(0,0), core::dimension2di(logotexture->getSize())), NULL, NULL, true); } } gui::IGUIElement::draw(); }