Commit: 7909e8ec0642478486f21024a8fb703aa0abd5ef
Author: Julian Eisel
Date:   Wed Mar 16 12:18:55 2016 +0100
Branches: temp_widgets_update_tagging
https://developer.blender.org/rB7909e8ec0642478486f21024a8fb703aa0abd5ef

Port over lamp and forcefield widgets

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

M       source/blender/editors/include/ED_view3d.h
M       source/blender/editors/space_view3d/space_view3d.c
M       source/blender/editors/space_view3d/view3d_intern.h
M       source/blender/editors/space_view3d/view3d_widgets.c
M       source/blender/windowmanager/widgets/WM_widget_types.h

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

diff --git a/source/blender/editors/include/ED_view3d.h 
b/source/blender/editors/include/ED_view3d.h
index 3bd1cb9..fcdab8f 100644
--- a/source/blender/editors/include/ED_view3d.h
+++ b/source/blender/editors/include/ED_view3d.h
@@ -415,6 +415,7 @@ bool ED_view3d_snap_from_ray(
 
 int WIDGETGROUP_lamp_poll(const struct bContext *C, struct wmWidgetGroupType 
*wgrouptype);
 void WIDGETGROUP_lamp_init(const struct bContext *C, struct wmWidgetGroup 
*wgroup);
+void WIDGETGROUP_lamp_refresh(const struct bContext *C, struct wmWidgetGroup 
*wgroup);
 
 /* render */
 void ED_view3d_stop_render_preview(struct wmWindowManager *wm, struct ARegion 
*ar);
diff --git a/source/blender/editors/space_view3d/space_view3d.c 
b/source/blender/editors/space_view3d/space_view3d.c
index 68bb212..84e7330 100644
--- a/source/blender/editors/space_view3d/space_view3d.c
+++ b/source/blender/editors/space_view3d/space_view3d.c
@@ -749,16 +749,20 @@ static void view3d_widgets(void)
                WIDGETGROUP_armature_facemaps_init,
                WM_widgetgroup_keymap_common_sel,
                "Face Map Widgets");
