[Bf-blender-cvs] [4581091] wiggly-widgets: Only detect active widget on mousemoves. Now handler operates on mouseclick (bound to change)

Antony Riakiotakis noreply at git.blender.org
Wed Oct 15 16:38:00 CEST 2014


Commit: 4581091fc46a3a7394ca8527234b3dd316b4f886
Author: Antony Riakiotakis
Date:   Wed Oct 15 16:33:16 2014 +0200
Branches: wiggly-widgets
https://developer.blender.org/rB4581091fc46a3a7394ca8527234b3dd316b4f886

Only detect active widget on mousemoves. Now handler operates on
mouseclick (bound to change)

===================================================================

M	source/blender/editors/object/object_lamp.c
M	source/blender/editors/transform/transform_manipulator.c
M	source/blender/windowmanager/intern/wm_event_system.c
M	source/blender/windowmanager/intern/wm_widgets.c
M	source/blender/windowmanager/wm_event_system.h

===================================================================

diff --git a/source/blender/editors/object/object_lamp.c b/source/blender/editors/object/object_lamp.c
index c1d4493..8df5805 100644
--- a/source/blender/editors/object/object_lamp.c
+++ b/source/blender/editors/object/object_lamp.c
@@ -197,18 +197,16 @@ void WIDGETGROUP_lamp_update(struct wmWidgetGroup *wgroup, const struct bContext
 }
 
 
-int WIDGET_lamp_handler(struct bContext *C, const struct wmEvent *event, struct wmWidget *widget)
+int WIDGET_lamp_handler(struct bContext *C, const struct wmEvent *UNUSED(event), struct wmWidget *UNUSED(widget))
 {
 
-	if (event->type == LEFTMOUSE && event->val == KM_PRESS && (widget->flag & WM_WIDGET_HIGHLIGHT)) {
-		struct PointerRNA *ptr = NULL;			/* rna pointer to access properties */
-		struct IDProperty *properties = NULL;	/* operator properties, assigned to ptr->data and can be written to a file */
+	struct PointerRNA *ptr = NULL;			/* rna pointer to access properties */
+	struct IDProperty *properties = NULL;	/* operator properties, assigned to ptr->data and can be written to a file */
 
-		WM_operator_properties_alloc(&ptr, &properties, "UI_OT_lamp_position");
-		WM_operator_name_call(C, "UI_OT_lamp_position", WM_OP_INVOKE_DEFAULT, ptr);
-		WM_operator_properties_free(ptr);
-		MEM_freeN(ptr);
-	}
+	WM_operator_properties_alloc(&ptr, &properties, "UI_OT_lamp_position");
+	WM_operator_name_call(C, "UI_OT_lamp_position", WM_OP_INVOKE_DEFAULT, ptr);
+	WM_operator_properties_free(ptr);
+	MEM_freeN(ptr);
 
 	return OPERATOR_FINISHED;
 }
diff --git a/source/blender/editors/transform/transform_manipulator.c b/source/blender/editors/transform/transform_manipulator.c
index 78425c3..b211752 100644
--- a/source/blender/editors/transform/transform_manipulator.c
+++ b/source/blender/editors/transform/transform_manipulator.c
@@ -1964,8 +1964,7 @@ int WIDGET_manipulator_handler_trans(bContext *C, const struct wmEvent *event, w
 	struct PointerRNA *ptr = NULL;			/* rna pointer to access properties */
 	
 	if (!((v3d->twflag & V3D_USE_MANIPULATOR) && (v3d->twflag & V3D_DRAW_MANIPULATOR)) ||
-	    !(event->keymodifier == 0 || event->keymodifier == KM_SHIFT) || 
-		!((event->val == KM_PRESS) && (event->type == LEFTMOUSE)))
+	    !(event->keymodifier == 0 || event->keymodifier == KM_SHIFT))
 	{
 		return OPERATOR_PASS_THROUGH;
 	}
