[Bf-blender-cvs] [a4148c0] temp_widgets_update_tagging: Port graph editor backdrop widget to new update system

Julian Eisel noreply at git.blender.org
Tue May 10 02:56:16 CEST 2016


Commit: a4148c0398e9b33ac4d173c44fd35eb18f94d252
Author: Julian Eisel
Date:   Tue May 10 02:55:25 2016 +0200
Branches: temp_widgets_update_tagging
https://developer.blender.org/rBa4148c0398e9b33ac4d173c44fd35eb18f94d252

Port graph editor backdrop widget to new update system

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

M	source/blender/editors/space_graph/graph_edit.c
M	source/blender/editors/space_node/space_node.c
M	source/blender/editors/space_sequencer/sequencer_view.c
M	source/blender/windowmanager/widgets/WM_widget_api.h
M	source/blender/windowmanager/widgets/WM_widget_library.h
M	source/blender/windowmanager/widgets/intern/widget_library/cage_widget.c
M	source/blender/windowmanager/widgets/intern/wm_widgetgroup.c
M	source/blender/windowmanager/widgets/intern/wm_widgetmap.c

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

diff --git a/source/blender/editors/space_graph/graph_edit.c b/source/blender/editors/space_graph/graph_edit.c
index 9ce9d03..9164f53 100644
--- a/source/blender/editors/space_graph/graph_edit.c
+++ b/source/blender/editors/space_graph/graph_edit.c
@@ -2762,35 +2762,47 @@ static int graph_widget_backdrop_transform_poll(bContext *C)
 	        (sipo->backdrop_camera));
 }
 
