Changeset View
Changeset View
Standalone View
Standalone View
source/gui/CText.cpp
Show All 18 Lines | |||||
#include "CText.h" | #include "CText.h" | ||||
#include "gui/CGUI.h" | #include "gui/CGUI.h" | ||||
#include "gui/CGUIScrollBarVertical.h" | #include "gui/CGUIScrollBarVertical.h" | ||||
#include "gui/CGUIText.h" | #include "gui/CGUIText.h" | ||||
CText::CText(CGUI& pGUI) | CText::CText(CGUI& pGUI) | ||||
: IGUIObject(pGUI), IGUIScrollBarOwner(pGUI), IGUITextOwner(pGUI) | : IGUIObject(pGUI), | ||||
{ | IGUIScrollBarOwner(pGUI), | ||||
AddSetting<float>("buffer_zone"); | IGUITextOwner(pGUI), | ||||
AddSetting<CGUIString>("caption"); | m_BufferZone(), | ||||
AddSetting<i32>("cell_id"); | m_Caption(), | ||||
AddSetting<bool>("clip"); | m_CellID(), | ||||
AddSetting<CStrW>("font"); | m_Clip(), | ||||
AddSetting<bool>("scrollbar"); | m_Font(), | ||||
AddSetting<CStr>("scrollbar_style"); | m_ScrollBar(), | ||||
AddSetting<bool>("scroll_bottom"); | m_ScrollBarStyle(), | ||||
AddSetting<bool>("scroll_top"); | m_ScrollBottom(), | ||||
AddSetting<CGUISpriteInstance>("sprite"); | m_ScrollTop(), | ||||
AddSetting<EAlign>("text_align"); | m_Sprite(), | ||||
AddSetting<EVAlign>("text_valign"); | m_TextAlign(), | ||||
AddSetting<CGUIColor>("textcolor"); | m_TextVAlign(), | ||||
AddSetting<CGUIColor>("textcolor_disabled"); | m_TextColor(), | ||||
m_TextColorDisabled(), | |||||
m_IconTooltip(), | |||||
m_IconTooltipStyle() | |||||
{ | |||||
RegisterSetting("buffer_zone", m_BufferZone); | |||||
RegisterSetting("caption", m_Caption); | |||||
RegisterSetting("cell_id", m_CellID); | |||||
RegisterSetting("clip", m_Clip); | |||||
RegisterSetting("font", m_Font); | |||||
RegisterSetting("scrollbar", m_ScrollBar); | |||||
RegisterSetting("scrollbar_style", m_ScrollBarStyle); | |||||
RegisterSetting("scroll_bottom", m_ScrollBottom); | |||||
RegisterSetting("scroll_top", m_ScrollTop); | |||||
RegisterSetting("sprite", m_Sprite); | |||||
RegisterSetting("text_align", m_TextAlign); | |||||
RegisterSetting("text_valign", m_TextVAlign); | |||||
RegisterSetting("textcolor", m_TextColor); | |||||
RegisterSetting("textcolor_disabled", m_TextColorDisabled); | |||||
// Private settings | // Private settings | ||||
AddSetting<CStrW>("_icon_tooltip"); | RegisterSetting("_icon_tooltip", m_IconTooltip); | ||||
AddSetting<CStr>("_icon_tooltip_style"); | RegisterSetting("_icon_tooltip_style", m_IconTooltipStyle); | ||||
//SetSetting<bool>("ghost", true, true); | //SetSetting<bool>("ghost", true, true); | ||||
SetSetting<bool>("scrollbar", false, true); | SetSetting<bool>("scrollbar", false, true); | ||||
SetSetting<bool>("clip", true, true); | SetSetting<bool>("clip", true, true); | ||||
// Add scroll-bar | // Add scroll-bar | ||||
CGUIScrollBarVertical* bar = new CGUIScrollBarVertical(pGUI); | CGUIScrollBarVertical* bar = new CGUIScrollBarVertical(pGUI); | ||||
bar->SetRightAligned(true); | bar->SetRightAligned(true); | ||||
AddScrollBar(bar); | AddScrollBar(bar); | ||||
// Add text | // Add text | ||||
AddText(); | AddText(); | ||||
} | } | ||||
CText::~CText() | CText::~CText() | ||||
{ | { | ||||
} | } | ||||
void CText::SetupText() | void CText::SetupText() | ||||
{ | { | ||||
if (m_GeneratedTexts.empty()) | if (m_GeneratedTexts.empty()) | ||||
return; | return; | ||||
const bool scrollbar = GetSetting<bool>("scrollbar"); | |||||
float width = m_CachedActualSize.GetWidth(); | float width = m_CachedActualSize.GetWidth(); | ||||
// remove scrollbar if applicable | // remove scrollbar if applicable | ||||
if (scrollbar && GetScrollBar(0).GetStyle()) | if (m_ScrollBar && GetScrollBar(0).GetStyle()) | ||||
width -= GetScrollBar(0).GetStyle()->m_Width; | width -= GetScrollBar(0).GetStyle()->m_Width; | ||||
const CGUIString& caption = GetSetting<CGUIString>("caption"); | m_GeneratedTexts[0] = CGUIText(m_pGUI, m_Caption, m_Font, width, m_BufferZone, this); | ||||
const CStrW& font = GetSetting<CStrW>("font"); | |||||
const float buffer_zone = GetSetting<float>("buffer_zone"); | |||||
m_GeneratedTexts[0] = CGUIText(m_pGUI, caption, font, width, buffer_zone, this); | |||||
if (!scrollbar) | if (!m_ScrollBar) | ||||
CalculateTextPosition(m_CachedActualSize, m_TextPos, m_GeneratedTexts[0]); | CalculateTextPosition(m_CachedActualSize, m_TextPos, m_GeneratedTexts[0]); | ||||
// Setup scrollbar | // Setup scrollbar | ||||
if (scrollbar) | if (m_ScrollBar) | ||||
{ | { | ||||
const bool scroll_bottom = GetSetting<bool>("scroll_bottom"); | |||||
const bool scroll_top = GetSetting<bool>("scroll_top"); | |||||
// If we are currently scrolled to the bottom of the text, | // If we are currently scrolled to the bottom of the text, | ||||
// then add more lines of text, update the scrollbar so we | // then add more lines of text, update the scrollbar so we | ||||
// stick to the bottom. | // stick to the bottom. | ||||
// (Use 1.5px delta so this triggers the first time caption is set) | // (Use 1.5px delta so this triggers the first time caption is set) | ||||
bool bottom = false; | bool bottom = false; | ||||
if (scroll_bottom && GetScrollBar(0).GetPos() > GetScrollBar(0).GetMaxPos() - 1.5f) | if (m_ScrollBottom && GetScrollBar(0).GetPos() > GetScrollBar(0).GetMaxPos() - 1.5f) | ||||
bottom = true; | bottom = true; | ||||
GetScrollBar(0).SetScrollRange(m_GeneratedTexts[0].GetSize().cy); | GetScrollBar(0).SetScrollRange(m_GeneratedTexts[0].GetSize().cy); | ||||
GetScrollBar(0).SetScrollSpace(m_CachedActualSize.GetHeight()); | GetScrollBar(0).SetScrollSpace(m_CachedActualSize.GetHeight()); | ||||
GetScrollBar(0).SetX(m_CachedActualSize.right); | GetScrollBar(0).SetX(m_CachedActualSize.right); | ||||
GetScrollBar(0).SetY(m_CachedActualSize.top); | GetScrollBar(0).SetY(m_CachedActualSize.top); | ||||
GetScrollBar(0).SetZ(GetBufferedZ()); | GetScrollBar(0).SetZ(GetBufferedZ()); | ||||
GetScrollBar(0).SetLength(m_CachedActualSize.bottom - m_CachedActualSize.top); | GetScrollBar(0).SetLength(m_CachedActualSize.bottom - m_CachedActualSize.top); | ||||
if (bottom) | if (bottom) | ||||
GetScrollBar(0).SetPos(GetScrollBar(0).GetMaxPos()); | GetScrollBar(0).SetPos(GetScrollBar(0).GetMaxPos()); | ||||
if (scroll_top) | |||||
if (m_ScrollTop) | |||||
GetScrollBar(0).SetPos(0.0f); | GetScrollBar(0).SetPos(0.0f); | ||||
} | } | ||||
} | } | ||||
void CText::HandleMessage(SGUIMessage& Message) | void CText::HandleMessage(SGUIMessage& Message) | ||||
{ | { | ||||
IGUIScrollBarOwner::HandleMessage(Message); | IGUIScrollBarOwner::HandleMessage(Message); | ||||
//IGUITextOwner::HandleMessage(Message); <== placed it after the switch instead! | //IGUITextOwner::HandleMessage(Message); <== placed it after the switch instead! | ||||
switch (Message.type) | switch (Message.type) | ||||
{ | { | ||||
case GUIM_SETTINGS_UPDATED: | case GUIM_SETTINGS_UPDATED: | ||||
if (Message.value == "scrollbar") | if (Message.value == "scrollbar") | ||||
SetupText(); | SetupText(); | ||||
// Update scrollbar | // Update scrollbar | ||||
if (Message.value == "scrollbar_style") | if (Message.value == "scrollbar_style") | ||||
{ | { | ||||
GetScrollBar(0).SetScrollBarStyle(GetSetting<CStr>(Message.value)); | GetScrollBar(0).SetScrollBarStyle(m_ScrollBarStyle); | ||||
SetupText(); | SetupText(); | ||||
} | } | ||||
break; | break; | ||||
case GUIM_MOUSE_WHEEL_DOWN: | case GUIM_MOUSE_WHEEL_DOWN: | ||||
{ | { | ||||
GetScrollBar(0).ScrollPlus(); | GetScrollBar(0).ScrollPlus(); | ||||
Show All 13 Lines | case GUIM_MOUSE_WHEEL_UP: | ||||
break; | break; | ||||
} | } | ||||
case GUIM_LOAD: | case GUIM_LOAD: | ||||
{ | { | ||||
GetScrollBar(0).SetX(m_CachedActualSize.right); | GetScrollBar(0).SetX(m_CachedActualSize.right); | ||||
GetScrollBar(0).SetY(m_CachedActualSize.top); | GetScrollBar(0).SetY(m_CachedActualSize.top); | ||||
GetScrollBar(0).SetZ(GetBufferedZ()); | GetScrollBar(0).SetZ(GetBufferedZ()); | ||||
GetScrollBar(0).SetLength(m_CachedActualSize.bottom - m_CachedActualSize.top); | GetScrollBar(0).SetLength(m_CachedActualSize.bottom - m_CachedActualSize.top); | ||||
GetScrollBar(0).SetScrollBarStyle(GetSetting<CStr>("scrollbar_style")); | GetScrollBar(0).SetScrollBarStyle(m_ScrollBarStyle); | ||||
break; | break; | ||||
} | } | ||||
default: | default: | ||||
break; | break; | ||||
} | } | ||||
IGUITextOwner::HandleMessage(Message); | IGUITextOwner::HandleMessage(Message); | ||||
} | } | ||||
void CText::Draw() | void CText::Draw() | ||||
{ | { | ||||
float bz = GetBufferedZ(); | float bz = GetBufferedZ(); | ||||
const bool scrollbar = GetSetting<bool>("scrollbar"); | if (m_ScrollBar) | ||||
if (scrollbar) | |||||
IGUIScrollBarOwner::Draw(); | IGUIScrollBarOwner::Draw(); | ||||
CGUISpriteInstance& sprite = GetSetting<CGUISpriteInstance>("sprite"); | m_pGUI.DrawSprite(m_Sprite, m_CellID, bz, m_CachedActualSize); | ||||
const int cell_id = GetSetting<i32>("cell_id"); | |||||
const bool clip = GetSetting<bool>("clip"); | |||||
m_pGUI.DrawSprite(sprite, cell_id, bz, m_CachedActualSize); | |||||
float scroll = 0.f; | float scroll = 0.f; | ||||
if (scrollbar) | if (m_ScrollBar) | ||||
scroll = GetScrollBar(0).GetPos(); | scroll = GetScrollBar(0).GetPos(); | ||||
// Clipping area (we'll have to subtract the scrollbar) | // Clipping area (we'll have to subtract the scrollbar) | ||||
CRect cliparea; | CRect cliparea; | ||||
if (clip) | if (m_Clip) | ||||
{ | { | ||||
cliparea = m_CachedActualSize; | cliparea = m_CachedActualSize; | ||||
if (scrollbar) | if (m_ScrollBar) | ||||
{ | { | ||||
// subtract scrollbar from cliparea | // subtract scrollbar from cliparea | ||||
if (cliparea.right > GetScrollBar(0).GetOuterRect().left && | if (cliparea.right > GetScrollBar(0).GetOuterRect().left && | ||||
cliparea.right <= GetScrollBar(0).GetOuterRect().right) | cliparea.right <= GetScrollBar(0).GetOuterRect().right) | ||||
cliparea.right = GetScrollBar(0).GetOuterRect().left; | cliparea.right = GetScrollBar(0).GetOuterRect().left; | ||||
if (cliparea.left >= GetScrollBar(0).GetOuterRect().left && | if (cliparea.left >= GetScrollBar(0).GetOuterRect().left && | ||||
cliparea.left < GetScrollBar(0).GetOuterRect().right) | cliparea.left < GetScrollBar(0).GetOuterRect().right) | ||||
cliparea.left = GetScrollBar(0).GetOuterRect().right; | cliparea.left = GetScrollBar(0).GetOuterRect().right; | ||||
} | } | ||||
} | } | ||||
const bool enabled = GetSetting<bool>("enabled"); | const CGUIColor& color = m_Enabled ? m_TextColor : m_TextColorDisabled; | ||||
const CGUIColor& color = GetSetting<CGUIColor>(enabled ? "textcolor" : "textcolor_disabled"); | |||||
if (scrollbar) | if (m_ScrollBar) | ||||
DrawText(0, color, m_CachedActualSize.TopLeft() - CPos(0.f, scroll), bz + 0.1f, cliparea); | DrawText(0, color, m_CachedActualSize.TopLeft() - CPos(0.f, scroll), bz + 0.1f, cliparea); | ||||
else | else | ||||
DrawText(0, color, m_TextPos, bz + 0.1f, cliparea); | DrawText(0, color, m_TextPos, bz + 0.1f, cliparea); | ||||
} | } | ||||
bool CText::MouseOverIcon() | bool CText::MouseOverIcon() | ||||
{ | { | ||||
for (const CGUIText& guitext : m_GeneratedTexts) | for (const CGUIText& guitext : m_GeneratedTexts) | ||||
Show All 18 Lines |
Wildfire Games · Phabricator