diff options
author | corvid <corvid@lavabit.com> | 2012-06-16 21:59:06 +0000 |
---|---|---|
committer | corvid <corvid@lavabit.com> | 2012-06-16 21:59:06 +0000 |
commit | 764b4789d8f2aa9a40ca550760436625c0f55260 (patch) | |
tree | c1591089997f7ec3520959279405e833fdc8d392 /dw/fltkui.cc | |
parent | 83225ab4c3bf55af6214771308ca2d2166e2fe5c (diff) |
fix image input coordinates (bug 1070)
1. coordinates weren't relative to widget.
2. margin/border/padding weren't taken into account.
Diffstat (limited to 'dw/fltkui.cc')
-rw-r--r-- | dw/fltkui.cc | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/dw/fltkui.cc b/dw/fltkui.cc index 66a96691..f9e6f3f6 100644 --- a/dw/fltkui.cc +++ b/dw/fltkui.cc @@ -403,11 +403,22 @@ void FltkComplexButtonResource::widgetCallback (Fl_Widget *widget, FltkComplexButtonResource *res = (FltkComplexButtonResource*)data; if (!Fl::event_button3()) { - res->click_x = Fl::event_x(); - res->click_y = Fl::event_y(); - dw::core::EventButton event; - setButtonEvent(&event); - res->emitClicked(&event); + int w = widget->w(), h = widget->h(); + + res->click_x = Fl::event_x() - widget->x(); + res->click_y = Fl::event_y() - widget->y(); + if (res->style) { + res->click_x -= res->style->boxOffsetX(); + res->click_y -= res->style->boxOffsetY(); + w -= res->style->boxDiffWidth(); + h -= res->style->boxDiffHeight(); + } + if (res->click_x >= 0 && res->click_y >= 0 && + res->click_x < w && res->click_y < h) { + dw::core::EventButton event; + setButtonEvent(&event); + res->emitClicked(&event); + } } } |