-static void widgetgroup_backdrop_init(const struct bContext *C, struct wmWidgetGroup *wgroup)
+static void widgetgroup_backdrop_init(const bContext *UNUSED(C), wmWidgetGroup *wgroup)
 {
-	ARegion *ar = CTX_wm_region(C);
-	wmOperator *op = wgroup->type->op;
-	Scene *scene = CTX_data_scene(C);
-	int width = (scene->r.size * scene->r.xsch) / 150.0f;
-	int height = (scene->r.size * scene->r.ysch) / 150.0f;
-	float origin[3];
+	wmWidgetWrapper *wwrapper = MEM_mallocN(sizeof(wmWidgetWrapper), __func__);
+	wgroup->customdata = wwrapper;
 
-	wmWidget *cage = WIDGET_rect_transform_new(
+	wwrapper->widget = WIDGET_rect_transform_new(
 	                     wgroup, "backdrop_cage",
-	                     WIDGET_RECT_TRANSFORM_STYLE_SCALE_UNIFORM | WIDGET_RECT_TRANSFORM_STYLE_TRANSLATE,
-	                     width, height);
-	WM_widget_set_property(cage, RECT_TRANSFORM_SLOT_OFFSET, op->ptr, "offset");
-	WM_widget_set_property(cage, RECT_TRANSFORM_SLOT_SCALE, op->ptr, "scale");
+	                     WIDGET_RECT_TRANSFORM_STYLE_SCALE_UNIFORM | WIDGET_RECT_TRANSFORM_STYLE_TRANSLATE);
+}
+
+static void widgetgroup_backdrop_refresh(const struct bContext *C, wmWidgetGroup *wgroup)
+{
+	wmWidget *cage = ((wmWidgetWrapper *)wgroup->customdata)->widget;
+	ARegion *ar = CTX_wm_region(C);
+	const Scene *scene = CTX_data_scene(C);
+	const int width = (scene->r.size * scene->r.xsch) / 150.0f;
+	const int height = (scene->r.size * scene->r.ysch) / 150.0f;
+	float origin[3];
 
 	origin[0] = BLI_rcti_size_x(&ar->winrct) / 2.0f;
 	origin[1] = BLI_rcti_size_y(&ar->winrct) / 2.0f;
 
 	WM_widget_set_origin(cage, origin);
+	WIDGET_rect_transform_set_dimensions(cage, width, height);
+
+	/* XXX hmmm, can't we do this in _init somehow? Issue is op->ptr is freed after OP is done. */
+	wmOperator *op = wgroup->type->op;
+	WM_widget_set_property(cage, RECT_TRANSFORM_SLOT_OFFSET, op->ptr, "offset");
+	WM_widget_set_property(cage, RECT_TRANSFORM_SLOT_SCALE, op->ptr, "scale");
 }
 
 static wmWidgetGroupType *graph_widget_backdrop_transform_widgets(void)
 {
 	/* no poll, lives always for the duration of the operator */
-	return WM_widgetgrouptype_register(
+	return WM_widgetgrouptype_register_update(
 	            NULL,
 	            &(const struct wmWidgetMapType_Params) {"Graph_Canvas", SPACE_IPO, RGN_TYPE_WINDOW, 0},
-	            NULL, widgetgroup_backdrop_init,
+	            NULL,
+	            widgetgroup_backdrop_init,
+	            widgetgroup_backdrop_refresh,
+	            NULL,
 	            WM_widgetgroup_keymap_common,
 	            "Backdrop Transform Widgets");
 }
@@ -2831,6 +2843,8 @@ static void graph_widget_backdrop_transform_cancel(struct bContext *C, struct wm
 
 static int graph_widget_backdrop_transform_modal(bContext *C, wmOperator *op, const wmEvent *event)
 {
+	ARegion *ar = CTX_wm_region(C);
+	wmWidgetMap *wmap = ar->widgetmaps.first;
 	BackDropTransformData *data = op->customdata;
 
 	if (event->type == data->event_type && event->val == KM_PRESS) {
@@ -2849,7 +2863,6 @@ static int graph_widget_backdrop_transform_modal(bContext *C, wmOperator *op, co
 		case RKEY:
 		{
 			SpaceIpo *sipo = CTX_wm_space_graph(C);
-			ARegion *ar = CTX_wm_region(C);
 			float zero[2] = {0.0f};
 			RNA_float_set_array(op->ptr, "offset", zero);
 			RNA_float_set(op->ptr, "scale", 1.0f);
@@ -2870,8 +2883,6 @@ static int graph_widget_backdrop_transform_modal(bContext *C, wmOperator *op, co
 		case ESCKEY:
 		case RIGHTMOUSE:
 		{
-			ARegion *ar = CTX_wm_region(C);
-			wmWidgetMap *wmap = ar->widgetmaps.first;
 			SpaceIpo *sipo = CTX_wm_space_graph(C);
 
 			/* only end modal if we're not dragging a widget */
@@ -2884,6 +2895,7 @@ static int graph_widget_backdrop_transform_modal(bContext *C, wmOperator *op, co
 			}
 		}
 	}
+	WM_widgetmap_tag_refresh(wmap);
 
 	return OPERATOR_RUNNING_MODAL;
 }
diff --git a/source/blender/editors/space_node/space_node.c b/source/blender/editors/space_node/space_node.c
index 6de6cc2..21d5f7a 100644
--- a/source/blender/editors/space_node/space_node.c
+++ b/source/blender/editors/space_node/space_node.c
@@ -874,11 +874,11 @@ static void WIDGETGROUP_node_transform_init(const struct bContext *C, struct wmW
 
 		cage = WIDGET_rect_transform_new(
 		           wgroup, "backdrop_cage",
-		           WIDGET_RECT_TRANSFORM_STYLE_TRANSLATE | WIDGET_RECT_TRANSFORM_STYLE_SCALE_UNIFORM,
-		           w, h);
+		           WIDGET_RECT_TRANSFORM_STYLE_TRANSLATE | WIDGET_RECT_TRANSFORM_STYLE_SCALE_UNIFORM);
 		RNA_pointer_create(snode->id, &RNA_SpaceNodeEditor, snode, &nodeptr);
 		
 		WM_widget_set_origin(cage, origin);
+		WIDGET_rect_transform_set_dimensions(cage, w, h);
 		WM_widget_set_property(cage, RECT_TRANSFORM_SLOT_OFFSET, &nodeptr, "backdrop_offset");
 		WM_widget_set_property(cage, RECT_TRANSFORM_SLOT_SCALE, &nodeptr, "backdrop_zoom");
 	}
diff --git a/source/blender/editors/space_sequencer/sequencer_view.c b/source/blender/editors/space_sequencer/sequencer_view.c
index 9582b4a..be30aeb 100644
--- a/source/blender/editors/space_sequencer/sequencer_view.c
+++ b/source/blender/editors/space_sequencer/sequencer_view.c
@@ -276,15 +276,15 @@ static void widgetgroup_overdrop_init(const struct bContext *C, struct wmWidgetG
 	
 	wmWidget *cage = WIDGET_rect_transform_new(
 	                     wgroup, "overdrop_cage",
-	                     WIDGET_RECT_TRANSFORM_STYLE_SCALE_UNIFORM | WIDGET_RECT_TRANSFORM_STYLE_TRANSLATE,
-	                     sizex, sizey);
+	                     WIDGET_RECT_TRANSFORM_STYLE_SCALE_UNIFORM | WIDGET_RECT_TRANSFORM_STYLE_TRANSLATE);
 	WM_widget_set_property(cage, RECT_TRANSFORM_SLOT_OFFSET, op->ptr, "offset");
 	WM_widget_set_property(cage, RECT_TRANSFORM_SLOT_SCALE, op->ptr, "scale");
 	
 	origin[0] = BLI_rcti_size_x(&ar->winrct)/2.0f;
 	origin[1] = BLI_rcti_size_y(&ar->winrct)/2.0f;
-	
+
 	WM_widget_set_origin(cage, origin);
+	WIDGET_rect_transform_set_dimensions(cage, sizex, sizey);
 }
 
 static wmWidgetGroupType *sequencer_overdrop_widgets(void)
@@ -447,13 +447,13 @@ static void widgetgroup_image_transform_init(const struct bContext *C, struct wm
 
 	cage = WIDGET_rect_transform_new(
 	           wgroup, "image_cage",
-	           WIDGET_RECT_TRANSFORM_STYLE_SCALE_UNIFORM | WIDGET_RECT_TRANSFORM_STYLE_TRANSLATE,
-	           viewrect[0] * scale[0], viewrect[1] * scale[1]);
+	           WIDGET_RECT_TRANSFORM_STYLE_SCALE_UNIFORM | WIDGET_RECT_TRANSFORM_STYLE_TRANSLATE);
 	WM_widget_set_property(cage, RECT_TRANSFORM_SLOT_SCALE, op->ptr, "scale");
 
 	origin[0] = -(v2d->cur.xmin * scale[0]);
 	origin[1] = -(v2d->cur.ymin * scale[1]);
 	WM_widget_set_origin(cage, origin);
+	WIDGET_rect_transform_set_dimensions(cage, viewrect[0] * scale[0], viewrect[1] * scale[1]);
 }
 
 
diff --git a/source/blender/windowmanager/widgets/WM_widget_api.h b/source/blender/windowmanager/widgets/WM_widget_api.h
index 1975261..1c91d9c 100644
--- a/source/blender/windowmanager/widgets/WM_widget_api.h
+++ b/source/blender/windowmanager/widgets/WM_widget_api.h
@@ -94,6 +94,14 @@ struct wmWidgetGroupType *WM_widgetgrouptype_register(
         void (*init)(const struct bContext *, struct wmWidgetGroup *),
         struct wmKeyMap *(*keymap_init)(const struct wmWidgetGroupType *wgrouptype, struct wmKeyConfig *config),
         const char *name);
+struct wmWidgetGroupType *WM_widgetgrouptype_register_update(
+        const struct Main *bmain, const struct wmWidgetMapType_Params *wmap_params,
+        int (*poll)(const struct bContext *C, struct wmWidgetGroupType *),
+        void (*init)(const struct bContext *, struct wmWidgetGroup *),
+        void (*refresh)(const struct bContext *, struct wmWidgetGroup *),
+        void (*draw_prepare)(const struct bContext *, struct wmWidgetGroup *),
+        wmKeyMap *(*keymap_init)(const struct wmWidgetGroupType *wgrouptype, struct wmKeyConfig *config),
+        const char *name);
 void WM_widgetgrouptype_init_runtime(
         const struct Main *bmain, struct wmWidgetMapType *wmaptype,
         struct wmWidgetGroupType *wgrouptype);
diff --git a/source/blender/windowmanager/widgets/WM_widget_library.h b/source/blender/windowmanager/widgets/WM_widget_library.h
index 69910bf..6198faa 100644
--- a/source/blender/windowmanager/widgets/WM_widget_library.h
+++ b/source/blender/windowmanager/widgets/WM_widget_library.h
@@ -85,9 +85,8 @@ enum {
 	RECT_TRANSFORM_SLOT_SCALE = 1
 };
 
-struct wmWidget *WIDGET_rect_transform_new(
-        struct wmWidgetGroup *wgroup, const char *name, const int style,
-        const float width, const float height);
+struct wmWidget *WIDGET_rect_transform_new(struct wmWidgetGroup *wgroup, const char *name, const int style);
+void WIDGET_rect_transform_set_dimensions(struct wmWidget *widget, const float width, const float height);
 
 
 /* -------------------------------------------------------------------- */
diff --git a/source/blender/windowmanager/widgets/intern/widget_library/cage_widget.c b/source/blender/windowmanager/widgets/intern/widget_library/cage_widget.c
index 3b45bcd..ebb33da 100644
--- a/source/blender/windowmanager/widgets/intern/widget_library/cage_widget.c
+++ b/source/blender/windowmanager/widgets/intern/widget_library/cage_widget.c
@@ -521,8 +521,7 @@ static void widget_rect_transform_exit(bContext *C, wmWidget *widget, const bool
  * \{ */
 
 wmWidget *WIDGET_rect_transform_new(
-        wmWidgetGroup *wgroup, const char *name, const int style,
-        const float width, const float height)
+        wmWidgetGroup *wgroup, const char *name, const int style)
 {
 	RectTransformWidget *cage = MEM_callocN(sizeof(RectTransformWidget), name);
 
@@ -537,14 +536,19 @@ wmWidget *WIDGET_rect_transform_new(
 	cage->widget.flag |= WM_WIDGET_DRAW_ACTIVE;
 	cage->scale[0] = cage->scale[1] = 1.0f;
 	cage->style = style;
-	cage->w = width;
-	cage->h = height;
 
 	wm_widget_register(wgroup, &cage->widget, name);
 
 	return

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list