Commit: 33bdeea367ab521913b727c9bd072ce5cc83e0af
Author: Julian Eisel
Date:   Sat May 7 00:07:56 2016 +0200
Branches: temp_widgets_update_tagging
https://developer.blender.org/rB33bdeea367ab521913b727c9bd072ce5cc83e0af

Update widget when property changes

Reuse bind_to_prop callback for this (but renamed to prop_data_update).

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

M       
source/blender/windowmanager/widgets/intern/widget_library/arrow_widget.c
M       source/blender/windowmanager/widgets/intern/widget_library/cage_widget.c
M       
source/blender/windowmanager/widgets/intern/widget_library/widget_library_intern.h
M       
source/blender/windowmanager/widgets/intern/widget_library/widget_library_utils.c
M       source/blender/windowmanager/widgets/intern/wm_widget.c
M       source/blender/windowmanager/widgets/intern/wm_widget_intern.h
M       source/blender/windowmanager/widgets/intern/wm_widgetmap.c
M       source/blender/windowmanager/widgets/wm_widget_wmapi.h

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

diff --git 
a/source/blender/windowmanager/widgets/intern/widget_library/arrow_widget.c 
b/source/blender/windowmanager/widgets/intern/widget_library/arrow_widget.c
index 96c3623..6fe9e91 100644
--- a/source/blender/windowmanager/widgets/intern/widget_library/arrow_widget.c
+++ b/source/blender/windowmanager/widgets/intern/widget_library/arrow_widget.c
@@ -408,10 +408,10 @@ static int widget_arrow_invoke(bContext *UNUSED(C), const 
wmEvent *event, wmWidg
        return OPERATOR_RUNNING_MODAL;
 }
 
