# HG changeset patch # User KUDr # Date 1172870501 0 # Node ID d8a2c68446500aaecff2dfcc198005d4a24587a5 # Parent 43637acd46b565a1e544d2d1bf017aa3ede51a67 (svn r8981) [cpp_gui] -Add: simple CaptionBar Widget - no CloseButton and StickyButton yet - no moving capability yet diff -r 43637acd46b5 -r d8a2c6844650 src/intro_gui.cpp --- a/src/intro_gui.cpp Thu Mar 01 23:34:28 2007 +0000 +++ b/src/intro_gui.cpp Fri Mar 02 21:21:41 2007 +0000 @@ -174,6 +174,11 @@ SetTopLeft(Point16(140, 40)); SetSize(Point16(336, 195)); desc_flags = WDF_STD_TOOLTIPS | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS; + m_color = COLOUR_BROWN; + + /* add caption bar (later this will be done automatically by window core */ + gui::CaptionBar *capt_bar = new gui::CaptionBar(this, -100, RESIZE_LR, COLOUR_BROWN, 0x84, STR_0282_CONSTRUCT_BUBBLE_GENERATOR, STR_015B_OPENTTD); + AddWidget(capt_bar); /* add controls */ m_button1 = new gui::TextButton(this, 22, RESIZE_NONE, COLOUR_YELLOW, Rect16(104, 175, 231, 186), STR_0305_QUIT_OPENTTD, STR_0304_QUIT); diff -r 43637acd46b5 -r d8a2c6844650 src/widget/widget.h --- a/src/widget/widget.h Thu Mar 01 23:34:28 2007 +0000 +++ b/src/widget/widget.h Fri Mar 02 21:21:41 2007 +0000 @@ -231,6 +231,33 @@ /*virtual*/ void OnPaint(EvtPaint &ev); }; +struct CaptionBar : public CompositeWidget { + typedef CompositeWidget super; + + static const int16 DEFAULT_HEIGHT = 14; + +protected: + StringID m_text; + byte m_text_color; + +public: + CaptionBar() + : CompositeWidget() + , m_text(0) + , m_text_color(0xFF) + {} + + CaptionBar(CompositeWidget *container, WidgetId id, byte display_flags, byte color, byte text_color, StringID tooltips, StringID text) + : CompositeWidget(container, id, display_flags, color, Rect16(0, 0, container->Width() - 1, DEFAULT_HEIGHT - 1), tooltips) + , m_text(text) + , m_text_color(text_color) + {} + + /*virtual*/ void DrawBackground(EvtPaint &ev); + + /*virtual*/ void OnPaint(EvtPaint &ev); +}; + diff -r 43637acd46b5 -r d8a2c6844650 src/widget/widget_caption.cpp --- a/src/widget/widget_caption.cpp Thu Mar 01 23:34:28 2007 +0000 +++ b/src/widget/widget_caption.cpp Fri Mar 02 21:21:41 2007 +0000 @@ -18,3 +18,37 @@ #include "window_events.hpp" +namespace gui { + +/*virtual*/ void CaptionBar::DrawBackground(EvtPaint &ev) +{ +// DrawFrameRect(m_color, FR_NONE); + + BaseWindow *w = GetWindow(); + assert(w != NULL); + + byte caption_color = w->caption_color; + assert(Height() == 14); // XXX - to ensure the same sizes are used everywhere! + DrawFrameRect(Left(), Top(), Right(), Bottom(), m_color, FR_BORDERONLY); + DrawFrameRect(Left() + 1, Top() + 1, Right() - 1, Bottom() - 1, m_color, (caption_color == 0xFF) ? FR_LOWERED | FR_DARKENED : FR_LOWERED | FR_DARKENED | FR_BORDERONLY); + if (caption_color != 0xFF) { + GfxFillRect(Left() + 2, Top() + 2, Right() - 2, Bottom() - 2, _colour_gradient[_player_colors[caption_color]][4]); + } + + //assert(r.bottom - r.top == 13); // XXX - to ensure the same sizes are used everywhere! + //DrawFrameRect(r.left, r.top, r.right, r.bottom, wi->color, FR_BORDERONLY); + //DrawFrameRect(r.left+1, r.top+1, r.right-1, r.bottom-1, wi->color, (caption_color == 0xFF) ? FR_LOWERED | FR_DARKENED : FR_LOWERED | FR_DARKENED | FR_BORDERONLY); + + //if (caption_color != 0xFF) { + // GfxFillRect(r.left+2, r.top+2, r.right-2, r.bottom-2, _colour_gradient[_player_colors[caption_color]][4]); + //} +} + +/*virtual*/ void CaptionBar::OnPaint(EvtPaint &ev) +{ + DrawBackground(ev); + DrawStringCenteredTruncated(Left() + 2, Right() - 2, Top() + 2, m_text, m_text_color); + ev.SetHandled(); +} + +}; // namespace gui diff -r 43637acd46b5 -r d8a2c6844650 src/window.cpp --- a/src/window.cpp Thu Mar 01 23:34:28 2007 +0000 +++ b/src/window.cpp Fri Mar 02 21:21:41 2007 +0000 @@ -225,6 +225,7 @@ { window_number = num; flash_timeout = 3; // just opened windows have a white border + caption_color = 0xFF; /* add our new window into z-order list */ BaseWindow::s_list.Add(this);