diff options
author | Johannes Hofmann <Johannes.Hofmann@gmx.de> | 2008-12-08 16:32:27 +0100 |
---|---|---|
committer | Johannes Hofmann <Johannes.Hofmann@gmx.de> | 2008-12-08 16:32:27 +0100 |
commit | c8b549abe1c85700c91e805e51b677a49ed5fd1d (patch) | |
tree | cd7c4053123335b3af203b6aaf6cdd99da5fa222 /dw | |
parent | 9e9dd0866570bcded7a26f0cbf1c0134c35e81d6 (diff) | |
parent | 4e93afcf54baaa4d2b689357ec47fd3ec585e44f (diff) |
merge
Diffstat (limited to 'dw')
-rw-r--r-- | dw/fltkui.cc | 51 | ||||
-rw-r--r-- | dw/ui.cc | 16 | ||||
-rw-r--r-- | dw/ui.hh | 9 |
3 files changed, 55 insertions, 21 deletions
diff --git a/dw/fltkui.cc b/dw/fltkui.cc index d3136090..9d9b8107 100644 --- a/dw/fltkui.cc +++ b/dw/fltkui.cc @@ -286,11 +286,47 @@ void FltkLabelButtonResource::sizeRequest (core::Requisition *requisition) } } +/* + * Get FLTK state and translate to dw + * + * TODO: find a good home for this and the fltkviewbase.cc original. + */ +static core::ButtonState getDwButtonState () +{ + int s1 = ::fltk::event_state (); + int s2 = (core::ButtonState)0; + + if(s1 & ::fltk::SHIFT) s2 |= core::SHIFT_MASK; + if(s1 & ::fltk::CTRL) s2 |= core::CONTROL_MASK; + if(s1 & ::fltk::ALT) s2 |= core::META_MASK; + if(s1 & ::fltk::BUTTON1) s2 |= core::BUTTON1_MASK; + if(s1 & ::fltk::BUTTON2) s2 |= core::BUTTON2_MASK; + if(s1 & ::fltk::BUTTON3) s2 |= core::BUTTON3_MASK; + + return (core::ButtonState)s2; +} + +static void setButtonEvent(dw::core::EventButton *event) +{ + event->xCanvas = ::fltk::event_x(); + event->yCanvas = ::fltk::event_y(); + event->state = getDwButtonState(); + event->button = ::fltk::event_button(); + event->numPressed = ::fltk::event_clicks() + 1; +} + void FltkLabelButtonResource::widgetCallback (::fltk::Widget *widget, void *data) { - if (widget->when () & ::fltk::WHEN_RELEASE) - ((FltkLabelButtonResource*)data)->emitActivate (); + if ((widget->when () & ::fltk::WHEN_RELEASE) && + ((::fltk::event_key() == ::fltk::ReturnKey) || + (::fltk::event_button() == ::fltk::LeftButton || + ::fltk::event_button() == ::fltk::MiddleButton))) { + FltkLabelButtonResource *lbr = (FltkLabelButtonResource*) data; + dw::core::EventButton event; + setButtonEvent(&event); + lbr->emitClicked(&event); + } } const char *FltkLabelButtonResource::getLabel () @@ -336,12 +372,15 @@ void FltkComplexButtonResource::widgetCallback (::fltk::Widget *widget, { FltkComplexButtonResource *res = (FltkComplexButtonResource*)data; - /* would be best not to send click pos. if the image could not be loaded */ - if (::fltk::event() == ::fltk::RELEASE && - ::fltk::event_button() == ::fltk::LeftButton) { + if (widget->when() == ::fltk::WHEN_RELEASE && + ((::fltk::event_key() == ::fltk::ReturnKey) || + (::fltk::event_button() == ::fltk::LeftButton || + ::fltk::event_button() == ::fltk::MiddleButton))) { res->click_x = ::fltk::event_x(); res->click_y = ::fltk::event_y(); - res->emitActivate (); + dw::core::EventButton event; + setButtonEvent(&event); + res->emitClicked(&event); } else { ((FltkViewBase*)res->lastFlatView)->handle(::fltk::event()); } @@ -211,21 +211,17 @@ bool ButtonResource::ClickedEmitter::emitToReceiver (lout::signal::Receiver { ((ClickedReceiver*)receiver) ->clicked ((ButtonResource*)((Pointer*)argv[0])->getValue (), - ((Integer*)argv[1])->getValue (), - ((Integer*)argv[2])->getValue (), - ((Integer*)argv[3])->getValue ()); + (EventButton*)((Pointer*)argv[1])->getValue()); return false; } void ButtonResource::ClickedEmitter::emitClicked (ButtonResource *resource, - int buttonNo, int x, int y) + EventButton *event) { - Integer i1 (buttonNo); - Integer i2 (x); - Integer i3 (y); - Pointer p (resource); - Object *argv[4] = { &p, &i1, &i2, &i3 }; - emitVoid (0, 4, argv); + Pointer p1 (resource); + Pointer p2 (event); + Object *argv[2] = { &p1, &p2 }; + emitVoid (0, 2, argv); } // ---------------------------------------------------------------------- @@ -334,8 +334,7 @@ public: class ClickedReceiver: public lout::signal::Receiver { public: - virtual void clicked (ButtonResource *resource, int buttonNo, int x, - int y) = 0; + virtual void clicked (ButtonResource *resource, EventButton *event) = 0; }; private: @@ -347,14 +346,14 @@ private: public: inline void connectClicked (ClickedReceiver *receiver) { connect (receiver); } - void emitClicked (ButtonResource *resource, int buttonNo, int x, int y); + void emitClicked (ButtonResource *resource, EventButton *event); }; ClickedEmitter clickedEmitter; protected: - inline void emitClicked (int buttonNo, int x, int y) { - return clickedEmitter.emitClicked (this, buttonNo, x, y); } + inline void emitClicked (EventButton *event) { + clickedEmitter.emitClicked (this, event); } public: inline void connectClicked (ClickedReceiver *receiver) { |