# HG changeset patch # User KUDr # Date 1173012621 0 # Node ID 6e8eec87fa9dc109fcba71b04644a905339c3355 # Parent 187e3ef04cc9166969ab9633f6cfe50c30960000 (svn r9006) [cpp_gui] -Add: Label widget (MiHaMiX) diff -r 187e3ef04cc9 -r 6e8eec87fa9d src/gfx.h --- a/src/gfx.h Sun Mar 04 04:25:36 2007 +0000 +++ b/src/gfx.h Sun Mar 04 12:50:21 2007 +0000 @@ -278,7 +278,9 @@ COLOUR_ORANGE, COLOUR_BROWN, COLOUR_GREY, - COLOUR_WHITE + COLOUR_WHITE, + + COLOUR_NONE = 0x100, }; /** diff -r 187e3ef04cc9 -r 6e8eec87fa9d src/intro_gui.cpp --- a/src/intro_gui.cpp Sun Mar 04 04:25:36 2007 +0000 +++ b/src/intro_gui.cpp Sun Mar 04 12:50:21 2007 +0000 @@ -163,6 +163,7 @@ template <> struct WindowT : public BaseWindow { + gui::WidgetPtr m_label1; gui::WidgetPtr m_button1; WindowT() @@ -177,7 +178,12 @@ SetSize(Point16(336, 195)); /* add controls */ - m_button1 = new gui::TextButton(this, 22, gui::FF_NONE, COLOUR_YELLOW, Rect16(104, 175, 231, 186), STR_0305_QUIT_OPENTTD, STR_0304_QUIT); + m_label1 = new gui::Label(this, 22, gui::FF_NONE, Rect16(104, 155, 231, 166), STR_0305_QUIT_OPENTTD, STR_0305_QUIT_OPENTTD, COLOUR_BROWN); + m_label1->SetAnchors(PIN_RIGHT | PIN_BOTTOM); + AddWidget(m_label1); + + /* add controls */ + m_button1 = new gui::TextButton(this, 23, gui::FF_NONE, COLOUR_YELLOW, Rect16(104, 175, 231, 186), STR_0305_QUIT_OPENTTD, STR_0304_QUIT); m_button1->SetAnchors(PIN_RIGHT | PIN_BOTTOM); AddWidget(m_button1); diff -r 187e3ef04cc9 -r 6e8eec87fa9d src/widget/widget.h --- a/src/widget/widget.h Sun Mar 04 04:25:36 2007 +0000 +++ b/src/widget/widget.h Sun Mar 04 12:50:21 2007 +0000 @@ -22,6 +22,7 @@ FR_BORDERONLY = 0x10, ///< Draw border only, no background FR_LOWERED = 0x20, ///< If set the frame is lowered and the background color brighter (ie. buttons when pressed) FR_DARKENED = 0x40, ///< If set the background is darker, allows for lowered frames with normal background color when used with FR_LOWERED (ie. dropdown boxes) + FR_BG_ONLY = 0x80, ///< If set only the background is drawn without any frame (labels and such) }; DECLARE_ENUM_AS_BIT_SET(FrameFlags); @@ -45,6 +46,7 @@ FF_NO_STICKY_BOX = (1 << 2), FF_NO_RESIZE_BOX = (1 << 3), FF_UNMOVABLE = (1 << 4), + FF_TRANSPARENT = (1 << 5), }; DECLARE_ENUM_AS_BIT_SET(FeatureFlags); @@ -114,6 +116,9 @@ void SetSize(const Point16 &pt); void SetRect(const Rect16 &rect); + byte GetColor() const; + void SetColor(byte val); + void SetAnchors(Anchors a); WidgetId GetId() const; @@ -218,6 +223,40 @@ /*virtual*/ void OnResize(EvtResize &ev); }; +struct Label : public Widget { + typedef Widget super; + +protected: + StringID m_text; + +public: + Label() + : Widget() + {} + + //Label(CompositeWidget *container, WidgetId id, FeatureFlags feature_flags, const Rect16 &rect, StringID text) + // : Widget(container, id, feature_flags, container->GetColor(), rect, 0x0) + // , m_text(text) + //{} + + //Label(CompositeWidget *container, WidgetId id, FeatureFlags feature_flags, const Rect16 &rect, StringID text, StringID tooltip) + // : Widget(container, id, feature_flags, container->GetColor(), rect, tooltip) + // , m_text(text) + //{} + + Label(CompositeWidget *container, WidgetId id, FeatureFlags feature_flags, const Rect16 &rect, StringID text, StringID tooltip = 0, int color = COLOUR_NONE) + : Widget(container, id, feature_flags, (byte)color, rect, tooltip) + , m_text(text) + { + /* make the label transparent (no background) if color not provided */ + if (color == COLOUR_NONE) m_feature_flags |= FF_TRANSPARENT; + } + + /*virtual*/ void DrawBackground(EvtPaint &ev); + + /*virtual*/ void OnPaint(EvtPaint &ev); +}; + struct Button : public Widget { typedef Widget super; @@ -352,17 +391,6 @@ }; - - - - - - - - - - }; // namespace gui - #endif /* WIDGET_H */ diff -r 187e3ef04cc9 -r 6e8eec87fa9d src/widget/widget_base.cpp --- a/src/widget/widget_base.cpp Sun Mar 04 04:25:36 2007 +0000 +++ b/src/widget/widget_base.cpp Sun Mar 04 12:50:21 2007 +0000 @@ -74,7 +74,6 @@ return m_rect; } - void Widget::SetLeft(int16 val) { m_rect.SetRight(Right() + val - Left()); @@ -142,6 +141,16 @@ OnResize(evt_resize); } +byte Widget::GetColor() const +{ + return m_color; +} + +void Widget::SetColor(byte val) +{ + m_color = val; +} + void Widget::SetAnchors(Anchors a) { m_anchors = a; @@ -177,6 +186,8 @@ if (flags & FR_TRANSPARENT) { GfxFillRect(left, top, right, bottom, PALETTE_TO_TRANSPARENT | (1 << USE_COLORTABLE)); + } else if (flags & FR_BG_ONLY) { + GfxFillRect(left, top, right, bottom, medium_dark); } else { uint interior; diff -r 187e3ef04cc9 -r 6e8eec87fa9d src/widget/widget_label.cpp --- a/src/widget/widget_label.cpp Sun Mar 04 04:25:36 2007 +0000 +++ b/src/widget/widget_label.cpp Sun Mar 04 12:50:21 2007 +0000 @@ -17,4 +17,22 @@ #include "../helpers.hpp" #include "window_events.hpp" +namespace gui { +/*virtual*/ void Label::DrawBackground(EvtPaint &ev) +{ + if ((m_feature_flags & FF_TRANSPARENT) == FR_NONE) { + DrawFrameRect(m_color, FR_BG_ONLY); + } +} + +/*virtual*/ void Label::OnPaint(EvtPaint &ev) +{ + DrawBackground(ev); + Point center = CenterPt(); + DrawStringCentered(center.x, center.y - 5, m_text, 0); + ev.SetHandled(); +} + +}; // namespace gui +