Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Sharybin <sergey@blender.org>2020-08-12 12:05:40 +0300
committerSergey Sharybin <sergey@blender.org>2020-08-13 16:24:21 +0300
commit6fe609d4c3d0e2f820af577dc9a2affc4cf4ef0a (patch)
tree83d71714de8490e2402680c93b939974593a0699 /source/blender/editors/space_sequencer
parent0df28e8c2044ece017c0a283625aba058c7ff5be (diff)
Sequencer: Implement zoom-to-fit view mode
In this mode the preview image is always using the most of the preview area space: it is scaled to fit, preserving aspect ratio. This makes it possible to always have maximum of the preview region even after resize of other areas. This mode is enabled by default, is available in the View -> Zoom to Fit menu. It is enabled when View All (Home key) is used, and is disabled when manual navigation ([panning, zooming) is performed. There is no versioning code, which means existing files will open as-is, but new projects will have this option enabled. Ref T78987 Maniphest Tasks: T78987 Differential Revision: https://developer.blender.org/D8549
Diffstat (limited to 'source/blender/editors/space_sequencer')
-rw-r--r--source/blender/editors/space_sequencer/sequencer_view.c6
-rw-r--r--source/blender/editors/space_sequencer/space_sequencer.c21
2 files changed, 25 insertions, 2 deletions
diff --git a/source/blender/editors/space_sequencer/sequencer_view.c b/source/blender/editors/space_sequencer/sequencer_view.c
index 2b9370970de..491c475b596 100644
--- a/source/blender/editors/space_sequencer/sequencer_view.c
+++ b/source/blender/editors/space_sequencer/sequencer_view.c
@@ -144,11 +144,11 @@ void SEQUENCER_OT_view_frame(wmOperatorType *ot)
static int sequencer_view_all_preview_exec(bContext *C, wmOperator *UNUSED(op))
{
+ SpaceSeq *sseq = CTX_wm_space_seq(C);
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);
@@ -186,6 +186,8 @@ static int sequencer_view_all_preview_exec(bContext *C, wmOperator *UNUSED(op))
}
#endif
+ sseq->flag |= SEQ_ZOOM_TO_FIT;
+
ED_area_tag_redraw(CTX_wm_area(C));
return OPERATOR_FINISHED;
}
@@ -228,6 +230,8 @@ static int sequencer_view_zoom_ratio_exec(bContext *C, wmOperator *op)
ED_region_tag_redraw(CTX_wm_region(C));
+ UI_view2d_curRect_changed(C, v2d);
+
return OPERATOR_FINISHED;
}
diff --git a/source/blender/editors/space_sequencer/space_sequencer.c b/source/blender/editors/space_sequencer/space_sequencer.c
index b8bb3e4d43b..4a6bd0de60c 100644
--- a/source/blender/editors/space_sequencer/space_sequencer.c
+++ b/source/blender/editors/space_sequencer/space_sequencer.c
@@ -96,7 +96,8 @@ static SpaceLink *sequencer_create(const ScrArea *UNUSED(area), const Scene *sce
sseq->chanshown = 0;
sseq->view = SEQ_VIEW_SEQUENCE;
sseq->mainb = SEQ_DRAW_IMG_IMBUF;
- sseq->flag = SEQ_SHOW_GPENCIL | SEQ_USE_ALPHA | SEQ_SHOW_MARKERS | SEQ_SHOW_FCURVES;
+ sseq->flag = SEQ_SHOW_GPENCIL | SEQ_USE_ALPHA | SEQ_SHOW_MARKERS | SEQ_SHOW_FCURVES |
+ SEQ_ZOOM_TO_FIT;
/* Tool header. */
region = MEM_callocN(sizeof(ARegion), "tool header for sequencer");
@@ -679,6 +680,22 @@ static void sequencer_preview_region_init(wmWindowManager *wm, ARegion *region)
WM_event_add_keymap_handler_v2d_mask(&region->handlers, keymap);
}
+static void sequencer_preview_region_layout(const bContext *C, ARegion *region)
+{
+ SpaceSeq *sseq = CTX_wm_space_seq(C);
+
+ if (sseq->flag & SEQ_ZOOM_TO_FIT) {
+ View2D *v2d = &region->v2d;
+ v2d->cur = v2d->tot;
+ }
+}
+
+static void sequencer_preview_region_view2d_changed(const bContext *C, ARegion *UNUSED(region))
+{
+ SpaceSeq *sseq = CTX_wm_space_seq(C);
+ sseq->flag &= ~SEQ_ZOOM_TO_FIT;
+}
+
static void sequencer_preview_region_draw(const bContext *C, ARegion *region)
{
ScrArea *area = CTX_wm_area(C);
@@ -881,6 +898,8 @@ void ED_spacetype_sequencer(void)
art = MEM_callocN(sizeof(ARegionType), "spacetype sequencer region");
art->regionid = RGN_TYPE_PREVIEW;
art->init = sequencer_preview_region_init;
+ art->layout = sequencer_preview_region_layout;
+ art->on_view2d_changed = sequencer_preview_region_view2d_changed;
art->draw = sequencer_preview_region_draw;
art->listener = sequencer_preview_region_listener;
art->keymapflag = ED_KEYMAP_TOOL | ED_KEYMAP_GIZMO | ED_KEYMAP_VIEW2D | ED_KEYMAP_FRAMES |