@@ -2009,8 +2008,7 @@ int WIDGET_manipulator_handler_rot(bContext *C, const struct wmEvent *event, wmW
 	struct PointerRNA *ptr = NULL;			/* rna pointer to access properties */
 
 	if (!((v3d->twflag & V3D_USE_MANIPULATOR) && (v3d->twflag & V3D_DRAW_MANIPULATOR)) ||
-	    !(event->keymodifier == 0 || event->keymodifier == KM_SHIFT) ||
-		!((event->val == KM_PRESS) && (event->type == LEFTMOUSE)))
+	    !(event->keymodifier == 0 || event->keymodifier == KM_SHIFT))
 	{
 		return OPERATOR_PASS_THROUGH;
 	}
diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c
index 91028d2..fcab5a8 100644
--- a/source/blender/windowmanager/intern/wm_event_system.c
+++ b/source/blender/windowmanager/intern/wm_event_system.c
@@ -1973,24 +1973,37 @@ static int wm_handlers_do_intern(bContext *C, wmEvent *event, ListBase *handlers
 			else if (handler->widgetmap) {
 				struct wmWidgetMap *wmap = handler->widgetmap;
 				
-				if (wm_widgetmap_is_3d(wmap)) {
-					int ret = -1;
-					wmWidget *widget;
-					/* similar interface to operators */
-					if ((widget = wm_widget_find_active_3D (wmap, C, event)))
-					{
-						wm_widgetmap_set_active_widget(wmap, C, widget);
-						
-						if (widget->handler && (ret = widget->handler(C, event, widget)) == OPERATOR_FINISHED) {
-							action |= WM_HANDLER_BREAK;
+				switch (event->type) {
+
+					case MOUSEMOVE:
+						if (wm_widgetmap_is_3d(wmap)) {
+							wmWidget *widget;
+							/* similar interface to operators */
+							if ((widget = wm_widget_find_active_3D (wmap, C, event)))
+							{
+								wm_widgetmap_set_active_widget(wmap, C, widget);
+							}
+							else {
+								wm_widgetmap_set_active_widget(wmap, C, NULL);
+							}
 						}
-					}
-					else {
-						wm_widgetmap_set_active_widget(wmap, C, NULL);						
-					}
-				}
-				else {
-					wm_widgetmap_set_active_widget(wmap, C, NULL);
+						else {
+							wm_widgetmap_set_active_widget(wmap, C, NULL);
+						}
+						action |= WM_HANDLER_BREAK;
+						break;
+
+					case LEFTMOUSE:
+						if (event->val == KM_PRESS) {
+							int ret = -1;
+							wmWidget *widget = wm_widgetmap_get_active_widget(wmap);
+
+							if (widget && widget->handler && (ret = widget->handler(C, event, widget)) == OPERATOR_FINISHED) {
+								action |= WM_HANDLER_BREAK;
+							}
+
+						}
+						break;
 				}
 			}
 			else {
diff --git a/source/blender/windowmanager/intern/wm_widgets.c b/source/blender/windowmanager/intern/wm_widgets.c
index f7acb94..897e968 100644
--- a/source/blender/windowmanager/intern/wm_widgets.c
+++ b/source/blender/windowmanager/intern/wm_widgets.c
@@ -474,3 +474,8 @@ void wm_widgetmap_set_active_widget(struct wmWidgetMap *wmap, struct bContext *C
 		ED_region_tag_redraw(ar);
 	}
 }
+
+struct wmWidget *wm_widgetmap_get_active_widget(struct wmWidgetMap *wmap)
+{
+	return wmap->active_widget;
+}
diff --git a/source/blender/windowmanager/wm_event_system.h b/source/blender/windowmanager/wm_event_system.h
index d8768ac..346db47 100644
--- a/source/blender/windowmanager/wm_event_system.h
+++ b/source/blender/windowmanager/wm_event_system.h
@@ -111,6 +111,7 @@ void        wm_drags_draw(bContext *C, wmWindow *win, rcti *rect);
 /* wm_widgets.c */
 struct wmWidget *wm_widget_find_active_3D(struct wmWidgetMap *wmap, struct bContext *C, const struct wmEvent *event);
 void wm_widgetmap_set_active_widget(struct wmWidgetMap *wmap, struct bContext *C, struct wmWidget *widget);
+struct wmWidget *wm_widgetmap_get_active_widget(struct wmWidgetMap *wmap);
 
 #endif /* __WM_EVENT_SYSTEM_H__ */




More information about the Bf-blender-cvs mailing list