[Bf-blender-cvs] [f64e323] wiggly-widgets: Yet more refactoring:

Antony Riakiotakis noreply at git.blender.org
Wed Dec 10 18:23:15 CET 2014


Commit: f64e323e2b9bc9bcfcdc6a3b854e0a5bdcd5df20
Author: Antony Riakiotakis
Date:   Wed Dec 10 18:23:00 2014 +0100
Branches: wiggly-widgets
https://developer.blender.org/rBf64e323e2b9bc9bcfcdc6a3b854e0a5bdcd5df20

Yet more refactoring:

Areas support more than one widgetmap - will be useful to partition area
in different transform regions like data, pixel, 3D (will be done in a
separate refactor).

Also get rid of the context widget hack in favour of adding the
widgetmap handler to the operator handler itself, so handling will
be unified when the widget controls a property or spawns an operator

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

M	source/blender/blenkernel/BKE_context.h
M	source/blender/blenkernel/intern/context.c
M	source/blender/blenkernel/intern/screen.c
M	source/blender/blenloader/intern/readfile.c
M	source/blender/editors/space_node/node_draw.c
M	source/blender/editors/space_node/space_node.c
M	source/blender/editors/space_sequencer/sequencer_view.c
M	source/blender/editors/space_sequencer/space_sequencer.c
M	source/blender/editors/space_view3d/space_view3d.c
M	source/blender/editors/space_view3d/view3d_draw.c
M	source/blender/makesdna/DNA_screen_types.h
M	source/blender/windowmanager/WM_api.h
M	source/blender/windowmanager/WM_types.h
M	source/blender/windowmanager/intern/wm_event_system.c
M	source/blender/windowmanager/intern/wm_generic_widgets.c
M	source/blender/windowmanager/intern/wm_widgets.c
M	source/blender/windowmanager/wm.h
M	source/blender/windowmanager/wm_event_system.h

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

diff --git a/source/blender/blenkernel/BKE_context.h b/source/blender/blenkernel/BKE_context.h
index f5fd7ac..04990ad 100644
--- a/source/blender/blenkernel/BKE_context.h
+++ b/source/blender/blenkernel/BKE_context.h
@@ -138,7 +138,6 @@ void CTX_py_dict_set(bContext *C, void *value);
 
 struct wmWindowManager *CTX_wm_manager(const bContext *C);
 struct wmWindow *CTX_wm_window(const bContext *C);
-struct wmWidget *CTX_wm_widget(const bContext *C);
 struct bScreen *CTX_wm_screen(const bContext *C);
 struct ScrArea *CTX_wm_area(const bContext *C);
 struct SpaceLink *CTX_wm_space_data(const bContext *C);
@@ -168,7 +167,6 @@ struct SpaceClip *CTX_wm_space_clip(const bContext *C);
 
 void CTX_wm_manager_set(bContext *C, struct wmWindowManager *wm);
 void CTX_wm_window_set(bContext *C, struct wmWindow *win);
-void CTX_wm_widget_set(bContext *C, struct wmWidget *widget);
 void CTX_wm_screen_set(bContext *C, struct bScreen *screen); /* to be removed */
 void CTX_wm_area_set(bContext *C, struct ScrArea *sa);
 void CTX_wm_region_set(bContext *C, struct ARegion *region);
