KUDr@6258: /* $Id$ */ KUDr@6258: KUDr@6258: #include "../stdafx.h" KUDr@6258: #include KUDr@6258: #include "../openttd.h" KUDr@6258: #include "../debug.h" KUDr@6258: #include "../functions.h" KUDr@6258: #include "../map.h" KUDr@6258: #include "../player.h" KUDr@6258: #include "../window.h" KUDr@6258: #include "../gfx.h" KUDr@6258: #include "../viewport.h" KUDr@6258: #include "../console.h" KUDr@6258: #include "../variables.h" KUDr@6258: #include "../table/sprites.h" KUDr@6258: #include "../genworld.h" KUDr@6258: #include "../helpers.hpp" KUDr@6264: #include "window_events.hpp" KUDr@6289: #include "widget_types.h" KUDr@6264: KUDr@6264: namespace gui { KUDr@6264: KUDr@6271: void Button::OnCapturePressed(EvtMouseOver &e) KUDr@6271: { KUDr@6282: BaseWindow *w = GetWindow(); KUDr@6282: assert(w != NULL); KUDr@6282: KUDr@6271: if (_left_button_down) { KUDr@6282: /* translate the global coordinates to our window space */ KUDr@6282: Point16 pt_local = e.m_pt - w->TopLeft(); KUDr@6282: /* determine the new button push state (is cursor inside button?) */ KUDr@6282: bool pushed = (WidgetFromPt(pt_local) != NULL); KUDr@6282: /* did the push state change */ KUDr@6282: if (pushed != m_pushed) { KUDr@6282: /* update button push state */ KUDr@6282: m_pushed = pushed; KUDr@6282: Invalidate(); KUDr@6282: } KUDr@6271: e.SetHandled(); KUDr@6271: return; KUDr@6271: } KUDr@6282: /* stop capturing mouse move events */ KUDr@6271: m_ticket_pressed.Release(); KUDr@6271: KUDr@6282: /* Issue OnLeftClick() event only if the button was pushed */ KUDr@6282: if (m_pushed) { KUDr@6282: /* release button */ KUDr@6282: m_pushed = false; KUDr@6282: Invalidate(); KUDr@6282: KUDr@6282: /* issue click event */ KUDr@6282: EvtLeftClick ev(e.m_pt - w->TopLeft()); KUDr@6282: ev.m_widget = this; KUDr@6282: OnLeftClick(ev); KUDr@6282: } KUDr@6271: } KUDr@6271: KUDr@6264: /*virtual*/ void Button::DrawBackground(EvtPaint &ev) KUDr@6264: { KUDr@6264: DrawFrameRect(m_color, m_pushed ? FR_LOWERED : FR_NONE); KUDr@6264: } KUDr@6264: KUDr@6289: /*virtual*/ void Button::OnLeftButtonDown(EvtLeftButtonDown &e) KUDr@6264: { KUDr@6289: if ((m_feature_flags & FF_TOGGLE_BUTTON) != FF_NONE) { KUDr@6289: /* toggle button */ KUDr@6289: m_pushed = !m_pushed; KUDr@6282: KUDr@6289: /* issue click event */ KUDr@6289: EvtLeftClick ev(e.m_pt); KUDr@6289: ev.m_widget = this; KUDr@6289: OnLeftClick(ev); KUDr@6289: } else { KUDr@6289: /* push button */ KUDr@6289: m_pushed = true; KUDr@6289: KUDr@6289: /* start capturing mouse move events */ KUDr@6289: m_ticket_pressed = CaptureEventsT(this, &Button::OnCapturePressed); KUDr@6289: } KUDr@6282: Invalidate(); KUDr@6289: e.SetHandled(); KUDr@6264: } KUDr@6258: KUDr@6258: KUDr@6282: KUDr@6264: }; // namespace gui