From c477e0dd80cb754164db1c3a5db35497ea7a3eec Mon Sep 17 00:00:00 2001 From: itsmattkc Date: Fri, 15 Feb 2019 19:51:33 -0800 Subject: [PATCH 1/8] added helper script for deb package's git hash --- debian/changelog | 10 +++------- debian/gitfromlog.sh | 3 +++ olive.pro | 2 +- 3 files changed, 7 insertions(+), 8 deletions(-) create mode 100644 debian/gitfromlog.sh diff --git a/debian/changelog b/debian/changelog index cb91265e6..0f9a79b8e 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,9 +1,5 @@ -olive-editor (18.11.13bionic1-1) bionic; urgency=low +olive-editor (201902160026-0ac9dd9+805~ubuntu19.04.1) disco; urgency=low - * Initial Release - * Included missing dep - * Included another missing dep - * Updated source to dd55b97 - * Updated source to 6a38cd0 + * Auto build. - -- Olive Team Fri, 13 Nov 2018 10:04:05 +1100 + -- Launchpad Package Builder Sat, 16 Feb 2019 00:26:45 +0000 \ No newline at end of file diff --git a/debian/gitfromlog.sh b/debian/gitfromlog.sh new file mode 100644 index 000000000..90c0175fa --- /dev/null +++ b/debian/gitfromlog.sh @@ -0,0 +1,3 @@ +# A simple script to extract the Git hash from an auto-generated debian/changelog + +grep -Po '(?<=-)(([a-z0-9])\w+)(?=\+)' $1 \ No newline at end of file diff --git a/olive.pro b/olive.pro index 7e38dae4e..6b47a5db6 100644 --- a/olive.pro +++ b/olive.pro @@ -34,7 +34,7 @@ system("which git") { # Fallback for Ubuntu/Launchpad (extracts Git hash from debian/changelog rather than Git repo) # (see https://answers.launchpad.net/launchpad/+question/678556) isEmpty(GITHASHVAR) { - GITHASHVAR = $$system(grep -Po '(?<=-)(([a-z0-9])\w+)(?=\+)' debian/changelog) + GITHASHVAR = $$system(sh $$PWD/debian/gitfromlog.sh $$PWD/debian/changelog) } DEFINES += GITHASH=\\"\"$$GITHASHVAR\\"\" From eb792d8cd6825afea3c385b3e857f9f6141454d6 Mon Sep 17 00:00:00 2001 From: itsmattkc Date: Fri, 15 Feb 2019 20:45:54 -0800 Subject: [PATCH 2/8] fixed #512 --- debian/gitfromlog.sh | 2 +- dialogs/preferencesdialog.cpp | 16 +++++++++++++--- mainwindow.cpp | 2 +- 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/debian/gitfromlog.sh b/debian/gitfromlog.sh index 90c0175fa..726fd4e95 100644 --- a/debian/gitfromlog.sh +++ b/debian/gitfromlog.sh @@ -1,3 +1,3 @@ # A simple script to extract the Git hash from an auto-generated debian/changelog -grep -Po '(?<=-)(([a-z0-9])\w+)(?=\+)' $1 \ No newline at end of file +grep -Po '(?<=-)(([a-z0-9])\w+)(?=\+)' -m 1 $1 \ No newline at end of file diff --git a/dialogs/preferencesdialog.cpp b/dialogs/preferencesdialog.cpp index 5e9f3adc5..9a02a5a7a 100644 --- a/dialogs/preferencesdialog.cpp +++ b/dialogs/preferencesdialog.cpp @@ -47,6 +47,7 @@ #include #include #include +#include #include KeySequenceEditor::KeySequenceEditor(QWidget* parent, QAction* a) @@ -193,8 +194,8 @@ void PreferencesDialog::save() { int ret = QMessageBox::question(this, "Restart Required", - "Some of the changed settings will require a restart of Olive. Would you like to" - "restart now?", + "Some of the changed settings will require a restart of Olive. Would you like " + "to restart now?", QMessageBox::Yes | QMessageBox::No | QMessageBox::Cancel); if (ret == QMessageBox::Cancel) { @@ -283,7 +284,16 @@ void PreferencesDialog::save() { init_audio(); } - accept(); + accept(); + + if (restart_after_saving) { + // since we already ran can_close_project(), bypass checking again by running setWindowModified(false) + Olive::MainWindow->setWindowModified(false); + + Olive::MainWindow->close(); + + QProcess::startDetached(QApplication::applicationFilePath(), { Olive::ActiveProjectFilename }); + } } void PreferencesDialog::reset_default_shortcut() { diff --git a/mainwindow.cpp b/mainwindow.cpp index b50556672..eb6511e29 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -810,8 +810,8 @@ void MainWindow::paintEvent(QPaintEvent *event) { QMainWindow::paintEvent(event); if (first_show) { - emit finished_first_paint(); first_show = false; + emit finished_first_paint(); } } From 7b5921f7e6a17791c5c73dcef0f5a6eb97cedaa1 Mon Sep 17 00:00:00 2001 From: itsmattkc Date: Fri, 15 Feb 2019 23:00:25 -0800 Subject: [PATCH 3/8] fixed load on launch issues --- mainwindow.cpp | 2 +- oliveglobal.cpp | 15 +++++++++++++-- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/mainwindow.cpp b/mainwindow.cpp index eb6511e29..c78828fe6 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -807,7 +807,7 @@ void MainWindow::closeEvent(QCloseEvent *e) { } void MainWindow::paintEvent(QPaintEvent *event) { - QMainWindow::paintEvent(event); + QMainWindow::paintEvent(event); if (first_show) { first_show = false; diff --git a/oliveglobal.cpp b/oliveglobal.cpp index a3b31bc02..910c6c687 100644 --- a/oliveglobal.cpp +++ b/oliveglobal.cpp @@ -207,10 +207,21 @@ void OliveGlobal::open_export_dialog() { } void OliveGlobal::finished_initialize() { - // if a project was set as a command line argument, we load it here if (enable_load_project_on_init) { - open_project_worker(Olive::ActiveProjectFilename, false); + + // if a project was set as a command line argument, we load it here + if (QFileInfo::exists(Olive::ActiveProjectFilename)) { + open_project_worker(Olive::ActiveProjectFilename, false); + } else { + QMessageBox::critical(Olive::MainWindow, + tr("Missing Project File"), + tr("Specified project '%1' does not exist.").arg(Olive::ActiveProjectFilename), + QMessageBox::Ok); + update_project_filename(nullptr); + } + enable_load_project_on_init = false; + } else { // if we are not loading a project on launch and are running a release build, open the demo notice dialog #ifndef QT_DEBUG From 1e84682b5c437857e0a1483d007f1c0d0651c987 Mon Sep 17 00:00:00 2001 From: itsmattkc Date: Fri, 15 Feb 2019 23:24:03 -0800 Subject: [PATCH 4/8] better thread syncing in loading --- io/loadthread.cpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/io/loadthread.cpp b/io/loadthread.cpp index fb663212f..1c50389fa 100644 --- a/io/loadthread.cpp +++ b/io/loadthread.cpp @@ -716,11 +716,13 @@ void LoadThread::cancel() { } void LoadThread::question_func(const QString &title, const QString &text, int buttons) { + mutex.lock(); question_btn = QMessageBox::warning( Olive::MainWindow, title, text, static_cast(buttons)); + mutex.unlock(); waitCond.wakeAll(); } @@ -795,6 +797,9 @@ void LoadThread::create_effect_ui( * Sorry. I'll fix it one day. */ + // lock mutex - ensures the load thread is suspended while this happens + mutex.lock(); + if (cancelled) return; if (type == TA_NO_TRANSITION) { if (meta == nullptr) { @@ -824,13 +829,22 @@ void LoadThread::create_effect_ui( } } + mutex.unlock(); + waitCond.wakeAll(); } void LoadThread::create_dual_transition(const TransitionData* td, Clip* primary, Clip* secondary, const EffectMeta* meta) { + // lock mutex - ensures the load thread is suspended while this happens + mutex.lock(); + int transition_index = create_transition(primary, secondary, meta); primary->sequence->transitions.at(transition_index)->set_length(td->length); if (td->otc != nullptr) td->otc->opening_transition = transition_index; if (td->ctc != nullptr) td->ctc->closing_transition = transition_index; + + mutex.unlock(); + + // resume load thread waitCond.wakeAll(); } From c810f27c474441ad56319dda01fcb7626ee05eaf Mon Sep 17 00:00:00 2001 From: itsmattkc Date: Fri, 15 Feb 2019 23:24:23 -0800 Subject: [PATCH 5/8] fixed #501 --- ui/graphview.cpp | 109 ++++++++++++++++++++++++++++------------------- ui/graphview.h | 8 ++-- 2 files changed, 70 insertions(+), 47 deletions(-) diff --git a/ui/graphview.cpp b/ui/graphview.cpp index b8f8d48a9..b42eb9bf2 100644 --- a/ui/graphview.cpp +++ b/ui/graphview.cpp @@ -61,7 +61,8 @@ GraphView::GraphView(QWidget* parent) : x_scroll(0), y_scroll(0), mousedown(false), - zoom(1.0), + x_zoom(1.0), + y_zoom(1.0), row(nullptr), moved_keys(false), current_handle(BEZIER_HANDLE_NONE), @@ -105,10 +106,11 @@ void GraphView::show_context_menu(const QPoint& pos) { } void GraphView::reset_view() { - zoom = 1.0; + x_zoom = 1.0; + y_zoom = 1.0; set_scroll_x(0); set_scroll_y(0); - emit zoom_changed(zoom); + emit zoom_changed(x_zoom, y_zoom); update(); } @@ -166,10 +168,10 @@ void GraphView::set_view_to_rect(int x1, double y1, int x2, double y2) { double y_diff = (y2 - y1); double x_diff_padded = (x_diff+10)*padding; double y_diff_padded = (y_diff+10)*padding; - set_zoom(qMin(double(width()) / x_diff_padded, double(height()) / y_diff_padded)); + set_zoom(double(width()) / x_diff_padded, double(height()) / y_diff_padded); - set_scroll_x(qRound((double(x1) - ((x_diff_padded-x_diff)/2))*zoom)); - set_scroll_y(qRound((double(y1) - ((y_diff_padded-y_diff)/2))*zoom)); + set_scroll_x(qRound((double(x1) - ((x_diff_padded-x_diff)/2))*x_zoom)); + set_scroll_y(qRound((double(y1) - ((y_diff_padded-y_diff)/2))*y_zoom)); } void GraphView::draw_line_text(QPainter &p, bool vert, int line_no, int line_pos, int next_line_pos) { @@ -189,7 +191,7 @@ void GraphView::draw_lines(QPainter& p, bool vert) { int scroll = vert ? y_scroll : x_scroll; for (int i=0;iseq->playhead - visible_in)*zoom) - x_scroll); + int playhead_x = qRound((double(panel_sequence_viewer->seq->playhead - visible_in)*x_zoom) - x_scroll); p.drawLine(playhead_x, 0, playhead_x, height()); if (rect_select) { @@ -400,8 +402,8 @@ void GraphView::mousePressEvent(QMouseEvent *event) { break; } else { // selecting a handle - QPointF pre_point(key_x + key.pre_handle_x*zoom, key_y - key.pre_handle_y*zoom); - QPointF post_point(key_x + key.post_handle_x*zoom, key_y - key.post_handle_y*zoom); + QPointF pre_point(key_x + key.pre_handle_x*x_zoom, key_y - key.pre_handle_y*y_zoom); + QPointF post_point(key_x + key.post_handle_x*x_zoom, key_y - key.post_handle_y*y_zoom); if (event->pos().x() > pre_point.x()-BEZIER_HANDLE_SIZE && event->pos().x() < pre_point.x()+BEZIER_HANDLE_SIZE && event->pos().y() > pre_point.y()-BEZIER_HANDLE_SIZE @@ -513,11 +515,11 @@ void GraphView::mouseMoveEvent(QMouseEvent *event) { switch (current_handle) { case BEZIER_HANDLE_NONE: for (int i=0;ifield(selected_keys_fields.at(i))->keyframes[selected_keys.at(i)].time = qRound(selected_keys_old_vals.at(i) + (double(event->pos().x() - start_x)/zoom)); + row->field(selected_keys_fields.at(i))->keyframes[selected_keys.at(i)].time = qRound(selected_keys_old_vals.at(i) + (double(event->pos().x() - start_x)/x_zoom)); if (event->modifiers() & Qt::ShiftModifier) { row->field(selected_keys_fields.at(i))->keyframes[selected_keys.at(i)].data = selected_keys_old_doubles.at(i); } else { - row->field(selected_keys_fields.at(i))->keyframes[selected_keys.at(i)].data = qRound(selected_keys_old_doubles.at(i) + (double(start_y - event->pos().y())/zoom)); + row->field(selected_keys_fields.at(i))->keyframes[selected_keys.at(i)].data = qRound(selected_keys_old_doubles.at(i) + (double(start_y - event->pos().y())/y_zoom)); } } moved_keys = true; @@ -531,8 +533,8 @@ void GraphView::mouseMoveEvent(QMouseEvent *event) { double new_post_handle_x = old_post_handle_x; double new_post_handle_y = old_post_handle_y; - double x_diff = double(event->pos().x() - start_x)/zoom; - double y_diff = double(start_y - event->pos().y())/zoom; + double x_diff = double(event->pos().x() - start_x)/x_zoom; + double y_diff = double(start_y - event->pos().y())/y_zoom; if (current_handle == BEZIER_HANDLE_PRE) { new_pre_handle_x += x_diff; @@ -580,14 +582,14 @@ void GraphView::mouseMoveEvent(QMouseEvent *event) { KEYFRAME_SIZE+KEYFRAME_SIZE ); QRect pre_rect( - qRound(key_x + key.pre_handle_x*zoom - BEZIER_HANDLE_SIZE), - qRound(key_y + key.pre_handle_y*zoom - BEZIER_HANDLE_SIZE), + qRound(key_x + key.pre_handle_x*x_zoom - BEZIER_HANDLE_SIZE), + qRound(key_y + key.pre_handle_y*y_zoom - BEZIER_HANDLE_SIZE), BEZIER_HANDLE_SIZE+BEZIER_HANDLE_SIZE, BEZIER_HANDLE_SIZE+BEZIER_HANDLE_SIZE ); QRect post_rect( - qRound(key_x + key.post_handle_x*zoom - BEZIER_HANDLE_SIZE), - qRound(key_y + key.post_handle_y*zoom - BEZIER_HANDLE_SIZE), + qRound(key_x + key.post_handle_x*x_zoom - BEZIER_HANDLE_SIZE), + qRound(key_y + key.post_handle_y*y_zoom - BEZIER_HANDLE_SIZE), BEZIER_HANDLE_SIZE+BEZIER_HANDLE_SIZE, BEZIER_HANDLE_SIZE+BEZIER_HANDLE_SIZE ); @@ -652,20 +654,20 @@ void GraphView::mouseMoveEvent(QMouseEvent *event) { if (last_key.type == EFFECT_KEYFRAME_BEZIER && key.type == EFFECT_KEYFRAME_BEZIER) { // cubic bezier bezier_path.cubicTo( - QPointF(last_key_x+last_key.post_handle_x*zoom, last_key_y-last_key.post_handle_y*zoom), - QPointF(key_x+key.pre_handle_x*zoom, key_y-key.pre_handle_y*zoom), + QPointF(last_key_x+last_key.post_handle_x*x_zoom, last_key_y-last_key.post_handle_y*y_zoom), + QPointF(key_x+key.pre_handle_x*x_zoom, key_y-key.pre_handle_y*y_zoom), QPointF(key_x, key_y) ); } else if (key.type == EFFECT_KEYFRAME_LINEAR) { // quadratic bezier // last keyframe is the bezier one bezier_path.quadTo( - QPointF(last_key_x+last_key.post_handle_x*zoom, last_key_y-last_key.post_handle_y*zoom), + QPointF(last_key_x+last_key.post_handle_x*x_zoom, last_key_y-last_key.post_handle_y*y_zoom), QPointF(key_x, key_y) ); } else { // this keyframe is the bezier one bezier_path.quadTo( - QPointF(key_x+key.pre_handle_x*zoom, key_y-key.pre_handle_y*zoom), + QPointF(key_x+key.pre_handle_x*x_zoom, key_y-key.pre_handle_y*y_zoom), QPointF(key_x, key_y) ); } @@ -745,18 +747,36 @@ void GraphView::wheelEvent(QWheelEvent *event) { redraw = true; } else { // set zoom - if (event->angleDelta().y() != 0) { - double zoom_diff = (GRAPH_ZOOM_SPEED*zoom); - double new_zoom = (event->angleDelta().y() < 0) ? zoom - zoom_diff : zoom + zoom_diff; + double new_x_zoom = x_zoom; + double new_y_zoom = y_zoom; - // center zoom on screen - set_scroll_x(qRound((double(x_scroll)/zoom*new_zoom) + double(event->pos().x())*new_zoom - double(event->pos().x())*zoom)); - set_scroll_y(qRound((double(y_scroll)/zoom*new_zoom) + double(height()-event->pos().y())*new_zoom - double(height()-event->pos().y())*zoom)); + int y_delta = event->angleDelta().y(); - set_zoom(new_zoom); + // holding CONTROL will zoom horizontal and vertical axes separately + int x_delta = (event->modifiers() & Qt::ControlModifier) ? event->angleDelta().x() : y_delta; - redraw = true; - } + if (y_delta != 0) { + double zoom_diff = (GRAPH_ZOOM_SPEED*y_zoom); + new_y_zoom = (y_delta < 0) ? y_zoom - zoom_diff : y_zoom + zoom_diff; + + // center zoom on screen + set_scroll_y(qRound((double(y_scroll)/y_zoom*new_y_zoom) + double(height()-event->pos().y())*new_y_zoom - double(height()-event->pos().y())*y_zoom)); + + redraw = true; + } + + if (x_delta != 0) { + double zoom_diff = (GRAPH_ZOOM_SPEED*x_zoom); + new_x_zoom = (x_delta < 0) ? x_zoom - zoom_diff : x_zoom + zoom_diff; + + set_scroll_x(qRound((double(x_scroll)/x_zoom*new_x_zoom) + double(event->pos().x())*new_x_zoom - double(event->pos().x())*x_zoom)); + + redraw = true; + } + + if (redraw) { + set_zoom(new_x_zoom, new_y_zoom); + } } if (redraw) { @@ -837,24 +857,25 @@ void GraphView::set_scroll_y(int s) { emit y_scroll_changed(y_scroll); } -void GraphView::set_zoom(double z) { - zoom = z; - emit zoom_changed(zoom); +void GraphView::set_zoom(double xz, double yz) { + x_zoom = xz; + y_zoom = yz; + emit zoom_changed(x_zoom, y_zoom); } int GraphView::get_screen_x(double d) { if (row != nullptr) { d -= row->parent_effect->parent_clip->clip_in; } - return qRound((d*zoom) - x_scroll); + return qRound((d*x_zoom) - x_scroll); } int GraphView::get_screen_y(double d) { - return qRound(height() + y_scroll - d*zoom); + return qRound(height() + y_scroll - d*y_zoom); } long GraphView::get_value_x(int i) { - long frame = qRound((i + x_scroll)/zoom); + long frame = qRound((i + x_scroll)/x_zoom); if (row != nullptr) { frame += row->parent_effect->parent_clip->clip_in; } @@ -862,7 +883,7 @@ long GraphView::get_value_x(int i) { } double GraphView::get_value_y(int i) { - return double(height() + y_scroll - i)/zoom; + return double(height() + y_scroll - i)/y_zoom; } void GraphView::selection_update() { diff --git a/ui/graphview.h b/ui/graphview.h index 02dc27216..19247a2a1 100644 --- a/ui/graphview.h +++ b/ui/graphview.h @@ -50,7 +50,7 @@ public: signals: void x_scroll_changed(int); void y_scroll_changed(int); - void zoom_changed(double); + void zoom_changed(double, double); void selection_changed(bool, int); private: int x_scroll; @@ -58,11 +58,13 @@ private: bool mousedown; int start_x; int start_y; - double zoom; + + double x_zoom; + double y_zoom; void set_scroll_x(int s); void set_scroll_y(int s); - void set_zoom(double z); + void set_zoom(double xz, double yz); int get_screen_x(double); int get_screen_y(double); From 6bccd0c6607af6d3a135f0db84915a64e98a08f0 Mon Sep 17 00:00:00 2001 From: itsmattkc Date: Sat, 16 Feb 2019 02:18:32 -0800 Subject: [PATCH 6/8] minor cleanup and documentation of render functions --- Doxyfile | 3 +- docs/html/aboutdialog_8h_source.html | 2 +- docs/html/actionsearch_8h_source.html | 6 +- docs/html/advancedvideodialog_8h_source.html | 4 +- docs/html/annotated.html | 267 ++++++------ docs/html/audio_8h_source.html | 4 +- docs/html/audiomonitor_8h_source.html | 2 +- docs/html/audionoiseeffect_8h_source.html | 10 +- docs/html/cacher_8h_source.html | 4 +- docs/html/checkboxex_8h_source.html | 2 +- docs/html/class_clickable_label.html | 10 +- docs/html/class_graph_view-members.html | 11 +- docs/html/class_graph_view.html | 21 +- .../class_preferences_dialog-members.html | 69 ++-- docs/html/class_preferences_dialog.html | 3 + docs/html/class_timeline-members.html | 74 ++-- docs/html/class_timeline.html | 18 +- docs/html/classes.html | 98 +++-- docs/html/clickablelabel_8h_source.html | 2 +- docs/html/clip_8h_source.html | 18 +- docs/html/clipboard_8h_source.html | 2 +- docs/html/collapsiblewidget_8h_source.html | 6 +- docs/html/colorbutton_8h_source.html | 4 +- docs/html/comboboxex_8h_source.html | 2 +- docs/html/config_8h_source.html | 4 +- docs/html/cornerpineffect_8h_source.html | 14 +- .../crossdissolvetransition_8h_source.html | 10 +- docs/html/crossplatformlib_8h_source.html | 2 +- docs/html/cubetransition_8h_source.html | 10 +- docs/html/cursors_8h_source.html | 2 +- docs/html/debug_8h_source.html | 2 +- docs/html/debugdialog_8h_source.html | 2 +- docs/html/demonotice_8h_source.html | 2 +- docs/html/effect_8h_source.html | 18 +- docs/html/effectcontrols_8h_source.html | 14 +- docs/html/effectfield_8h_source.html | 6 +- docs/html/effectgizmo_8h_source.html | 4 +- docs/html/effectloaders_8h_source.html | 2 +- docs/html/effectrow_8h_source.html | 12 +- docs/html/embeddedfilechooser_8h_source.html | 2 +- .../exponentialfadetransition_8h_source.html | 8 +- docs/html/exportdialog_8h_source.html | 8 +- docs/html/exportthread_8h_source.html | 8 +- docs/html/files.html | 195 +++++---- docs/html/fillleftrighteffect_8h_source.html | 10 +- docs/html/focusfilter_8h_source.html | 54 +-- docs/html/fontcombobox_8h_source.html | 4 +- docs/html/footage_8h_source.html | 12 +- docs/html/frei0reffect_8h_source.html | 8 +- docs/html/functions.html | 55 +++ docs/html/functions_vars.html | 51 +++ docs/html/grapheditor_8h_source.html | 12 +- docs/html/graphview_8h_source.html | 6 +- docs/html/hierarchy.html | 367 +++++++++-------- docs/html/keyframe_8h_source.html | 4 +- docs/html/keyframedrawing_8h_source.html | 2 +- docs/html/keyframenavigator_8h_source.html | 2 +- docs/html/keyframeview_8h_source.html | 12 +- docs/html/labelslider_8h_source.html | 34 +- docs/html/linearfadetransition_8h_source.html | 8 +- docs/html/loaddialog_8h_source.html | 10 +- docs/html/loadthread_8h_source.html | 16 +- .../logarithmicfadetransition_8h_source.html | 8 +- docs/html/mainwindow_8h_source.html | 46 +-- docs/html/marker_8h_source.html | 4 +- docs/html/math_8h_source.html | 2 +- docs/html/md__i_s_s_u_e__t_e_m_p_l_a_t_e.html | 94 +++++ docs/html/media_8h_source.html | 8 +- .../html/mediapropertiesdialog_8h_source.html | 6 +- docs/html/menudata.js | 1 + docs/html/menuhelper_8h_source.html | 28 +- docs/html/newsequencedialog_8h_source.html | 8 +- docs/html/oliveglobal_8h_source.html | 62 +-- docs/html/pages.html | 3 +- docs/html/paneffect_8h_source.html | 10 +- docs/html/panels_8h_source.html | 10 +- docs/html/path_8h_source.html | 2 +- docs/html/playback_8h_source.html | 4 +- docs/html/preferencesdialog_8h_source.html | 4 +- docs/html/previewgenerator_8h_source.html | 8 +- docs/html/project_8h_source.html | 28 +- docs/html/projectelements_8h_source.html | 2 +- docs/html/projectfilter_8h_source.html | 2 +- docs/html/projectmodel_8h_source.html | 4 +- docs/html/proxydialog_8h_source.html | 4 +- docs/html/proxygenerator_8h_source.html | 6 +- docs/html/qpainterwrapper_8h_source.html | 2 +- docs/html/rectangleselect_8h_source.html | 2 +- docs/html/renderfunctions_8h_source.html | 27 +- docs/html/renderthread_8h_source.html | 6 +- .../replaceclipmediadialog_8h_source.html | 6 +- docs/html/resizablescrollbar_8h_source.html | 2 +- docs/html/scrollarea_8h_source.html | 2 +- docs/html/search/all_10.js | 65 +-- docs/html/search/all_11.js | 69 +++- docs/html/search/all_12.js | 21 +- docs/html/search/all_13.js | 18 +- docs/html/search/all_14.js | 15 +- docs/html/search/all_15.js | 3 +- docs/html/search/all_16.html | 30 ++ docs/html/search/all_16.js | 5 + docs/html/search/all_2.js | 35 +- docs/html/search/all_3.js | 40 +- docs/html/search/all_4.js | 29 +- docs/html/search/all_5.js | 29 +- docs/html/search/all_6.js | 21 +- docs/html/search/all_7.js | 15 +- docs/html/search/all_8.js | 9 +- docs/html/search/all_9.js | 14 +- docs/html/search/all_a.js | 27 +- docs/html/search/all_b.js | 24 +- docs/html/search/all_c.js | 20 +- docs/html/search/all_d.js | 34 +- docs/html/search/all_e.js | 22 +- docs/html/search/all_f.js | 14 +- docs/html/search/classes_2.js | 1 - docs/html/search/pages_0.js | 2 +- docs/html/search/pages_1.html | 30 ++ docs/html/search/pages_1.js | 4 + docs/html/search/searchdata.js | 6 +- docs/html/search/variables_1.js | 6 +- docs/html/search/variables_2.js | 2 +- docs/html/search/variables_3.js | 2 +- docs/html/search/variables_4.js | 2 +- docs/html/search/variables_5.js | 2 +- docs/html/search/variables_6.html | 30 ++ docs/html/search/variables_6.js | 5 + docs/html/search/variables_7.html | 30 ++ docs/html/search/variables_7.js | 4 + docs/html/search/variables_8.html | 30 ++ docs/html/search/variables_8.js | 4 + docs/html/search/variables_9.html | 30 ++ docs/html/search/variables_9.js | 6 + docs/html/search/variables_a.html | 30 ++ docs/html/search/variables_a.js | 6 + docs/html/search/variables_b.html | 30 ++ docs/html/search/variables_b.js | 4 + docs/html/search/variables_c.html | 30 ++ docs/html/search/variables_c.js | 5 + docs/html/selection_8h_source.html | 2 +- docs/html/sequence_8h_source.html | 8 +- docs/html/shakeeffect_8h_source.html | 12 +- docs/html/solideffect_8h_source.html | 10 +- docs/html/sourceiconview_8h_source.html | 4 +- docs/html/sourcescommon_8h_source.html | 8 +- docs/html/sourcetable_8h_source.html | 6 +- docs/html/speeddialog_8h_source.html | 6 +- docs/html/stabilizerdialog_8h_source.html | 4 +- ...truct_compose_sequence_params-members.html | 35 +- docs/html/struct_compose_sequence_params.html | 382 ++++++++++++++++-- docs/html/struct_config-members.html | 91 ++--- docs/html/struct_config.html | 3 + docs/html/texteditdialog_8h_source.html | 2 +- docs/html/texteditex_8h_source.html | 2 +- docs/html/texteffect_8h_source.html | 10 +- docs/html/timecodeeffect_8h_source.html | 10 +- docs/html/timeline_8h_source.html | 36 +- docs/html/timelineheader_8h_source.html | 4 +- docs/html/timelinetools_8h_source.html | 2 +- docs/html/timelinewidget_8h_source.html | 14 +- docs/html/toneeffect_8h_source.html | 10 +- docs/html/transformeffect_8h_source.html | 14 +- docs/html/transition_8h_source.html | 10 +- docs/html/undo_8h_source.html | 130 +++--- docs/html/viewer_8h_source.html | 18 +- docs/html/viewercontainer_8h_source.html | 6 +- docs/html/viewerwidget_8h_source.html | 20 +- docs/html/viewerwindow_8h_source.html | 2 +- docs/html/voideffect_8h_source.html | 8 +- docs/html/volumeeffect_8h_source.html | 10 +- docs/html/vsthost_8h_source.html | 10 +- io/exportthread.cpp | 11 +- ui/renderfunctions.cpp | 36 +- ui/renderfunctions.h | 207 +++++++++- ui/renderthread.cpp | 5 +- ui/timelinewidget.cpp | 8 +- ui/viewerwidget.cpp | 8 +- 177 files changed, 2562 insertions(+), 1497 deletions(-) create mode 100644 docs/html/md__i_s_s_u_e__t_e_m_p_l_a_t_e.html create mode 100644 docs/html/search/all_16.html create mode 100644 docs/html/search/all_16.js create mode 100644 docs/html/search/pages_1.html create mode 100644 docs/html/search/pages_1.js create mode 100644 docs/html/search/variables_6.html create mode 100644 docs/html/search/variables_6.js create mode 100644 docs/html/search/variables_7.html create mode 100644 docs/html/search/variables_7.js create mode 100644 docs/html/search/variables_8.html create mode 100644 docs/html/search/variables_8.js create mode 100644 docs/html/search/variables_9.html create mode 100644 docs/html/search/variables_9.js create mode 100644 docs/html/search/variables_a.html create mode 100644 docs/html/search/variables_a.js create mode 100644 docs/html/search/variables_b.html create mode 100644 docs/html/search/variables_b.js create mode 100644 docs/html/search/variables_c.html create mode 100644 docs/html/search/variables_c.js diff --git a/Doxyfile b/Doxyfile index 132db714e..bddbd4e1c 100644 --- a/Doxyfile +++ b/Doxyfile @@ -897,7 +897,8 @@ RECURSIVE = YES # Note that relative paths are relative to the directory from which doxygen is # run. -EXCLUDE = +EXCLUDE = docs\ + .git # The EXCLUDE_SYMLINKS tag can be used to select whether or not files or # directories that are symbolic links (a Unix file system feature) are excluded diff --git a/docs/html/aboutdialog_8h_source.html b/docs/html/aboutdialog_8h_source.html index 9fb075a5f..1311a3b4b 100644 --- a/docs/html/aboutdialog_8h_source.html +++ b/docs/html/aboutdialog_8h_source.html @@ -69,7 +69,7 @@ $(function() {
aboutdialog.h
-
1 #ifndef ABOUTDIALOG_H
2 #define ABOUTDIALOG_H
3 
4 #include <QDialog>
5 
6 class AboutDialog : public QDialog
7 {
8  Q_OBJECT
9 
10 public:
11  explicit AboutDialog(QWidget *parent = 0);
12 };
13 
14 #endif // ABOUTDIALOG_H
Definition: aboutdialog.h:6
+
1 /***
2 
3  Olive - Non-Linear Video Editor
4  Copyright (C) 2019 Olive Team
5 
6  This program is free software: you can redistribute it and/or modify
7  it under the terms of the GNU General Public License as published by
8  the Free Software Foundation, either version 3 of the License, or
9  (at your option) any later version.
10 
11  This program is distributed in the hope that it will be useful,
12  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  GNU General Public License for more details.
15 
16  You should have received a copy of the GNU General Public License
17  along with this program. If not, see <http://www.gnu.org/licenses/>.
18 
19 ***/
20 
21 #ifndef ABOUTDIALOG_H
22 #define ABOUTDIALOG_H
23 
24 #include <QDialog>
25 
26 class AboutDialog : public QDialog
27 {
28  Q_OBJECT
29 
30 public:
31  explicit AboutDialog(QWidget *parent = 0);
32 };
33 
34 #endif // ABOUTDIALOG_H
Definition: aboutdialog.h:26
-
1 #ifndef ACTIONSEARCH_H
2 #define ACTIONSEARCH_H
3 
4 #include <QDialog>
5 #include <QLineEdit>
6 #include <QListWidget>
7 
8 class QListWidget;
9 class QMenu;
10 
11 class ActionSearchList : public QListWidget {
12  Q_OBJECT
13 public:
14  ActionSearchList(QWidget* parent);
15 protected:
16  void mouseDoubleClickEvent(QMouseEvent *event);
17 signals:
18  void dbl_click();
19 };
20 
21 class ActionSearch : public QDialog
22 {
23  Q_OBJECT
24 public:
25  ActionSearch(QWidget* parent = nullptr);
26 private slots:
27  void search_update(const QString& s, const QString &p = nullptr, QMenu *parent = nullptr);
28  void perform_action();
29  void move_selection_up();
30  void move_selection_down();
31 private:
32  ActionSearchList* list_widget;
33 };
34 
35 class ActionSearchEntry : public QLineEdit {
36  Q_OBJECT
37 public:
38  ActionSearchEntry(QWidget* parent);
39 protected:
40  void keyPressEvent(QKeyEvent * event);
41 signals:
42  void moveSelectionUp();
43  void moveSelectionDown();
44 };
45 
46 #endif // ACTIONSEARCH_H
Definition: actionsearch.h:11
-
Definition: actionsearch.h:21
-
Definition: actionsearch.h:35
+
1 /***
2 
3  Olive - Non-Linear Video Editor
4  Copyright (C) 2019 Olive Team
5 
6  This program is free software: you can redistribute it and/or modify
7  it under the terms of the GNU General Public License as published by
8  the Free Software Foundation, either version 3 of the License, or
9  (at your option) any later version.
10 
11  This program is distributed in the hope that it will be useful,
12  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  GNU General Public License for more details.
15 
16  You should have received a copy of the GNU General Public License
17  along with this program. If not, see <http://www.gnu.org/licenses/>.
18 
19 ***/
20 
21 #ifndef ACTIONSEARCH_H
22 #define ACTIONSEARCH_H
23 
24 #include <QDialog>
25 #include <QLineEdit>
26 #include <QListWidget>
27 
28 class QListWidget;
29 class QMenu;
30 
31 class ActionSearchList : public QListWidget {
32  Q_OBJECT
33 public:
34  ActionSearchList(QWidget* parent);
35 protected:
36  void mouseDoubleClickEvent(QMouseEvent *event);
37 signals:
38  void dbl_click();
39 };
40 
41 class ActionSearch : public QDialog
42 {
43  Q_OBJECT
44 public:
45  ActionSearch(QWidget* parent = nullptr);
46 private slots:
47  void search_update(const QString& s, const QString &p = nullptr, QMenu *parent = nullptr);
48  void perform_action();
49  void move_selection_up();
50  void move_selection_down();
51 private:
52  ActionSearchList* list_widget;
53 };
54 
55 class ActionSearchEntry : public QLineEdit {
56  Q_OBJECT
57 public:
58  ActionSearchEntry(QWidget* parent);
59 protected:
60  void keyPressEvent(QKeyEvent * event);
61 signals:
62  void moveSelectionUp();
63  void moveSelectionDown();
64 };
65 
66 #endif // ACTIONSEARCH_H
Definition: actionsearch.h:31
+
Definition: actionsearch.h:41
+
Definition: actionsearch.h:55
-
1 #ifndef ADVANCEDVIDEODIALOG_H
2 #define ADVANCEDVIDEODIALOG_H
3 
4 #include <QDialog>
5 
6 #include "io/exportthread.h"
7 
8 class QComboBox;
9 
10 class AdvancedVideoDialog : public QDialog {
11  Q_OBJECT
12 public:
13  AdvancedVideoDialog(QWidget* parent,
14  int encoding_codec,
15  VideoCodecParams& iparams);
16 
17 public slots:
18  virtual void accept() override;
19 private:
20  VideoCodecParams& params;
21 
22  QComboBox* pix_fmt_combo;
23 };
24 
25 #endif // ADVANCEDVIDEODIALOG_H
Definition: advancedvideodialog.h:10
-
Definition: exportthread.h:48
+
1 /***
2 
3  Olive - Non-Linear Video Editor
4  Copyright (C) 2019 Olive Team
5 
6  This program is free software: you can redistribute it and/or modify
7  it under the terms of the GNU General Public License as published by
8  the Free Software Foundation, either version 3 of the License, or
9  (at your option) any later version.
10 
11  This program is distributed in the hope that it will be useful,
12  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  GNU General Public License for more details.
15 
16  You should have received a copy of the GNU General Public License
17  along with this program. If not, see <http://www.gnu.org/licenses/>.
18 
19 ***/
20 
21 #ifndef ADVANCEDVIDEODIALOG_H
22 #define ADVANCEDVIDEODIALOG_H
23 
24 #include <QDialog>
25 
26 #include "io/exportthread.h"
27 
28 class QComboBox;
29 
30 class AdvancedVideoDialog : public QDialog {
31  Q_OBJECT
32 public:
33  AdvancedVideoDialog(QWidget* parent,
34  int encoding_codec,
35  VideoCodecParams& iparams);
36 
37 public slots:
38  virtual void accept() override;
39 private:
40  VideoCodecParams& params;
41 
42  QComboBox* pix_fmt_combo;
43 };
44 
45 #endif // ADVANCEDVIDEODIALOG_H
Definition: advancedvideodialog.h:30
+
Definition: exportthread.h:68
diff --git a/docs/html/audio_8h_source.html b/docs/html/audio_8h_source.html index 0322aeb92..5a9a4395f 100644 --- a/docs/html/audio_8h_source.html +++ b/docs/html/audio_8h_source.html @@ -69,8 +69,8 @@ $(function() {
audio.h
-
1 #ifndef AUDIO_H
2 #define AUDIO_H
3 
4 #include <QVector>
5 #include <QThread>
6 #include <QWaitCondition>
7 #include <QMutex>
8 
9 //#define INT16_MAX 0x7fff
10 //#define INT16_MIN (-INT16_MAX-1)
11 
12 class QIODevice;
13 class QAudioOutput;
14 class QComboBox;
15 
16 struct Sequence;
17 
18 class AudioSenderThread : public QThread {
19  Q_OBJECT
20 public:
22  void run();
23  void stop();
24  QWaitCondition cond;
25  bool close;
26  QMutex lock;
27 public slots:
28  void notifyReceiver();
29 private:
30  QVector<qint16> samples;
31  int send_audio_to_output(qint64 offset, int max);
32 };
33 
34 double log_volume(double linear);
35 
36 extern QAudioOutput* audio_output;
37 extern QIODevice* audio_io_device;
38 extern AudioSenderThread* audio_thread;
39 extern QMutex audio_write_lock;
40 
41 #define audio_ibuffer_size 192000
42 extern qint8 audio_ibuffer[audio_ibuffer_size];
43 extern qint64 audio_ibuffer_read;
44 extern long audio_ibuffer_frame;
45 extern double audio_ibuffer_timecode;
46 extern bool audio_scrub;
47 extern bool recording;
48 extern bool audio_rendering;
49 void clear_audio_ibuffer();
50 
51 int current_audio_freq();
52 
53 bool is_audio_device_set();
54 
55 void init_audio();
56 void stop_audio();
57 qint64 get_buffer_offset_from_frame(double framerate, long frame);
58 
59 bool start_recording();
60 void stop_recording();
61 QString get_recorded_audio_filename();
62 
63 void combobox_audio_sample_rates(QComboBox* combobox);
64 
65 #endif // AUDIO_H
Definition: sequence.h:13
-
Definition: audio.h:18
+
1 /***
2 
3  Olive - Non-Linear Video Editor
4  Copyright (C) 2019 Olive Team
5 
6  This program is free software: you can redistribute it and/or modify
7  it under the terms of the GNU General Public License as published by
8  the Free Software Foundation, either version 3 of the License, or
9  (at your option) any later version.
10 
11  This program is distributed in the hope that it will be useful,
12  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  GNU General Public License for more details.
15 
16  You should have received a copy of the GNU General Public License
17  along with this program. If not, see <http://www.gnu.org/licenses/>.
18 
19 ***/
20 
21 #ifndef AUDIO_H
22 #define AUDIO_H
23 
24 #include <QVector>
25 #include <QThread>
26 #include <QWaitCondition>
27 #include <QMutex>
28 
29 //#define INT16_MAX 0x7fff
30 //#define INT16_MIN (-INT16_MAX-1)
31 
32 class QIODevice;
33 class QAudioOutput;
34 class QComboBox;
35 
36 struct Sequence;
37 
38 class AudioSenderThread : public QThread {
39  Q_OBJECT
40 public:
42  void run();
43  void stop();
44  QWaitCondition cond;
45  bool close;
46  QMutex lock;
47 public slots:
48  void notifyReceiver();
49 private:
50  QVector<qint16> samples;
51  int send_audio_to_output(qint64 offset, int max);
52 };
53 
54 double log_volume(double linear);
55 
56 extern QAudioOutput* audio_output;
57 extern QIODevice* audio_io_device;
58 extern AudioSenderThread* audio_thread;
59 extern QMutex audio_write_lock;
60 
61 #define audio_ibuffer_size 192000
62 extern qint8 audio_ibuffer[audio_ibuffer_size];
63 extern qint64 audio_ibuffer_read;
64 extern long audio_ibuffer_frame;
65 extern double audio_ibuffer_timecode;
66 extern bool audio_scrub;
67 extern bool recording;
68 extern bool audio_rendering;
69 void clear_audio_ibuffer();
70 
71 int current_audio_freq();
72 
73 bool is_audio_device_set();
74 
75 void init_audio();
76 void stop_audio();
77 qint64 get_buffer_offset_from_frame(double framerate, long frame);
78 
79 bool start_recording();
80 void stop_recording();
81 QString get_recorded_audio_filename();
82 
83 void combobox_audio_sample_rates(QComboBox* combobox);
84 
85 #endif // AUDIO_H
Definition: sequence.h:33
+
Definition: audio.h:38
-
1 #ifndef AUDIOMONITOR_H
2 #define AUDIOMONITOR_H
3 
4 #include <QWidget>
5 #include <QTimer>
6 
7 class AudioMonitor : public QWidget
8 {
9  Q_OBJECT
10 public:
11  explicit AudioMonitor(QWidget *parent = 0);
12  void set_value(const QVector<double>& values);
13 
14 protected:
15  void paintEvent(QPaintEvent *);
16  void resizeEvent(QResizeEvent *);
17 
18 signals:
19 
20 public slots:
21 
22 private:
23  QLinearGradient gradient;
24  QVector<double> values;
25  QTimer clear_timer;
26 
27 private slots:
28  void clear();
29 };
30 
31 #endif // AUDIOMONITOR_H
Definition: audiomonitor.h:7
+
1 /***
2 
3  Olive - Non-Linear Video Editor
4  Copyright (C) 2019 Olive Team
5 
6  This program is free software: you can redistribute it and/or modify
7  it under the terms of the GNU General Public License as published by
8  the Free Software Foundation, either version 3 of the License, or
9  (at your option) any later version.
10 
11  This program is distributed in the hope that it will be useful,
12  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  GNU General Public License for more details.
15 
16  You should have received a copy of the GNU General Public License
17  along with this program. If not, see <http://www.gnu.org/licenses/>.
18 
19 ***/
20 
21 #ifndef AUDIOMONITOR_H
22 #define AUDIOMONITOR_H
23 
24 #include <QWidget>
25 #include <QTimer>
26 
27 class AudioMonitor : public QWidget
28 {
29  Q_OBJECT
30 public:
31  explicit AudioMonitor(QWidget *parent = 0);
32  void set_value(const QVector<double>& values);
33 
34 protected:
35  void paintEvent(QPaintEvent *);
36  void resizeEvent(QResizeEvent *);
37 
38 signals:
39 
40 public slots:
41 
42 private:
43  QLinearGradient gradient;
44  QVector<double> values;
45  QTimer clear_timer;
46 
47 private slots:
48  void clear();
49 };
50 
51 #endif // AUDIOMONITOR_H
Definition: audiomonitor.h:27
-
1 #ifndef AUDIONOISEEFFECT_H
2 #define AUDIONOISEEFFECT_H
3 
4 #include "project/effect.h"
5 
6 class AudioNoiseEffect : public Effect {
7  Q_OBJECT
8 public:
9  AudioNoiseEffect(Clip* c, const EffectMeta* em);
10  void process_audio(double timecode_start, double timecode_end, quint8* samples, int nb_bytes, int channel_count);
11 
12  EffectField* amount_val;
13  EffectField* mix_val;
14 };
15 
16 #endif // AUDIONOISEEFFECT_H
Definition: effect.h:146
-
Definition: effect.h:27
-
Definition: audionoiseeffect.h:6
-
Definition: clip.h:33
-
Definition: effectfield.h:23
+
1 /***
2 
3  Olive - Non-Linear Video Editor
4  Copyright (C) 2019 Olive Team
5 
6  This program is free software: you can redistribute it and/or modify
7  it under the terms of the GNU General Public License as published by
8  the Free Software Foundation, either version 3 of the License, or
9  (at your option) any later version.
10 
11  This program is distributed in the hope that it will be useful,
12  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  GNU General Public License for more details.
15 
16  You should have received a copy of the GNU General Public License
17  along with this program. If not, see <http://www.gnu.org/licenses/>.
18 
19 ***/
20 
21 #ifndef AUDIONOISEEFFECT_H
22 #define AUDIONOISEEFFECT_H
23 
24 #include "project/effect.h"
25 
26 class AudioNoiseEffect : public Effect {
27  Q_OBJECT
28 public:
29  AudioNoiseEffect(Clip* c, const EffectMeta* em);
30  void process_audio(double timecode_start, double timecode_end, quint8* samples, int nb_bytes, int channel_count);
31 
32  EffectField* amount_val;
33  EffectField* mix_val;
34 };
35 
36 #endif // AUDIONOISEEFFECT_H
Definition: effect.h:166
+
Definition: effect.h:47
+
Definition: audionoiseeffect.h:26
+
Definition: clip.h:53
+
Definition: effectfield.h:43
-
1 #ifndef CACHER_H
2 #define CACHER_H
3 
4 #include <QThread>
5 #include <QVector>
6 
7 class Clip;
8 
9 class Cacher : public QThread
10 {
11 // Q_OBJECT
12 public:
13  Cacher(Clip* c);
14  void run();
15 
16  bool caching;
17 
18  // must be set before caching
19  long playhead;
20  bool reset;
21  bool scrubbing;
22  bool interrupt;
23  bool queued;
24  int playback_speed;
25  QVector<Clip*> nests;
26 
27 private:
28  Clip* clip;
29 };
30 
31 void open_clip_worker(Clip* clip);
32 void cache_clip_worker(Clip* clip, long playhead, bool reset, bool scrubbing, QVector<Clip *> nest, int playback_speed);
33 void close_clip_worker(Clip* clip);
34 
35 #endif // CACHER_H
Definition: cacher.h:9
-
Definition: clip.h:33
+
1 /***
2 
3  Olive - Non-Linear Video Editor
4  Copyright (C) 2019 Olive Team
5 
6  This program is free software: you can redistribute it and/or modify
7  it under the terms of the GNU General Public License as published by
8  the Free Software Foundation, either version 3 of the License, or
9  (at your option) any later version.
10 
11  This program is distributed in the hope that it will be useful,
12  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  GNU General Public License for more details.
15 
16  You should have received a copy of the GNU General Public License
17  along with this program. If not, see <http://www.gnu.org/licenses/>.
18 
19 ***/
20 
21 #ifndef CACHER_H
22 #define CACHER_H
23 
24 #include <QThread>
25 #include <QVector>
26 
27 class Clip;
28 
29 class Cacher : public QThread
30 {
31 // Q_OBJECT
32 public:
33  Cacher(Clip* c);
34  void run();
35 
36  bool caching;
37 
38  // must be set before caching
39  long playhead;
40  bool reset;
41  bool scrubbing;
42  bool interrupt;
43  bool queued;
44  int playback_speed;
45  QVector<Clip*> nests;
46 
47 private:
48  Clip* clip;
49 };
50 
51 void open_clip_worker(Clip* clip);
52 void cache_clip_worker(Clip* clip, long playhead, bool reset, bool scrubbing, QVector<Clip *> nest, int playback_speed);
53 void close_clip_worker(Clip* clip);
54 
55 #endif // CACHER_H
Definition: cacher.h:29
+
Definition: clip.h:53
-
1 #ifndef CHECKBOXEX_H
2 #define CHECKBOXEX_H
3 
4 #include <QCheckBox>
5 
6 class CheckboxEx : public QCheckBox
7 {
8  Q_OBJECT
9 public:
10  CheckboxEx(QWidget* parent = 0);
11 private slots:
12  void checkbox_command();
13 };
14 
15 #endif // CHECKBOXEX_H
Definition: checkboxex.h:6
+
1 /***
2 
3  Olive - Non-Linear Video Editor
4  Copyright (C) 2019 Olive Team
5 
6  This program is free software: you can redistribute it and/or modify
7  it under the terms of the GNU General Public License as published by
8  the Free Software Foundation, either version 3 of the License, or
9  (at your option) any later version.
10 
11  This program is distributed in the hope that it will be useful,
12  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  GNU General Public License for more details.
15 
16  You should have received a copy of the GNU General Public License
17  along with this program. If not, see <http://www.gnu.org/licenses/>.
18 
19 ***/
20 
21 #ifndef CHECKBOXEX_H
22 #define CHECKBOXEX_H
23 
24 #include <QCheckBox>
25 
26 class CheckboxEx : public QCheckBox
27 {
28  Q_OBJECT
29 public:
30  CheckboxEx(QWidget* parent = 0);
31 private slots:
32  void checkbox_command();
33 };
34 
35 #endif // CHECKBOXEX_H
Definition: checkboxex.h:26
+ +

The ClickableLabel class. + More...

+ +

#include <clickablelabel.h>

Inheritance diagram for ClickableLabel:
@@ -94,7 +99,10 @@ Public Member Functions void mousePressEvent (QMouseEvent *ev)   -
The documentation for this class was generated from the following files: