(svn r9006) [cpp_gui] -Add: Label widget (MiHaMiX) cpp_gui
authorKUDr
Sun, 04 Mar 2007 12:50:21 +0000
branchcpp_gui
changeset 6286 6e8eec87fa9d
parent 6285 187e3ef04cc9
child 6287 e59240e63a90
(svn r9006) [cpp_gui] -Add: Label widget (MiHaMiX)
src/gfx.h
src/intro_gui.cpp
src/widget/widget.h
src/widget/widget_base.cpp
src/widget/widget_label.cpp
--- 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,
 };
 
 /**
--- 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<WC_TEST1> : 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);
 
--- 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 */
--- 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;
 
--- 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
+