[Bf-blender-cvs] [fa66f9e] temp_widgets_update_tagging: Port VSE widgets to new update system
Julian Eisel
noreply at git.blender.org
Tue May 17 23:46:12 CEST 2016
Commit: fa66f9ebc027502fd5ef657da348f689a6527f82
Author: Julian Eisel
Date: Tue May 17 23:45:15 2016 +0200
Branches: temp_widgets_update_tagging
https://developer.blender.org/rBfa66f9ebc027502fd5ef657da348f689a6527f82
Port VSE widgets to new update system
Those were the last remaining widgets. Almost done with this branch :)
===================================================================
M source/blender/editors/space_sequencer/sequencer_view.c
===================================================================
diff --git a/source/blender/editors/space_sequencer/sequencer_view.c b/source/blender/editors/space_sequencer/sequencer_view.c
index be30aeb..9b51d38 100644
--- a/source/blender/editors/space_sequencer/sequencer_view.c
+++ b/source/blender/editors/space_sequencer/sequencer_view.c
@@ -265,23 +265,29 @@ static int sequencer_overdrop_transform_poll(bContext *C)
return (sseq && ar && ar->type->regionid == RGN_TYPE_WINDOW && (sseq->draw_flag & SEQ_DRAW_OVERDROP));
}
-static void widgetgroup_overdrop_init(const struct bContext *C, struct wmWidgetGroup *wgroup)
+static void widgetgroup_overdrop_init(const bContext *UNUSED(C), wmWidgetGroup *wgroup)
{
- ARegion *ar = CTX_wm_region(C);
+ wmWidgetWrapper *wwrapper = MEM_mallocN(sizeof(wmWidgetWrapper), __func__);
+ wgroup->customdata = wwrapper;
+
+ wwrapper->widget = WIDGET_rect_transform_new(
+ wgroup, "overdrop_cage",
+ WIDGET_RECT_TRANSFORM_STYLE_SCALE_UNIFORM | WIDGET_RECT_TRANSFORM_STYLE_TRANSLATE);
+}
+
+static void widgetgroup_overdrop_refresh(const bContext *C, wmWidgetGroup *wgroup)
+{
+ wmWidget *cage = ((wmWidgetWrapper *)wgroup->customdata)->widget;
+ const Scene *sce = CTX_data_scene(C);
+ const ARegion *ar = CTX_wm_region(C);
+ const float origin[3] = {BLI_rcti_size_x(&ar->winrct) / 2.0f, BLI_rcti_size_y(&ar->winrct)/2.0f};
+ const int sizex = (sce->r.size * sce->r.xsch) / 100;
+ const int sizey = (sce->r.size * sce->r.ysch) / 100;
+
+ /* 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;
- Scene *sce = CTX_data_scene(C);
- int sizex = (sce->r.size * sce->r.xsch) / 100;
- int sizey = (sce->r.size * sce->r.ysch) / 100;
- float origin[3];
-
- wmWidget *cage = WIDGET_rect_transform_new(
- wgroup, "overdrop_cage",
- 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);
@@ -290,10 +296,13 @@ static void widgetgroup_overdrop_init(const struct bContext *C, struct wmWidgetG
static wmWidgetGroupType *sequencer_overdrop_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) {"Seq_Canvas", SPACE_SEQ, RGN_TYPE_WINDOW, 0},
- NULL, widgetgroup_overdrop_init,
+ NULL,
+ widgetgroup_overdrop_init,
+ widgetgroup_overdrop_refresh,
+ NULL,
WM_widgetgroup_keymap_common,
"Backdrop Transform Widgets");
}
@@ -335,6 +344,8 @@ static void sequencer_overdrop_cancel(struct bContext *C, struct wmOperator *op)
static int sequencer_overdrop_transform_modal(bContext *C, wmOperator *op, const wmEvent *event)
{
OverDropTransformData *data = op->customdata;
+ ARegion *ar = CTX_wm_region(C);
+ wmWidgetMap *wmap = ar->widgetmaps.first;
if (event->type == data->event_type && event->val == KM_PRESS) {
sequencer_overdrop_finish(C, data);
@@ -352,7 +363,6 @@ static int sequencer_overdrop_transform_modal(bContext *C, wmOperator *op, const
case RKEY:
{
SpaceSeq *sseq = CTX_wm_space_seq(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);
@@ -374,8 +384,6 @@ static int sequencer_overdrop_transform_modal(bContext *C, wmOperator *op, const
case ESCKEY:
case RIGHTMOUSE:
{
- ARegion *ar = CTX_wm_region(C);
- wmWidgetMap *wmap = ar->widgetmaps.first;
SpaceSeq *sseq = CTX_wm_space_seq(C);
/* only end modal if we're not dragging a widget */
@@ -388,7 +396,8 @@ static int sequencer_overdrop_transform_modal(bContext *C, wmOperator *op, const
}
}
}
-
+ WM_widgetmap_tag_refresh(wmap);
+
return OPERATOR_RUNNING_MODAL;
}
@@ -432,38 +441,45 @@ static int sequencer_image_transform_widget_poll(bContext *C)
return (sseq && ar && ar->type->regionid == RGN_TYPE_PREVIEW);
}
-static void widgetgroup_image_transform_init(const struct bContext *C, struct wmWidgetGroup *wgroup)
+static void widgetgroup_image_transform_init(const bContext *UNUSED(C), wmWidgetGroup *wgroup)
+{
+ wmWidgetWrapper *wwrapper = MEM_mallocN(sizeof(wmWidgetWrapper), __func__);
+ wgroup->customdata = wwrapper;
+
+ wwrapper->widget = WIDGET_rect_transform_new(
+ wgroup, "image_cage",
+ WIDGET_RECT_TRANSFORM_STYLE_SCALE_UNIFORM | WIDGET_RECT_TRANSFORM_STYLE_TRANSLATE);
+}
+
+static void widgetgroup_image_transform_refresh(const bContext *C, wmWidgetGroup *wgroup)
{
+ wmWidget *cage = ((wmWidgetWrapper *)wgroup->customdata)->widget;
ARegion *ar = CTX_wm_region(C);
View2D *v2d = &ar->v2d;
- wmOperator *op = wgroup->type->op;
- wmWidget *cage;
- float origin[3];
float viewrect[2];
float scale[2];
sequencer_display_size(CTX_data_scene(C), CTX_wm_space_seq(C), viewrect);
UI_view2d_scale_get(v2d, &scale[0], &scale[1]);
- cage = WIDGET_rect_transform_new(
- wgroup, "image_cage",
- WIDGET_RECT_TRANSFORM_STYLE_SCALE_UNIFORM | WIDGET_RECT_TRANSFORM_STYLE_TRANSLATE);
+ wmOperator *op = wgroup->type->op;
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]);
+ const float origin[3] = {-(v2d->cur.xmin * scale[0]), -(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]);
}
-
static wmWidgetGroupType *sequencer_image_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) {"Seq_Canvas", SPACE_SEQ, RGN_TYPE_PREVIEW, 0},
- NULL, widgetgroup_image_transform_init,
+ NULL,
+ widgetgroup_image_transform_init,
+ widgetgroup_image_transform_refresh,
+ NULL,
WM_widgetgroup_keymap_common,
"Image Transform Widgets");
}
@@ -508,6 +524,8 @@ static void sequencer_image_transform_widget_cancel(struct bContext *C, struct w
static int sequencer_image_transform_widget_modal(bContext *C, wmOperator *op, const wmEvent *event)
{
ImageTransformData *data = op->customdata;
+ ARegion *ar = CTX_wm_region(C);
+ wmWidgetMap *wmap = ar->widgetmaps.first;
if (event->type == data->event_type && event->val == KM_PRESS) {
sequencer_image_transform_widget_finish(C, data);
@@ -517,9 +535,7 @@ static int sequencer_image_transform_widget_modal(bContext *C, wmOperator *op, c
switch (event->type) {
case EVT_WIDGET_UPDATE:
{
- ARegion *ar = CTX_wm_region(C);
Scene *scene = CTX_data_scene(C);
- wmWidgetMap *wmap = ar->widgetmaps.first;
float scale_fac = RNA_float_get(op->ptr, "scale");
float new_size[2];
float offset[2];
@@ -543,7 +559,6 @@ static int sequencer_image_transform_widget_modal(bContext *C, wmOperator *op, c
case RKEY:
{
// SpaceSeq *sseq = CTX_wm_space_seq(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);
@@ -573,6 +588,7 @@ static int sequencer_image_transform_widget_modal(bContext *C, wmOperator *op, c
return OPERATOR_CANCELLED;
}
}
+ WM_widgetmap_tag_refresh(wmap);
return OPERATOR_RUNNING_MODAL;
}
More information about the Bf-blender-cvs
mailing list