added autoscrolling to keyframe view seek
This commit is contained in:
@@ -145,6 +145,10 @@ void EffectControls::copy(bool del) {
|
||||
}
|
||||
}
|
||||
|
||||
void EffectControls::scroll_to_frame(long frame) {
|
||||
scroll_to_frame_internal(horizontalScrollBar, frame, zoom, keyframeView->width());
|
||||
}
|
||||
|
||||
void EffectControls::show_effect_menu(int type, int subtype) {
|
||||
effect_menu_type = type;
|
||||
effect_menu_subtype = subtype;
|
||||
|
||||
@@ -42,6 +42,7 @@ public:
|
||||
void delete_selected_keyframes();
|
||||
void copy(bool del);
|
||||
bool multiple;
|
||||
void scroll_to_frame(long frame);
|
||||
|
||||
QVector<int> selected_clips;
|
||||
|
||||
|
||||
+94
-81
@@ -11,6 +11,8 @@
|
||||
#include "grapheditor.h"
|
||||
#include "debug.h"
|
||||
|
||||
#include <QScrollBar>
|
||||
|
||||
Project* panel_project = 0;
|
||||
EffectControls* panel_effect_controls = 0;
|
||||
Viewer* panel_sequence_viewer = 0;
|
||||
@@ -27,43 +29,43 @@ void update_effect_controls() {
|
||||
int vclip = -1;
|
||||
int aclip = -1;
|
||||
QVector<int> selected_clips;
|
||||
int mode = TA_NO_TRANSITION;
|
||||
int mode = TA_NO_TRANSITION;
|
||||
if (sequence != NULL) {
|
||||
for (int i=0;i<sequence->clips.size();i++) {
|
||||
Clip* clip = sequence->clips.at(i);
|
||||
if (clip != NULL) {
|
||||
for (int j=0;j<sequence->selections.size();j++) {
|
||||
const Selection& s = sequence->selections.at(j);
|
||||
bool add = true;
|
||||
if (clip->timeline_in >= s.in && clip->timeline_out <= s.out && clip->track == s.track) {
|
||||
mode = TA_NO_TRANSITION;
|
||||
} else if (selection_contains_transition(s, clip, TA_OPENING_TRANSITION)) {
|
||||
mode = TA_OPENING_TRANSITION;
|
||||
} else if (selection_contains_transition(s, clip, TA_CLOSING_TRANSITION)) {
|
||||
mode = TA_CLOSING_TRANSITION;
|
||||
} else {
|
||||
add = false;
|
||||
}
|
||||
if (clip != NULL) {
|
||||
for (int j=0;j<sequence->selections.size();j++) {
|
||||
const Selection& s = sequence->selections.at(j);
|
||||
bool add = true;
|
||||
if (clip->timeline_in >= s.in && clip->timeline_out <= s.out && clip->track == s.track) {
|
||||
mode = TA_NO_TRANSITION;
|
||||
} else if (selection_contains_transition(s, clip, TA_OPENING_TRANSITION)) {
|
||||
mode = TA_OPENING_TRANSITION;
|
||||
} else if (selection_contains_transition(s, clip, TA_CLOSING_TRANSITION)) {
|
||||
mode = TA_CLOSING_TRANSITION;
|
||||
} else {
|
||||
add = false;
|
||||
}
|
||||
|
||||
if (add) {
|
||||
if (clip->track < 0 && vclip == -1) {
|
||||
vclip = i;
|
||||
} else if (clip->track >= 0 && aclip == -1) {
|
||||
aclip = i;
|
||||
} else {
|
||||
vclip = -2;
|
||||
aclip = -2;
|
||||
if (add) {
|
||||
if (clip->track < 0 && vclip == -1) {
|
||||
vclip = i;
|
||||
} else if (clip->track >= 0 && aclip == -1) {
|
||||
aclip = i;
|
||||
} else {
|
||||
vclip = -2;
|
||||
aclip = -2;
|
||||
multiple = true;
|
||||
multiple = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!multiple) {
|
||||
// check if aclip is linked to vclip
|
||||
// check if aclip is linked to vclip
|
||||
if (vclip >= 0) selected_clips.append(vclip);
|
||||
if (aclip >= 0) selected_clips.append(aclip);
|
||||
if (vclip >= 0 && aclip >= 0) {
|
||||
@@ -84,7 +86,7 @@ void update_effect_controls() {
|
||||
}
|
||||
}
|
||||
|
||||
bool same = (selected_clips.size() == panel_effect_controls->selected_clips.size());
|
||||
bool same = (selected_clips.size() == panel_effect_controls->selected_clips.size());
|
||||
if (same) {
|
||||
for (int i=0;i<selected_clips.size();i++) {
|
||||
if (selected_clips.at(i) != panel_effect_controls->selected_clips.at(i)) {
|
||||
@@ -101,9 +103,9 @@ void update_effect_controls() {
|
||||
}
|
||||
|
||||
void update_ui(bool modified) {
|
||||
if (modified) {
|
||||
update_effect_controls();
|
||||
}
|
||||
if (modified) {
|
||||
update_effect_controls();
|
||||
}
|
||||
panel_effect_controls->update_keyframes();
|
||||
panel_timeline->repaint_timeline();
|
||||
panel_sequence_viewer->update_viewer();
|
||||
@@ -111,61 +113,72 @@ void update_ui(bool modified) {
|
||||
}
|
||||
|
||||
QDockWidget *get_focused_panel() {
|
||||
QDockWidget* w = NULL;
|
||||
if (config.hover_focus) {
|
||||
if (panel_project->underMouse()) {
|
||||
w = panel_project;
|
||||
} else if (panel_effect_controls->underMouse()) {
|
||||
w = panel_effect_controls;
|
||||
} else if (panel_sequence_viewer->underMouse()) {
|
||||
w = panel_sequence_viewer;
|
||||
} else if (panel_footage_viewer->underMouse()) {
|
||||
w = panel_footage_viewer;
|
||||
} else if (panel_timeline->underMouse()) {
|
||||
w = panel_timeline;
|
||||
}
|
||||
}
|
||||
if (w == NULL) {
|
||||
if (panel_project->is_focused()) {
|
||||
w = panel_project;
|
||||
QDockWidget* w = NULL;
|
||||
if (config.hover_focus) {
|
||||
if (panel_project->underMouse()) {
|
||||
w = panel_project;
|
||||
} else if (panel_effect_controls->underMouse()) {
|
||||
w = panel_effect_controls;
|
||||
} else if (panel_sequence_viewer->underMouse()) {
|
||||
w = panel_sequence_viewer;
|
||||
} else if (panel_footage_viewer->underMouse()) {
|
||||
w = panel_footage_viewer;
|
||||
} else if (panel_timeline->underMouse()) {
|
||||
w = panel_timeline;
|
||||
}
|
||||
}
|
||||
if (w == NULL) {
|
||||
if (panel_project->is_focused()) {
|
||||
w = panel_project;
|
||||
} else if (panel_effect_controls->keyframe_focus() || panel_effect_controls->is_focused()) {
|
||||
w = panel_effect_controls;
|
||||
} else if (panel_sequence_viewer->is_focused()) {
|
||||
w = panel_sequence_viewer;
|
||||
} else if (panel_footage_viewer->is_focused()) {
|
||||
w = panel_footage_viewer;
|
||||
} else if (panel_timeline->focused()) {
|
||||
w = panel_timeline;
|
||||
}
|
||||
}
|
||||
return w;
|
||||
w = panel_effect_controls;
|
||||
} else if (panel_sequence_viewer->is_focused()) {
|
||||
w = panel_sequence_viewer;
|
||||
} else if (panel_footage_viewer->is_focused()) {
|
||||
w = panel_footage_viewer;
|
||||
} else if (panel_timeline->focused()) {
|
||||
w = panel_timeline;
|
||||
}
|
||||
}
|
||||
return w;
|
||||
}
|
||||
|
||||
void alloc_panels(QWidget* parent) {
|
||||
// TODO maybe replace these with non-pointers later on?
|
||||
panel_sequence_viewer = new Viewer(parent);
|
||||
panel_sequence_viewer->setObjectName("seq_viewer");
|
||||
panel_footage_viewer = new Viewer(parent);
|
||||
panel_footage_viewer->setObjectName("footage_viewer");
|
||||
panel_project = new Project(parent);
|
||||
panel_project->setObjectName("proj_root");
|
||||
panel_effect_controls = new EffectControls(parent);
|
||||
panel_effect_controls->setObjectName("fx_controls");
|
||||
panel_timeline = new Timeline(parent);
|
||||
panel_timeline->setObjectName("timeline");
|
||||
panel_graph_editor = new GraphEditor(parent);
|
||||
panel_graph_editor->setObjectName("graph_editor");
|
||||
// TODO maybe replace these with non-pointers later on?
|
||||
panel_sequence_viewer = new Viewer(parent);
|
||||
panel_sequence_viewer->setObjectName("seq_viewer");
|
||||
panel_footage_viewer = new Viewer(parent);
|
||||
panel_footage_viewer->setObjectName("footage_viewer");
|
||||
panel_project = new Project(parent);
|
||||
panel_project->setObjectName("proj_root");
|
||||
panel_effect_controls = new EffectControls(parent);
|
||||
panel_effect_controls->setObjectName("fx_controls");
|
||||
panel_timeline = new Timeline(parent);
|
||||
panel_timeline->setObjectName("timeline");
|
||||
panel_graph_editor = new GraphEditor(parent);
|
||||
panel_graph_editor->setObjectName("graph_editor");
|
||||
}
|
||||
|
||||
void free_panels() {
|
||||
delete panel_sequence_viewer;
|
||||
panel_sequence_viewer = NULL;
|
||||
delete panel_footage_viewer;
|
||||
panel_footage_viewer = NULL;
|
||||
delete panel_project;
|
||||
panel_project = NULL;
|
||||
delete panel_effect_controls;
|
||||
panel_effect_controls = NULL;
|
||||
delete panel_timeline;
|
||||
panel_timeline = NULL;
|
||||
delete panel_sequence_viewer;
|
||||
panel_sequence_viewer = NULL;
|
||||
delete panel_footage_viewer;
|
||||
panel_footage_viewer = NULL;
|
||||
delete panel_project;
|
||||
panel_project = NULL;
|
||||
delete panel_effect_controls;
|
||||
panel_effect_controls = NULL;
|
||||
delete panel_timeline;
|
||||
panel_timeline = NULL;
|
||||
}
|
||||
|
||||
void scroll_to_frame_internal(QScrollBar* bar, long frame, double zoom, int area_width) {
|
||||
int screen_point = getScreenPointFromFrame(zoom, frame) - bar->value();
|
||||
int min_x = area_width*0.1;
|
||||
int max_x = area_width-min_x;
|
||||
if (screen_point < min_x) {
|
||||
bar->setValue(getScreenPointFromFrame(zoom, frame) - min_x);
|
||||
} else if (screen_point > max_x) {
|
||||
bar->setValue(getScreenPointFromFrame(zoom, frame) - max_x);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,6 +9,7 @@ class GraphEditor;
|
||||
|
||||
class QWidget;
|
||||
class QDockWidget;
|
||||
class QScrollBar;
|
||||
|
||||
extern Project* panel_project;
|
||||
extern EffectControls* panel_effect_controls;
|
||||
@@ -21,5 +22,6 @@ void update_ui(bool modified);
|
||||
QDockWidget* get_focused_panel();
|
||||
void alloc_panels(QWidget *parent);
|
||||
void free_panels();
|
||||
void scroll_to_frame_internal(QScrollBar* bar, long frame, double zoom, int area_width);
|
||||
|
||||
#endif // PANELS_H
|
||||
|
||||
+1
-10
@@ -476,16 +476,7 @@ void Timeline::select_all() {
|
||||
}
|
||||
|
||||
void Timeline::scroll_to_frame(long frame) {
|
||||
if (sequence != NULL) {
|
||||
int screen_point = getTimelineScreenPointFromFrame(frame);
|
||||
int min_x = timeline_area->width()*0.1;
|
||||
int max_x = timeline_area->width()*0.9;
|
||||
if (screen_point < min_x) {
|
||||
horizontalScrollBar->setValue(getScreenPointFromFrame(zoom, frame) - min_x);
|
||||
} else if (screen_point > max_x) {
|
||||
horizontalScrollBar->setValue(getScreenPointFromFrame(zoom, frame) - max_x);
|
||||
}
|
||||
}
|
||||
scroll_to_frame_internal(horizontalScrollBar, frame, zoom, timeline_area->width());
|
||||
}
|
||||
|
||||
void Timeline::resizeEvent(QResizeEvent *event) {
|
||||
|
||||
+5
-1
@@ -3,6 +3,7 @@
|
||||
#include "playback/audio.h"
|
||||
#include "timeline.h"
|
||||
#include "panels/project.h"
|
||||
#include "panels/effectcontrols.h"
|
||||
#include "project/sequence.h"
|
||||
#include "project/clip.h"
|
||||
#include "panels/panels.h"
|
||||
@@ -237,7 +238,10 @@ bool frame_rate_is_droppable(float rate) {
|
||||
void Viewer::seek(long p) {
|
||||
pause();
|
||||
seq->playhead = p;
|
||||
if (main_sequence) panel_timeline->scroll_to_frame(p);
|
||||
if (main_sequence) {
|
||||
panel_timeline->scroll_to_frame(p);
|
||||
panel_effect_controls->scroll_to_frame(p);
|
||||
}
|
||||
update_parents();
|
||||
reset_all_audio();
|
||||
audio_scrub = true;
|
||||
|
||||
Reference in New Issue
Block a user