Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2019-02-19 04:59:05 +0300
committerCampbell Barton <ideasman42@gmail.com>2019-02-19 08:17:21 +0300
commit55ac296358a45fd11700df328fb47f061c8aca4f (patch)
tree0df91a4862652a917bcf354d9df63ce41cd5e4cf /source
parent0767b63f1b81c664a18603f056d3952357d84484 (diff)
WM: move gizmo handler to it's own type
Diffstat (limited to 'source')
-rw-r--r--source/blender/windowmanager/gizmo/intern/wm_gizmo_map.c18
-rw-r--r--source/blender/windowmanager/intern/wm_event_system.c12
-rw-r--r--source/blender/windowmanager/wm_event_system.h20
3 files changed, 31 insertions, 19 deletions
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);