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. @@

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to