Example #1
0
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;
}