diff --git a/source/blender/blenkernel/intern/context.c b/source/blender/blenkernel/intern/context.c
index 221397b..a958db1 100644
--- a/source/blender/blenkernel/intern/context.c
+++ b/source/blender/blenkernel/intern/context.c
@@ -67,7 +67,6 @@ struct bContext {
 	struct {
 		struct wmWindowManager *manager;
 		struct wmWindow *window;
-		struct wmWidget *widget;
 		struct bScreen *screen;
 		struct ScrArea *area;
 		struct ARegion *region;
@@ -629,11 +628,6 @@ wmWindow *CTX_wm_window(const bContext *C)
 	return ctx_wm_python_context_get(C, "window", &RNA_Window, C->wm.window);
 }
 
-struct wmWidget *CTX_wm_widget(const bContext *C)
-{
-	return C->wm.widget;
-}
-
 bScreen *CTX_wm_screen(const bContext *C)
 {
 	return ctx_wm_python_context_get(C, "screen", &RNA_Screen, C->wm.screen);
@@ -840,11 +834,6 @@ void CTX_wm_window_set(bContext *C, wmWindow *win)
 	C->wm.region = NULL;
 }
 
-void CTX_wm_widget_set(bContext *C, struct wmWidget *widget)
-{
-	C->wm.widget = widget;
-}
-
 void CTX_wm_screen_set(bContext *C, bScreen *screen)
 {
 	C->wm.screen = screen;
diff --git a/source/blender/blenkernel/intern/screen.c b/source/blender/blenkernel/intern/screen.c
index c5a5218..d8ac080 100644
--- a/source/blender/blenkernel/intern/screen.c
+++ b/source/blender/blenkernel/intern/screen.c
@@ -51,6 +51,7 @@
 #include "BKE_screen.h"
 
 #include "WM_api.h"
+#include "WM_types.h"
 
 /* ************ Spacetype/regiontype handling ************** */
 
@@ -178,8 +179,8 @@ ARegion *BKE_area_region_copy(SpaceType *st, ARegion *ar)
 	BLI_listbase_clear(&newar->panels_category);
 	BLI_listbase_clear(&newar->panels_category_active);
 	BLI_listbase_clear(&newar->ui_lists);
+	BLI_listbase_clear(&newar->widgetmaps);
 	newar->swinid = 0;
-	newar->widgetmap = NULL;
 	
 	/* use optional regiondata callback */
 	if (ar->regiondata) {
@@ -277,6 +278,7 @@ void BKE_spacedata_draw_locks(int set)
 void BKE_area_region_free(SpaceType *st, ARegion *ar)
 {
 	uiList *uilst;
+	struct wmWidgetMap *wmap, *wmap_tmp;
 
 	if (st) {
 		ARegionType *art = BKE_regiontype_from_id(st, ar->regiontype);
@@ -313,7 +315,12 @@ void BKE_area_region_free(SpaceType *st, ARegion *ar)
 			MEM_freeN(uilst->properties);
 		}
 	}
-	WM_widgetmap_delete(ar->widgetmap);
+	
+	for (wmap = ar->widgetmaps.first; wmap; wmap = wmap_tmp) {
+		wmap_tmp = wmap->next;
+		WM_widgetmap_delete(wmap);
+	}
+	BLI_listbase_clear(&ar->widgetmaps);
 	BLI_freelistN(&ar->ui_lists);
 	BLI_freelistN(&ar->ui_previews);
 	BLI_freelistN(&ar->panels_category);
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c
index 1a174d6..1c6a4a3 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -6386,7 +6386,7 @@ static void direct_link_region(FileData *fd, ARegion *ar, int spacetype)
 	BLI_listbase_clear(&ar->panels_category);
 	BLI_listbase_clear(&ar->handlers);
 	BLI_listbase_clear(&ar->uiblocks);
-	ar->widgetmap = NULL;
+	BLI_listbase_clear(&ar->widgetmaps);
 	ar->headerstr = NULL;
 	ar->swinid = 0;
 	ar->type = NULL;
diff --git a/source/blender/editors/space_node/node_draw.c b/source/blender/editors/space_node/node_draw.c
index 9928ace..c2576e3 100644
--- a/source/blender/editors/space_node/node_draw.c
+++ b/source/blender/editors/space_node/node_draw.c
@@ -1346,7 +1346,7 @@ void drawnodespace(const bContext *C, ARegion *ar)
 			glaDefine2DArea(&ar->winrct);
 			wmOrtho2_pixelspace(ar->winx, ar->winy);
 
-			WM_widgets_draw(C, ar);
+			WM_widgets_draw(C, ar->widgetmaps.first);
 
 			glMatrixMode(GL_PROJECTION);
 			glPopMatrix();
diff --git a/source/blender/editors/space_node/space_node.c b/source/blender/editors/space_node/space_node.c
index a6f60ff..e2f6ed1 100644
--- a/source/blender/editors/space_node/space_node.c
+++ b/source/blender/editors/space_node/space_node.c
@@ -342,7 +342,6 @@ static SpaceLink *node_new(const bContext *UNUSED(C))
 
 	/* main area */
 	ar = MEM_callocN(sizeof(ARegion), "main area for node");
-	ar->widgetmap = WM_widgetmap_from_type("View3D", SPACE_NODE, RGN_TYPE_WINDOW, true);
 
 	BLI_addtail(&snode->regionbase, ar);
 	ar->regiontype = RGN_TYPE_WINDOW;
@@ -663,12 +662,11 @@ static void node_main_area_init(wmWindowManager *wm, ARegion *ar)
 	WM_event_add_dropbox_handler(&ar->handlers, lb);
 
 	/* make sure we have a widgetmap - sucks a bit to do it here, but works for now */
-	if (!ar->widgetmap) {
-		ar->widgetmap = WM_widgetmap_from_type("Node_Canvas", SPACE_NODE, RGN_TYPE_WINDOW, false);
+	if (BLI_listbase_is_empty(&ar->widgetmaps)) {
+		BLI_addhead(&ar->widgetmaps, WM_widgetmap_from_type("Node_Canvas", SPACE_NODE, RGN_TYPE_WINDOW, false));
 	}
 
-	WM_event_add_widget_handler(ar);
-
+	WM_event_add_area_widgetmap_handlers(ar);
 }
 
 static void node_main_area_draw(const bContext *C, ARegion *ar)
diff --git a/source/blender/editors/space_sequencer/sequencer_view.c b/source/blender/editors/space_sequencer/sequencer_view.c
index c3d3ce2..d246788 100644
--- a/source/blender/editors/space_sequencer/sequencer_view.c
+++ b/source/blender/editors/space_sequencer/sequencer_view.c
@@ -271,6 +271,8 @@ static int sequencer_backdrop_transform_invoke(bContext *C, wmOperator *op, cons
 	wmWidgetGroupType *cagetype = WM_widgetgrouptype_new(NULL, widgetgroup_backdrop_draw, CTX_data_main(C), "Seq_Canvas", SPACE_SEQ, RGN_TYPE_WINDOW, false);
 	struct wmEventHandler *handler = WM_event_add_modal_handler(C, op);
 	WM_modal_handler_attach_widgetgroup(handler, cagetype, op);
+	
+	op->customdata = cagetype;
 	return OPERATOR_RUNNING_MODAL;
 }
 
@@ -282,6 +284,8 @@ static int sequencer_backdrop_transform_modal(bContext *C, wmOperator *op, const
 			
 		case LEFTMOUSE:
 			if (event->val == KM_DBL_CLICK)
+				/* remove the widgetgroup before exiting */
+				WM_widgetgrouptype_unregister(CTX_data_main(C), op->customdata);
 				return OPERATOR_FINISHED;
 			break;
 			
diff --git a/source/blender/editors/space_sequencer/space_sequencer.c b/source/blender/editors/space_sequencer/space_sequencer.c
index 5b9f2a8..076f6bb 100644
--- a/source/blender/editors/space_sequencer/space_sequencer.c
+++ b/source/blender/editors/space_sequencer/space_sequencer.c
@@ -478,8 +478,13 @@ static void sequencer_main_area_init(wmWindowManager *wm, ARegion *ar)
 
 	/* add drop boxes */
 	lb = WM_dropboxmap_find("Sequencer", SPACE_SEQ, RGN_TYPE_WINDOW);
-
+	
 	WM_event_add_dropbox_handler(&ar->handlers, lb);
+	
+	/* no modal keymap here, only operators use this currently */
+	if (BLI_listbase_is_empty(&ar->widgetmaps)) {
+		BLI_addhead(&ar->widgetmaps, WM_widgetmap_from_type("Seq_Canvas", SPACE_SEQ, RGN_TYPE_WINDOW, false));
+	}
 }
 
 static void sequencer_main_area_draw(const bContext *C, ARegion *ar)
diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c
index e2c23a7..e3c11c6 100644
--- a/source/blender/editors/space_view3d/space_view3d.c
+++ b/source/blender/editors/space_view3d/space_view3d.c
@@ -386,7 +386,6 @@ static SpaceLink *view3d_new(const bContext *C)
 	
 	BLI_addtail(&v3d->regionbase, ar);
 	ar->regiontype = RGN_TYPE_WINDOW;
-	ar->widgetmap = WM_widgetmap_from_type("View3D", SPACE_VIEW3D, RGN_TYPE_WINDOW, true);
 	
 	ar->regiondata = MEM_callocN(sizeof(RegionView3D), "region view3d");
 
@@ -554,12 +553,11 @@ static void view3d_main_area_init(wmWindowManager *wm, ARegion *ar)
 	
 	WM_event_add_dropbox_handler(&ar->handlers, lb);
 
-	/* make sure we have a widgetmap - sucks a bit to do it here, but works for now */
-	if (!ar->widgetmap) {
-		ar->widgetmap = WM_widgetmap_from_type("View3D", SPACE_VIEW3D, RGN_TYPE_WINDOW, true);
+	if (BLI_listbase_is_empty(&ar->widgetmaps)) {
+		BLI_addhead(&ar->widgetmaps, WM_widgetmap_from_type("View3D", SPACE_VIEW3D, RGN_TYPE_WINDOW, true));
 	}
 
-	WM_event_add_widget_handler(ar);
+	WM_event_add_area_widgetmap_handlers(ar);
 }
 
 static void view3d_main_area_exit(wmWindowManager *wm, ARegion *ar)
diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c
index 3c7d57f..28b0e29 100644
--- a/source/blender/editors/space_view3d/view3d_draw.c
+++ b/source/blender/editors/space_view3d/view3d_draw.c
@@ -3570,7 +3570,7 @@ void view3d_main_area_draw(const bContext *C, ARegion *ar)
 	
 	view3d_main_area_setup_view(scene, v3d, ar, NULL, NULL);	
 	glClear(GL_DEPTH_BUFFER_BIT);
-	WM_widgets_draw(C, ar);
+	WM_widgets_draw(C, ar->widgetmaps.first);
 	BIF_draw_manipulator(C);
 	ED_region_pixelspace(ar);
 	
diff --git a/source/blender/makesdna/DNA_screen_types.h b/source/blender/makesdna/DNA_screen_types.h
index 0cf8538..885d2e0 100644
--- a/source/blender/makesdna/DNA_screen_types.h
+++ b/source/blender/makesdna/DNA_screen_types.h
@@ -259,7 +259,7 @@ typedef struct ARegion {
 	ListBase ui_lists;			/* uiList */
 	ListBase ui_previews;		/* uiPreview */
 	ListBase handlers;			/* wmEventHandler */
-	struct wmWidgetMap *widgetmap;	/* widgets for drawing */
+	ListBase widgetmaps;		/* widgetmaps */
 	ListBase panels_category;	/* Panel categories runtime */
 	
 	struct wmTimer *regiontimer; /* blend in/out */
diff --git a/source/blender/windowmanager/WM_api.h b/s

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list