[Bf-blender-cvs] [a4148c0] temp_widgets_update_tagging: Port graph editor backdrop widget to new update system
Julian Eisel
noreply at git.blender.org
Tue May 10 02:56:16 CEST 2016
Commit: a4148c0398e9b33ac4d173c44fd35eb18f94d252
Author: Julian Eisel
Date: Tue May 10 02:55:25 2016 +0200
Branches: temp_widgets_update_tagging
https://developer.blender.org/rBa4148c0398e9b33ac4d173c44fd35eb18f94d252
Port graph editor backdrop widget to new update system
===================================================================
M source/blender/editors/space_graph/graph_edit.c
M source/blender/editors/space_node/space_node.c
M source/blender/editors/space_sequencer/sequencer_view.c
M source/blender/windowmanager/widgets/WM_widget_api.h
M source/blender/windowmanager/widgets/WM_widget_library.h
M source/blender/windowmanager/widgets/intern/widget_library/cage_widget.c
M source/blender/windowmanager/widgets/intern/wm_widgetgroup.c
M source/blender/windowmanager/widgets/intern/wm_widgetmap.c
===================================================================
diff --git a/source/blender/editors/space_graph/graph_edit.c b/source/blender/editors/space_graph/graph_edit.c
index 9ce9d03..9164f53 100644
--- a/source/blender/editors/space_graph/graph_edit.c
+++ b/source/blender/editors/space_graph/graph_edit.c
@@ -2762,35 +2762,47 @@ static int graph_widget_backdrop_transform_poll(bContext *C)
(sipo->backdrop_camera));
}
-static void widgetgroup_backdrop_init(const struct bContext *C, struct wmWidgetGroup *wgroup)
+static void widgetgroup_backdrop_init(const bContext *UNUSED(C), wmWidgetGroup *wgroup)
{
- ARegion *ar = CTX_wm_region(C);
- wmOperator *op = wgroup->type->op;
- Scene *scene = CTX_data_scene(C);
- int width = (scene->r.size * scene->r.xsch) / 150.0f;
- int height = (scene->r.size * scene->r.ysch) / 150.0f;
- float origin[3];
+ wmWidgetWrapper *wwrapper = MEM_mallocN(sizeof(wmWidgetWrapper), __func__);
+ wgroup->customdata = wwrapper;
- wmWidget *cage = WIDGET_rect_transform_new(
+ wwrapper->widget = WIDGET_rect_transform_new(
wgroup, "backdrop_cage",
- WIDGET_RECT_TRANSFORM_STYLE_SCALE_UNIFORM | WIDGET_RECT_TRANSFORM_STYLE_TRANSLATE,
- width, height);
- WM_widget_set_property(cage, RECT_TRANSFORM_SLOT_OFFSET, op->ptr, "offset");
- WM_widget_set_property(cage, RECT_TRANSFORM_SLOT_SCALE, op->ptr, "scale");
+ WIDGET_RECT_TRANSFORM_STYLE_SCALE_UNIFORM | WIDGET_RECT_TRANSFORM_STYLE_TRANSLATE);
+}
+
+static void widgetgroup_backdrop_refresh(const struct bContext *C, wmWidgetGroup *wgroup)
+{
+ wmWidget *cage = ((wmWidgetWrapper *)wgroup->customdata)->widget;
+ ARegion *ar = CTX_wm_region(C);
+ const Scene *scene = CTX_data_scene(C);
+ const int width = (scene->r.size * scene->r.xsch) / 150.0f;
+ const int height = (scene->r.size * scene->r.ysch) / 150.0f;
+ float origin[3];
origin[0] = BLI_rcti_size_x(&ar->winrct) / 2.0f;
origin[1] = BLI_rcti_size_y(&ar->winrct) / 2.0f;
WM_widget_set_origin(cage, origin);
+ WIDGET_rect_transform_set_dimensions(cage, width, height);
+
+ /* XXX hmmm, can't we do this in _init somehow? Issue is op->ptr is freed after OP is done. */
+ wmOperator *op = wgroup->type->op;
+ WM_widget_set_property(cage, RECT_TRANSFORM_SLOT_OFFSET, op->ptr, "offset");
+ WM_widget_set_property(cage, RECT_TRANSFORM_SLOT_SCALE, op->ptr, "scale");
}
static wmWidgetGroupType *graph_widget_backdrop_transform_widgets(void)
{
/* no poll, lives always for the duration of the operator */
- return WM_widgetgrouptype_register(
+ return WM_widgetgrouptype_register_update(
NULL,
&(const struct wmWidgetMapType_Params) {"Graph_Canvas", SPACE_IPO, RGN_TYPE_WINDOW, 0},
- NULL, widgetgroup_backdrop_init,
+ NULL,
+ widgetgroup_backdrop_init,
+ widgetgroup_backdrop_refresh,
+ NULL,
WM_widgetgroup_keymap_common,
"Backdrop Transform Widgets");
}
@@ -2831,6 +2843,8 @@ static void graph_widget_backdrop_transform_cancel(struct bContext *C, struct wm
static int graph_widget_backdrop_transform_modal(bContext *C, wmOperator *op, const wmEvent *event)
{
+ ARegion *ar = CTX_wm_region(C);
+ wmWidgetMap *wmap = ar->widgetmaps.first;
BackDropTransformData *data = op->customdata;
if (event->type == data->event_type && event->val == KM_PRESS) {
@@ -2849,7 +2863,6 @@ static int graph_widget_backdrop_transform_modal(bContext *C, wmOperator *op, co
case RKEY:
{
SpaceIpo *sipo = CTX_wm_space_graph(C);
- ARegion *ar = CTX_wm_region(C);
float zero[2] = {0.0f};
RNA_float_set_array(op->ptr, "offset", zero);
RNA_float_set(op->ptr, "scale", 1.0f);
@@ -2870,8 +2883,6 @@ static int graph_widget_backdrop_transform_modal(bContext *C, wmOperator *op, co
case ESCKEY:
case RIGHTMOUSE:
{
- ARegion *ar = CTX_wm_region(C);
- wmWidgetMap *wmap = ar->widgetmaps.first;
SpaceIpo *sipo = CTX_wm_space_graph(C);
/* only end modal if we're not dragging a widget */
@@ -2884,6 +2895,7 @@ static int graph_widget_backdrop_transform_modal(bContext *C, wmOperator *op, co
}
}
}
+ WM_widgetmap_tag_refresh(wmap);
return OPERATOR_RUNNING_MODAL;
}
diff --git a/source/blender/editors/space_node/space_node.c b/source/blender/editors/space_node/space_node.c
index 6de6cc2..21d5f7a 100644
--- a/source/blender/editors/space_node/space_node.c
+++ b/source/blender/editors/space_node/space_node.c
@@ -874,11 +874,11 @@ static void WIDGETGROUP_node_transform_init(const struct bContext *C, struct wmW
cage = WIDGET_rect_transform_new(
wgroup, "backdrop_cage",
- WIDGET_RECT_TRANSFORM_STYLE_TRANSLATE | WIDGET_RECT_TRANSFORM_STYLE_SCALE_UNIFORM,
- w, h);
+ WIDGET_RECT_TRANSFORM_STYLE_TRANSLATE | WIDGET_RECT_TRANSFORM_STYLE_SCALE_UNIFORM);
RNA_pointer_create(snode->id, &RNA_SpaceNodeEditor, snode, &nodeptr);
WM_widget_set_origin(cage, origin);
+ WIDGET_rect_transform_set_dimensions(cage, w, h);
WM_widget_set_property(cage, RECT_TRANSFORM_SLOT_OFFSET, &nodeptr, "backdrop_offset");
WM_widget_set_property(cage, RECT_TRANSFORM_SLOT_SCALE, &nodeptr, "backdrop_zoom");
}
diff --git a/source/blender/editors/space_sequencer/sequencer_view.c b/source/blender/editors/space_sequencer/sequencer_view.c
index 9582b4a..be30aeb 100644
--- a/source/blender/editors/space_sequencer/sequencer_view.c
+++ b/source/blender/editors/space_sequencer/sequencer_view.c
@@ -276,15 +276,15 @@ static void widgetgroup_overdrop_init(const struct bContext *C, struct wmWidgetG
wmWidget *cage = WIDGET_rect_transform_new(
wgroup, "overdrop_cage",
- WIDGET_RECT_TRANSFORM_STYLE_SCALE_UNIFORM | WIDGET_RECT_TRANSFORM_STYLE_TRANSLATE,
- sizex, sizey);
+ WIDGET_RECT_TRANSFORM_STYLE_SCALE_UNIFORM | WIDGET_RECT_TRANSFORM_STYLE_TRANSLATE);
WM_widget_set_property(cage, RECT_TRANSFORM_SLOT_OFFSET, op->ptr, "offset");
WM_widget_set_property(cage, RECT_TRANSFORM_SLOT_SCALE, op->ptr, "scale");
origin[0] = BLI_rcti_size_x(&ar->winrct)/2.0f;
origin[1] = BLI_rcti_size_y(&ar->winrct)/2.0f;
-
+
WM_widget_set_origin(cage, origin);
+ WIDGET_rect_transform_set_dimensions(cage, sizex, sizey);
}
static wmWidgetGroupType *sequencer_overdrop_widgets(void)
@@ -447,13 +447,13 @@ static void widgetgroup_image_transform_init(const struct bContext *C, struct wm
cage = WIDGET_rect_transform_new(
wgroup, "image_cage",
- WIDGET_RECT_TRANSFORM_STYLE_SCALE_UNIFORM | WIDGET_RECT_TRANSFORM_STYLE_TRANSLATE,
- viewrect[0] * scale[0], viewrect[1] * scale[1]);
+ WIDGET_RECT_TRANSFORM_STYLE_SCALE_UNIFORM | WIDGET_RECT_TRANSFORM_STYLE_TRANSLATE);
WM_widget_set_property(cage, RECT_TRANSFORM_SLOT_SCALE, op->ptr, "scale");
origin[0] = -(v2d->cur.xmin * scale[0]);
origin[1] = -(v2d->cur.ymin * scale[1]);
WM_widget_set_origin(cage, origin);
+ WIDGET_rect_transform_set_dimensions(cage, viewrect[0] * scale[0], viewrect[1] * scale[1]);
}
diff --git a/source/blender/windowmanager/widgets/WM_widget_api.h b/source/blender/windowmanager/widgets/WM_widget_api.h
index 1975261..1c91d9c 100644
--- a/source/blender/windowmanager/widgets/WM_widget_api.h
+++ b/source/blender/windowmanager/widgets/WM_widget_api.h
@@ -94,6 +94,14 @@ struct wmWidgetGroupType *WM_widgetgrouptype_register(
void (*init)(const struct bContext *, struct wmWidgetGroup *),
struct wmKeyMap *(*keymap_init)(const struct wmWidgetGroupType *wgrouptype, struct wmKeyConfig *config),
const char *name);
+struct wmWidgetGroupType *WM_widgetgrouptype_register_update(
+ const struct Main *bmain, const struct wmWidgetMapType_Params *wmap_params,
+ int (*poll)(const struct bContext *C, struct wmWidgetGroupType *),
+ void (*init)(const struct bContext *, struct wmWidgetGroup *),
+ void (*refresh)(const struct bContext *, struct wmWidgetGroup *),
+ void (*draw_prepare)(const struct bContext *, struct wmWidgetGroup *),
+ wmKeyMap *(*keymap_init)(const struct wmWidgetGroupType *wgrouptype, struct wmKeyConfig *config),
+ const char *name);
void WM_widgetgrouptype_init_runtime(
const struct Main *bmain, struct wmWidgetMapType *wmaptype,
struct wmWidgetGroupType *wgrouptype);
diff --git a/source/blender/windowmanager/widgets/WM_widget_library.h b/source/blender/windowmanager/widgets/WM_widget_library.h
index 69910bf..6198faa 100644
--- a/source/blender/windowmanager/widgets/WM_widget_library.h
+++ b/source/blender/windowmanager/widgets/WM_widget_library.h
@@ -85,9 +85,8 @@ enum {
RECT_TRANSFORM_SLOT_SCALE = 1
};
-struct wmWidget *WIDGET_rect_transform_new(
- struct wmWidgetGroup *wgroup, const char *name, const int style,
- const float width, const float height);
+struct wmWidget *WIDGET_rect_transform_new(struct wmWidgetGroup *wgroup, const char *name, const int style);
+void WIDGET_rect_transform_set_dimensions(struct wmWidget *widget, const float width, const float height);
/* -------------------------------------------------------------------- */
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 3b45bcd..ebb33da 100644
--- a/source/blender/windowmanager/widgets/intern/widget_library/cage_widget.c
+++ b/source/blender/windowmanager/widgets/intern/widget_library/cage_widget.c
@@ -521,8 +521,7 @@ static void widget_rect_transform_exit(bContext *C, wmWidget *widget, const bool
* \{ */
wmWidget *WIDGET_rect_transform_new(
- wmWidgetGroup *wgroup, const char *name, const int style,
- const float width, const float height)
+ wmWidgetGroup *wgroup, const char *name, const int style)
{
RectTransformWidget *cage = MEM_callocN(sizeof(RectTransformWidget), name);
@@ -537,14 +536,19 @@ wmWidget *WIDGET_rect_transform_new(
cage->widget.flag |= WM_WIDGET_DRAW_ACTIVE;
cage->scale[0] = cage->scale[1] = 1.0f;
cage->style = style;
- cage->w = width;
- cage->h = height;
wm_widget_register(wgroup, &cage->widget, name);
return
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list