diff --git a/source/gui/CCheckBox.cpp b/source/gui/CCheckBox.cpp index 5dbbd1a0ca..1feda7a396 100755 --- a/source/gui/CCheckBox.cpp +++ b/source/gui/CCheckBox.cpp @@ -8,6 +8,9 @@ gee@pyro.nu #include "GUI.h" #include "CCheckBox.h" +#include "ps/Font.h" +#include "ps/CLogger.h" + using namespace std; //------------------------------------------------------------------- @@ -15,28 +18,11 @@ using namespace std; //------------------------------------------------------------------- CCheckBox::CCheckBox() { -/* bool m_Checked; - CStr m_Font; - CGUISpriteInstance m_Sprite; - CGUISpriteInstance m_SpriteDisabled; - CGUISpriteInstance m_SpriteOver; - CGUISpriteInstance m_SpritePressed; - CGUISpriteInstance m_Sprite2; - CGUISpriteInstance m_Sprite2Disabled; - CGUISpriteInstance m_Sprite2Over; - CGUISpriteInstance m_Sprite2Pressed; - int m_SquareSide; - EAlign m_TextAlign; - CColor m_TextColor; - CColor m_TextColorDisabled; - CColor m_TextColorOver; - CColor m_TextColorPressed; - EVAlign m_TextValign; - CStr m_ToolTip; - CStr m_ToolTipStyle; -*/ + AddSetting(GUIST_float, "buffer_zone"); AddSetting(GUIST_CGUIString, "caption"); + AddSetting(GUIST_int, "cell_id"); AddSetting(GUIST_bool, "checked"); + AddSetting(GUIST_CStr, "font"); AddSetting(GUIST_CGUISpriteInstance, "sprite"); AddSetting(GUIST_CGUISpriteInstance, "sprite_over"); AddSetting(GUIST_CGUISpriteInstance, "sprite_pressed"); @@ -45,7 +31,11 @@ CCheckBox::CCheckBox() AddSetting(GUIST_CGUISpriteInstance, "sprite2_over"); AddSetting(GUIST_CGUISpriteInstance, "sprite2_pressed"); AddSetting(GUIST_CGUISpriteInstance, "sprite2_disabled"); - AddSetting(GUIST_int, "square_side"); + AddSetting(GUIST_float, "square_side"); + AddSetting(GUIST_CColor, "textcolor"); + AddSetting(GUIST_CColor, "textcolor_over"); + AddSetting(GUIST_CColor, "textcolor_pressed"); + AddSetting(GUIST_CColor, "textcolor_disabled"); AddSetting(GUIST_CStr, "tooltip"); AddSetting(GUIST_CStr, "tooltip_style"); @@ -65,25 +55,27 @@ void CCheckBox::SetupText() debug_assert(m_GeneratedTexts.size()>=1); CStr font; + if (GUI::GetSetting(this, "font", font) != PS_OK || font.Length()==0) + // Use the default if none is specified + // TODO Gee: (2004-08-14) Default should not be hard-coded, but be in styles! + font = "default"; + + float square_side; + GUI::GetSetting(this, "square_side", square_side); + CGUIString caption; - //int square_side; GUI::GetSetting(this, "caption", caption); - //GUI::GetSetting(this, "square_side", square_side); - // TODO Gee: Establish buffer zones - // TODO Gee: research if even "default" should be hardcoded. - *m_GeneratedTexts[0] = GetGUI()->GenerateText(caption, CStr("default"), m_CachedActualSize.GetWidth()-20, 0); - - // Set position of text - // TODO Gee: Big TODO -// m_TextPos.x = m_CachedActualSize.left + 20; -// m_TextPos.y = m_CachedActualSize.top; + float buffer_zone=0.f; + GUI::GetSetting(this, "buffer_zone", buffer_zone); + *m_GeneratedTexts[0] = GetGUI()->GenerateText(caption, font, m_CachedActualSize.GetWidth()-square_side, 0.f, this); } void CCheckBox::HandleMessage(const SGUIMessage &Message) { // Important IGUIButtonBehavior::HandleMessage(Message); + IGUITextOwner::HandleMessage(Message); switch (Message.type) { @@ -108,22 +100,34 @@ void CCheckBox::Draw() glDisable(GL_TEXTURE_2D); ////////// - int square_side; - GUI::GetSetting(this, "square_side", square_side); + float square_side, buffer_zone; + CStr font_name; + bool checked; + int cell_id; + GUI::GetSetting(this, "square_side", square_side); + GUI::GetSetting(this, "buffer_zone", buffer_zone); + GUI::GetSetting(this, "font", font_name); + GUI::GetSetting(this, "checked", checked); + GUI::GetSetting(this, "cell_id", cell_id); + + // Get line height + CFont font (font_name); + float line_height = (float)font.GetHeight(); float bz = GetBufferedZ(); // Get square - // TODO Gee: edit below when CRect has got "height()" - float middle = (m_CachedActualSize.bottom - m_CachedActualSize.top)/2; CRect rect; - rect.left = m_CachedActualSize.left + middle - square_side/2; - rect.right = rect.left + square_side; - rect.top = m_CachedActualSize.top + middle - square_side/2; - rect.bottom = rect.top + square_side; - bool checked; - GUI::GetSetting(this, "checked", checked); + rect.left = m_CachedActualSize.left; + rect.right = rect.left + square_side; + + if (square_side >= line_height) + rect.top = m_CachedActualSize.top; + else + rect.top = m_CachedActualSize.top + line_height/2.f - square_side/2.f; + + rect.bottom = rect.top + square_side; CGUISpriteInstance *sprite, *sprite_over, *sprite_pressed, *sprite_disabled; @@ -148,9 +152,14 @@ void CCheckBox::Draw() *sprite_over, *sprite_pressed, *sprite_disabled, - 0); + cell_id); CColor color = ChooseColor(); -// IGUITextOwner::Draw(0, color, m_TextPos, bz+0.1f); + CPos text_pos(m_CachedActualSize.left + square_side + buffer_zone, m_CachedActualSize.top); + + if (square_side > line_height) + text_pos.y += square_side/2.f - line_height/2.f; + + IGUITextOwner::Draw(0, color, text_pos, bz+0.1f, m_CachedActualSize); } diff --git a/source/gui/CDropDown.cpp b/source/gui/CDropDown.cpp index c404755791..90aa12363d 100644 --- a/source/gui/CDropDown.cpp +++ b/source/gui/CDropDown.cpp @@ -319,10 +319,13 @@ void CDropDown::Draw() if (selected != -1) // TODO: Maybe check validity completely? { - CPos pos(m_CachedActualSize.left, m_CachedActualSize.top); - IGUITextOwner::Draw(selected, color, pos, bz+0.1f); - } + // figure out clipping rectangle + CRect cliparea(m_CachedActualSize.left, m_CachedActualSize.top, + m_CachedActualSize.right-button_width, m_CachedActualSize.bottom); + CPos pos(m_CachedActualSize.left, m_CachedActualSize.top); + IGUITextOwner::Draw(selected, color, pos, bz+0.1f, cliparea); + } bool *scrollbar=NULL, old; GUI::GetSettingPointer(this, "scrollbar", scrollbar); diff --git a/source/gui/CGUI.cpp b/source/gui/CGUI.cpp index 14aeec400c..009abe6681 100755 --- a/source/gui/CGUI.cpp +++ b/source/gui/CGUI.cpp @@ -941,8 +941,11 @@ void CGUI::DrawText(SGUIText &Text, const CColor &DefaultColor, // TODO To whom it may concern: Thing were not reset, so // I added this line, modify if incorrect -- - for (int i=0; i<4; ++i) - glDisable(GL_CLIP_PLANE0+i); + if (clipping != CRect()) + { + for (int i=0; i<4; ++i) + glDisable(GL_CLIP_PLANE0+i); + } glDisable(GL_TEXTURE_2D); // -- GL } diff --git a/source/gui/CList.cpp b/source/gui/CList.cpp index 1d40d8699b..061ac0e740 100644 --- a/source/gui/CList.cpp +++ b/source/gui/CList.cpp @@ -357,7 +357,6 @@ void CList::DrawList(const int &selected, if (scrollbar) { // Remove any overlapping area of the scrollbar. - if (rect_sel.right > GetScrollBar(0).GetOuterRect().left && rect_sel.right <= GetScrollBar(0).GetOuterRect().right) rect_sel.right = GetScrollBar(0).GetOuterRect().left; @@ -380,8 +379,22 @@ void CList::DrawList(const int &selected, m_ItemsYPositions[i] - scroll > rect.GetHeight()) continue; - IGUITextOwner::Draw(i, color, rect.TopLeft() - CPos(0.f, scroll - m_ItemsYPositions[i]), bz+0.1f, - GetListRect()); + // Clipping area (we'll have to substract the scrollbar) + CRect cliparea = GetListRect(); + + if (scrollbar) + { + if (cliparea.right > GetScrollBar(0).GetOuterRect().left && + cliparea.right <= GetScrollBar(0).GetOuterRect().right) + cliparea.right = GetScrollBar(0).GetOuterRect().left; + + if (cliparea.left >= GetScrollBar(0).GetOuterRect().left && + cliparea.left < GetScrollBar(0).GetOuterRect().right) + cliparea.left = GetScrollBar(0).GetOuterRect().right; + } + + IGUITextOwner::Draw(i, color, rect.TopLeft() - CPos(0.f, scroll - m_ItemsYPositions[i]), + bz+0.1f, cliparea); } } } diff --git a/source/gui/CRadioButton.cpp b/source/gui/CRadioButton.cpp index 7b5fb0326b..169ad48933 100755 --- a/source/gui/CRadioButton.cpp +++ b/source/gui/CRadioButton.cpp @@ -14,6 +14,7 @@ void CRadioButton::HandleMessage(const SGUIMessage &Message) { // Important IGUIButtonBehavior::HandleMessage(Message); + IGUITextOwner::HandleMessage(Message); switch (Message.type) { diff --git a/source/gui/CText.cpp b/source/gui/CText.cpp index 127e429526..7c0974e490 100755 --- a/source/gui/CText.cpp +++ b/source/gui/CText.cpp @@ -22,11 +22,11 @@ CText::CText() { AddSetting(GUIST_float, "buffer_zone"); AddSetting(GUIST_CGUIString, "caption"); + AddSetting(GUIST_int, "cell_id"); AddSetting(GUIST_CStr, "font"); AddSetting(GUIST_bool, "scrollbar"); AddSetting(GUIST_CStr, "scrollbar_style"); AddSetting(GUIST_CGUISpriteInstance, "sprite"); - AddSetting(GUIST_int, "cell_id"); AddSetting(GUIST_EAlign, "text_align"); AddSetting(GUIST_EVAlign, "text_valign"); AddSetting(GUIST_CColor, "textcolor"); @@ -189,10 +189,22 @@ void CText::Draw() GetGUI()->DrawSprite(*sprite, cell_id, bz, m_CachedActualSize); + // Clipping area (we'll have to substract the scrollbar) + CRect cliparea = m_CachedActualSize; + float scroll=0.f; if (scrollbar) { scroll = GetScrollBar(0).GetPos(); + + // substract scrollbar from cliparea + if (cliparea.right > GetScrollBar(0).GetOuterRect().left && + cliparea.right <= GetScrollBar(0).GetOuterRect().right) + cliparea.right = GetScrollBar(0).GetOuterRect().left; + + if (cliparea.left >= GetScrollBar(0).GetOuterRect().left && + cliparea.left < GetScrollBar(0).GetOuterRect().right) + cliparea.left = GetScrollBar(0).GetOuterRect().right; } CColor color; @@ -200,8 +212,8 @@ void CText::Draw() // Draw text if (scrollbar) - IGUITextOwner::Draw(0, color, m_CachedActualSize.TopLeft() - CPos(0.f, scroll), bz+0.1f); + IGUITextOwner::Draw(0, color, m_CachedActualSize.TopLeft() - CPos(0.f, scroll), bz+0.1f, m_CachedActualSize); else - IGUITextOwner::Draw(0, color, m_TextPos, bz+0.1f); + IGUITextOwner::Draw(0, color, m_TextPos, bz+0.1f, m_CachedActualSize); } }