HRESULT CUIButton::Display(int OffsetX, int OffsetY) { if (!m_Visible) return S_OK; CUITiledImage *back = NULL; CBSprite *image = NULL; CBFont *font = 0; //RECT rect; //CBPlatform::SetRect(&rect, OffsetX + m_PosX, OffsetY + m_PosY, OffsetX+m_PosX+m_Width, OffsetY+m_PosY+m_Height); //m_Hover = (!m_Disable && CBPlatform::PtInRect(&rect, Game->m_MousePos)!=FALSE); m_Hover = (!m_Disable && Game->m_ActiveObject == this && (Game->m_Interactive || Game->m_State == GAME_SEMI_FROZEN)); if ((m_Press && m_Hover && !Game->m_MouseLeftDown) || m_OneTimePress && CBPlatform::GetTime() - m_OneTimePressTime >= 100) Press(); if (m_Disable) { if (m_BackDisable) back = m_BackDisable; if (m_ImageDisable) image = m_ImageDisable; if (m_Text && m_FontDisable) font = m_FontDisable; } else if (m_Press || m_OneTimePress || m_StayPressed) { if (m_BackPress) back = m_BackPress; if (m_ImagePress) image = m_ImagePress; if (m_Text && m_FontPress) font = m_FontPress; } else if (m_Hover) { if (m_BackHover) back = m_BackHover; if (m_ImageHover) image = m_ImageHover; if (m_Text && m_FontHover) font = m_FontHover; } else if (m_CanFocus && IsFocused()) { if (m_BackFocus) back = m_BackFocus; if (m_ImageFocus) image = m_ImageFocus; if (m_Text && m_FontFocus) font = m_FontFocus; } if (!back && m_Back) back = m_Back; if (!image && m_Image) image = m_Image; if (m_Text && !font) { if (m_Font) font = m_Font; else font = Game->m_SystemFont; } int ImageX = OffsetX + m_PosX; int ImageY = OffsetY + m_PosY; if (image && m_CenterImage) { RECT rc; image->GetBoundingRect(&rc, 0, 0); ImageX += (m_Width - (rc.right - rc.left)) / 2; ImageY += (m_Height - (rc.bottom - rc.top)) / 2; } if (back) back->Display(OffsetX + m_PosX, OffsetY + m_PosY, m_Width, m_Height); //if(image) image->Draw(ImageX +((m_Press||m_OneTimePress)&&back?1:0), ImageY +((m_Press||m_OneTimePress)&&back?1:0), NULL); if (image) image->Draw(ImageX + ((m_Press || m_OneTimePress) && back ? 1 : 0), ImageY + ((m_Press || m_OneTimePress) && back ? 1 : 0), m_PixelPerfect ? this : NULL); if (font && m_Text) { int text_offset = (m_Height - font->GetTextHeight((byte *)m_Text, m_Width)) / 2; font->DrawText((byte *)m_Text, OffsetX + m_PosX + ((m_Press || m_OneTimePress) ? 1 : 0), OffsetY + m_PosY + text_offset + ((m_Press || m_OneTimePress) ? 1 : 0), m_Width, m_Align); } if (!m_PixelPerfect || !m_Image) Game->m_Renderer->m_RectList.Add(new CBActiveRect(Game, this, NULL, OffsetX + m_PosX, OffsetY + m_PosY, m_Width, m_Height, 100, 100, false)); // reset unused sprites if (m_Image && m_Image != image) m_Image->Reset(); if (m_ImageDisable && m_ImageDisable != image) m_ImageDisable->Reset(); if (m_ImageFocus && m_ImageFocus != image) m_ImageFocus->Reset(); if (m_ImagePress && m_ImagePress != image) m_ImagePress->Reset(); if (m_ImageHover && m_ImageHover != image) m_ImageHover->Reset(); m_Press = m_Hover && Game->m_MouseLeftDown && Game->m_CapturedObject == this; return S_OK; }
HRESULT CUIWindow::Display(int OffsetX, int OffsetY) { // go exclusive if(m_Mode==WINDOW_EXCLUSIVE || m_Mode==WINDOW_SYSTEM_EXCLUSIVE) { if(!m_ShieldWindow) m_ShieldWindow = new CUIWindow(Game); if(m_ShieldWindow) { m_ShieldWindow->m_PosX = m_ShieldWindow->m_PosY = 0; m_ShieldWindow->m_Width = Game->m_Renderer->m_Width; m_ShieldWindow->m_Height = Game->m_Renderer->m_Height; m_ShieldWindow->Display(); } } else if(m_IsMenu) { if(!m_ShieldButton) { m_ShieldButton = new CUIButton(Game); m_ShieldButton->SetName("close"); m_ShieldButton->SetListener(this, m_ShieldButton, 0); m_ShieldButton->m_Parent = this; } if(m_ShieldButton) { m_ShieldButton->m_PosX = m_ShieldButton->m_PosY = 0; m_ShieldButton->m_Width = Game->m_Renderer->m_Width; m_ShieldButton->m_Height = Game->m_Renderer->m_Height; m_ShieldButton->Display(); } } if(!m_Visible) return S_OK; if(m_FadeBackground) Game->m_Renderer->FadeToColor(m_FadeColor); if(m_Dragging) { m_PosX += (Game->m_MousePos.x - m_DragFrom.x); m_PosY += (Game->m_MousePos.y - m_DragFrom.y); m_DragFrom.x = Game->m_MousePos.x; m_DragFrom.y = Game->m_MousePos.y; } if(!m_FocusedWidget || (!m_FocusedWidget->m_CanFocus || m_FocusedWidget->m_Disable || !m_FocusedWidget->m_Visible)) { MoveFocus(); } bool PopViewport = false; if(m_ClipContents) { if(!m_Viewport) m_Viewport = new CBViewport(Game); if(m_Viewport) { m_Viewport->SetRect(m_PosX+OffsetX, m_PosY+OffsetY, m_PosX+m_Width+OffsetX, m_PosY+m_Height+OffsetY); Game->PushViewport(m_Viewport); PopViewport = true; } } CUITiledImage* back = m_Back; CBSprite* image = m_Image; CBFont* font = m_Font; if(!IsFocused()) { if(m_BackInactive) back = m_BackInactive; if(m_ImageInactive) image = m_ImageInactive; if(m_FontInactive) font = m_FontInactive; } if(m_AlphaColor!=0) Game->m_Renderer->m_ForceAlphaColor = m_AlphaColor; if(back) { back->Display(m_PosX + OffsetX, m_PosY + OffsetY, m_Width, m_Height); } if(image) { image->Draw(m_PosX + OffsetX, m_PosY + OffsetY, m_Transparent?NULL:this); } if(!CBPlatform::IsRectEmpty(&m_TitleRect) && font && m_Text) { font->DrawText((BYTE*)m_Text, m_PosX+OffsetX+m_TitleRect.left, m_PosY+OffsetY+m_TitleRect.top, m_TitleRect.right-m_TitleRect.left, m_TitleAlign, m_TitleRect.bottom-m_TitleRect.top); } if(!m_Transparent && !image) Game->m_Renderer->m_RectList.Add(new CBActiveRect(Game, this, NULL, m_PosX+OffsetX, m_PosY+OffsetY, m_Width, m_Height, 100, 100, false)); for(int i=0; i<m_Widgets.GetSize(); i++) { m_Widgets[i]->Display(m_PosX+OffsetX, m_PosY+OffsetY); } if(m_AlphaColor!=0) Game->m_Renderer->m_ForceAlphaColor = 0; if(PopViewport) { Game->PopViewport(); } return S_OK; }