From 312981568daf61ca3649dc4d369ae08703fd76c6 Mon Sep 17 00:00:00 2001 From: Ell Date: Sun, 3 Jun 2018 04:40:14 -0400 Subject: [PATCH] app: add GimpToolWidget::hit() virtual function ... which takes the same arguments as GimpToolWidget::hover(), and performs a hit-test, returning one of the following values: - GIMP_HIT_DIRECT: The point corresponds to one of the widget's elements directly. - GIMP_HIT_INDIRECT: The point does not correspond to one of the widget's elements directly, but the widget otherwise responds to press events at this point. - GIMP_HIT_NONE: The widget does not respond to press events at this point. Unlike hover(), hit() should not have any side effects. (cherry picked from commit 385203f4d61c6e2685c1f5a3dce461dfbed9a6cd) --- app/display/display-enums.h | 13 +++++++++++++ app/display/gimptoolwidget.c | 16 ++++++++++++++++ app/display/gimptoolwidget.h | 8 ++++++++ 3 files changed, 37 insertions(+) diff --git a/app/display/display-enums.h b/app/display/display-enums.h index e6d3ac0d8f..9641a0ff5d 100644 --- a/app/display/display-enums.h +++ b/app/display/display-enums.h @@ -220,4 +220,17 @@ typedef enum } GimpZoomFocus; +/* + * non-registered enums; register them if needed + */ + + +typedef enum /*< pdb-skip, skip >*/ +{ + GIMP_HIT_NONE, + GIMP_HIT_INDIRECT, + GIMP_HIT_DIRECT +} GimpHit; + + #endif /* __DISPLAY_ENUMS_H__ */ diff --git a/app/display/gimptoolwidget.c b/app/display/gimptoolwidget.c index 44885c8bc2..1addfe9a5c 100644 --- a/app/display/gimptoolwidget.c +++ b/app/display/gimptoolwidget.c @@ -804,6 +804,22 @@ gimp_tool_widget_motion (GimpToolWidget *widget, coords, time, state); } +GimpHit +gimp_tool_widget_hit (GimpToolWidget *widget, + const GimpCoords *coords, + GdkModifierType state, + gboolean proximity) +{ + g_return_val_if_fail (GIMP_IS_TOOL_WIDGET (widget), GIMP_HIT_NONE); + g_return_val_if_fail (coords != NULL, GIMP_HIT_NONE); + + if (GIMP_TOOL_WIDGET_GET_CLASS (widget)->hit) + return GIMP_TOOL_WIDGET_GET_CLASS (widget)->hit (widget, + coords, state, proximity); + + return GIMP_HIT_NONE; +} + void gimp_tool_widget_hover (GimpToolWidget *widget, const GimpCoords *coords, diff --git a/app/display/gimptoolwidget.h b/app/display/gimptoolwidget.h index af156011c1..da96990062 100644 --- a/app/display/gimptoolwidget.h +++ b/app/display/gimptoolwidget.h @@ -87,6 +87,10 @@ struct _GimpToolWidgetClass guint32 time, GdkModifierType state); + GimpHit (* hit) (GimpToolWidget *widget, + const GimpCoords *coords, + GdkModifierType state, + gboolean proximity); void (* hover) (GimpToolWidget *widget, const GimpCoords *coords, GdkModifierType state, @@ -252,6 +256,10 @@ void gimp_tool_widget_motion (GimpToolWidget *widget, guint32 time, GdkModifierType state); +GimpHit gimp_tool_widget_hit (GimpToolWidget *widget, + const GimpCoords *coords, + GdkModifierType state, + gboolean proximity); void gimp_tool_widget_hover (GimpToolWidget *widget, const GimpCoords *coords, GdkModifierType state,