void CVScrollBar::Render() { const CAsset_GuiScrollbarStyle* pScrollbarStyle = AssetsManager()->GetAsset<CAsset_GuiScrollbarStyle>(m_ScrollbarStylePath); if(pScrollbarStyle) { CRect Rect = m_DrawRect; Rect.RemoveMargin(Context()->ApplyGuiScale(pScrollbarStyle->m_Margin)); AssetsRenderer()->DrawGuiRect(&Rect, pScrollbarStyle->m_RectPath); Rect.RemoveMargin(Context()->ApplyGuiScale(pScrollbarStyle->m_Padding)); ivec2 MousePos = Context()->GetMousePos(); float Scale = Context()->GetImageScale()*Context()->GetGuiScale(); ivec2 RailPos0(m_ClipRect.x + m_ClipRect.w/2, m_ClipRect.y); ivec2 RailPos1(m_ClipRect.x + m_ClipRect.w/2, m_ClipRect.y + m_ClipRect.h); AssetsRenderer()->DrawGuiLine(RailPos0, RailPos1, pScrollbarStyle->m_DefaultRailPath, Scale); ivec2 SliderPos0(m_SliderRect.x + m_SliderRect.w/2, m_SliderRect.y); ivec2 SliderPos1(m_SliderRect.x + m_SliderRect.w/2, m_SliderRect.y + m_SliderRect.h); if(m_SliderRect.IsInside(MousePos.x, MousePos.y)) AssetsRenderer()->DrawGuiLine(SliderPos0, SliderPos1, pScrollbarStyle->m_MouseOverSliderPath, Scale); else AssetsRenderer()->DrawGuiLine(SliderPos0, SliderPos1, pScrollbarStyle->m_DefaultSliderPath, Scale); } }
void CPopup::UpdatePosition(CRect BoundingRect) { if(m_Alignment == ALIGNMENT_INNER) { m_DrawRect = m_CreatorRect; } else { int TryRight = m_CreatorRect.x; int TryLeft = m_CreatorRect.x - m_Width; int TryTop = m_CreatorRect.y + m_CreatorRect.h - m_Height; int TryBottom = m_CreatorRect.y; if((m_CreatorRect.x + m_CreatorRect.w/2) > (BoundingRect.x + BoundingRect.w/2)) { if(TryRight + m_Width < BoundingRect.x + BoundingRect.w) m_DrawRect.x = TryRight; else m_DrawRect.x = TryLeft; } else { if(TryLeft >= BoundingRect.x) m_DrawRect.x = TryLeft; else m_DrawRect.x = TryRight; } if(TryBottom + m_Height < BoundingRect.y + BoundingRect.h) m_DrawRect.y = TryBottom; else m_DrawRect.y = TryTop; } m_DrawRect.w = m_Width; m_DrawRect.h = m_Height; if(m_pChild) { CRect ContentRect = m_DrawRect; const CAsset_GuiBoxStyle* pBoxStyle = AssetsManager()->GetAsset<CAsset_GuiBoxStyle>(m_BoxStylePath); if(pBoxStyle) { ContentRect.RemoveMargin(pBoxStyle->GetMargin()); ContentRect.RemoveMargin(pBoxStyle->GetPadding()); } m_pChild->UpdatePosition(ContentRect); } }
void CPopup::Render() { const CAsset_GuiBoxStyle* pBoxStyle = AssetsManager()->GetAsset<CAsset_GuiBoxStyle>(m_BoxStylePath); if(pBoxStyle) { CRect Rect = m_DrawRect; Rect.RemoveMargin(pBoxStyle->GetMargin()); AssetsRenderer()->DrawGuiRect(&Rect, pBoxStyle->GetRectPath()); Rect.RemoveMargin(pBoxStyle->GetPadding()); } if(m_pChild) m_pChild->Render(); }
void CAbstractLabel::Render() { CRect Rect = m_DrawRect; CRect ClipRect = m_DrawRect; vec4 FontColor = 1.0f; int Alignment = CAsset_GuiLabelStyle::TEXTALIGNMENT_LEFT; int Spacing = 0; const CAsset_GuiLabelStyle* pLabelStyle = AssetsManager()->GetAsset<CAsset_GuiLabelStyle>(m_LabelStylePath); if(pLabelStyle) { FontColor = pLabelStyle->m_TextColor; Alignment = pLabelStyle->m_TextAlignment; Rect.RemoveMargin(Context()->ApplyGuiScale(pLabelStyle->GetMargin())); ClipRect.RemoveMargin(Context()->ApplyGuiScale(pLabelStyle->GetMargin())); AssetsRenderer()->DrawGuiRect(&Rect, pLabelStyle->GetRectPath()); Rect.RemoveMargin(Context()->ApplyGuiScale(pLabelStyle->GetPadding())); } int IconWidth = 0; int TextWidth = 0; const CAsset_Sprite* pSprite = AssetsManager()->GetAsset<CAsset_Sprite>(m_IconPath); if(pSprite) { IconWidth = Context()->ApplyGuiScale(Context()->GetImageScale()*pSprite->GetPixelWidth()); } m_TextCache.SetBoxSize(ivec2(-1, Rect.h)); if(GetText()[0]) { if(pSprite && pLabelStyle) Spacing = Context()->ApplyGuiScale(pLabelStyle->GetSpacing()); TextWidth = TextRenderer()->GetTextWidth(&m_TextCache); } int TotalWidth = IconWidth + Spacing + TextWidth; int PosX = 0; if(Localization()->GetWritingDirection() == CLocalization::DIRECTION_RTL) { if(Alignment == CAsset_GuiLabelStyle::TEXTALIGNMENT_LEFT) Alignment = CAsset_GuiLabelStyle::TEXTALIGNMENT_RIGHT; else if(Alignment == CAsset_GuiLabelStyle::TEXTALIGNMENT_RIGHT) Alignment = CAsset_GuiLabelStyle::TEXTALIGNMENT_LEFT; } if(Alignment == CAsset_GuiLabelStyle::TEXTALIGNMENT_LEFT) PosX = Rect.x; else if(Alignment == CAsset_GuiLabelStyle::TEXTALIGNMENT_RIGHT) PosX = Rect.x + Rect.w - TotalWidth; else PosX = Rect.x + Rect.w/2 - TotalWidth/2; Graphics()->ClipPush(ClipRect.x, ClipRect.y, ClipRect.w, ClipRect.h); if(Localization()->GetWritingDirection() == CLocalization::DIRECTION_RTL) { if(GetText()[0]) { m_TextRect.x = PosX; m_TextRect.y = Rect.y; m_TextRect.w = TextRenderer()->GetTextWidth(&m_TextCache); m_TextRect.h = Rect.h; m_TextCache.SetBoxSize(ivec2(-1, m_TextRect.h)); TextRenderer()->DrawText(&m_TextCache, ivec2(m_TextRect.x, m_TextRect.y), FontColor); PosX += TextWidth; } PosX += Spacing; if(IconWidth > 0) { AssetsRenderer()->DrawSprite( m_IconPath, vec2(PosX + IconWidth/2, Rect.y + Rect.h/2), Context()->GetImageScale()*Context()->GetGuiScale(), 0.0f, 0x0, 1.0f ); } } else { if(IconWidth > 0) { AssetsRenderer()->DrawSprite( m_IconPath, vec2(PosX + IconWidth/2, Rect.y + Rect.h/2), Context()->GetImageScale()*Context()->GetGuiScale(), 0.0f, 0x0, 1.0f ); PosX += IconWidth; } PosX += Spacing; if(GetText()[0]) { m_TextRect.x = PosX; m_TextRect.y = Rect.y; m_TextRect.w = TextRenderer()->GetTextWidth(&m_TextCache); m_TextRect.h = Rect.h; m_TextCache.SetBoxSize(ivec2(-1, m_TextRect.h)); TextRenderer()->DrawText(&m_TextCache, ivec2(m_TextRect.x, m_TextRect.y), FontColor); } } Graphics()->ClipPop(); }