Cleanup: move sequencer view operators into sequencer_view.c
This commit is contained in:
parent
cc064acf0f
commit
e916817520
|
@ -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", ""},
|
||||
|
@ -3091,321 +3091,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
|
||||
* \{ */
|
||||
|
@ -3856,67 +3541,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
|
||||
* \{ */
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -21,16 +21,36 @@
|
|||
* \ingroup spseq
|
||||
*/
|
||||
|
||||
#include "ED_util_imbuf.h"
|
||||
#include "BLI_blenlib.h"
|
||||
#include "BLI_math.h"
|
||||
#include "BLI_utildefines.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 "WM_types.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);
|
||||
}
|
||||
|
||||
/** \} */
|
||||
|
|
Loading…
Reference in New Issue