various improvements
This commit is contained in:
@@ -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);
|
||||
|
||||
|
||||
@@ -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
@@ -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
@@ -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
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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);
|
||||
|
||||
@@ -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
@@ -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
@@ -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
@@ -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();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user