[Bf-blender-cvs] [55ac296358a] master: WM: move gizmo handler to it's own type

Campbell Barton noreply at git.blender.org
Tue Feb 19 06:26:16 CET 2019


Commit: 55ac296358a45fd11700df328fb47f061c8aca4f
Author: Campbell Barton
Date:   Tue Feb 19 12:59:05 2019 +1100
Branches: master
https://developer.blender.org/rB55ac296358a45fd11700df328fb47f061c8aca4f

WM: move gizmo handler to it's own type

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

M	source/blender/windowmanager/gizmo/intern/wm_gizmo_map.c
M	source/blender/windowmanager/intern/wm_event_system.c
M	source/blender/windowmanager/wm_event_system.h

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

diff --git a/source/blender/windowmanager/gizmo/intern/wm_gizmo_map.c b/source/blender/windowmanager/gizmo/intern/wm_gizmo_map.c
index fbee3c56c00..8b6be7bb624 100644
--- a/source/blender/windowmanager/gizmo/intern/wm_gizmo_map.c
+++ b/source/blender/windowmanager/gizmo/intern/wm_gizmo_map.c
@@ -673,16 +673,17 @@ wmGizmo *wm_gizmomap_highlight_find(
 
 void WM_gizmomap_add_handlers(ARegion *ar, wmGizmoMap *gzmap)
 {
-	wmEventHandler *handler;
-
-	for (handler = ar->handlers.first; handler; handler = handler->next) {
-		if (handler->gizmo_map == gzmap) {
-			return;
+	LISTBASE_FOREACH (wmEventHandler *, handler_base, &ar->handlers) {
+		if (handler_base->type == WM_HANDLER_TYPE_GIZMO) {
+			wmEventHandler_Gizmo *handler = (wmEventHandler_Gizmo *)handler_base;
+			if (handler->gizmo_map == gzmap) {
+				return;
+			}
 		}
 	}
 
-	handler = MEM_callocN(sizeof(wmEventHandler), "gizmo handler");
-
+	wmEventHandler_Gizmo *handler = MEM_callocN(sizeof(*handler), __func__);
+	handler->base.type = WM_HANDLER_TYPE_GIZMO;
 	BLI_assert(gzmap == ar->gizmo_map);
 	handler->gizmo_map = gzmap;
 	BLI_addtail(&ar->handlers, handler);
@@ -846,8 +847,9 @@ void wm_gizmomap_handler_context(bContext *C, wmEventHandler *handler)
 			if (sa == NULL) {
 				/* when changing screen layouts with running modal handlers (like render display), this
 				 * is not an error to print */
-				if (handler->gizmo_map == NULL)
+				if (handler->type != WM_HANDLER_TYPE_GIZMO) {
 					printf("internal error: modal gizmo-map handler has invalid area\n");
+				}
 			}
 			else {
 				ARegion *ar;
diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c
index a307cd5d0f0..d40a9be9e9e 100644
--- a/source/blender/windowmanager/intern/wm_event_system.c
+++ b/source/blender/windowmanager/intern/wm_event_system.c
@@ -2443,14 +2443,16 @@ static int wm_handlers_do_intern(bContext *C, wmEvent *event, ListBase *handlers
 					}
 				}
 			}
-			else if (handler->gizmo_map) {
+			else if (handler->type == WM_HANDLER_TYPE_GIZMO) {
+				wmEventHandler_Gizmo *handler_gz = (wmEventHandler_Gizmo *)handler;
 				ScrArea *area = CTX_wm_area(C);
 				ARegion *region = CTX_wm_region(C);
-				wmGizmoMap *gzmap = handler->gizmo_map;
+				wmGizmoMap *gzmap = handler_gz->gizmo_map;
+				BLI_assert(gzmap != NULL);
 				wmGizmo *gz = wm_gizmomap_highlight_get(gzmap);
 
-				if (region->gizmo_map != handler->gizmo_map) {
-					WM_gizmomap_tag_refresh(handler->gizmo_map);
+				if (region->gizmo_map != handler_gz->gizmo_map) {
+					WM_gizmomap_tag_refresh(handler_gz->gizmo_map);
 				}
 
 				wm_gizmomap_handler_context(C, handler);
@@ -2889,7 +2891,7 @@ static void wm_event_temp_tool_handler_apply(
 
 				/* Handle widgets first. */
 				wmEventHandler *handler_last = ar->handlers.last;
-				while (handler_last && handler_last->gizmo_map == NULL) {
+				while (handler_last && handler_last->type != WM_HANDLER_TYPE_GIZMO) {
 					handler_last = handler_last->prev;
 				}
 				/* Head of list or after last gizmo. */
diff --git a/source/blender/windowmanager/wm_event_system.h b/source/blender/windowmanager/wm_event_system.h
index 8b245d05612..e585d40ebb9 100644
--- a/source/blender/windowmanager/wm_event_system.h
+++ b/source/blender/windowmanager/wm_event_system.h
@@ -40,9 +40,16 @@ struct wmEventHandler_KeymapFn {
 	void  *user_data;
 };
 
+/** Custom types for handlers, for signaling, freeing */
+enum eWM_EventHandlerType {
+	WM_HANDLER_TYPE_DEFAULT,
+	WM_HANDLER_TYPE_GIZMO,
+};
+
 typedef struct wmEventHandler {
 	struct wmEventHandler *next, *prev;
 
+	enum eWM_EventHandlerType type;
 	char flag;                          /* WM_HANDLER_BLOCKING, ... */
 
 	/* keymap handler */
@@ -70,14 +77,15 @@ typedef struct wmEventHandler {
 
 	/* drop box handler */
 	ListBase *dropboxes;
-	/* gizmo handler */
-	struct wmGizmoMap *gizmo_map;
 } wmEventHandler;
 
-/* custom types for handlers, for signaling, freeing */
-enum {
-	WM_HANDLER_DEFAULT,
-};
+/** #WM_HANDLER_TYPE_GIZMO */
+typedef struct wmEventHandler_Gizmo {
+	wmEventHandler base;
+
+	/** Gizmo handler (never NULL). */
+	struct wmGizmoMap *gizmo_map;
+} wmEventHandler_Gizmo;
 
 /* wm_event_system.c */
 void        wm_event_free_all       (wmWindow *win);



More information about the Bf-blender-cvs mailing list