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);
|
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);
|
||||||
|
|
||||||
|
|||||||
@@ -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
@@ -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
@@ -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
@@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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);
|
||||||
|
|||||||
@@ -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
@@ -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
@@ -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
@@ -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();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user