diff --git a/toonz/sources/include/toonz/preferences.h b/toonz/sources/include/toonz/preferences.h index 2dc09f0..1238c8f 100644 --- a/toonz/sources/include/toonz/preferences.h +++ b/toonz/sources/include/toonz/preferences.h @@ -493,6 +493,9 @@ public: return m_rewindAfterPlaybackEnabled; } + void setShortPlayFrameCount(int frames); + int getShortPlayFrameCount() const { return m_shortPlayFrameCount; } + void enableFitToFlipbook(bool on); bool fitToFlipbookEnabled() const { return m_fitToFlipbookEnabled; } @@ -624,7 +627,8 @@ private: QString m_currentLanguage, m_currentStyleSheet; int m_undoMemorySize, // in megabytes m_dragCellsBehaviour, m_lineTestFpsCapture, m_defLevelType, m_xsheetStep, - m_shmmax, m_shmseg, m_shmall, m_shmmni, m_vectorSnappingTarget; + m_shmmax, m_shmseg, m_shmall, m_shmmni, m_vectorSnappingTarget, + m_shortPlayFrameCount; bool m_autoExposeEnabled, m_autoCreateEnabled, m_subsceneFolderEnabled, m_generatedMovieViewEnabled, m_xsheetAutopanEnabled, diff --git a/toonz/sources/toonz/mainwindow.cpp b/toonz/sources/toonz/mainwindow.cpp index 73a3525..dbf77aa 100644 --- a/toonz/sources/toonz/mainwindow.cpp +++ b/toonz/sources/toonz/mainwindow.cpp @@ -1873,6 +1873,7 @@ void MainWindow::defineActions() { MenuViewCommandType); createPlaybackAction(MI_Play, tr("Play"), "P"); + createPlaybackAction(MI_ShortPlay, tr("Short Play"), "Alt+P"); createPlaybackAction(MI_Loop, tr("Loop"), "L"); createPlaybackAction(MI_Pause, tr("Pause"), ""); createPlaybackAction(MI_FirstFrame, tr("First Frame"), "Alt+,"); diff --git a/toonz/sources/toonz/menubarcommandids.h b/toonz/sources/toonz/menubarcommandids.h index 996825b..97affc9 100644 --- a/toonz/sources/toonz/menubarcommandids.h +++ b/toonz/sources/toonz/menubarcommandids.h @@ -200,6 +200,7 @@ #define MI_Link "MI_Link" #define MI_Play "MI_Play" +#define MI_ShortPlay "MI_ShortPlay" #define MI_Loop "MI_Loop" #define MI_Pause "MI_Pause" #define MI_FirstFrame "MI_FirstFrame" diff --git a/toonz/sources/toonz/preferencespopup.cpp b/toonz/sources/toonz/preferencespopup.cpp index 73c23e4..0c21059 100644 --- a/toonz/sources/toonz/preferencespopup.cpp +++ b/toonz/sources/toonz/preferencespopup.cpp @@ -607,6 +607,12 @@ void PreferencesPopup::onRewindAfterPlayback(int index) { //----------------------------------------------------------------------------- +void PreferencesPopup::onShortPlayFrameCountChanged() { + m_pref->setShortPlayFrameCount(m_shortPlayFrameCount->getValue()); +} + +//----------------------------------------------------------------------------- + void PreferencesPopup::onFitToFlipbook(int index) { m_pref->enableFitToFlipbook(index == Qt::Checked); } @@ -1544,6 +1550,8 @@ PreferencesPopup::PreferencesPopup() m_blankColor = new ColorField(this, false, TPixel::Black); CheckBox *rewindAfterPlaybackCB = new CheckBox(tr("Rewind after Playback"), this); + int shortPlayFrames = m_pref->getShortPlayFrameCount(); + m_shortPlayFrameCount = new DVGui::IntLineEdit(this, shortPlayFrames, 1, 100); CheckBox *displayInNewFlipBookCB = new CheckBox(tr("Display in a New Flipbook Window"), this); CheckBox *fitToFlipbookCB = new CheckBox(tr("Fit to Flipbook"), this); @@ -2582,12 +2590,15 @@ PreferencesPopup::PreferencesPopup() Qt::AlignLeft | Qt::AlignVCenter); previewLayout->addWidget(openFlipbookAfterCB, 5, 0, 1, 3, Qt::AlignLeft | Qt::AlignVCenter); + previewLayout->addWidget(new QLabel(tr("Short Play Frame Number:")), 6, 0, + Qt::AlignRight | Qt::AlignVCenter); + previewLayout->addWidget(m_shortPlayFrameCount, 6, 1); } previewLayout->setColumnStretch(0, 0); previewLayout->setColumnStretch(1, 0); previewLayout->setColumnStretch(2, 1); for (int i = 0; i <= 5; i++) previewLayout->setRowStretch(i, 0); - previewLayout->setRowStretch(6, 1); + previewLayout->setRowStretch(7, 1); previewBox->setLayout(previewLayout); stackedWidget->addWidget(previewBox); @@ -3003,6 +3014,8 @@ PreferencesPopup::PreferencesPopup() SLOT(onBlankColorChanged(const TPixel32 &, bool))); ret = ret && connect(rewindAfterPlaybackCB, SIGNAL(stateChanged(int)), this, SLOT(onRewindAfterPlayback(int))); + ret = ret && connect(m_shortPlayFrameCount, SIGNAL(editingFinished()), + SLOT(onShortPlayFrameCountChanged())); ret = ret && connect(displayInNewFlipBookCB, SIGNAL(stateChanged(int)), this, SLOT(onPreviewAlwaysOpenNewFlip(int))); ret = ret && connect(fitToFlipbookCB, SIGNAL(stateChanged(int)), this, diff --git a/toonz/sources/toonz/preferencespopup.h b/toonz/sources/toonz/preferencespopup.h index 02e1d61..0e33868 100644 --- a/toonz/sources/toonz/preferencespopup.h +++ b/toonz/sources/toonz/preferencespopup.h @@ -70,7 +70,7 @@ private: DVGui::IntLineEdit *m_minuteFld, *m_chunkSizeFld, *m_iconSizeLx, *m_iconSizeLy, *m_viewShrink, *m_viewStep, *m_blanksCount, *m_onionPaperThickness, *m_animationStepField, *m_undoMemorySize, - *m_xsheetStep, *m_ffmpegTimeout; + *m_xsheetStep, *m_ffmpegTimeout, *m_shortPlayFrameCount; QPushButton *m_addLevelFormat, *m_removeLevelFormat, *m_editLevelFormat; @@ -122,6 +122,7 @@ private slots: void onXsheetAutopanChanged(int index); void onIgnoreAlphaonColumn1Changed(int index); void onRewindAfterPlayback(int index); + void onShortPlayFrameCountChanged(); void onPreviewAlwaysOpenNewFlip(int index); void onRasterOptimizedMemoryChanged(int index); void onSaveUnpaintedInCleanupChanged(int index); diff --git a/toonz/sources/toonz/vcrcommand.cpp b/toonz/sources/toonz/vcrcommand.cpp index e05c9e2..87ba6b9 100644 --- a/toonz/sources/toonz/vcrcommand.cpp +++ b/toonz/sources/toonz/vcrcommand.cpp @@ -127,6 +127,24 @@ public: } }; +//----------------------------------------------------------------------------- + +class ShortPlayCommand final : public MenuItemHandler { +public: + ShortPlayCommand() : MenuItemHandler(MI_ShortPlay) {} + + void execute() override { + int row = TApp::instance()->getCurrentFrame()->getFrame(); + int count = + TApp::instance()->getCurrentXsheet()->getXsheet()->getFrameCount(); + if (count > 8) { + TApp::instance()->getCurrentFrame()->setFrame(std::max( + 0, count - Preferences::instance()->getShortPlayFrameCount())); + } + CommandManager::instance()->execute(MI_Play); + } +}; + //********************************************************************************** // Commands instantiation //********************************************************************************** @@ -154,3 +172,4 @@ NextDrawingCommand nextDrawingCommand; PrevDrawingCommand prevDrawingCommand; NextStepCommand nextStepCommand; PrevStepCommand prevStepCommand; +ShortPlayCommand shortPlayCommand; diff --git a/toonz/sources/toonzlib/preferences.cpp b/toonz/sources/toonzlib/preferences.cpp index 79b498b..f9ccdfd 100644 --- a/toonz/sources/toonzlib/preferences.cpp +++ b/toonz/sources/toonzlib/preferences.cpp @@ -273,7 +273,8 @@ Preferences::Preferences() , m_generatedMovieViewEnabled(true) , m_xsheetAutopanEnabled(true) , m_ignoreAlphaonColumn1Enabled(false) - , m_rewindAfterPlaybackEnabled(true) + , m_rewindAfterPlaybackEnabled(false) + , m_shortPlayFrameCount(12) , m_fitToFlipbookEnabled(false) , m_previewAlwaysOpenNewFlipEnabled(false) , m_autosaveEnabled(false) @@ -382,6 +383,7 @@ Preferences::Preferences() getValue(*m_settings, "ignoreAlphaonColumn1Enabled", m_ignoreAlphaonColumn1Enabled); getValue(*m_settings, "rewindAfterPlayback", m_rewindAfterPlaybackEnabled); + getValue(*m_settings, "shortPlayFrameCount", m_shortPlayFrameCount); getValue(*m_settings, "previewAlwaysOpenNewFlip", m_previewAlwaysOpenNewFlipEnabled); getValue(*m_settings, "fitToFlipbook", m_fitToFlipbookEnabled); @@ -792,6 +794,13 @@ void Preferences::enableRewindAfterPlayback(bool on) { //----------------------------------------------------------------- +void Preferences::setShortPlayFrameCount(int frames) { + m_shortPlayFrameCount = frames; + m_settings->setValue("shortPlayFrameCount", QString::number(frames)); +} + +//----------------------------------------------------------------- + void Preferences::enableFitToFlipbook(bool on) { m_fitToFlipbookEnabled = on; m_settings->setValue("fitToFlipbook", on ? "1" : "0");