-static void widget_arrow_bind_to_prop(wmWidget *widget, const int slot)
+static void widget_arrow_prop_data_update(wmWidget *widget, const int slot)
 {
        ArrowWidget *arrow = (ArrowWidget *)widget;
-       widget_property_bind(
+       widget_property_data_update(
                    widget, &arrow->data, slot,
                    arrow->style & WIDGET_ARROW_STYLE_CONSTRAINED,
                    arrow->style & WIDGET_ARROW_STYLE_INVERTED);
@@ -474,7 +474,7 @@ wmWidget *WIDGET_arrow_new(wmWidgetGroup *wgroup, const 
char *name, const int st
        arrow->widget.handler = widget_arrow_handler;
        arrow->widget.invoke = widget_arrow_invoke;
        arrow->widget.render_3d_intersection = widget_arrow_render_3d_intersect;
-       arrow->widget.bind_to_prop = widget_arrow_bind_to_prop;
+       arrow->widget.prop_data_update = widget_arrow_prop_data_update;
        arrow->widget.exit = widget_arrow_exit;
        arrow->widget.flag |= (WM_WIDGET_SCALE_3D | WM_WIDGET_DRAW_ACTIVE);
 
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 9d1667a..3b45bcd 100644
--- a/source/blender/windowmanager/widgets/intern/widget_library/cage_widget.c
+++ b/source/blender/windowmanager/widgets/intern/widget_library/cage_widget.c
@@ -332,7 +332,7 @@ typedef struct RectTransformInteraction {
        float orig_scale[2];
 } RectTransformInteraction;
 
-static bool widget_rect_transform_get_property(wmWidget *widget, const int 
slot, float *value)
+static bool widget_rect_transform_get_prop_value(wmWidget *widget, const int 
slot, float *value)
 {
        PropertyType type = RNA_property_type(widget->props[slot]);
 
@@ -474,14 +474,14 @@ static int widget_rect_transform_handler(bContext *C, 
const wmEvent *event, wmWi
        return OPERATOR_PASS_THROUGH;
 }
 
-static void widget_rect_transform_bind_to_prop(wmWidget *widget, const int 
slot)
+static void widget_rect_transform_prop_data_update(wmWidget *widget, const int 
slot)
 {
        RectTransformWidget *cage = (RectTransformWidget *)widget;
 
        if (slot == RECT_TRANSFORM_SLOT_OFFSET)
-               widget_rect_transform_get_property(widget, 
RECT_TRANSFORM_SLOT_OFFSET, widget->offset);
+               widget_rect_transform_get_prop_value(widget, 
RECT_TRANSFORM_SLOT_OFFSET, widget->offset);
        if (slot == RECT_TRANSFORM_SLOT_SCALE)
-               widget_rect_transform_get_property(widget, 
RECT_TRANSFORM_SLOT_SCALE, cage->scale);
+               widget_rect_transform_get_prop_value(widget, 
RECT_TRANSFORM_SLOT_SCALE, cage->scale);
 }
 
 static void widget_rect_transform_exit(bContext *C, wmWidget *widget, const 
bool cancel)
@@ -528,7 +528,7 @@ wmWidget *WIDGET_rect_transform_new(
 
        cage->widget.draw = widget_rect_transform_draw;
        cage->widget.invoke = widget_rect_transform_invoke;
-       cage->widget.bind_to_prop = widget_rect_transform_bind_to_prop;
+       cage->widget.prop_data_update = widget_rect_transform_prop_data_update;
        cage->widget.handler = widget_rect_transform_handler;
        cage->widget.intersect = widget_rect_transform_intersect;
        cage->widget.exit = widget_rect_transform_exit;
diff --git 
a/source/blender/windowmanager/widgets/intern/widget_library/widget_library_intern.h
 
b/source/blender/windowmanager/widgets/intern/widget_library/widget_library_intern.h
index 4b56d7b..2359719 100644
--- 
a/source/blender/windowmanager/widgets/intern/widget_library/widget_library_intern.h
+++ 
b/source/blender/windowmanager/widgets/intern/widget_library/widget_library_intern.h
@@ -76,7 +76,7 @@ float widget_value_from_offset(
         WidgetCommonData *data, WidgetInteraction *inter, const float offset,
         const bool constrained, const bool inverted, const bool use_precision);
 
-void widget_property_bind(
+void widget_property_data_update(
         wmWidget *widget, WidgetCommonData *data, const int slot,
         const bool constrained, const bool inverted);
 
diff --git 
a/source/blender/windowmanager/widgets/intern/widget_library/widget_library_utils.c
 
b/source/blender/windowmanager/widgets/intern/widget_library/widget_library_utils.c
index fd97419..c808969 100644
--- 
a/source/blender/windowmanager/widgets/intern/widget_library/widget_library_utils.c
+++ 
b/source/blender/windowmanager/widgets/intern/widget_library/widget_library_utils.c
@@ -98,7 +98,7 @@ float widget_value_from_offset(
        return value;
 }
 
-void widget_property_bind(
+void widget_property_data_update(
         wmWidget *widget, WidgetCommonData *data, const int slot,
         const bool constrained, const bool inverted)
 {
diff --git a/source/blender/windowmanager/widgets/intern/wm_widget.c 
b/source/blender/windowmanager/widgets/intern/wm_widget.c
index fa77f85..e043839 100644
--- a/source/blender/windowmanager/widgets/intern/wm_widget.c
+++ b/source/blender/windowmanager/widgets/intern/wm_widget.c
@@ -233,8 +233,8 @@ void WM_widget_set_property(wmWidget *widget, const int 
slot, PointerRNA *ptr, c
        widget->ptr[slot] = *ptr;
        widget->props[slot] = RNA_struct_find_property(ptr, propname);
 
-       if (widget->bind_to_prop)
-               widget->bind_to_prop(widget, slot);
+       if (widget->prop_data_update)
+               widget->prop_data_update(widget, slot);
 }
 
 PointerRNA *WM_widget_set_operator(wmWidget *widget, const char *opname)
@@ -417,3 +417,15 @@ void wm_widget_calculate_scale(wmWidget *widget, const 
bContext *C)
        widget->scale = scale * widget->user_scale;
 }
 
+void wm_widget_update_prop_data(wmWidget *widget)
+{
+       /* widget property might have been changed, so update widget */
+       if (widget->props && widget->prop_data_update) {
+               for (int i = 0; i < widget->max_prop; i++) {
+                       if (widget->props[i]) {
+                               widget->prop_data_update(widget, i);
+                       }
+               }
+       }
+}
+
diff --git a/source/blender/windowmanager/widgets/intern/wm_widget_intern.h 
b/source/blender/windowmanager/widgets/intern/wm_widget_intern.h
index 9c6fa50..be66b75 100644
--- a/source/blender/windowmanager/widgets/intern/wm_widget_intern.h
+++ b/source/blender/windowmanager/widgets/intern/wm_widget_intern.h
@@ -53,6 +53,7 @@ bool wm_widget_select(bContext *C, struct wmWidgetMap *wmap, 
struct wmWidget *wi
 
 bool wm_widget_compare(const struct wmWidget *a, const struct wmWidget *b);
 void wm_widget_calculate_scale(struct wmWidget *widget, const bContext *C);
+void wm_widget_update_prop_data(struct wmWidget *widget);
 
 void fix_linking_widget_arrow(void);
 void fix_linking_widget_arrow2d(void);
diff --git a/source/blender/windowmanager/widgets/intern/wm_widgetmap.c 
b/source/blender/windowmanager/widgets/intern/wm_widgetmap.c
index 071b591..f869e24 100644
--- a/source/blender/windowmanager/widgets/intern/wm_widgetmap.c
+++ b/source/blender/windowmanager/widgets/intern/wm_widgetmap.c
@@ -210,6 +210,9 @@ void WM_widgetmap_widgets_update(const bContext *C, 
wmWidgetMap *wmap)
                for (wmWidget *widget = wgroup->widgets.first; widget; widget = 
widget->next) {
                        if (widget->flag & WM_WIDGET_HIDDEN)
                                continue;
+                       if (wmap->update_flag & WIDGETMAP_REFRESH) {
+                               wm_widget_update_prop_data(widget);
+                       }
                        wm_widget_calculate_scale(widget, C);
                        BLI_addhead(&draw_widgets, BLI_genericNodeN(widget));
                }
diff --git a/source/blender/windowmanager/widgets/wm_widget_wmapi.h 
b/source/blender/windowmanager/widgets/wm_widget_wmapi.h
index c70af0b..6474653 100644
--- a/source/blender/windowmanager/widgets/wm_widget_wmapi.h
+++ b/source/blender/windowmanager/widgets/wm_widget_wmapi.h
@@ -65,8 +65,8 @@ typedef struct wmWidget {
        /* handler used by the widget. Usually handles interaction tied to a 
widget type */
        int  (*handler)(struct bContext *C, const struct wmEvent *event, struct 
wmWidget *widget, const int flag);
 
-       /* widget-specific handler to update widget attributes when a property 
is bound */
-       void (*bind_to_prop)(struct wmWidget *widget, int slot);
+       /* widget-specific handler to update widget attributes based on the 
property value */
+       void (*prop_data_update)(struct wmWidget *widget, int slot);
 
        /* returns the final position which may be different from the origin, 
depending on the widget.
         * used in calculations of scale */

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

Reply via email to