[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