--- a/src/widget.cpp Sun Mar 04 22:36:22 2007 +0000
+++ b/src/widget.cpp Tue Mar 06 13:06:38 2007 +0000
@@ -208,7 +208,7 @@
/* show different image when clicked for WWT_IMGBTN_2 */
if ((wi->type & WWT_MASK) == WWT_IMGBTN_2 && clicked) img++;
- DrawSprite(img, PAL_NONE, r.left + 1 + clicked, r.top + 1 + clicked);
+ ::DrawSprite(img, PAL_NONE, r.left + 1 + clicked, r.top + 1 + clicked);
goto draw_default;
}
@@ -360,11 +360,11 @@
clicked = ((flags4 & (WF_SCROLL_UP | WF_HSCROLL)) == (WF_SCROLL_UP | WF_HSCROLL));
DrawFrameRect(r.left, r.top, r.left + 9, r.bottom, wi->color, (clicked) ? FR_LOWERED : FR_NONE);
- DrawSprite(SPR_ARROW_LEFT, PAL_NONE, r.left + 1 + clicked, r.top + 1 + clicked);
+ ::DrawSprite(SPR_ARROW_LEFT, PAL_NONE, r.left + 1 + clicked, r.top + 1 + clicked);
clicked = ((flags4 & (WF_SCROLL_DOWN | WF_HSCROLL)) == (WF_SCROLL_DOWN | WF_HSCROLL));
DrawFrameRect(r.right-9, r.top, r.right, r.bottom, wi->color, (clicked) ? FR_LOWERED : FR_NONE);
- DrawSprite(SPR_ARROW_RIGHT, PAL_NONE, r.right - 8 + clicked, r.top + 1 + clicked);
+ ::DrawSprite(SPR_ARROW_RIGHT, PAL_NONE, r.right - 8 + clicked, r.top + 1 + clicked);
c1 = _colour_gradient[wi->color&0xF][3];
c2 = _colour_gradient[wi->color&0xF][7];
@@ -422,7 +422,7 @@
clicked = !!(flags4 & WF_STICKY);
DrawFrameRect(r.left, r.top, r.right, r.bottom, wi->color, (clicked) ? FR_LOWERED : FR_NONE);
- DrawSprite((clicked) ? SPR_PIN_UP : SPR_PIN_DOWN, PAL_NONE, r.left + 2 + clicked, r.top + 3 + clicked);
+ ::DrawSprite((clicked) ? SPR_PIN_UP : SPR_PIN_DOWN, PAL_NONE, r.left + 2 + clicked, r.top + 3 + clicked);
break;
}
@@ -431,7 +431,7 @@
clicked = !!(flags4 & WF_SIZING);
DrawFrameRect(r.left, r.top, r.right, r.bottom, wi->color, (clicked) ? FR_LOWERED : FR_NONE);
- DrawSprite(SPR_WINDOW_RESIZE, PAL_NONE, r.left + 3 + clicked, r.top + 3 + clicked);
+ ::DrawSprite(SPR_WINDOW_RESIZE, PAL_NONE, r.left + 3 + clicked, r.top + 3 + clicked);
break;
}
--- a/src/widget/widget.h Sun Mar 04 22:36:22 2007 +0000
+++ b/src/widget/widget.h Tue Mar 06 13:06:38 2007 +0000
@@ -132,6 +132,7 @@
static /*static*/ void FillRect(const Rect16 &rc, int color);
static void DrawFrameRect(int left, int top, int right, int bottom, int ctab, FrameFlags flags);
void DrawFrameRect(int ctab, FrameFlags flags);
+ void DrawSprite(SpriteID img, SpriteID pal, const Point16 &local_pos);
virtual BaseWindow* GetWindow();
virtual Widget* WidgetFromPt(const Point16 &pt);
--- a/src/widget/widget_base.cpp Sun Mar 04 22:36:22 2007 +0000
+++ b/src/widget/widget_base.cpp Tue Mar 06 13:06:38 2007 +0000
@@ -215,6 +215,13 @@
DrawFrameRect(Left(), Top(), Right(), Bottom(), ctab, flags);
}
+void Widget::DrawSprite(SpriteID img, SpriteID pal, const Point16 &local_pos)
+{
+ Point16 window_space_pos = TopLeft() + local_pos;
+ ::DrawSprite(img, pal, window_space_pos.x, window_space_pos.y);
+}
+
+
/*virtual*/ BaseWindow* Widget::GetWindow()
{
if (m_container != NULL) {
--- a/src/widget/widget_button_img.cpp Sun Mar 04 22:36:22 2007 +0000
+++ b/src/widget/widget_button_img.cpp Tue Mar 06 13:06:38 2007 +0000
@@ -18,4 +18,13 @@
#include "window_events.hpp"
#include "widget_types.h"
+namespace gui {
+/*virtual*/ void ImageButton::OnPaint(EvtPaint &e)
+{
+ DrawBackground(e);
+ Point16 pos = m_sprite_offset + (m_pushed ? Point16(3, 3) : Point16(2, 2));
+ DrawSprite(m_sprite, PAL_NONE, pos);
+}
+
+} // namespace gui
--- a/src/widget/widget_button_img2.cpp Sun Mar 04 22:36:22 2007 +0000
+++ b/src/widget/widget_button_img2.cpp Tue Mar 06 13:06:38 2007 +0000
@@ -18,4 +18,17 @@
#include "window_events.hpp"
#include "widget_types.h"
+namespace gui {
+/*virtual*/ void ImageButton2::OnPaint(EvtPaint &e)
+{
+ DrawBackground(e);
+ if (m_pushed) {
+ DrawSprite(m_sprite_pushed, PAL_NONE, m_sprite_offset_pushed + Point(3, 3));
+ } else {
+ DrawSprite(m_sprite, PAL_NONE, m_sprite_offset + Point(2, 2));
+ }
+}
+
+} // namespace gui
+
--- a/src/widget/widget_resizebox.cpp Sun Mar 04 22:36:22 2007 +0000
+++ b/src/widget/widget_resizebox.cpp Tue Mar 06 13:06:38 2007 +0000
@@ -59,7 +59,7 @@
DrawBackground(ev);
bool sizing = m_ticket_sizing.IsActive();
- DrawSprite(SPR_WINDOW_RESIZE, PAL_NONE, Left() + 3 + sizing, Top() + 3 + sizing);
+ DrawSprite(SPR_WINDOW_RESIZE, PAL_NONE, sizing ? Point16(4, 4) : Point16(3, 3));
ev.SetHandled();
}
--- a/src/widget/widget_stickybox.cpp Sun Mar 04 22:36:22 2007 +0000
+++ b/src/widget/widget_stickybox.cpp Tue Mar 06 13:06:38 2007 +0000
@@ -31,13 +31,13 @@
super::OnCreate(ev);
}
-/*virtual*/ void StickyBox::OnPaint(EvtPaint &ev)
-{
- assert(Size() == Point16(DEFAULT_WIDTH, DEFAULT_HEIGHT));
-
- DrawBackground(ev);
- DrawSprite(m_pushed ? SPR_PIN_UP : SPR_PIN_DOWN, PAL_NONE, Left() + 2 + m_pushed, Top() + 3 + m_pushed);
-}
+///*virtual*/ void StickyBox::OnPaint(EvtPaint &ev)
+//{
+// assert(Size() == Point16(DEFAULT_WIDTH, DEFAULT_HEIGHT));
+//
+// DrawBackground(ev);
+// DrawSprite(m_pushed ? SPR_PIN_UP : SPR_PIN_DOWN, PAL_NONE, Left() + 2 + m_pushed, Top() + 3 + m_pushed);
+//}
/*virtual*/ void StickyBox::OnLeftClick(EvtLeftClick &ev)
{
--- a/src/widget/widget_types.h Sun Mar 04 22:36:22 2007 +0000
+++ b/src/widget/widget_types.h Tue Mar 06 13:06:38 2007 +0000
@@ -57,6 +57,50 @@
/*virtual*/ void OnLeftButtonDown(EvtLeftButtonDown &ev);
};
+struct ImageButton : public Button {
+ typedef Button super;
+
+protected:
+ SpriteID m_sprite;
+ Point16 m_sprite_offset;
+
+public:
+ ImageButton()
+ : Button()
+ , m_sprite(0)
+ {}
+
+ ImageButton(CompositeWidget *container, WidgetId id, FeatureFlags feature_flags, byte color, const Rect16 &rect, StringID tooltips, SpriteID sprite, Point16 sprite_offset)
+ : Button(container, id, feature_flags, color, rect, tooltips)
+ , m_sprite(sprite)
+ , m_sprite_offset(sprite_offset)
+ {}
+
+ /*virtual*/ void OnPaint(EvtPaint &ev);
+};
+
+struct ImageButton2 : public ImageButton {
+ typedef ImageButton super;
+
+protected:
+ SpriteID m_sprite_pushed;
+ Point16 m_sprite_offset_pushed;
+
+public:
+ ImageButton2()
+ : ImageButton()
+ , m_sprite_pushed(0)
+ {}
+
+ ImageButton2(CompositeWidget *container, WidgetId id, FeatureFlags feature_flags, byte color, const Rect16 &rect, StringID tooltips, SpriteID sprite, Point16 sprite_offset, SpriteID sprite_pushed, Point16 sprite_offset_pushed)
+ : ImageButton(container, id, feature_flags, color, rect, tooltips, sprite, sprite_offset)
+ , m_sprite_pushed(sprite_pushed)
+ , m_sprite_offset_pushed(sprite_offset_pushed)
+ {}
+
+ /*virtual*/ void OnPaint(EvtPaint &ev);
+};
+
struct TextButton : public Button {
typedef Button super;
@@ -96,23 +140,23 @@
/*virtual*/ void OnLeftClick(EvtLeftClick &ev);
};
-struct StickyBox : public Button {
- typedef Button super;
+struct StickyBox : public ImageButton2 {
+ typedef ImageButton2 super;
static const int16 DEFAULT_WIDTH = 12;
static const int16 DEFAULT_HEIGHT = 14;
public:
StickyBox()
- : Button()
+ : ImageButton2()
{}
StickyBox(CompositeWidget *container)
- : Button(container, -103, FF_TOGGLE_BUTTON, container->m_color, Rect16(), STR_STICKY_BUTTON)
+ : ImageButton2(container, -103, FF_TOGGLE_BUTTON, container->m_color, Rect16(), STR_STICKY_BUTTON, SPR_PIN_DOWN, Point(0, 1), SPR_PIN_UP, Point(0, 1))
{}
/*virtual*/ void OnCreate(EvtCreate &ev);
- /*virtual*/ void OnPaint(EvtPaint &ev);
+// /*virtual*/ void OnPaint(EvtPaint &ev);
/*virtual*/ void OnLeftClick(EvtLeftClick &ev);
};