[Bf-blender-cvs] [33bdeea] temp_widgets_update_tagging: Update widget when property changes

Julian Eisel noreply at git.blender.org
Sat May 7 00:10:23 CEST 2016


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 */




More information about the Bf-blender-cvs mailing list