-       WM_widgetgrouptype_register_ptr(
+       WM_widgetgrouptype_register_ptr_update(
                NULL, wmaptype,
                WIDGETGROUP_lamp_poll,
                WIDGETGROUP_lamp_init,
+               WIDGETGROUP_lamp_refresh,
+               NULL,
                WM_widgetgroup_keymap_common,
                "Lamp Widgets");
-       WM_widgetgrouptype_register_ptr(
+       WM_widgetgrouptype_register_ptr_update(
                NULL, wmaptype,
                WIDGETGROUP_forcefield_poll,
                WIDGETGROUP_forcefield_init,
+               WIDGETGROUP_forcefield_refresh,
+               NULL,
                WM_widgetgroup_keymap_common,
                "Force Field Widgets");
        WM_widgetgrouptype_register_ptr_update(
@@ -1037,6 +1041,7 @@ static void view3d_main_region_listener(bScreen *sc, 
ScrArea *sa, ARegion *ar, w
                                        break;
                                case ND_LIGHTING_DRAW:
                                        ED_region_tag_redraw(ar);
+                                       WM_widgetmap_tag_refresh(wmap);
                                        break;
                        }
                        break;
diff --git a/source/blender/editors/space_view3d/view3d_intern.h 
b/source/blender/editors/space_view3d/view3d_intern.h
index 79493b0..2798de1 100644
--- a/source/blender/editors/space_view3d/view3d_intern.h
+++ b/source/blender/editors/space_view3d/view3d_intern.h
@@ -278,12 +278,13 @@ ARegion *view3d_has_tools_region(ScrArea *sa);
 extern const char *view3d_context_dir[]; /* doc access */
 
 /* view3d_widgets.c */
-int  WIDGETGROUP_camera_poll(const struct bContext *C, struct 
wmWidgetGroupType *wgrouptype);
-void WIDGETGROUP_camera_init(const struct bContext *C, struct wmWidgetGroup 
*wgroup);
-void WIDGETGROUP_camera_refresh(const struct bContext *C, struct wmWidgetGroup 
*wgroup);
+int  WIDGETGROUP_camera_poll        (const struct bContext *C, struct 
wmWidgetGroupType *wgrouptype);
+void WIDGETGROUP_camera_init        (const struct bContext *C, struct 
wmWidgetGroup *wgroup);
+void WIDGETGROUP_camera_refresh     (const struct bContext *C, struct 
wmWidgetGroup *wgroup);
 void WIDGETGROUP_camera_draw_prepare(const struct bContext *C, struct 
wmWidgetGroup *wgroup);
-int  WIDGETGROUP_forcefield_poll(const struct bContext *C, struct 
wmWidgetGroupType *wgrouptype);
-void WIDGETGROUP_forcefield_init(const struct bContext *C, struct 
wmWidgetGroup *wgroup);
+int  WIDGETGROUP_forcefield_poll    (const struct bContext *C, struct 
wmWidgetGroupType *wgrouptype);
+void WIDGETGROUP_forcefield_init    (const struct bContext *C, struct 
wmWidgetGroup *wgroup);
+void WIDGETGROUP_forcefield_refresh (const struct bContext *C, struct 
wmWidgetGroup *wgroup);
 int  WIDGETGROUP_armature_facemaps_poll(const struct bContext *C, struct 
wmWidgetGroupType *wgrouptype);
 void WIDGETGROUP_armature_facemaps_init(const struct bContext *C, struct 
wmWidgetGroup *wgroup);
 
diff --git a/source/blender/editors/space_view3d/view3d_widgets.c 
b/source/blender/editors/space_view3d/view3d_widgets.c
index 76bb27a..45efcf5 100644
--- a/source/blender/editors/space_view3d/view3d_widgets.c
+++ b/source/blender/editors/space_view3d/view3d_widgets.c
@@ -58,7 +58,7 @@ typedef struct CameraWidgetGroup {
 } CameraWidgetGroup;
 
 
-int WIDGETGROUP_lamp_poll(const struct bContext *C, struct wmWidgetGroupType 
*UNUSED(wgrouptype))
+int WIDGETGROUP_lamp_poll(const bContext *C, wmWidgetGroupType 
*UNUSED(wgrouptype))
 {
        Object *ob = CTX_data_active_object(C);
 
@@ -69,29 +69,37 @@ int WIDGETGROUP_lamp_poll(const struct bContext *C, struct 
wmWidgetGroupType *UN
        return false;
 }
 
-void WIDGETGROUP_lamp_init(const struct bContext *C, struct wmWidgetGroup 
*wgroup)
+void WIDGETGROUP_lamp_init(const bContext *C, wmWidgetGroup *wgroup)
 {
        Object *ob = CTX_data_active_object(C);
        Lamp *la = ob->data;
-       wmWidget *widget;
        PointerRNA ptr;
-       float dir[3];
        const char *propname = "spot_size";
 
        const float color[4] = {0.5f, 0.5f, 1.0f, 1.0f};
        const float color_hi[4] = {0.8f, 0.8f, 0.45f, 1.0f};
 
+       wmWidgetWrapper *wwrapper = MEM_mallocN(sizeof(wmWidgetWrapper), 
__func__);
 
-       negate_v3_v3(dir, ob->obmat[2]);
-
-       widget = WIDGET_arrow_new(wgroup, propname, 
WIDGET_ARROW_STYLE_INVERTED);
+       wwrapper->widget = WIDGET_arrow_new(wgroup, propname, 
WIDGET_ARROW_STYLE_INVERTED);
+       wgroup->customdata = wwrapper;
 
        RNA_pointer_create(&la->id, &RNA_Lamp, la, &ptr);
-       WIDGET_arrow_set_range_fac(widget, 4.0f);
-       WIDGET_arrow_set_direction(widget, dir);
-       WM_widget_set_origin(widget, ob->obmat[3]);
-       WM_widget_set_colors(widget, color, color_hi);
-       WM_widget_set_property(widget, ARROW_SLOT_OFFSET_WORLD_SPACE, &ptr, 
propname);
+       WIDGET_arrow_set_range_fac(wwrapper->widget, 4.0f);
+       WM_widget_set_colors(wwrapper->widget, color, color_hi);
+       WM_widget_set_property(wwrapper->widget, ARROW_SLOT_OFFSET_WORLD_SPACE, 
&ptr, propname);
+}
+
+void WIDGETGROUP_lamp_refresh(const bContext *C, wmWidgetGroup *wgroup)
+{
+       wmWidgetWrapper *wwrapper = wgroup->customdata;
+       Object *ob = CTX_data_active_object(C);
+       float dir[3];
+
+       negate_v3_v3(dir, ob->obmat[2]);
+
+       WIDGET_arrow_set_direction(wwrapper->widget, dir);
+       WM_widget_set_origin(wwrapper->widget, ob->obmat[3]);
 }
 
 int WIDGETGROUP_camera_poll(const bContext *C, wmWidgetGroupType 
*UNUSED(wgrouptype))
@@ -241,33 +249,44 @@ int WIDGETGROUP_forcefield_poll(const bContext *C, 
wmWidgetGroupType *UNUSED(wgr
        return (ob && ob->pd && ob->pd->forcefield);
 }
 
-void WIDGETGROUP_forcefield_init(const bContext *C, wmWidgetGroup *wgroup)
+void WIDGETGROUP_forcefield_init(const bContext *UNUSED(C), wmWidgetGroup 
*wgroup)
 {
-       Object *ob = CTX_data_active_object(C);
-       PartDeflect *pd = ob->pd;
-       PointerRNA ptr;
-       wmWidget *widget;
-
-       const float size = (ob->type == OB_EMPTY) ? ob->empty_drawsize : 1.0f;
-       const float ofs[3] = {0.0f, -size, 0.0f};
-
        const float col[4] = {0.8f, 0.8f, 0.45f, 0.5f};
        const float col_hi[4] = {0.8f, 0.8f, 0.45f, 1.0f};
 
-
        /* only wind effector for now */
+       wmWidgetWrapper *wwrapper = MEM_mallocN(sizeof(wmWidgetWrapper), 
__func__);
+       wgroup->customdata = wwrapper;
+
+       wwrapper->widget = WIDGET_arrow_new(wgroup, "field_strength", 
WIDGET_ARROW_STYLE_CONSTRAINED);
+
+       WIDGET_arrow_set_ui_range(wwrapper->widget, -200.0f, 200.0f);
+       WIDGET_arrow_set_range_fac(wwrapper->widget, 6.0f);
+       WM_widget_set_colors(wwrapper->widget, col, col_hi);
+       WM_widget_set_flag(wwrapper->widget, WM_WIDGET_SCALE_3D, false);
+}
+
+void WIDGETGROUP_forcefield_refresh(const bContext *C, wmWidgetGroup *wgroup)
+{
+       wmWidgetWrapper *wwrapper = wgroup->customdata;
+       Object *ob = CTX_data_active_object(C);
+       PartDeflect *pd = ob->pd;
+
        if (pd->forcefield == PFIELD_WIND) {
-               widget = WIDGET_arrow_new(wgroup, "field_strength", 
WIDGET_ARROW_STYLE_CONSTRAINED);
+               const float size = (ob->type == OB_EMPTY) ? ob->empty_drawsize 
: 1.0f;
+               const float ofs[3] = {0.0f, -size, 0.0f};
+               PointerRNA ptr;
 
                RNA_pointer_create(&ob->id, &RNA_FieldSettings, pd, &ptr);
-               WIDGET_arrow_set_direction(widget, ob->obmat[2]);
-               WIDGET_arrow_set_ui_range(widget, -200.0f, 200.0f);
-               WIDGET_arrow_set_range_fac(widget, 6.0f);
-               WM_widget_set_colors(widget, col, col_hi);
-               WM_widget_set_origin(widget, ob->obmat[3]);
-               WM_widget_set_offset(widget, ofs);
-               WM_widget_set_flag(widget, WM_WIDGET_SCALE_3D, false);
-               WM_widget_set_property(widget, ARROW_SLOT_OFFSET_WORLD_SPACE, 
&ptr, "strength");
+
+               WIDGET_arrow_set_direction(wwrapper->widget, ob->obmat[2]);
+               WM_widget_set_origin(wwrapper->widget, ob->obmat[3]);
+               WM_widget_set_offset(wwrapper->widget, ofs);
+               WM_widget_set_flag(wwrapper->widget, WM_WIDGET_HIDDEN, false);
+               WM_widget_set_property(wwrapper->widget, 
ARROW_SLOT_OFFSET_WORLD_SPACE, &ptr, "strength");
+       }
+       else {
+               WM_widget_set_flag(wwrapper->widget, WM_WIDGET_HIDDEN, true);
        }
 }
 
diff --git a/source/blender/windowmanager/widgets/WM_widget_types.h 
b/source/blender/windowmanager/widgets/WM_widget_types.h
index 0794a4a..b2aa509 100644
--- a/source/blender/windowmanager/widgets/WM_widget_types.h
+++ b/source/blender/windowmanager/widgets/WM_widget_types.h
@@ -120,6 +120,13 @@ struct wmWidgetMapType_Params {
        const int flag;
 };
 
+/**
+ * Simple utility wrapper for storing a single widget as 
wmWidgetGroup.customdata
+ */
+typedef struct wmWidgetWrapper {
+       struct wmWidget *widget;
+} wmWidgetWrapper;
+
 
 /* -------------------------------------------------------------------- */

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to