diff options
author | Campbell Barton <ideasman42@gmail.com> | 2020-06-11 08:45:37 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2020-06-11 09:01:47 +0300 |
commit | e916817520693302555e70931041df3d98876b51 (patch) | |
tree | a56507bd7258ec167e3adcb125b324a92fa8df72 | |
parent | cc064acf0f43c978ad378b20ebe869f5373651a1 (diff) |
Cleanup: move sequencer view operators into sequencer_view.c
4 files changed, 421 insertions, 408 deletions
diff --git a/source/blender/editors/space_sequencer/sequencer_edit.c b/source/blender/editors/space_sequencer/sequencer_edit.c index 28ded81eeae..aa2d5b2ae7d 100644 --- a/source/blender/editors/space_sequencer/sequencer_edit.c +++ b/source/blender/editors/space_sequencer/sequencer_edit.c @@ -50,17 +50,12 @@ #include "WM_types.h" #include "RNA_define.h" -#include "RNA_enum_types.h" /* For menu, popup, icons, etc. */ - -#include "ED_anim_api.h" #include "ED_numinput.h" #include "ED_outliner.h" #include "ED_screen.h" #include "ED_sequencer.h" -#include "ED_space_api.h" -#include "ED_transform.h" #include "UI_interface.h" #include "UI_view2d.h" @@ -2323,6 +2318,11 @@ void SEQUENCER_OT_swap_inputs(struct wmOperatorType *ot) /** \name Split Strips Operator * \{ */ +enum { + SEQ_SPLIT_SOFT, + SEQ_SPLIT_HARD, +}; + static const EnumPropertyItem prop_split_types[] = { {SEQ_SPLIT_SOFT, "SOFT", 0, "Soft", ""}, {SEQ_SPLIT_HARD, "HARD", 0, "Hard", ""}, @@ -3092,321 +3092,6 @@ void SEQUENCER_OT_meta_separate(wmOperatorType *ot) /** \} */ /* -------------------------------------------------------------------- */ -/** \name Sequencer Frame All Operator - * \{ */ - -static int sequencer_view_all_exec(bContext *C, wmOperator *op) -{ - ARegion *region = CTX_wm_region(C); - rctf box; - - const int smooth_viewtx = WM_operator_smooth_viewtx_get(op); - - boundbox_seq(CTX_data_scene(C), &box); - UI_view2d_smooth_view(C, region, &box, smooth_viewtx); - return OPERATOR_FINISHED; -} - -void SEQUENCER_OT_view_all(wmOperatorType *ot) -{ - /* Identifiers. */ - ot->name = "Frame All"; - ot->idname = "SEQUENCER_OT_view_all"; - ot->description = "View all the strips in the sequencer"; - - /* Api callbacks. */ - ot->exec = sequencer_view_all_exec; - ot->poll = ED_operator_sequencer_active; - - /* Flags. */ - ot->flag = OPTYPE_REGISTER; -} - -/** \} */ - -/* -------------------------------------------------------------------- */ -/** \name Go to Current Frame Operator - * \{ */ - -static int sequencer_view_frame_exec(bContext *C, wmOperator *op) -{ - const int smooth_viewtx = WM_operator_smooth_viewtx_get(op); - ANIM_center_frame(C, smooth_viewtx); - - return OPERATOR_FINISHED; -} - -void SEQUENCER_OT_view_frame(wmOperatorType *ot) -{ - /* Identifiers. */ - ot->name = "Go to Current Frame"; - ot->idname = "SEQUENCER_OT_view_frame"; - ot->description = "Move the view to the current frame"; - - /* Api callbacks. */ - ot->exec = sequencer_view_frame_exec; - ot->poll = ED_operator_sequencer_active; - - /* Flags. */ - ot->flag = 0; -} - -/** \} */ - -/* -------------------------------------------------------------------- */ -/** \name Preview Frame All Operator - * \{ */ - -static int sequencer_view_all_preview_exec(bContext *C, wmOperator *UNUSED(op)) -{ - bScreen *screen = CTX_wm_screen(C); - ScrArea *area = CTX_wm_area(C); -#if 0 - ARegion *region = CTX_wm_region(C); - SpaceSeq *sseq = area->spacedata.first; - Scene *scene = CTX_data_scene(C); -#endif - View2D *v2d = UI_view2d_fromcontext(C); - - v2d->cur = v2d->tot; - UI_view2d_curRect_validate(v2d); - UI_view2d_sync(screen, area, v2d, V2D_LOCK_COPY); - -#if 0 - /* Like zooming on an image view. */ - float zoomX, zoomY; - int width, height, imgwidth, imgheight; - - width = region->winx; - height = region->winy; - - seq_reset_imageofs(sseq); - - imgwidth = (scene->r.size * scene->r.xsch) / 100; - imgheight = (scene->r.size * scene->r.ysch) / 100; - - /* Apply aspect, doesn't need to be that accurate. */ - imgwidth = (int)(imgwidth * (scene->r.xasp / scene->r.yasp)); - - if (((imgwidth >= width) || (imgheight >= height)) && ((width > 0) && (height > 0))) { - /* Find the zoom value that will fit the image in the image space. */ - zoomX = ((float)width) / ((float)imgwidth); - zoomY = ((float)height) / ((float)imgheight); - sseq->zoom = (zoomX < zoomY) ? zoomX : zoomY; - - sseq->zoom = 1.0f / power_of_2(1 / min_ff(zoomX, zoomY)); - } - else { - sseq->zoom = 1.0f; - } -#endif - - ED_area_tag_redraw(CTX_wm_area(C)); - return OPERATOR_FINISHED; -} - -void SEQUENCER_OT_view_all_preview(wmOperatorType *ot) -{ - /* Identifiers. */ - ot->name = "Frame All"; - ot->idname = "SEQUENCER_OT_view_all_preview"; - ot->description = "Zoom preview to fit in the area"; - - /* Api callbacks. */ - ot->exec = sequencer_view_all_preview_exec; - ot->poll = ED_operator_sequencer_active; - - /* Flags. */ - ot->flag = OPTYPE_REGISTER; -} - -/** \} */ - -/* -------------------------------------------------------------------- */ -/** \name Sequencer View Zoom Ratio Operator - * \{ */ - -static int sequencer_view_zoom_ratio_exec(bContext *C, wmOperator *op) -{ - RenderData *rd = &CTX_data_scene(C)->r; - View2D *v2d = UI_view2d_fromcontext(C); - - float ratio = RNA_float_get(op->ptr, "ratio"); - - float winx = (int)(rd->size * rd->xsch) / 100; - float winy = (int)(rd->size * rd->ysch) / 100; - - float facx = BLI_rcti_size_x(&v2d->mask) / winx; - float facy = BLI_rcti_size_y(&v2d->mask) / winy; - - BLI_rctf_resize(&v2d->cur, ceilf(winx * facx / ratio + 0.5f), ceilf(winy * facy / ratio + 0.5f)); - - ED_region_tag_redraw(CTX_wm_region(C)); - - return OPERATOR_FINISHED; -} - -void SEQUENCER_OT_view_zoom_ratio(wmOperatorType *ot) -{ - /* Identifiers. */ - ot->name = "Sequencer View Zoom Ratio"; - ot->idname = "SEQUENCER_OT_view_zoom_ratio"; - ot->description = "Change zoom ratio of sequencer preview"; - - /* Api callbacks. */ - ot->exec = sequencer_view_zoom_ratio_exec; - ot->poll = ED_operator_sequencer_active; - - /* Properties. */ - RNA_def_float(ot->srna, - "ratio", - 1.0f, - -FLT_MAX, - FLT_MAX, - "Ratio", - "Zoom ratio, 1.0 is 1:1, higher is zoomed in, lower is zoomed out", - -FLT_MAX, - FLT_MAX); -} - -/** \} */ - -/* -------------------------------------------------------------------- */ -/** \name View Toggle Operator - * \{ */ - -#if 0 -static const EnumPropertyItem view_type_items[] = { - {SEQ_VIEW_SEQUENCE, "SEQUENCER", ICON_SEQ_SEQUENCER, "Sequencer", ""}, - {SEQ_VIEW_PREVIEW, "PREVIEW", ICON_SEQ_PREVIEW, "Image Preview", ""}, - {SEQ_VIEW_SEQUENCE_PREVIEW, - "SEQUENCER_PREVIEW", - ICON_SEQ_SEQUENCER, - "Sequencer and Image Preview", - ""}, - {0, NULL, 0, NULL, NULL}, -}; -#endif - -static int sequencer_view_toggle_exec(bContext *C, wmOperator *UNUSED(op)) -{ - SpaceSeq *sseq = (SpaceSeq *)CTX_wm_space_data(C); - - sseq->view++; - if (sseq->view > SEQ_VIEW_SEQUENCE_PREVIEW) { - sseq->view = SEQ_VIEW_SEQUENCE; - } - - ED_area_tag_refresh(CTX_wm_area(C)); - - return OPERATOR_FINISHED; -} - -void SEQUENCER_OT_view_toggle(wmOperatorType *ot) -{ - /* Identifiers. */ - ot->name = "View Toggle"; - ot->idname = "SEQUENCER_OT_view_toggle"; - ot->description = "Toggle between sequencer views (sequence, preview, both)"; - - /* Api callbacks. */ - ot->exec = sequencer_view_toggle_exec; - ot->poll = ED_operator_sequencer_active; - - /* Flags. */ - ot->flag = OPTYPE_REGISTER; -} - -/** \} */ - -/* -------------------------------------------------------------------- */ -/** \name Frame Selected Operator - * \{ */ - -static int sequencer_view_selected_exec(bContext *C, wmOperator *op) -{ - Scene *scene = CTX_data_scene(C); - View2D *v2d = UI_view2d_fromcontext(C); - ARegion *region = CTX_wm_region(C); - Editing *ed = BKE_sequencer_editing_get(scene, false); - Sequence *last_seq = BKE_sequencer_active_get(scene); - Sequence *seq; - rctf cur_new = v2d->cur; - - int xmin = MAXFRAME * 2; - int xmax = -MAXFRAME * 2; - int ymin = MAXSEQ + 1; - int ymax = 0; - int orig_height; - int ymid; - int ymargin = 1; - int xmargin = FPS; - - if (ed == NULL) { - return OPERATOR_CANCELLED; - } - - for (seq = ed->seqbasep->first; seq; seq = seq->next) { - if ((seq->flag & SELECT) || (seq == last_seq)) { - xmin = min_ii(xmin, seq->startdisp); - xmax = max_ii(xmax, seq->enddisp); - - ymin = min_ii(ymin, seq->machine); - ymax = max_ii(ymax, seq->machine); - } - } - - if (ymax != 0) { - const int smooth_viewtx = WM_operator_smooth_viewtx_get(op); - - xmax += xmargin; - xmin -= xmargin; - ymax += ymargin; - ymin -= ymargin; - - orig_height = BLI_rctf_size_y(&cur_new); - - cur_new.xmin = xmin; - cur_new.xmax = xmax; - - cur_new.ymin = ymin; - cur_new.ymax = ymax; - - /* Only zoom out vertically. */ - if (orig_height > BLI_rctf_size_y(&cur_new)) { - ymid = BLI_rctf_cent_y(&cur_new); - - cur_new.ymin = ymid - (orig_height / 2); - cur_new.ymax = ymid + (orig_height / 2); - } - - UI_view2d_smooth_view(C, region, &cur_new, smooth_viewtx); - - return OPERATOR_FINISHED; - } - else { - return OPERATOR_CANCELLED; - } -} - -void SEQUENCER_OT_view_selected(wmOperatorType *ot) -{ - /* Identifiers. */ - ot->name = "Frame Selected"; - ot->idname = "SEQUENCER_OT_view_selected"; - ot->description = "Zoom the sequencer on the selected strips"; - - /* Api callbacks. */ - ot->exec = sequencer_view_selected_exec; - ot->poll = ED_operator_sequencer_active; - - /* Flags. */ - ot->flag = OPTYPE_REGISTER; -} - -/** \} */ - -/* -------------------------------------------------------------------- */ /** \name Jump to Strip Operator * \{ */ @@ -3857,67 +3542,6 @@ void SEQUENCER_OT_swap_data(wmOperatorType *ot) /** \} */ /* -------------------------------------------------------------------- */ -/** \name Border Offset View Operator - * \{ */ - -static int view_ghost_border_exec(bContext *C, wmOperator *op) -{ - Scene *scene = CTX_data_scene(C); - View2D *v2d = UI_view2d_fromcontext(C); - - rctf rect; - - /* Convert coordinates of rect to 'tot' rect coordinates. */ - WM_operator_properties_border_to_rctf(op, &rect); - UI_view2d_region_to_view_rctf(v2d, &rect, &rect); - - rect.xmin /= fabsf(BLI_rctf_size_x(&v2d->tot)); - rect.ymin /= fabsf(BLI_rctf_size_y(&v2d->tot)); - - rect.xmax /= fabsf(BLI_rctf_size_x(&v2d->tot)); - rect.ymax /= fabsf(BLI_rctf_size_y(&v2d->tot)); - - rect.xmin += 0.5f; - rect.xmax += 0.5f; - rect.ymin += 0.5f; - rect.ymax += 0.5f; - - CLAMP(rect.xmin, 0.0f, 1.0f); - CLAMP(rect.ymin, 0.0f, 1.0f); - CLAMP(rect.xmax, 0.0f, 1.0f); - CLAMP(rect.ymax, 0.0f, 1.0f); - - scene->ed->over_border = rect; - - WM_event_add_notifier(C, NC_SCENE | ND_SEQUENCER, scene); - - return OPERATOR_FINISHED; -} - -void SEQUENCER_OT_view_ghost_border(wmOperatorType *ot) -{ - /* Identifiers. */ - ot->name = "Border Offset View"; - ot->idname = "SEQUENCER_OT_view_ghost_border"; - ot->description = "Set the boundaries of the border used for offset-view"; - - /* Api callbacks. */ - ot->invoke = WM_gesture_box_invoke; - ot->exec = view_ghost_border_exec; - ot->modal = WM_gesture_box_modal; - ot->poll = sequencer_view_preview_poll; - ot->cancel = WM_gesture_box_cancel; - - /* Flags. */ - ot->flag = 0; - - /* Properties. */ - WM_operator_properties_gesture_box(ot); -} - -/** \} */ - -/* -------------------------------------------------------------------- */ /** \name Rebuild Proxy and Timecode Indices Operator * \{ */ diff --git a/source/blender/editors/space_sequencer/sequencer_intern.h b/source/blender/editors/space_sequencer/sequencer_intern.h index eec8d604b64..f5eb9e88bd5 100644 --- a/source/blender/editors/space_sequencer/sequencer_intern.h +++ b/source/blender/editors/space_sequencer/sequencer_intern.h @@ -131,13 +131,6 @@ void SEQUENCER_OT_swap(struct wmOperatorType *ot); void SEQUENCER_OT_swap_data(struct wmOperatorType *ot); void SEQUENCER_OT_rendersize(struct wmOperatorType *ot); -void SEQUENCER_OT_view_toggle(struct wmOperatorType *ot); -void SEQUENCER_OT_view_all(struct wmOperatorType *ot); -void SEQUENCER_OT_view_selected(struct wmOperatorType *ot); -void SEQUENCER_OT_view_frame(struct wmOperatorType *ot); -void SEQUENCER_OT_view_zoom_ratio(struct wmOperatorType *ot); -void SEQUENCER_OT_view_ghost_border(struct wmOperatorType *ot); - void SEQUENCER_OT_change_effect_input(struct wmOperatorType *ot); void SEQUENCER_OT_change_effect_type(struct wmOperatorType *ot); void SEQUENCER_OT_change_path(struct wmOperatorType *ot); @@ -152,9 +145,6 @@ void SEQUENCER_OT_export_subtitles(struct wmOperatorType *ot); void SEQUENCER_OT_set_range_to_strips(struct wmOperatorType *ot); -/* Preview specific operators. */ -void SEQUENCER_OT_view_all_preview(struct wmOperatorType *ot); - /* sequencer_select.c */ void SEQUENCER_OT_select_all(struct wmOperatorType *ot); void SEQUENCER_OT_select(struct wmOperatorType *ot); @@ -169,7 +159,7 @@ void SEQUENCER_OT_select_box(struct wmOperatorType *ot); void SEQUENCER_OT_select_inverse(struct wmOperatorType *ot); void SEQUENCER_OT_select_grouped(struct wmOperatorType *ot); -/* sequencer_select.c */ +/* sequencer_add.c */ void SEQUENCER_OT_scene_strip_add(struct wmOperatorType *ot); void SEQUENCER_OT_movie_strip_add(struct wmOperatorType *ot); void SEQUENCER_OT_movieclip_strip_add(struct wmOperatorType *ot); @@ -178,11 +168,6 @@ void SEQUENCER_OT_sound_strip_add(struct wmOperatorType *ot); void SEQUENCER_OT_image_strip_add(struct wmOperatorType *ot); void SEQUENCER_OT_effect_strip_add(struct wmOperatorType *ot); -enum { - SEQ_SPLIT_SOFT, - SEQ_SPLIT_HARD, -}; - /* sequencer_ops.c */ void sequencer_operatortypes(void); void sequencer_keymap(struct wmKeyConfig *keyconf); @@ -205,6 +190,13 @@ void SEQUENCER_OT_strip_modifier_copy(struct wmOperatorType *ot); /* sequencer_view.c */ void SEQUENCER_OT_sample(struct wmOperatorType *ot); +void SEQUENCER_OT_view_all(struct wmOperatorType *ot); +void SEQUENCER_OT_view_frame(struct wmOperatorType *ot); +void SEQUENCER_OT_view_all_preview(struct wmOperatorType *ot); +void SEQUENCER_OT_view_zoom_ratio(struct wmOperatorType *ot); +void SEQUENCER_OT_view_toggle(struct wmOperatorType *ot); +void SEQUENCER_OT_view_selected(struct wmOperatorType *ot); +void SEQUENCER_OT_view_ghost_border(struct wmOperatorType *ot); /* sequencer_preview.c */ void sequencer_preview_add_sound(const struct bContext *C, struct Sequence *seq); diff --git a/source/blender/editors/space_sequencer/sequencer_ops.c b/source/blender/editors/space_sequencer/sequencer_ops.c index 4fe1c953c74..617ec9aef7b 100644 --- a/source/blender/editors/space_sequencer/sequencer_ops.c +++ b/source/blender/editors/space_sequencer/sequencer_ops.c @@ -74,14 +74,6 @@ void sequencer_operatortypes(void) WM_operatortype_append(SEQUENCER_OT_copy); WM_operatortype_append(SEQUENCER_OT_paste); - WM_operatortype_append(SEQUENCER_OT_view_all); - WM_operatortype_append(SEQUENCER_OT_view_selected); - WM_operatortype_append(SEQUENCER_OT_view_frame); - WM_operatortype_append(SEQUENCER_OT_view_all_preview); - WM_operatortype_append(SEQUENCER_OT_view_toggle); - WM_operatortype_append(SEQUENCER_OT_view_zoom_ratio); - WM_operatortype_append(SEQUENCER_OT_view_ghost_border); - WM_operatortype_append(SEQUENCER_OT_rebuild_proxy); WM_operatortype_append(SEQUENCER_OT_enable_proxies); WM_operatortype_append(SEQUENCER_OT_change_effect_input); @@ -120,6 +112,13 @@ void sequencer_operatortypes(void) /* sequencer_view.h */ WM_operatortype_append(SEQUENCER_OT_sample); + WM_operatortype_append(SEQUENCER_OT_view_all); + WM_operatortype_append(SEQUENCER_OT_view_frame); + WM_operatortype_append(SEQUENCER_OT_view_all_preview); + WM_operatortype_append(SEQUENCER_OT_view_zoom_ratio); + WM_operatortype_append(SEQUENCER_OT_view_toggle); + WM_operatortype_append(SEQUENCER_OT_view_selected); + WM_operatortype_append(SEQUENCER_OT_view_ghost_border); } void sequencer_keymap(wmKeyConfig *keyconf) diff --git a/source/blender/editors/space_sequencer/sequencer_view.c b/source/blender/editors/space_sequencer/sequencer_view.c index d397c255b03..dcc18aad981 100644 --- a/source/blender/editors/space_sequencer/sequencer_view.c +++ b/source/blender/editors/space_sequencer/sequencer_view.c @@ -21,16 +21,36 @@ * \ingroup spseq */ -#include "ED_util_imbuf.h" +#include "BLI_blenlib.h" +#include "BLI_math.h" +#include "BLI_utildefines.h" -#include "RNA_define.h" +#include "DNA_scene_types.h" + +#include "BKE_context.h" +#include "BKE_sequencer.h" +#include "WM_api.h" #include "WM_types.h" +#include "RNA_define.h" + +#include "UI_view2d.h" + +#include "RNA_define.h" + +/* For menu, popup, icons, etc. */ +#include "ED_anim_api.h" +#include "ED_screen.h" +#include "ED_util_imbuf.h" + /* Own include. */ #include "sequencer_intern.h" -/******************** sample backdrop operator ********************/ +/* -------------------------------------------------------------------- */ +/** \name Sequencer Sample Backdrop Operator + * \{ */ + void SEQUENCER_OT_sample(wmOperatorType *ot) { /* Identifiers. */ @@ -53,3 +73,381 @@ void SEQUENCER_OT_sample(wmOperatorType *ot) RNA_def_property_subtype(prop, PROP_PIXEL); RNA_def_property_flag(prop, PROP_SKIP_SAVE | PROP_HIDDEN); } + +/** \} */ + +/* -------------------------------------------------------------------- */ +/** \name Sequencer Frame All Operator + * \{ */ + +static int sequencer_view_all_exec(bContext *C, wmOperator *op) +{ + ARegion *region = CTX_wm_region(C); + rctf box; + + const int smooth_viewtx = WM_operator_smooth_viewtx_get(op); + + boundbox_seq(CTX_data_scene(C), &box); + UI_view2d_smooth_view(C, region, &box, smooth_viewtx); + return OPERATOR_FINISHED; +} + +void SEQUENCER_OT_view_all(wmOperatorType *ot) +{ + /* Identifiers. */ + ot->name = "Frame All"; + ot->idname = "SEQUENCER_OT_view_all"; + ot->description = "View all the strips in the sequencer"; + + /* Api callbacks. */ + ot->exec = sequencer_view_all_exec; + ot->poll = ED_operator_sequencer_active; + + /* Flags. */ + ot->flag = OPTYPE_REGISTER; +} + +/** \} */ + +/* -------------------------------------------------------------------- */ +/** \name Go to Current Frame Operator + * \{ */ + +static int sequencer_view_frame_exec(bContext *C, wmOperator *op) +{ + const int smooth_viewtx = WM_operator_smooth_viewtx_get(op); + ANIM_center_frame(C, smooth_viewtx); + + return OPERATOR_FINISHED; +} + +void SEQUENCER_OT_view_frame(wmOperatorType *ot) +{ + /* Identifiers. */ + ot->name = "Go to Current Frame"; + ot->idname = "SEQUENCER_OT_view_frame"; + ot->description = "Move the view to the current frame"; + + /* Api callbacks. */ + ot->exec = sequencer_view_frame_exec; + ot->poll = ED_operator_sequencer_active; + + /* Flags. */ + ot->flag = 0; +} + +/** \} */ + +/* -------------------------------------------------------------------- */ +/** \name Preview Frame All Operator + * \{ */ + +static int sequencer_view_all_preview_exec(bContext *C, wmOperator *UNUSED(op)) +{ + bScreen *screen = CTX_wm_screen(C); + ScrArea *area = CTX_wm_area(C); +#if 0 + ARegion *region = CTX_wm_region(C); + SpaceSeq *sseq = area->spacedata.first; + Scene *scene = CTX_data_scene(C); +#endif + View2D *v2d = UI_view2d_fromcontext(C); + + v2d->cur = v2d->tot; + UI_view2d_curRect_validate(v2d); + UI_view2d_sync(screen, area, v2d, V2D_LOCK_COPY); + +#if 0 + /* Like zooming on an image view. */ + float zoomX, zoomY; + int width, height, imgwidth, imgheight; + + width = region->winx; + height = region->winy; + + seq_reset_imageofs(sseq); + + imgwidth = (scene->r.size * scene->r.xsch) / 100; + imgheight = (scene->r.size * scene->r.ysch) / 100; + + /* Apply aspect, doesn't need to be that accurate. */ + imgwidth = (int)(imgwidth * (scene->r.xasp / scene->r.yasp)); + + if (((imgwidth >= width) || (imgheight >= height)) && ((width > 0) && (height > 0))) { + /* Find the zoom value that will fit the image in the image space. */ + zoomX = ((float)width) / ((float)imgwidth); + zoomY = ((float)height) / ((float)imgheight); + sseq->zoom = (zoomX < zoomY) ? zoomX : zoomY; + + sseq->zoom = 1.0f / power_of_2(1 / min_ff(zoomX, zoomY)); + } + else { + sseq->zoom = 1.0f; + } +#endif + + ED_area_tag_redraw(CTX_wm_area(C)); + return OPERATOR_FINISHED; +} + +void SEQUENCER_OT_view_all_preview(wmOperatorType *ot) +{ + /* Identifiers. */ + ot->name = "Frame All"; + ot->idname = "SEQUENCER_OT_view_all_preview"; + ot->description = "Zoom preview to fit in the area"; + + /* Api callbacks. */ + ot->exec = sequencer_view_all_preview_exec; + ot->poll = ED_operator_sequencer_active; + + /* Flags. */ + ot->flag = OPTYPE_REGISTER; +} + +/** \} */ + +/* -------------------------------------------------------------------- */ +/** \name Sequencer View Zoom Ratio Operator + * \{ */ + +static int sequencer_view_zoom_ratio_exec(bContext *C, wmOperator *op) +{ + RenderData *rd = &CTX_data_scene(C)->r; + View2D *v2d = UI_view2d_fromcontext(C); + + float ratio = RNA_float_get(op->ptr, "ratio"); + + float winx = (int)(rd->size * rd->xsch) / 100; + float winy = (int)(rd->size * rd->ysch) / 100; + + float facx = BLI_rcti_size_x(&v2d->mask) / winx; + float facy = BLI_rcti_size_y(&v2d->mask) / winy; + + BLI_rctf_resize(&v2d->cur, ceilf(winx * facx / ratio + 0.5f), ceilf(winy * facy / ratio + 0.5f)); + + ED_region_tag_redraw(CTX_wm_region(C)); + + return OPERATOR_FINISHED; +} + +void SEQUENCER_OT_view_zoom_ratio(wmOperatorType *ot) +{ + /* Identifiers. */ + ot->name = "Sequencer View Zoom Ratio"; + ot->idname = "SEQUENCER_OT_view_zoom_ratio"; + ot->description = "Change zoom ratio of sequencer preview"; + + /* Api callbacks. */ + ot->exec = sequencer_view_zoom_ratio_exec; + ot->poll = ED_operator_sequencer_active; + + /* Properties. */ + RNA_def_float(ot->srna, + "ratio", + 1.0f, + -FLT_MAX, + FLT_MAX, + "Ratio", + "Zoom ratio, 1.0 is 1:1, higher is zoomed in, lower is zoomed out", + -FLT_MAX, + FLT_MAX); +} + +/** \} */ + +/* -------------------------------------------------------------------- */ +/** \name View Toggle Operator + * \{ */ + +#if 0 +static const EnumPropertyItem view_type_items[] = { + {SEQ_VIEW_SEQUENCE, "SEQUENCER", ICON_SEQ_SEQUENCER, "Sequencer", ""}, + {SEQ_VIEW_PREVIEW, "PREVIEW", ICON_SEQ_PREVIEW, "Image Preview", ""}, + {SEQ_VIEW_SEQUENCE_PREVIEW, + "SEQUENCER_PREVIEW", + ICON_SEQ_SEQUENCER, + "Sequencer and Image Preview", + ""}, + {0, NULL, 0, NULL, NULL}, +}; +#endif + +static int sequencer_view_toggle_exec(bContext *C, wmOperator *UNUSED(op)) +{ + SpaceSeq *sseq = (SpaceSeq *)CTX_wm_space_data(C); + + sseq->view++; + if (sseq->view > SEQ_VIEW_SEQUENCE_PREVIEW) { + sseq->view = SEQ_VIEW_SEQUENCE; + } + + ED_area_tag_refresh(CTX_wm_area(C)); + + return OPERATOR_FINISHED; +} + +void SEQUENCER_OT_view_toggle(wmOperatorType *ot) +{ + /* Identifiers. */ + ot->name = "View Toggle"; + ot->idname = "SEQUENCER_OT_view_toggle"; + ot->description = "Toggle between sequencer views (sequence, preview, both)"; + + /* Api callbacks. */ + ot->exec = sequencer_view_toggle_exec; + ot->poll = ED_operator_sequencer_active; + + /* Flags. */ + ot->flag = OPTYPE_REGISTER; +} + +/** \} */ + +/* -------------------------------------------------------------------- */ +/** \name Frame Selected Operator + * \{ */ + +static int sequencer_view_selected_exec(bContext *C, wmOperator *op) +{ + Scene *scene = CTX_data_scene(C); + View2D *v2d = UI_view2d_fromcontext(C); + ARegion *region = CTX_wm_region(C); + Editing *ed = BKE_sequencer_editing_get(scene, false); + Sequence *last_seq = BKE_sequencer_active_get(scene); + Sequence *seq; + rctf cur_new = v2d->cur; + + int xmin = MAXFRAME * 2; + int xmax = -MAXFRAME * 2; + int ymin = MAXSEQ + 1; + int ymax = 0; + int orig_height; + int ymid; + int ymargin = 1; + int xmargin = FPS; + + if (ed == NULL) { + return OPERATOR_CANCELLED; + } + + for (seq = ed->seqbasep->first; seq; seq = seq->next) { + if ((seq->flag & SELECT) || (seq == last_seq)) { + xmin = min_ii(xmin, seq->startdisp); + xmax = max_ii(xmax, seq->enddisp); + + ymin = min_ii(ymin, seq->machine); + ymax = max_ii(ymax, seq->machine); + } + } + + if (ymax != 0) { + const int smooth_viewtx = WM_operator_smooth_viewtx_get(op); + + xmax += xmargin; + xmin -= xmargin; + ymax += ymargin; + ymin -= ymargin; + + orig_height = BLI_rctf_size_y(&cur_new); + + cur_new.xmin = xmin; + cur_new.xmax = xmax; + + cur_new.ymin = ymin; + cur_new.ymax = ymax; + + /* Only zoom out vertically. */ + if (orig_height > BLI_rctf_size_y(&cur_new)) { + ymid = BLI_rctf_cent_y(&cur_new); + + cur_new.ymin = ymid - (orig_height / 2); + cur_new.ymax = ymid + (orig_height / 2); + } + + UI_view2d_smooth_view(C, region, &cur_new, smooth_viewtx); + + return OPERATOR_FINISHED; + } + else { + return OPERATOR_CANCELLED; + } +} + +void SEQUENCER_OT_view_selected(wmOperatorType *ot) +{ + /* Identifiers. */ + ot->name = "Frame Selected"; + ot->idname = "SEQUENCER_OT_view_selected"; + ot->description = "Zoom the sequencer on the selected strips"; + + /* Api callbacks. */ + ot->exec = sequencer_view_selected_exec; + ot->poll = ED_operator_sequencer_active; + + /* Flags. */ + ot->flag = OPTYPE_REGISTER; +} + +/** \} */ + +/* -------------------------------------------------------------------- */ +/** \name Border Offset View Operator + * \{ */ + +static int view_ghost_border_exec(bContext *C, wmOperator *op) +{ + Scene *scene = CTX_data_scene(C); + View2D *v2d = UI_view2d_fromcontext(C); + + rctf rect; + + /* Convert coordinates of rect to 'tot' rect coordinates. */ + WM_operator_properties_border_to_rctf(op, &rect); + UI_view2d_region_to_view_rctf(v2d, &rect, &rect); + + rect.xmin /= fabsf(BLI_rctf_size_x(&v2d->tot)); + rect.ymin /= fabsf(BLI_rctf_size_y(&v2d->tot)); + + rect.xmax /= fabsf(BLI_rctf_size_x(&v2d->tot)); + rect.ymax /= fabsf(BLI_rctf_size_y(&v2d->tot)); + + rect.xmin += 0.5f; + rect.xmax += 0.5f; + rect.ymin += 0.5f; + rect.ymax += 0.5f; + + CLAMP(rect.xmin, 0.0f, 1.0f); + CLAMP(rect.ymin, 0.0f, 1.0f); + CLAMP(rect.xmax, 0.0f, 1.0f); + CLAMP(rect.ymax, 0.0f, 1.0f); + + scene->ed->over_border = rect; + + WM_event_add_notifier(C, NC_SCENE | ND_SEQUENCER, scene); + + return OPERATOR_FINISHED; +} + +void SEQUENCER_OT_view_ghost_border(wmOperatorType *ot) +{ + /* Identifiers. */ + ot->name = "Border Offset View"; + ot->idname = "SEQUENCER_OT_view_ghost_border"; + ot->description = "Set the boundaries of the border used for offset-view"; + + /* Api callbacks. */ + ot->invoke = WM_gesture_box_invoke; + ot->exec = view_ghost_border_exec; + ot->modal = WM_gesture_box_modal; + ot->poll = sequencer_view_preview_poll; + ot->cancel = WM_gesture_box_cancel; + + /* Flags. */ + ot->flag = 0; + + /* Properties. */ + WM_operator_properties_gesture_box(ot); +} + +/** \} */ |