various improvements

This commit is contained in:
itsmattkc
2018-10-11 23:32:28 +11:00
parent 59589002c5
commit caee50a943
15 changed files with 151 additions and 191 deletions
+4 -4
View File
@@ -318,8 +318,8 @@ void ExportDialog::render_thread_finished() {
QMessageBox::critical(this, "Export Failed", "Export failed - " + export_error, QMessageBox::Ok);
}
prep_ui_for_render(false);
panel_viewer->viewer_widget->makeCurrent();
panel_viewer->viewer_widget->initializeGL();
panel_sequence_viewer->viewer_widget->makeCurrent();
panel_sequence_viewer->viewer_widget->initializeGL();
}
void ExportDialog::prep_ui_for_render(bool rendering) {
@@ -471,8 +471,8 @@ void ExportDialog::on_pushButton_clicked() {
closeActiveClips(sequence, true);
panel_viewer->viewer_widget->context()->doneCurrent();
panel_viewer->viewer_widget->context()->moveToThread(et);
panel_sequence_viewer->viewer_widget->context()->doneCurrent();
panel_sequence_viewer->viewer_widget->context()->moveToThread(et);
prep_ui_for_render(true);
+14
View File
@@ -296,6 +296,8 @@ void SpeedDialog::frame_rate_update() {
}
void set_speed(ComboAction* ca, Clip* c, double speed, bool ripple, long& ep, long& lr) {
panel_timeline->deselect_area(c->timeline_in, c->timeline_out, c->track);
long proposed_out = c->timeline_out;
double multiplier = (c->speed / speed);
proposed_out = c->timeline_in + (c->getLength() * multiplier);
@@ -327,11 +329,20 @@ void set_speed(ComboAction* ca, Clip* c, double speed, bool ripple, long& ep, lo
}
}
}
Selection sel;
sel.in = c->timeline_in;
sel.out = proposed_out;
sel.track = c->track;
sequence->selections.append(sel);
}
void SpeedDialog::accept() {
ComboAction* ca = new ComboAction();
SetSelectionsCommand* sel_command = new SetSelectionsCommand(sequence);
sel_command->old_data = sequence->selections;
long earliest_point = LONG_MAX;
long longest_ripple = LONG_MIN;
@@ -403,6 +414,9 @@ void SpeedDialog::accept() {
ca->append(new RippleCommand(clips.at(0)->sequence, earliest_point, longest_ripple));
}
sel_command->new_data = sequence->selections;
ca->append(sel_command);
undo_stack.push(ca);
panel_timeline->repaint_timeline(true);
+2 -2
View File
@@ -161,7 +161,7 @@ int Effect::row_count() {
void Effect::refresh() {}
void Effect::field_changed() {
panel_viewer->viewer_widget->update();
panel_sequence_viewer->viewer_widget->update();
}
bool Effect::is_enabled() {
@@ -556,7 +556,7 @@ void EffectRow::toggle_key() {
delete_keyframe(kd, index);
undo_stack.push(kd);
panel_effect_controls->update_keyframes();
panel_viewer->viewer_widget->update();
panel_sequence_viewer->viewer_widget->update();
}
}
+8 -8
View File
@@ -309,7 +309,7 @@ bool ExportThread::setupContainer() {
void ExportThread::run() {
panel_timeline->pause();
if (!panel_viewer->viewer_widget->context()->makeCurrent(&surface)) {
if (!panel_sequence_viewer->viewer_widget->context()->makeCurrent(&surface)) {
qDebug() << "[ERROR] Make current failed";
ed->export_error = "could not make OpenGL context current";
return;
@@ -341,13 +341,13 @@ void ExportThread::run() {
QOpenGLFramebufferObject fbo(sequence->width, sequence->height, QOpenGLFramebufferObject::CombinedDepthStencil, GL_TEXTURE_RECTANGLE);
fbo.bind();
panel_viewer->viewer_widget->rendering = true;
panel_viewer->viewer_widget->default_fbo = &fbo;
panel_sequence_viewer->viewer_widget->rendering = true;
panel_sequence_viewer->viewer_widget->default_fbo = &fbo;
long file_audio_samples = 0;
while (sequence->playhead < end_frame && continueEncode) {
panel_viewer->viewer_widget->paintGL();
panel_sequence_viewer->viewer_widget->paintGL();
double timecode_secs = (double) (sequence->playhead-start_frame) / sequence->frame_rate;
if (video_enabled) {
@@ -392,8 +392,8 @@ void ExportThread::run() {
sequence->playhead++;
}
panel_viewer->viewer_widget->default_fbo = NULL;
panel_viewer->viewer_widget->rendering = false;
panel_sequence_viewer->viewer_widget->default_fbo = NULL;
panel_sequence_viewer->viewer_widget->rendering = false;
fbo.release();
@@ -456,6 +456,6 @@ void ExportThread::run() {
delete [] c_filename;
panel_viewer->viewer_widget->context()->doneCurrent();
panel_viewer->viewer_widget->context()->moveToThread(qApp->thread());
panel_sequence_viewer->viewer_widget->context()->doneCurrent();
panel_sequence_viewer->viewer_widget->context()->moveToThread(qApp->thread());
}
+24 -24
View File
@@ -51,12 +51,12 @@ bool demoNoticeShown = false;
void MainWindow::setup_layout() {
panel_project->show();
panel_effect_controls->show();
panel_viewer->show();
panel_sequence_viewer->show();
panel_timeline->show();
addDockWidget(Qt::TopDockWidgetArea, panel_project);
addDockWidget(Qt::TopDockWidgetArea, panel_effect_controls);
addDockWidget(Qt::TopDockWidgetArea, panel_viewer);
addDockWidget(Qt::TopDockWidgetArea, panel_sequence_viewer);
addDockWidget(Qt::BottomDockWidgetArea, panel_timeline);
resizeDocks({panel_project}, {40}, Qt::Horizontal);
@@ -102,7 +102,7 @@ MainWindow::MainWindow(QWidget *parent) :
// TODO maybe replace these with non-pointers later on?
panel_project = new Project(this);
panel_effect_controls = new EffectControls(this);
panel_viewer = new Viewer(this);
panel_sequence_viewer = new Viewer(this);
panel_timeline = new Timeline(this);
setup_layout();
@@ -174,7 +174,7 @@ MainWindow::~MainWindow() {
delete panel_project;
delete panel_effect_controls;
delete panel_viewer;
delete panel_sequence_viewer;
delete panel_timeline;
}
@@ -263,7 +263,7 @@ void MainWindow::on_actionEffect_Controls_toggled(bool arg1)
void MainWindow::on_actionViewer_toggled(bool arg1)
{
panel_viewer->setVisible(arg1);
panel_sequence_viewer->setVisible(arg1);
}
void MainWindow::on_actionTimeline_toggled(bool arg1)
@@ -451,35 +451,35 @@ void MainWindow::on_actionReset_to_default_layout_triggered()
void MainWindow::on_actionGo_to_start_triggered()
{
if (sequence != NULL && (panel_timeline->focused() || panel_viewer->hasFocus() || panel_effect_controls->keyframe_focus())) {
if (sequence != NULL && (panel_timeline->focused() || panel_sequence_viewer->hasFocus() || panel_effect_controls->keyframe_focus())) {
panel_timeline->go_to_start();
}
}
void MainWindow::on_actionPrevious_Frame_triggered()
{
if (sequence != NULL && (panel_timeline->focused() || panel_viewer->hasFocus() || panel_effect_controls->keyframe_focus())) {
if (sequence != NULL && (panel_timeline->focused() || panel_sequence_viewer->hasFocus() || panel_effect_controls->keyframe_focus())) {
panel_timeline->previous_frame();
}
}
void MainWindow::on_actionNext_Frame_triggered()
{
if (sequence != NULL && (panel_timeline->focused() || panel_viewer->hasFocus() || panel_effect_controls->keyframe_focus())) {
if (sequence != NULL && (panel_timeline->focused() || panel_sequence_viewer->hasFocus() || panel_effect_controls->keyframe_focus())) {
panel_timeline->next_frame();
}
}
void MainWindow::on_actionGo_to_End_triggered()
{
if (sequence != NULL && (panel_timeline->focused() || panel_viewer->hasFocus() || panel_effect_controls->keyframe_focus())) {
if (sequence != NULL && (panel_timeline->focused() || panel_sequence_viewer->hasFocus() || panel_effect_controls->keyframe_focus())) {
panel_timeline->go_to_end();
}
}
void MainWindow::on_actionPlay_Pause_triggered()
{
if (sequence != NULL && (panel_timeline->focused() || panel_viewer->hasFocus() || panel_effect_controls->keyframe_focus())) {
if (sequence != NULL && (panel_timeline->focused() || panel_sequence_viewer->hasFocus() || panel_effect_controls->keyframe_focus())) {
panel_timeline->toggle_play();
}
}
@@ -521,14 +521,14 @@ void MainWindow::on_actionSlip_Tool_triggered()
void MainWindow::on_actionGo_to_Previous_Cut_triggered()
{
if (sequence != NULL && (panel_timeline->focused() || panel_viewer->hasFocus())) {
if (sequence != NULL && (panel_timeline->focused() || panel_sequence_viewer->hasFocus())) {
panel_timeline->previous_cut();
}
}
void MainWindow::on_actionGo_to_Next_Cut_triggered()
{
if (sequence != NULL && (panel_timeline->focused() || panel_viewer->hasFocus())) {
if (sequence != NULL && (panel_timeline->focused() || panel_sequence_viewer->hasFocus())) {
panel_timeline->next_cut();
}
}
@@ -554,7 +554,7 @@ void MainWindow::windowMenu_About_To_Be_Shown() {
ui->actionProject_2->setChecked(panel_project->isVisible());
ui->actionEffect_Controls->setChecked(panel_effect_controls->isVisible());
ui->actionTimeline->setChecked(panel_timeline->isVisible());
ui->actionViewer->setChecked(panel_viewer->isVisible());
ui->actionViewer->setChecked(panel_sequence_viewer->isVisible());
}
void MainWindow::viewMenu_About_To_Be_Shown() {
@@ -574,8 +574,8 @@ void MainWindow::on_actionFrames_triggered()
{
config.timecode_view = TIMECODE_FRAMES;
if (sequence != NULL) {
panel_viewer->update_playhead_timecode(sequence->playhead);
panel_viewer->update_end_timecode();
panel_sequence_viewer->update_playhead_timecode(sequence->playhead);
panel_sequence_viewer->update_end_timecode();
}
}
@@ -583,8 +583,8 @@ void MainWindow::on_actionDrop_Frame_triggered()
{
config.timecode_view = TIMECODE_DROP;
if (sequence != NULL) {
panel_viewer->update_playhead_timecode(sequence->playhead);
panel_viewer->update_end_timecode();
panel_sequence_viewer->update_playhead_timecode(sequence->playhead);
panel_sequence_viewer->update_end_timecode();
}
}
@@ -592,8 +592,8 @@ void MainWindow::on_actionNon_Drop_Frame_triggered()
{
config.timecode_view = TIMECODE_NONDROP;
if (sequence != NULL) {
panel_viewer->update_playhead_timecode(sequence->playhead);
panel_viewer->update_end_timecode();
panel_sequence_viewer->update_playhead_timecode(sequence->playhead);
panel_sequence_viewer->update_end_timecode();
}
}
@@ -742,26 +742,26 @@ void MainWindow::on_actionRectified_Waveforms_triggered()
void MainWindow::on_actionDefault_triggered() {
config.show_title_safe_area = true;
config.use_custom_title_safe_ratio = false;
panel_viewer->viewer_widget->update();
panel_sequence_viewer->viewer_widget->update();
}
void MainWindow::on_actionOff_triggered() {
config.show_title_safe_area = false;
panel_viewer->viewer_widget->update();
panel_sequence_viewer->viewer_widget->update();
}
void MainWindow::on_action4_3_triggered() {
config.show_title_safe_area = true;
config.use_custom_title_safe_ratio = true;
config.custom_title_safe_ratio = 4.0/3.0;
panel_viewer->viewer_widget->update();
panel_sequence_viewer->viewer_widget->update();
}
void MainWindow::on_action16_9_triggered() {
config.show_title_safe_area = true;
config.use_custom_title_safe_ratio = true;
config.custom_title_safe_ratio = 16.0/9.0;
panel_viewer->viewer_widget->update();
panel_sequence_viewer->viewer_widget->update();
}
void MainWindow::on_actionCustom_triggered() {
@@ -784,7 +784,7 @@ void MainWindow::on_actionCustom_triggered() {
config.show_title_safe_area = true;
config.use_custom_title_safe_ratio = true;
config.custom_title_safe_ratio = inputList.at(0).toDouble()/inputList.at(1).toDouble();
panel_viewer->viewer_widget->update();
panel_sequence_viewer->viewer_widget->update();
}
}
+2 -2
View File
@@ -89,7 +89,7 @@ void EffectControls::menu_select(QAction* q) {
panel_timeline->repaint_timeline(true);
} else {
reload_clips();
panel_viewer->viewer_widget->update();
panel_sequence_viewer->viewer_widget->update();
}
}
@@ -229,7 +229,7 @@ void EffectControls::delete_effects() {
}
if (command->clips.size() > 0) {
undo_stack.push(command);
panel_viewer->viewer_widget->update();
panel_sequence_viewer->viewer_widget->update();
} else {
delete command;
}
+1 -1
View File
@@ -2,5 +2,5 @@
Project* panel_project = 0;
EffectControls* panel_effect_controls = 0;
Viewer* panel_viewer = 0;
Viewer* panel_sequence_viewer = 0;
Timeline* panel_timeline = 0;
+1 -1
View File
@@ -8,7 +8,7 @@ class Timeline;
extern Project* panel_project;
extern EffectControls* panel_effect_controls;
extern Viewer* panel_viewer;
extern Viewer* panel_sequence_viewer;
extern Timeline* panel_timeline;
#endif // PANELS_H
+5 -5
View File
@@ -193,13 +193,13 @@ void Timeline::play() {
start_msecs = QDateTime::currentMSecsSinceEpoch();
playback_updater.start();
playing = true;
panel_viewer->set_playpause_icon(false);
panel_sequence_viewer->set_playpause_icon(false);
audio_thread->notifyReceiver();
}
void Timeline::pause() {
playing = false;
panel_viewer->set_playpause_icon(true);
panel_sequence_viewer->set_playpause_icon(true);
playback_updater.stop();
}
@@ -296,7 +296,7 @@ void Timeline::repaint_timeline(bool changed) {
if (changed) {
reset_all_audio();
update_effect_controls();
if (!playing) panel_viewer->viewer_widget->update();
if (!playing) panel_sequence_viewer->viewer_widget->update();
} else if (playing) {
sequence->playhead = round(playhead_start + ((QDateTime::currentMSecsSinceEpoch()-start_msecs) * 0.001 * sequence->frame_rate));
}
@@ -310,7 +310,7 @@ void Timeline::repaint_timeline(bool changed) {
panel_timeline->ui->horizontalScrollBar->setMaximum(qMax(0, getScreenPointFromFrame(panel_timeline->zoom, sequence->getEndFrame()) + 100 - ui->editAreas->width()));
if (last_frame != sequence->playhead) {
panel_viewer->viewer_widget->update();
panel_sequence_viewer->viewer_widget->update();
ui->audio_monitor->update();
last_frame = sequence->playhead;
}
@@ -323,7 +323,7 @@ void Timeline::repaint_timeline(bool changed) {
ui->horizontalScrollBar->setValue(target_scroll);
}
panel_viewer->update_playhead_timecode(sequence->playhead);
panel_sequence_viewer->update_playhead_timecode(sequence->playhead);
}
}
+35 -26
View File
@@ -6,6 +6,7 @@
#include "project/sequence.h"
#include "panels/panels.h"
#include "io/config.h"
#include "io/media.h"
#define FRAMES_IN_ONE_MINUTE 1798 // 1800 - 2
#define FRAMES_IN_TEN_MINUTES 17978 // (FRAMES_IN_ONE_MINUTE * 10) - 2
@@ -23,7 +24,7 @@ Viewer::Viewer(QWidget *parent) :
ui->setupUi(this);
ui->glViewerPane->child = ui->openGLWidget;
viewer_widget = ui->openGLWidget;
update_sequence();
update_media(MEDIA_TYPE_SEQUENCE, NULL);
ui->currentTimecode->set_default_value(qSNaN());
ui->currentTimecode->set_value(0, false);
@@ -117,39 +118,47 @@ void Viewer::update_end_timecode() {
}
}
/*void Viewer::update_media(int type) {
void Viewer::update_media(int type, void* media) {
switch (type) {
case MEDIA_TYPE_FOOTAGE:
{
}
break;
case MEDIA_TYPE_SEQUENCE:
{
Sequence* s = static_cast<Sequence*>(media);
}*/
bool null_sequence = (s == NULL);
void Viewer::update_sequence() {
bool null_sequence = (sequence == NULL);
ui->openGLWidget->setEnabled(!null_sequence);
ui->openGLWidget->setVisible(!null_sequence);
ui->pushButton->setEnabled(!null_sequence);
ui->pushButton_2->setEnabled(!null_sequence);
ui->pushButton_3->setEnabled(!null_sequence);
ui->pushButton_4->setEnabled(!null_sequence);
ui->pushButton_5->setEnabled(!null_sequence);
ui->openGLWidget->setEnabled(!null_sequence);
ui->openGLWidget->setVisible(!null_sequence);
ui->pushButton->setEnabled(!null_sequence);
ui->pushButton_2->setEnabled(!null_sequence);
ui->pushButton_3->setEnabled(!null_sequence);
ui->pushButton_4->setEnabled(!null_sequence);
ui->pushButton_5->setEnabled(!null_sequence);
init_audio();
init_audio();
if (!null_sequence) {
config.timecode_view = (frame_rate_is_droppable(s->frame_rate)) ? TIMECODE_DROP : TIMECODE_NONDROP;
if (!null_sequence) {
config.timecode_view = (frame_rate_is_droppable(sequence->frame_rate)) ? TIMECODE_DROP : TIMECODE_NONDROP;
update_playhead_timecode(s->playhead);
update_end_timecode();
update_playhead_timecode(sequence->playhead);
update_end_timecode();
ui->glViewerPane->aspect_ratio = (float) s->width / (float) s->height;
ui->glViewerPane->adjust();
} else {
update_playhead_timecode(0);
update_end_timecode();
}
ui->glViewerPane->aspect_ratio = (float) sequence->width / (float) sequence->height;
ui->glViewerPane->adjust();
} else {
update_playhead_timecode(0);
update_end_timecode();
}
viewer_widget->update();
viewer_widget->update();
update();
update();
}
break;
}
}
void Viewer::on_pushButton_clicked()
+1 -1
View File
@@ -21,7 +21,7 @@ class Viewer : public QDockWidget
public:
explicit Viewer(QWidget *parent = 0);
~Viewer();
void update_sequence();
void update_media(int type, void* media);
void compose();
void set_playpause_icon(bool play);
void update_playhead_timecode(long p);
+1 -1
View File
@@ -302,7 +302,7 @@ void set_sequence(Sequence* s) {
closeActiveClips(sequence, true);
sequence = s;
panel_timeline->update_sequence();
panel_viewer->update_sequence();
panel_sequence_viewer->update_media(MEDIA_TYPE_SEQUENCE, sequence);
panel_timeline->setFocus();
}
+26 -14
View File
@@ -11,6 +11,7 @@
#include "panels/project.h"
#include "panels/effectcontrols.h"
#include "panels/viewer.h"
#include "panels/timeline.h"
#include "playback/playback.h"
#include "ui/sourcetable.h"
#include "effects/effect.h"
@@ -426,28 +427,39 @@ AddClipCommand::~AddClipCommand() {
for (int i=0;i<clips.size();i++) {
delete clips.at(i);
}
for (int i=0;i<undone_clips.size();i++) {
delete undone_clips.at(i);
}
}
void AddClipCommand::undo() {
for (int i=0;i<clips.size();i++) {
delete seq->clips.last();
Clip* c = seq->clips.last();
panel_timeline->deselect_area(c->timeline_in, c->timeline_out, c->track);
undone_clips.prepend(c);
seq->clips.removeLast();
}
mainWindow->setWindowModified(old_project_changed);
}
void AddClipCommand::redo() {
// TODO does this actually need to copy?
int linkOffset = seq->clips.size();
for (int i=0;i<clips.size();i++) {
Clip* original = clips.at(i);
Clip* copy = original->copy(seq);
copy->linked.resize(original->linked.size());
for (int j=0;j<original->linked.size();j++) {
copy->linked[j] = original->linked.at(j) + linkOffset;
}
seq->clips.append(copy);
}
if (undone_clips.size() > 0) {
for (int i=0;i<undone_clips.size();i++) {
seq->clips.append(undone_clips.at(i));
}
undone_clips.clear();
} else {
int linkOffset = seq->clips.size();
for (int i=0;i<clips.size();i++) {
Clip* original = clips.at(i);
Clip* copy = original->copy(seq);
copy->linked.resize(original->linked.size());
for (int j=0;j<original->linked.size();j++) {
copy->linked[j] = original->linked.at(j) + linkOffset;
}
seq->clips.append(copy);
}
}
mainWindow->setWindowModified(true);
}
@@ -1370,14 +1382,14 @@ void SetAutoscaleAction::undo() {
for (int i=0;i<clips.size();i++) {
clips.at(i)->autoscale = !clips.at(i)->autoscale;
}
panel_viewer->viewer_widget->update();
panel_sequence_viewer->viewer_widget->update();
}
void SetAutoscaleAction::redo() {
for (int i=0;i<clips.size();i++) {
clips.at(i)->autoscale = !clips.at(i)->autoscale;
}
panel_viewer->viewer_widget->update();
panel_sequence_viewer->viewer_widget->update();
}
AddMarkerAction::AddMarkerAction(Sequence* s, long t, QString n) :
+1 -84
View File
@@ -218,93 +218,10 @@ public:
private:
Sequence* seq;
QVector<Clip*> clips;
QVector<Clip*> undone_clips;
bool old_project_changed;
};
/*class TimelineAction : public QUndoCommand {
public:
TimelineAction();
~TimelineAction();
void change_sequence(Sequence* s);
void new_sequence(QTreeWidgetItem* s, QTreeWidgetItem* parent);
void add_clips(Sequence* s, QVector<Clip*>& add);
void set_timeline_in(Sequence* s, int clip, long value);
void increase_timeline_in(Sequence* s, int clip, long value);
void set_timeline_out(Sequence* s, int clip, long value);
void increase_timeline_out(Sequence* s, int clip, long value);
void set_clip_in(Sequence* s, int clip, long value);
void increase_clip_in(Sequence* s, int clip, long value);
void set_track(Sequence* s, int clip, int value);
void increase_track(Sequence* s, int clip, int value);
void delete_clip(Sequence* s, int clip);
void add_media(QTreeWidgetItem* item, QTreeWidgetItem* parent);
void delete_media(QTreeWidgetItem* item);
void ripple(Sequence* s, long point, long length);
void ripple(Sequence* s, long point, long length, QVector<int> &ignore);
void set_in_out(Sequence* s, bool enabled, long in, long out);
void add_effect(Sequence* s, int clip, int effect);
void add_transition(Sequence* s, int clip, int transition, int type);
void modify_transition(Sequence* s, int clip, int type, long length);
void delete_transition(Sequence* s, int clip, int type);
void undo();
void redo();
private:
bool done;
bool change_seq;
Sequence* old_seq;
Sequence* new_seq;
QVector<QTreeWidgetItem*> new_sequence_items;
QVector<QTreeWidgetItem*> new_sequence_parents;
QVector<Sequence*> sequences;
QVector<int> actions;
QVector<int> clips;
QVector<int> transition_types;
QVector<long> old_values;
QVector<long> new_values;
QVector<Clip*> deleted_clips;
QVector<int> deleted_clips_indices;
QVector<Sequence*> deleted_clip_sequences;
QVector<Sequence*> sequence_to_add_clips_to;
QVector<Clip*> clips_to_add;
QVector<int> added_indexes;
QVector<Sequence*> removed_link_from_sequence;
QVector<int> removed_link_from;
QVector<int> removed_link_to;
QVector<QTreeWidgetItem*> deleted_media;
QVector<QTreeWidgetItem*> deleted_media_parents;
QVector<QTreeWidgetItem*> media_to_add;
QVector<QTreeWidgetItem*> media_to_add_parents;
Sequence* ripple_sequence;
bool ripple_enabled;
long ripple_point;
long ripple_length;
QVector<int> rippled_clips;
QVector<int> ripple_ignores;
bool change_in_out;
Sequence* change_in_out_sequence;
bool old_in_out_enabled;
bool new_in_out_enabled;
long old_sequence_in;
long new_sequence_in;
long old_sequence_out;
long new_sequence_out;
void new_action(Sequence* s, int action, int clip, int transition_type, long old_val, long new_val);
void offset_links(QVector<Clip*>& clips, int offset);
bool old_project_changed;
};*/
class LinkCommand : public QUndoCommand {
public:
LinkCommand();
+26 -18
View File
@@ -85,7 +85,11 @@ void KeyframeView::paintEvent(QPaintEvent*) {
header->set_visible_in(effects_in);
int playhead_x = getScreenPointFromFrame(panel_effect_controls->zoom, sequence->playhead-visible_in) - x_scroll;
p.setPen(Qt::red);
if (dragging && panel_timeline->snapped) {
p.setPen(Qt::white);
} else {
p.setPen(Qt::red);
}
p.drawLine(playhead_x, 0, playhead_x, height());
}
@@ -120,7 +124,7 @@ void KeyframeView::delete_selected_keyframes() {
selected_keyframes.clear();
selected_rows.clear();
update();
panel_viewer->viewer_widget->update();
panel_sequence_viewer->viewer_widget->update();
} else {
delete kd;
}
@@ -194,26 +198,26 @@ void KeyframeView::mousePressEvent(QMouseEvent *event) {
}
void KeyframeView::mouseMoveEvent(QMouseEvent* event) {
/*unsetCursor();
bool new_mo = false;
for (int i=0;i<rowY.size();i++) {
if (event->y() > rowY.at(i)-KEYFRAME_SIZE-KEYFRAME_SIZE && event->y() < rowY.at(i)+KEYFRAME_SIZE+KEYFRAME_SIZE) {
setCursor(Qt::CrossCursor);
mouseover_frame = getFrameFromScreenPoint(panel_effect_controls->zoom, event->x()) + visible_in;
mouseover_row = i;
new_mo = true;
break;
}
}
if (new_mo || (new_mo != mouseover)) {
update();
}
mouseover = new_mo;*/
if (mousedown) {
if (keys_selected) {
// move keyframes
frame_diff = getFrameFromScreenPoint(panel_effect_controls->zoom, event->x()) - drag_frame_start;
// validate frame_diff
// snapping to playhead
if (panel_timeline->snapping) {
for (int i=0;i<selected_keyframes.size();i++) {
EffectRow* row = selected_rows.at(i);
Clip* c = row->parent_effect->parent_clip;
long key_time = row->keyframe_times.at(selected_keyframes.at(i)) + frame_diff - c->clip_in + c->timeline_in;
long key_eval = key_time;
if (panel_timeline->snap_to_timeline(&key_eval, true, true, true)) {
frame_diff += (key_eval - key_time);
break;
}
}
}
// validate frame_diff (make sure no keyframes overlap each other)
for (int i=0;i<selected_keyframes.size();i++) {
EffectRow* row = selected_rows.at(i);
long eval_key = row->keyframe_times.at(selected_keyframes.at(i));
@@ -221,8 +225,10 @@ void KeyframeView::mouseMoveEvent(QMouseEvent* event) {
while (!keyframeIsSelected(row, j) && row->keyframe_times.at(j) == eval_key + frame_diff) {
if (last_frame_diff > frame_diff) {
frame_diff++;
panel_timeline->snapped = false;
} else {
frame_diff--;
panel_timeline->snapped = false;
}
}
}
@@ -232,6 +238,7 @@ void KeyframeView::mouseMoveEvent(QMouseEvent* event) {
dragging = true;
} else {
// do a rect select
rect_select_w = event->x() - rect_select_x;
rect_select_h = event->y() - rect_select_y;
@@ -274,5 +281,6 @@ void KeyframeView::mouseReleaseEvent(QMouseEvent*) {
select_rect = false;
dragging = false;
mousedown = false;
panel_timeline->snapped = false;
update();
}