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); QMessageBox::critical(this, "Export Failed", "Export failed - " + export_error, QMessageBox::Ok);
} }
prep_ui_for_render(false); prep_ui_for_render(false);
panel_viewer->viewer_widget->makeCurrent(); panel_sequence_viewer->viewer_widget->makeCurrent();
panel_viewer->viewer_widget->initializeGL(); panel_sequence_viewer->viewer_widget->initializeGL();
} }
void ExportDialog::prep_ui_for_render(bool rendering) { void ExportDialog::prep_ui_for_render(bool rendering) {
@@ -471,8 +471,8 @@ void ExportDialog::on_pushButton_clicked() {
closeActiveClips(sequence, true); closeActiveClips(sequence, true);
panel_viewer->viewer_widget->context()->doneCurrent(); panel_sequence_viewer->viewer_widget->context()->doneCurrent();
panel_viewer->viewer_widget->context()->moveToThread(et); panel_sequence_viewer->viewer_widget->context()->moveToThread(et);
prep_ui_for_render(true); 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) { 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; long proposed_out = c->timeline_out;
double multiplier = (c->speed / speed); double multiplier = (c->speed / speed);
proposed_out = c->timeline_in + (c->getLength() * multiplier); 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() { void SpeedDialog::accept() {
ComboAction* ca = new ComboAction(); ComboAction* ca = new ComboAction();
SetSelectionsCommand* sel_command = new SetSelectionsCommand(sequence);
sel_command->old_data = sequence->selections;
long earliest_point = LONG_MAX; long earliest_point = LONG_MAX;
long longest_ripple = LONG_MIN; long longest_ripple = LONG_MIN;
@@ -403,6 +414,9 @@ void SpeedDialog::accept() {
ca->append(new RippleCommand(clips.at(0)->sequence, earliest_point, longest_ripple)); 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); undo_stack.push(ca);
panel_timeline->repaint_timeline(true); panel_timeline->repaint_timeline(true);
+2 -2
View File
@@ -161,7 +161,7 @@ int Effect::row_count() {
void Effect::refresh() {} void Effect::refresh() {}
void Effect::field_changed() { void Effect::field_changed() {
panel_viewer->viewer_widget->update(); panel_sequence_viewer->viewer_widget->update();
} }
bool Effect::is_enabled() { bool Effect::is_enabled() {
@@ -556,7 +556,7 @@ void EffectRow::toggle_key() {
delete_keyframe(kd, index); delete_keyframe(kd, index);
undo_stack.push(kd); undo_stack.push(kd);
panel_effect_controls->update_keyframes(); 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() { void ExportThread::run() {
panel_timeline->pause(); 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"; qDebug() << "[ERROR] Make current failed";
ed->export_error = "could not make OpenGL context current"; ed->export_error = "could not make OpenGL context current";
return; return;
@@ -341,13 +341,13 @@ void ExportThread::run() {
QOpenGLFramebufferObject fbo(sequence->width, sequence->height, QOpenGLFramebufferObject::CombinedDepthStencil, GL_TEXTURE_RECTANGLE); QOpenGLFramebufferObject fbo(sequence->width, sequence->height, QOpenGLFramebufferObject::CombinedDepthStencil, GL_TEXTURE_RECTANGLE);
fbo.bind(); fbo.bind();
panel_viewer->viewer_widget->rendering = true; panel_sequence_viewer->viewer_widget->rendering = true;
panel_viewer->viewer_widget->default_fbo = &fbo; panel_sequence_viewer->viewer_widget->default_fbo = &fbo;
long file_audio_samples = 0; long file_audio_samples = 0;
while (sequence->playhead < end_frame && continueEncode) { 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; double timecode_secs = (double) (sequence->playhead-start_frame) / sequence->frame_rate;
if (video_enabled) { if (video_enabled) {
@@ -392,8 +392,8 @@ void ExportThread::run() {
sequence->playhead++; sequence->playhead++;
} }
panel_viewer->viewer_widget->default_fbo = NULL; panel_sequence_viewer->viewer_widget->default_fbo = NULL;
panel_viewer->viewer_widget->rendering = false; panel_sequence_viewer->viewer_widget->rendering = false;
fbo.release(); fbo.release();
@@ -456,6 +456,6 @@ void ExportThread::run() {
delete [] c_filename; delete [] c_filename;
panel_viewer->viewer_widget->context()->doneCurrent(); panel_sequence_viewer->viewer_widget->context()->doneCurrent();
panel_viewer->viewer_widget->context()->moveToThread(qApp->thread()); panel_sequence_viewer->viewer_widget->context()->moveToThread(qApp->thread());
} }
+24 -24
View File
@@ -51,12 +51,12 @@ bool demoNoticeShown = false;
void MainWindow::setup_layout() { void MainWindow::setup_layout() {
panel_project->show(); panel_project->show();
panel_effect_controls->show(); panel_effect_controls->show();
panel_viewer->show(); panel_sequence_viewer->show();
panel_timeline->show(); panel_timeline->show();
addDockWidget(Qt::TopDockWidgetArea, panel_project); addDockWidget(Qt::TopDockWidgetArea, panel_project);
addDockWidget(Qt::TopDockWidgetArea, panel_effect_controls); addDockWidget(Qt::TopDockWidgetArea, panel_effect_controls);
addDockWidget(Qt::TopDockWidgetArea, panel_viewer); addDockWidget(Qt::TopDockWidgetArea, panel_sequence_viewer);
addDockWidget(Qt::BottomDockWidgetArea, panel_timeline); addDockWidget(Qt::BottomDockWidgetArea, panel_timeline);
resizeDocks({panel_project}, {40}, Qt::Horizontal); resizeDocks({panel_project}, {40}, Qt::Horizontal);
@@ -102,7 +102,7 @@ MainWindow::MainWindow(QWidget *parent) :
// TODO maybe replace these with non-pointers later on? // TODO maybe replace these with non-pointers later on?
panel_project = new Project(this); panel_project = new Project(this);
panel_effect_controls = new EffectControls(this); panel_effect_controls = new EffectControls(this);
panel_viewer = new Viewer(this); panel_sequence_viewer = new Viewer(this);
panel_timeline = new Timeline(this); panel_timeline = new Timeline(this);
setup_layout(); setup_layout();
@@ -174,7 +174,7 @@ MainWindow::~MainWindow() {
delete panel_project; delete panel_project;
delete panel_effect_controls; delete panel_effect_controls;
delete panel_viewer; delete panel_sequence_viewer;
delete panel_timeline; delete panel_timeline;
} }
@@ -263,7 +263,7 @@ void MainWindow::on_actionEffect_Controls_toggled(bool arg1)
void MainWindow::on_actionViewer_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) 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() 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(); panel_timeline->go_to_start();
} }
} }
void MainWindow::on_actionPrevious_Frame_triggered() 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(); panel_timeline->previous_frame();
} }
} }
void MainWindow::on_actionNext_Frame_triggered() 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(); panel_timeline->next_frame();
} }
} }
void MainWindow::on_actionGo_to_End_triggered() 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(); panel_timeline->go_to_end();
} }
} }
void MainWindow::on_actionPlay_Pause_triggered() 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(); panel_timeline->toggle_play();
} }
} }
@@ -521,14 +521,14 @@ void MainWindow::on_actionSlip_Tool_triggered()
void MainWindow::on_actionGo_to_Previous_Cut_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(); panel_timeline->previous_cut();
} }
} }
void MainWindow::on_actionGo_to_Next_Cut_triggered() 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(); panel_timeline->next_cut();
} }
} }
@@ -554,7 +554,7 @@ void MainWindow::windowMenu_About_To_Be_Shown() {
ui->actionProject_2->setChecked(panel_project->isVisible()); ui->actionProject_2->setChecked(panel_project->isVisible());
ui->actionEffect_Controls->setChecked(panel_effect_controls->isVisible()); ui->actionEffect_Controls->setChecked(panel_effect_controls->isVisible());
ui->actionTimeline->setChecked(panel_timeline->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() { void MainWindow::viewMenu_About_To_Be_Shown() {
@@ -574,8 +574,8 @@ void MainWindow::on_actionFrames_triggered()
{ {
config.timecode_view = TIMECODE_FRAMES; config.timecode_view = TIMECODE_FRAMES;
if (sequence != NULL) { if (sequence != NULL) {
panel_viewer->update_playhead_timecode(sequence->playhead); panel_sequence_viewer->update_playhead_timecode(sequence->playhead);
panel_viewer->update_end_timecode(); panel_sequence_viewer->update_end_timecode();
} }
} }
@@ -583,8 +583,8 @@ void MainWindow::on_actionDrop_Frame_triggered()
{ {
config.timecode_view = TIMECODE_DROP; config.timecode_view = TIMECODE_DROP;
if (sequence != NULL) { if (sequence != NULL) {
panel_viewer->update_playhead_timecode(sequence->playhead); panel_sequence_viewer->update_playhead_timecode(sequence->playhead);
panel_viewer->update_end_timecode(); panel_sequence_viewer->update_end_timecode();
} }
} }
@@ -592,8 +592,8 @@ void MainWindow::on_actionNon_Drop_Frame_triggered()
{ {
config.timecode_view = TIMECODE_NONDROP; config.timecode_view = TIMECODE_NONDROP;
if (sequence != NULL) { if (sequence != NULL) {
panel_viewer->update_playhead_timecode(sequence->playhead); panel_sequence_viewer->update_playhead_timecode(sequence->playhead);
panel_viewer->update_end_timecode(); panel_sequence_viewer->update_end_timecode();
} }
} }
@@ -742,26 +742,26 @@ void MainWindow::on_actionRectified_Waveforms_triggered()
void MainWindow::on_actionDefault_triggered() { void MainWindow::on_actionDefault_triggered() {
config.show_title_safe_area = true; config.show_title_safe_area = true;
config.use_custom_title_safe_ratio = false; config.use_custom_title_safe_ratio = false;
panel_viewer->viewer_widget->update(); panel_sequence_viewer->viewer_widget->update();
} }
void MainWindow::on_actionOff_triggered() { void MainWindow::on_actionOff_triggered() {
config.show_title_safe_area = false; config.show_title_safe_area = false;
panel_viewer->viewer_widget->update(); panel_sequence_viewer->viewer_widget->update();
} }
void MainWindow::on_action4_3_triggered() { void MainWindow::on_action4_3_triggered() {
config.show_title_safe_area = true; config.show_title_safe_area = true;
config.use_custom_title_safe_ratio = true; config.use_custom_title_safe_ratio = true;
config.custom_title_safe_ratio = 4.0/3.0; 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() { void MainWindow::on_action16_9_triggered() {
config.show_title_safe_area = true; config.show_title_safe_area = true;
config.use_custom_title_safe_ratio = true; config.use_custom_title_safe_ratio = true;
config.custom_title_safe_ratio = 16.0/9.0; 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() { void MainWindow::on_actionCustom_triggered() {
@@ -784,7 +784,7 @@ void MainWindow::on_actionCustom_triggered() {
config.show_title_safe_area = true; config.show_title_safe_area = true;
config.use_custom_title_safe_ratio = true; config.use_custom_title_safe_ratio = true;
config.custom_title_safe_ratio = inputList.at(0).toDouble()/inputList.at(1).toDouble(); 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); panel_timeline->repaint_timeline(true);
} else { } else {
reload_clips(); 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) { if (command->clips.size() > 0) {
undo_stack.push(command); undo_stack.push(command);
panel_viewer->viewer_widget->update(); panel_sequence_viewer->viewer_widget->update();
} else { } else {
delete command; delete command;
} }
+1 -1
View File
@@ -2,5 +2,5 @@
Project* panel_project = 0; Project* panel_project = 0;
EffectControls* panel_effect_controls = 0; EffectControls* panel_effect_controls = 0;
Viewer* panel_viewer = 0; Viewer* panel_sequence_viewer = 0;
Timeline* panel_timeline = 0; Timeline* panel_timeline = 0;
+1 -1
View File
@@ -8,7 +8,7 @@ class Timeline;
extern Project* panel_project; extern Project* panel_project;
extern EffectControls* panel_effect_controls; extern EffectControls* panel_effect_controls;
extern Viewer* panel_viewer; extern Viewer* panel_sequence_viewer;
extern Timeline* panel_timeline; extern Timeline* panel_timeline;
#endif // PANELS_H #endif // PANELS_H
+5 -5
View File
@@ -193,13 +193,13 @@ void Timeline::play() {
start_msecs = QDateTime::currentMSecsSinceEpoch(); start_msecs = QDateTime::currentMSecsSinceEpoch();
playback_updater.start(); playback_updater.start();
playing = true; playing = true;
panel_viewer->set_playpause_icon(false); panel_sequence_viewer->set_playpause_icon(false);
audio_thread->notifyReceiver(); audio_thread->notifyReceiver();
} }
void Timeline::pause() { void Timeline::pause() {
playing = false; playing = false;
panel_viewer->set_playpause_icon(true); panel_sequence_viewer->set_playpause_icon(true);
playback_updater.stop(); playback_updater.stop();
} }
@@ -296,7 +296,7 @@ void Timeline::repaint_timeline(bool changed) {
if (changed) { if (changed) {
reset_all_audio(); reset_all_audio();
update_effect_controls(); update_effect_controls();
if (!playing) panel_viewer->viewer_widget->update(); if (!playing) panel_sequence_viewer->viewer_widget->update();
} else if (playing) { } else if (playing) {
sequence->playhead = round(playhead_start + ((QDateTime::currentMSecsSinceEpoch()-start_msecs) * 0.001 * sequence->frame_rate)); 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())); panel_timeline->ui->horizontalScrollBar->setMaximum(qMax(0, getScreenPointFromFrame(panel_timeline->zoom, sequence->getEndFrame()) + 100 - ui->editAreas->width()));
if (last_frame != sequence->playhead) { if (last_frame != sequence->playhead) {
panel_viewer->viewer_widget->update(); panel_sequence_viewer->viewer_widget->update();
ui->audio_monitor->update(); ui->audio_monitor->update();
last_frame = sequence->playhead; last_frame = sequence->playhead;
} }
@@ -323,7 +323,7 @@ void Timeline::repaint_timeline(bool changed) {
ui->horizontalScrollBar->setValue(target_scroll); 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 "project/sequence.h"
#include "panels/panels.h" #include "panels/panels.h"
#include "io/config.h" #include "io/config.h"
#include "io/media.h"
#define FRAMES_IN_ONE_MINUTE 1798 // 1800 - 2 #define FRAMES_IN_ONE_MINUTE 1798 // 1800 - 2
#define FRAMES_IN_TEN_MINUTES 17978 // (FRAMES_IN_ONE_MINUTE * 10) - 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->setupUi(this);
ui->glViewerPane->child = ui->openGLWidget; ui->glViewerPane->child = ui->openGLWidget;
viewer_widget = ui->openGLWidget; viewer_widget = ui->openGLWidget;
update_sequence(); update_media(MEDIA_TYPE_SEQUENCE, NULL);
ui->currentTimecode->set_default_value(qSNaN()); ui->currentTimecode->set_default_value(qSNaN());
ui->currentTimecode->set_value(0, false); 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() { ui->openGLWidget->setEnabled(!null_sequence);
bool null_sequence = (sequence == NULL); 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); init_audio();
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(); if (!null_sequence) {
config.timecode_view = (frame_rate_is_droppable(s->frame_rate)) ? TIMECODE_DROP : TIMECODE_NONDROP;
if (!null_sequence) { update_playhead_timecode(s->playhead);
config.timecode_view = (frame_rate_is_droppable(sequence->frame_rate)) ? TIMECODE_DROP : TIMECODE_NONDROP; update_end_timecode();
update_playhead_timecode(sequence->playhead); ui->glViewerPane->aspect_ratio = (float) s->width / (float) s->height;
update_end_timecode(); ui->glViewerPane->adjust();
} else {
update_playhead_timecode(0);
update_end_timecode();
}
ui->glViewerPane->aspect_ratio = (float) sequence->width / (float) sequence->height; viewer_widget->update();
ui->glViewerPane->adjust();
} else {
update_playhead_timecode(0);
update_end_timecode();
}
viewer_widget->update(); update();
}
update(); break;
}
} }
void Viewer::on_pushButton_clicked() void Viewer::on_pushButton_clicked()
+1 -1
View File
@@ -21,7 +21,7 @@ class Viewer : public QDockWidget
public: public:
explicit Viewer(QWidget *parent = 0); explicit Viewer(QWidget *parent = 0);
~Viewer(); ~Viewer();
void update_sequence(); void update_media(int type, void* media);
void compose(); void compose();
void set_playpause_icon(bool play); void set_playpause_icon(bool play);
void update_playhead_timecode(long p); void update_playhead_timecode(long p);
+1 -1
View File
@@ -302,7 +302,7 @@ void set_sequence(Sequence* s) {
closeActiveClips(sequence, true); closeActiveClips(sequence, true);
sequence = s; sequence = s;
panel_timeline->update_sequence(); panel_timeline->update_sequence();
panel_viewer->update_sequence(); panel_sequence_viewer->update_media(MEDIA_TYPE_SEQUENCE, sequence);
panel_timeline->setFocus(); panel_timeline->setFocus();
} }
+26 -14
View File
@@ -11,6 +11,7 @@
#include "panels/project.h" #include "panels/project.h"
#include "panels/effectcontrols.h" #include "panels/effectcontrols.h"
#include "panels/viewer.h" #include "panels/viewer.h"
#include "panels/timeline.h"
#include "playback/playback.h" #include "playback/playback.h"
#include "ui/sourcetable.h" #include "ui/sourcetable.h"
#include "effects/effect.h" #include "effects/effect.h"
@@ -426,28 +427,39 @@ AddClipCommand::~AddClipCommand() {
for (int i=0;i<clips.size();i++) { for (int i=0;i<clips.size();i++) {
delete clips.at(i); delete clips.at(i);
} }
for (int i=0;i<undone_clips.size();i++) {
delete undone_clips.at(i);
}
} }
void AddClipCommand::undo() { void AddClipCommand::undo() {
for (int i=0;i<clips.size();i++) { 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(); seq->clips.removeLast();
} }
mainWindow->setWindowModified(old_project_changed); mainWindow->setWindowModified(old_project_changed);
} }
void AddClipCommand::redo() { void AddClipCommand::redo() {
// TODO does this actually need to copy? if (undone_clips.size() > 0) {
int linkOffset = seq->clips.size(); for (int i=0;i<undone_clips.size();i++) {
for (int i=0;i<clips.size();i++) { seq->clips.append(undone_clips.at(i));
Clip* original = clips.at(i); }
Clip* copy = original->copy(seq); undone_clips.clear();
copy->linked.resize(original->linked.size()); } else {
for (int j=0;j<original->linked.size();j++) { int linkOffset = seq->clips.size();
copy->linked[j] = original->linked.at(j) + linkOffset; for (int i=0;i<clips.size();i++) {
} Clip* original = clips.at(i);
seq->clips.append(copy); 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); mainWindow->setWindowModified(true);
} }
@@ -1370,14 +1382,14 @@ void SetAutoscaleAction::undo() {
for (int i=0;i<clips.size();i++) { for (int i=0;i<clips.size();i++) {
clips.at(i)->autoscale = !clips.at(i)->autoscale; clips.at(i)->autoscale = !clips.at(i)->autoscale;
} }
panel_viewer->viewer_widget->update(); panel_sequence_viewer->viewer_widget->update();
} }
void SetAutoscaleAction::redo() { void SetAutoscaleAction::redo() {
for (int i=0;i<clips.size();i++) { for (int i=0;i<clips.size();i++) {
clips.at(i)->autoscale = !clips.at(i)->autoscale; 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) : AddMarkerAction::AddMarkerAction(Sequence* s, long t, QString n) :
+1 -84
View File
@@ -218,93 +218,10 @@ public:
private: private:
Sequence* seq; Sequence* seq;
QVector<Clip*> clips; QVector<Clip*> clips;
QVector<Clip*> undone_clips;
bool old_project_changed; 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 { class LinkCommand : public QUndoCommand {
public: public:
LinkCommand(); LinkCommand();
+26 -18
View File
@@ -85,7 +85,11 @@ void KeyframeView::paintEvent(QPaintEvent*) {
header->set_visible_in(effects_in); header->set_visible_in(effects_in);
int playhead_x = getScreenPointFromFrame(panel_effect_controls->zoom, sequence->playhead-visible_in) - x_scroll; 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()); p.drawLine(playhead_x, 0, playhead_x, height());
} }
@@ -120,7 +124,7 @@ void KeyframeView::delete_selected_keyframes() {
selected_keyframes.clear(); selected_keyframes.clear();
selected_rows.clear(); selected_rows.clear();
update(); update();
panel_viewer->viewer_widget->update(); panel_sequence_viewer->viewer_widget->update();
} else { } else {
delete kd; delete kd;
} }
@@ -194,26 +198,26 @@ void KeyframeView::mousePressEvent(QMouseEvent *event) {
} }
void KeyframeView::mouseMoveEvent(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 (mousedown) {
if (keys_selected) { if (keys_selected) {
// move keyframes
frame_diff = getFrameFromScreenPoint(panel_effect_controls->zoom, event->x()) - drag_frame_start; 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++) { for (int i=0;i<selected_keyframes.size();i++) {
EffectRow* row = selected_rows.at(i); EffectRow* row = selected_rows.at(i);
long eval_key = row->keyframe_times.at(selected_keyframes.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) { while (!keyframeIsSelected(row, j) && row->keyframe_times.at(j) == eval_key + frame_diff) {
if (last_frame_diff > frame_diff) { if (last_frame_diff > frame_diff) {
frame_diff++; frame_diff++;
panel_timeline->snapped = false;
} else { } else {
frame_diff--; frame_diff--;
panel_timeline->snapped = false;
} }
} }
} }
@@ -232,6 +238,7 @@ void KeyframeView::mouseMoveEvent(QMouseEvent* event) {
dragging = true; dragging = true;
} else { } else {
// do a rect select
rect_select_w = event->x() - rect_select_x; rect_select_w = event->x() - rect_select_x;
rect_select_h = event->y() - rect_select_y; rect_select_h = event->y() - rect_select_y;
@@ -274,5 +281,6 @@ void KeyframeView::mouseReleaseEvent(QMouseEvent*) {
select_rect = false; select_rect = false;
dragging = false; dragging = false;
mousedown = false; mousedown = false;
panel_timeline->snapped = false;
update(); update();
} }