[Bf-blender-cvs] [1f501db] wiggly-widgets: More cleanup to the widget API.

Antony Riakiotakis noreply at git.blender.org
Mon Dec 1 12:28:52 CET 2014


Commit: 1f501db162d0e3d2da66d1d3ce155bcf265d1115
Author: Antony Riakiotakis
Date:   Mon Dec 1 12:28:39 2014 +0100
Branches: wiggly-widgets
https://developer.blender.org/rB1f501db162d0e3d2da66d1d3ce155bcf265d1115

More cleanup to the widget API.

Now with RNA pointer copy we don't need to allocate RNA pointers
anymore. The API is much more streamlined and is almost like the panel
API.

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

M	source/blender/editors/include/ED_view3d.h
M	source/blender/editors/object/object_lamp.c
M	source/blender/editors/space_node/space_node.c
M	source/blender/editors/space_view3d/space_view3d.c
M	source/blender/windowmanager/WM_api.h
M	source/blender/windowmanager/intern/wm_generic_widgets.c
M	source/blender/windowmanager/intern/wm_widgets.c

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

diff --git a/source/blender/editors/include/ED_view3d.h b/source/blender/editors/include/ED_view3d.h
index 592448f..3db0512 100644
--- a/source/blender/editors/include/ED_view3d.h
+++ b/source/blender/editors/include/ED_view3d.h
@@ -370,14 +370,8 @@ void ED_view3d_operator_properties_viewmat_set(struct bContext *C, struct wmOper
 void ED_view3d_operator_properties_viewmat_get(struct wmOperator *op, int *winx, int *winy, float persmat[4][4]);
 #endif
 
-typedef struct WidgetGroupLamp {
-	struct PointerRNA *lamp;
-} WidgetGroupLamp;
-
 bool WIDGETGROUP_lamp_poll(struct wmWidgetGroup *wgroup, const struct bContext *C);
-void WIDGETGROUP_lamp_update(struct wmWidgetGroup *wgroup, const struct bContext *C);
-void WIDGETGROUP_lamp_free(struct wmWidgetGroup *wgroup);
-void WIDGETGROUP_lamp_create(struct wmWidgetGroup *wgroup);
+void WIDGETGROUP_lamp_draw(struct wmWidgetGroup *wgroup, const struct bContext *C);
 
 /* render */
 void ED_view3d_shade_update(struct Main *bmain, struct Scene *scene, struct View3D *v3d, struct ScrArea *sa);
diff --git a/source/blender/editors/object/object_lamp.c b/source/blender/editors/object/object_lamp.c
index 87999d5..435f7a2 100644
--- a/source/blender/editors/object/object_lamp.c
+++ b/source/blender/editors/object/object_lamp.c
@@ -214,40 +214,22 @@ bool WIDGETGROUP_lamp_poll(struct wmWidgetGroup *UNUSED(wgroup), const struct bC
 	return false;
 }
 
-void WIDGETGROUP_lamp_update(struct wmWidgetGroup *wgroup, const struct bContext *C)
+void WIDGETGROUP_lamp_draw(struct wmWidgetGroup *wgroup, const struct bContext *C)
 {
+	float color_lamp[4] = {0.5f, 0.5f, 1.0f, 1.0f};
 	Object *ob = CTX_data_active_object(C);
 	Lamp *la = ob->data;
-	wmWidget *widget = WM_widgetgroup_widgets(wgroup)->first;
-	WidgetGroupLamp *data = WM_widgetgroup_customdata(wgroup);
+	wmWidget *widget;
+	PointerRNA ptr;
 	float dir[3];
 
-	RNA_pointer_create(&la->id, &RNA_Lamp, la, data->lamp);
+	widget = WIDGET_arrow_new(wgroup, UI_ARROW_STYLE_INVERTED, NULL);
+
+	WIDGET_arrow_set_color(widget, color_lamp);
+	
+	RNA_pointer_create(&la->id, &RNA_Lamp, la, &ptr);
 	WM_widget_set_origin(widget, ob->obmat[3]);
-	WM_widget_property(widget, data->lamp, "spot_size");
+	WM_widget_property(widget, &ptr, "spot_size");
 	negate_v3_v3(dir, ob->obmat[2]);
 	WIDGET_arrow_set_direction(widget, dir);
 }
-
-
-void WIDGETGROUP_lamp_free(struct wmWidgetGroup *wgroup)
-{
-	WidgetGroupLamp *data = WM_widgetgroup_customdata(wgroup);
-	MEM_freeN(data->lamp);
-	MEM_freeN(data);
-}
-
-void WIDGETGROUP_lamp_create(struct wmWidgetGroup *wgroup)
-{
-	float color_lamp[4] = {0.5f, 0.5f, 1.0f, 1.0f};
-	wmWidget *widget = NULL;
-	WidgetGroupLamp *lampgroup = MEM_callocN(sizeof(WidgetGroupLamp), "lamp_manipulator_data");
-
-	lampgroup->lamp = MEM_callocN(sizeof(PointerRNA), "lampwidgetptr");
-
-	widget = WIDGET_arrow_new(UI_ARROW_STYLE_INVERTED, NULL);
-	WM_widget_register(wgroup, widget);
-	WIDGET_arrow_set_color(widget, color_lamp);
-
-	WM_widgetgroup_customdata_set(wgroup, lampgroup);
-}
diff --git a/source/blender/editors/space_node/space_node.c b/source/blender/editors/space_node/space_node.c
index 4865762..01da1c2 100644
--- a/source/blender/editors/space_node/space_node.c
+++ b/source/blender/editors/space_node/space_node.c
@@ -829,16 +829,6 @@ static int node_context(const bContext *C, const char *member, bContextDataResul
 	return 0;
 }
 
-static void WIDGETGROUP_node_transform_create(struct wmWidgetGroup *wgroup)
-{
-	wmWidget *widget = WIDGET_cage_new(0, NULL);
-	PointerRNA *nodeptr = MEM_callocN(sizeof(PointerRNA), "nodewidgetptr");
-
-	WM_widgetgroup_customdata_set(wgroup, nodeptr);
-	
-	WM_widget_register(wgroup, widget);
-}
-
 static bool WIDGETGROUP_node_transform_poll(struct wmWidgetGroup *UNUSED(wgroup), const struct bContext *C)
 {
 	SpaceNode *snode = CTX_wm_space_node(C);
@@ -855,7 +845,6 @@ static bool WIDGETGROUP_node_transform_poll(struct wmWidgetGroup *UNUSED(wgroup)
 
 static void WIDGETGROUP_node_transform_update(struct wmWidgetGroup *wgroup, const struct bContext *C)
 {
-	wmWidget *cage = WM_widgetgroup_widgets(wgroup)->first;
 	Image *ima;
 	ImBuf *ibuf;
 	void *lock;
@@ -863,11 +852,13 @@ static void WIDGETGROUP_node_transform_update(struct wmWidgetGroup *wgroup, cons
 	ima = BKE_image_verify_viewer(IMA_TYPE_COMPOSITE, "Viewer Node");
 	ibuf = BKE_image_acquire_ibuf(ima, NULL, &lock);
 	if (ibuf) {
+		wmWidget *cage = WIDGET_cage_new(wgroup, 0, NULL);
+		
 		SpaceNode *snode = CTX_wm_space_node(C);
 		ARegion *ar = CTX_wm_region(C);
 		float origin[3];
 		float xsize, ysize;
-		PointerRNA *nodeptr = WM_widgetgroup_customdata(wgroup);
+		PointerRNA nodeptr;
 
 		xsize = snode->zoom * ibuf->x;
 		ysize = snode->zoom * ibuf->y;
@@ -875,29 +866,20 @@ static void WIDGETGROUP_node_transform_update(struct wmWidgetGroup *wgroup, cons
 		origin[0] = (ar->winx - xsize) / 2 + snode->xof;
 		origin[1] = (ar->winy - ysize) / 2 + snode->yof;
 
-		RNA_pointer_create(snode->id, &RNA_SpaceNodeEditor, snode, nodeptr);
+		RNA_pointer_create(snode->id, &RNA_SpaceNodeEditor, snode, &nodeptr);
 		
 		WIDGET_cage_bounds_set(cage, xsize, ysize);
 		WM_widget_set_origin(cage, origin);
-		WM_widget_property(cage, nodeptr, "backdrop_x");
+		WM_widget_property(cage, &nodeptr, "backdrop_x");
 	}
 	BKE_image_release_ibuf(ima, ibuf, lock);
 }
 
-static void WIDGETGROUP_node_transform_free(struct wmWidgetGroup *wgroup)
-{
-	PointerRNA *nodeptr = WM_widgetgroup_customdata(wgroup);
-
-	MEM_freeN(nodeptr);
-}
-
 static void node_widgets(void)
 {
 	struct wmWidgetMapType *wmaptype = WM_widgetmaptype_find("Node", SPACE_NODE, RGN_TYPE_WINDOW, false);
-	struct wmWidgetGroupType *wgroup_node_transform = WM_widgetgrouptype_new(WIDGETGROUP_node_transform_create,
-	                                                                         WIDGETGROUP_node_transform_poll,
-	                                                                         WIDGETGROUP_node_transform_update,
-	                                                                         WIDGETGROUP_node_transform_free);
+	struct wmWidgetGroupType *wgroup_node_transform = WM_widgetgrouptype_new(WIDGETGROUP_node_transform_poll,
+	                                                                         WIDGETGROUP_node_transform_update);
 
 	WM_widgetgrouptype_register(wmaptype, wgroup_node_transform);
 }
diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c
index d714a47..d74ba61 100644
--- a/source/blender/editors/space_view3d/space_view3d.c
+++ b/source/blender/editors/space_view3d/space_view3d.c
@@ -709,17 +709,23 @@ static bool WIDGETGROUP_camera_poll(struct wmWidgetGroup *UNUSED(wgroup), const
 	return false;
 }
 
-static void WIDGETGROUP_camera_update(struct wmWidgetGroup *wgroup, const struct bContext *C)
+static void WIDGETGROUP_camera_draw(struct wmWidgetGroup *wgroup, const struct bContext *C)
 {
+	float color_camera[4] = {1.0f, 0.3f, 0.0f, 1.0f};
 	Object *ob = CTX_data_active_object(C);
 	Camera *ca = ob->data;
-	wmWidget *widget = WM_widgetgroup_widgets(wgroup)->first;
-	PointerRNA *cameraptr = WM_widgetgroup_customdata(wgroup);
+	wmWidget *widget;
+	PointerRNA cameraptr;
 	float dir[3];
 
-	RNA_pointer_create(&ca->id, &RNA_Camera, ca, cameraptr);
+	widget = WIDGET_arrow_new(wgroup, UI_ARROW_STYLE_CROSS, NULL);
+	WM_widget_set_draw_on_hover_only(widget, true);
+	WM_widget_set_3d_scale(widget, false);
+	WIDGET_arrow_set_color(widget, color_camera);
+	
+	RNA_pointer_create(&ca->id, &RNA_Camera, ca, &cameraptr);
 	WM_widget_set_origin(widget, ob->obmat[3]);
-	WM_widget_property(widget, cameraptr, "dof_distance");
+	WM_widget_property(widget, &cameraptr, "dof_distance");
 	negate_v3_v3(dir, ob->obmat[2]);
 	WIDGET_arrow_set_direction(widget, dir);
 	WIDGET_arrow_set_up_vector(widget, ob->obmat[1]);
@@ -727,29 +733,6 @@ static void WIDGETGROUP_camera_update(struct wmWidgetGroup *wgroup, const struct
 }
 
 
-static void WIDGETGROUP_camera_free(struct wmWidgetGroup *wgroup)
-{
-	PointerRNA *cameraptr = WM_widgetgroup_customdata(wgroup);
-
-	MEM_freeN(cameraptr);
-}
-
-static void WIDGETGROUP_camera_create(struct wmWidgetGroup *wgroup)
-{
-	float color_camera[4] = {1.0f, 0.3f, 0.0f, 1.0f};
-	wmWidget *widget = NULL;
-	PointerRNA *cameraptr = MEM_callocN(sizeof(PointerRNA), "camerawidgetptr");
-
-	WM_widgetgroup_customdata_set(wgroup, cameraptr);
-	
-	widget = WIDGET_arrow_new(UI_ARROW_STYLE_CROSS, NULL);
-	WM_widget_set_draw_on_hover_only(widget, true);
-	WM_widget_set_3d_scale(widget, false);
-	WM_widget_register(wgroup, widget);
-	WIDGET_arrow_set_color(widget, color_camera);
-}
-
-
 static bool WIDGETGROUP_shapekey_poll(struct wmWidgetGroup *UNUSED(wgroup), const struct bContext *C)
 {
 	Object *ob = CTX_data_active_object(C);
@@ -769,45 +752,26 @@ static bool WIDGETGROUP_shapekey_poll(struct wmWidgetGroup *UNUSED(wgroup), cons
 	return false;
 }
 
-static void WIDGETGROUP_shapekey_update(struct wmWidgetGroup *wgroup, const struct bContext *C)
+static void WIDGETGROUP_shapekey_draw(struct wmWidgetGroup *wgroup, const struct bContext *C)
 {
+	float color_shape[4] = {1.0f, 0.3f, 0.0f, 1.0f};
 	Object *ob = CTX_data_active_object(C);
 	Camera *ca = ob->data;
-	wmWidget *widget = WM_widgetgroup_widgets(wgroup)->first;
-	PointerRNA *shapeptr = WM_widgetgroup_customdata(wgroup);
+	wmWidget *widget;
+	PointerRNA shapeptr;
 	float dir[3];
 
-	RNA_pointer_create(&ca->id, &RNA_ShapeKey, ca, shapeptr);
+	widget = WIDGET_arrow_new(wgroup, UI_ARROW_STYLE_NORMAL, NULL);
+	WM_widget_set_3d_scale(widget, false);
+	WIDGET_arrow_set_color(widget, color_shape);
+	RNA_pointer_create(&ca->id, &RNA_ShapeKey, ca, &shapeptr);
 	WM_widget_set_origin(widget, ob->obmat[3]);
-	WM_widget_property(widget, shapeptr, "value");
+	WM_widget_property(widget, &shapeptr, "value");
 	negate_v3_v3(dir, ob->obmat[2]);
 	WIDGET_arrow_set_direction(widget, dir);
 }
 
 
-static void WIDGETGROUP_shapekey_free(struct wmWidgetGroup *wgroup)
-{
-	PointerRNA *cameraptr = WM_widgetgroup_customdata(wgroup);
-
-	MEM_freeN(cameraptr);
-}
-
-static void WIDGETGROUP_shapekey_create(struct wmWidgetGroup *wgroup)
-{
-	float color_shape[4] = {1.0f, 0.3f, 0.0f, 1.0f};
-	wmWidget *widget = NULL;
-	PointerRNA *shapeptr =

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list