From e26c7d443a4999581dfbc8d6100c526915967f5a Mon Sep 17 00:00:00 2001 From: justburner Date: Fri, 28 Jan 2022 06:28:10 +0000 Subject: [PATCH 1/2] Stop motion play sound on capture and deciseconds resolution --- toonz/sources/stopmotion/stopmotion.cpp | 57 ++++++--- toonz/sources/stopmotion/stopmotion.h | 18 ++- .../stopmotion/stopmotioncontroller.cpp | 116 ++++++++++-------- .../sources/stopmotion/stopmotioncontroller.h | 14 ++- toonz/sources/toonz/Resources/camera_snap.wav | Bin 0 -> 13644 bytes toonz/sources/toonz/toonz.qrc | 1 + 6 files changed, 129 insertions(+), 77 deletions(-) create mode 100644 toonz/sources/toonz/Resources/camera_snap.wav diff --git a/toonz/sources/stopmotion/stopmotion.cpp b/toonz/sources/stopmotion/stopmotion.cpp index b5223407..e603dd5d 100644 --- a/toonz/sources/stopmotion/stopmotion.cpp +++ b/toonz/sources/stopmotion/stopmotion.cpp @@ -46,9 +46,11 @@ TEnv::IntVar StopMotionOpacity("StopMotionOpacity", 204); TEnv::IntVar StopMotionAlwaysLiveView("StopMotionAlwaysLiveView", 0); TEnv::IntVar StopMotionPlaceOnXSheet("StopMotionPlaceOnXSheet", 1); -TEnv::IntVar StopMotionReviewTime("StopMotionReviewTime", 1); +TEnv::IntVar StopMotionReviewDSec("StopMotionReviewDSec", 10); +TEnv::IntVar StopMotionIntervalDSec("StopMotionIntervalDSec", 100); TEnv::IntVar StopMotionUseNumpad("StopMotionUseNumpad", 0); TEnv::IntVar StopMotionDrawBeneathLevels("StopMotionDrawBeneathLevels", 1); +TEnv::IntVar StopMotionPlayCaptureSound("StopMotionPlayCaptureSound", 0); // Connected camera TEnv::StringVar StopMotionCameraName("CamCapCameraName", ""); @@ -252,9 +254,11 @@ StopMotion::StopMotion() { m_alwaysLiveView = StopMotionAlwaysLiveView; m_placeOnXSheet = StopMotionPlaceOnXSheet; - m_reviewTime = StopMotionReviewTime; + m_reviewTimeDSec = StopMotionReviewDSec; + m_intervalDSec = StopMotionIntervalDSec; m_useNumpadShortcuts = StopMotionUseNumpad; m_drawBeneathLevels = StopMotionDrawBeneathLevels; + m_playCaptureSound = StopMotionPlayCaptureSound; m_numpadForStyleSwitching = Preferences::instance()->isUseNumpadForSwitchingStylesEnabled(); setUseNumpadShortcuts(m_useNumpadShortcuts); @@ -265,6 +269,7 @@ StopMotion::StopMotion() { m_intervalTimer = new QTimer(this); m_countdownTimer = new QTimer(this); m_webcamOverlayTimer = new QTimer(this); + m_camSnapSound = new QSound(":Resources/camera_snap.wav"); // Make the interval timer single-shot. When the capture finished, restart // timer for next frame. @@ -517,10 +522,10 @@ void StopMotion::setPlaceOnXSheet(bool on) { //----------------------------------------------------------------- -void StopMotion::setReviewTime(int time) { - m_reviewTime = time; - StopMotionReviewTime = time; - emit(reviewTimeChangedSignal(time)); +void StopMotion::setReviewTimeDSec(int timeDSec) { + m_reviewTimeDSec = timeDSec; + StopMotionReviewDSec = timeDSec; + emit(reviewTimeChangedSignal(timeDSec)); } //----------------------------------------------------------------- @@ -619,8 +624,8 @@ void StopMotion::toggleInterval(bool on) { void StopMotion::startInterval() { if (m_liveViewStatus > 1) { - m_intervalTimer->start(m_intervalTime * 1000); - if (m_intervalTime != 0) m_countdownTimer->start(100); + m_intervalTimer->start(m_intervalDSec * 100); + if (m_intervalDSec != 0) m_countdownTimer->start(100); m_intervalStarted = true; emit(intervalStarted()); } else { @@ -641,8 +646,9 @@ void StopMotion::stopInterval() { //----------------------------------------------------------------- -void StopMotion::setIntervalAmount(int value) { - m_intervalTime = value; +void StopMotion::setIntervalDSec(int value) { + m_intervalDSec = value; + StopMotionIntervalDSec = value; emit(intervalAmountChanged(value)); } @@ -663,10 +669,10 @@ void StopMotion::onIntervalCaptureTimerTimeout() { void StopMotion::restartInterval() { // restart interval timer for capturing next frame (it is single shot) if (m_isTimeLapse && m_intervalStarted) { - m_intervalTimer->start(m_intervalTime * 1000); + m_intervalTimer->start(m_intervalDSec * 100); // restart the count down as well (for aligning the timing. It is not // single shot) - if (m_intervalTime != 0) m_countdownTimer->start(100); + if (m_intervalDSec != 0) m_countdownTimer->start(100); } } @@ -1314,6 +1320,14 @@ void StopMotion::getSubsampling() { //----------------------------------------------------------------------------- +void StopMotion::setPlayCaptureSound(bool on) { + m_playCaptureSound = on; + StopMotionPlayCaptureSound = on; + emit(playCaptureSignal(on)); +} + +//----------------------------------------------------------------------------- + void StopMotion::update() { getSubsampling(); } //----------------------------------------------------------------------------- @@ -1666,9 +1680,9 @@ bool StopMotion::importImage() { // for now always save. This can be tweaked later sl->save(); m_sl = sl; - if (getReviewTime() > 0 && !m_isTimeLapse) { + if (getReviewTimeDSec() > 0 && !m_isTimeLapse) { m_liveViewStatus = LiveViewPaused; - m_reviewTimer->start(getReviewTime() * 1000); + m_reviewTimer->start(getReviewTimeDSec() * 100); } /* placement in xsheet */ @@ -1691,7 +1705,7 @@ bool StopMotion::importImage() { xsh->setCell(row + i, col, TXshCell(sl, fid)); } app->getCurrentColumn()->setColumnIndex(col); - if (getReviewTime() == 0 || m_isTimeLapse) + if (getReviewTimeDSec() == 0 || m_isTimeLapse) app->getCurrentFrame()->setFrame(row + m_captureNumberOfFrames); m_xSheetFrameNumber = row + 1 + m_captureNumberOfFrames; emit(xSheetFrameNumberChanged(m_xSheetFrameNumber)); @@ -1737,7 +1751,7 @@ bool StopMotion::importImage() { xsh->setCell(row + i, foundCol, TXshCell(sl, fid)); } app->getCurrentColumn()->setColumnIndex(foundCol); - if (getReviewTime() == 0 || m_isTimeLapse) + if (getReviewTimeDSec() == 0 || m_isTimeLapse) app->getCurrentFrame()->setFrame(row + m_captureNumberOfFrames); m_xSheetFrameNumber = row + 1 + m_captureNumberOfFrames; emit(xSheetFrameNumberChanged(m_xSheetFrameNumber)); @@ -1753,7 +1767,7 @@ bool StopMotion::importImage() { xsh->setCell(row + i, col, TXshCell(sl, fid)); } app->getCurrentColumn()->setColumnIndex(col); - if (getReviewTime() == 0 || m_isTimeLapse) + if (getReviewTimeDSec() == 0 || m_isTimeLapse) app->getCurrentFrame()->setFrame(row + m_captureNumberOfFrames); m_xSheetFrameNumber = row + 1 + m_captureNumberOfFrames; emit(xSheetFrameNumberChanged(m_xSheetFrameNumber)); @@ -1765,6 +1779,9 @@ bool StopMotion::importImage() { //----------------------------------------------------------------- void StopMotion::captureImage() { + if (m_playCaptureSound) { + m_camSnapSound->play(); + } if (m_isTimeLapse && !m_intervalStarted) { startInterval(); return; @@ -1801,7 +1818,7 @@ void StopMotion::captureWebcamImage() { m_light->showOverlays(); m_webcamOverlayTimer->start(500); } else { - if (getReviewTime() > 0 && !m_isTimeLapse) { + if (getReviewTimeDSec() > 0 && !m_isTimeLapse) { m_timer->stop(); if (m_liveViewStatus > LiveViewClosed) { // m_liveViewStatus = LiveViewPaused; @@ -1821,7 +1838,7 @@ void StopMotion::captureWebcamOnTimeout() { saveTestShot(); return; } - if (getReviewTime() > 0 && !m_isTimeLapse) { + if (getReviewTimeDSec() > 0 && !m_isTimeLapse) { m_timer->stop(); if (m_liveViewStatus > LiveViewClosed) { // m_liveViewStatus = LiveViewPaused; @@ -1846,7 +1863,7 @@ void StopMotion::captureDslrImage() { return; } #endif - if (getReviewTime() > 0 && !m_isTimeLapse) { + if (getReviewTimeDSec() > 0 && !m_isTimeLapse) { m_timer->stop(); } diff --git a/toonz/sources/stopmotion/stopmotion.h b/toonz/sources/stopmotion/stopmotion.h index 77cb9ad9..66c59042 100644 --- a/toonz/sources/stopmotion/stopmotion.h +++ b/toonz/sources/stopmotion/stopmotion.h @@ -29,6 +29,7 @@ #include #include +#include class QCamera; class QCameraInfo; @@ -85,6 +86,9 @@ private: std::map m_oldActionMap; std::map m_liveViewImageMap; + bool m_playCaptureSound = false; + QSound* m_camSnapSound = 0; + public: enum LiveViewStatus { LiveViewClosed = 0, @@ -104,14 +108,14 @@ public: bool m_userCalledPause = false; bool m_drawBeneathLevels = true; bool m_isTimeLapse = false; - int m_reviewTime = 2; + int m_reviewTimeDSec = 20; bool m_isTestShot = false; QString m_tempFile, m_tempRaw; TXshSimpleLevel* m_sl; // timers QTimer* m_timer; - int m_intervalTime = 10; + int m_intervalDSec = 100; bool m_intervalStarted = false; QTimer* m_reviewTimer; QTimer *m_intervalTimer, *m_countdownTimer, *m_webcamOverlayTimer; @@ -183,7 +187,8 @@ public: void toggleInterval(bool on); void startInterval(); void stopInterval(); - void setIntervalAmount(int value); + void setIntervalDSec(int value); + int getIntervalDSec() { return m_intervalDSec; }; void restartInterval(); // options @@ -200,12 +205,14 @@ public: void toggleNumpadShortcuts(bool on); void toggleNumpadForFocusCheck(bool on); void setDrawBeneathLevels(bool on); - void setReviewTime(int time); - int getReviewTime() { return m_reviewTime; } + void setReviewTimeDSec(int timeDSec); + int getReviewTimeDSec() { return m_reviewTimeDSec; } void getSubsampling(); void setSubsampling(); int getSubsamplingValue() { return m_subsampling; } void setSubsamplingValue(int subsampling); + void setPlayCaptureSound(bool on); + bool getPlayCaptureSound() { return m_playCaptureSound; } // saving and loading void saveXmlFile(); @@ -264,6 +271,7 @@ signals: void useNumpadSignal(bool); void drawBeneathLevelsSignal(bool); void reviewTimeChangedSignal(int); + void playCaptureSignal(bool); // time lapse void intervalToggled(bool); diff --git a/toonz/sources/stopmotion/stopmotioncontroller.cpp b/toonz/sources/stopmotion/stopmotioncontroller.cpp index bb9f4504..75472045 100644 --- a/toonz/sources/stopmotion/stopmotioncontroller.cpp +++ b/toonz/sources/stopmotion/stopmotioncontroller.cpp @@ -36,6 +36,7 @@ // TnzQt includes #include "toonzqt/filefield.h" #include "toonzqt/intfield.h" +#include "toonzqt/doublefield.h" #include "toonzqt/menubarcommand.h" // Qt includes @@ -1374,32 +1375,50 @@ StopMotionController::StopMotionController(QWidget *parent) : QWidget(parent) { // Make Options Page QGroupBox *webcamBox = new QGroupBox(tr("Webcam Options"), this); QGroupBox *dslrBox = new QGroupBox(tr("DSLR Options"), this); - QGroupBox *timerFrame = new QGroupBox(tr("Time Lapse"), this); - m_timerCB = new QCheckBox(tr("Use time lapse"), this); - m_timerIntervalFld = new DVGui::IntField(this); - timerFrame->setObjectName("CleanupSettingsFrame"); + m_timerCB = new QGroupBox(tr("Use Time Lapse"), this); + m_timerIntervalFld = new DVGui::DoubleField(this, true, 1); + m_timerCB->setCheckable(true); + m_timerCB->setObjectName("CleanupSettingsFrame"); m_timerCB->setChecked(false); - m_timerIntervalFld->setRange(0, 60); - m_timerIntervalFld->setValue(10); - m_timerIntervalFld->setDisabled(true); + m_timerIntervalFld->setRange(0.0, 60.0); + m_timerIntervalFld->setValue(0.0); - m_postCaptureReviewFld = new DVGui::IntField(this); - m_postCaptureReviewFld->setRange(0, 10); + m_postCaptureReviewFld = new DVGui::DoubleField(this, true, 1); + m_postCaptureReviewFld->setRange(0.0, 10.0); + m_postCaptureReviewFld->setValue(0.0); m_subsamplingFld = new DVGui::IntField(this); m_subsamplingFld->setRange(1, 30); m_subsamplingFld->setDisabled(true); - m_placeOnXSheetCB = new QCheckBox(this); + m_placeOnXSheetCB = new QCheckBox(tr("Place on XSheet"), this); m_placeOnXSheetCB->setToolTip(tr("Place the frame in the Scene")); - m_directShowLabel = new QLabel(tr("Use Direct Show Webcam Drivers"), this); - m_directShowCB = new QCheckBox(this); - m_useMjpgCB = new QCheckBox(this); - m_useNumpadCB = new QCheckBox(this); - m_drawBeneathCB = new QCheckBox(this); + m_directShowCB = new QCheckBox(tr("Use Direct Show Webcam Drivers"), this); + m_useMjpgCB = new QCheckBox(tr("Use MJPG with Webcam"), this); + m_useNumpadCB = new QCheckBox(tr("Use Numpad Shortcuts When Active"), this); + m_useNumpadCB->setToolTip( + tr("Requires restarting camera when toggled\n" + "NP 1 = Previous Frame\n" + "NP 2 = Next Frame\n" + "NP 3 = Jump To Camera\n" + "NP 5 = Toggle Live View\n" + "NP 6 = Short Play\n" + "NP 8 = Loop\n" + "NP 0 = Play\n" + "Period = Use Live View Images\n" + "Plus = Raise Opacity\n" + "Minus = Lower Opacity\n" + "Enter = Capture\n" + "BackSpace = Remove Frame\n" + "Multiply = Toggle Zoom\n" + "Divide = Focus Check")); + m_drawBeneathCB = new QCheckBox(tr("Show Camera Below Other Levels"), this); + m_liveViewOnAllFramesCB = + new QCheckBox(tr("Show Live View on All Frames"), this); + m_playSound = new QCheckBox(tr("Play Sound on Capture"), this); + m_playSound->setToolTip(tr("Make a click sound on each capture")); - m_liveViewOnAllFramesCB = new QCheckBox(this); QVBoxLayout *optionsOutsideLayout = new QVBoxLayout; QGridLayout *optionsLayout = new QGridLayout; optionsLayout->setSpacing(3); @@ -1414,11 +1433,8 @@ StopMotionController::StopMotionController(QWidget *parent) : QWidget(parent) { optionsOutsideLayout->addWidget(dslrBox, Qt::AlignCenter); dslrBox->hide(); - webcamLayout->addWidget(m_directShowCB, 0, 0, Qt::AlignRight); - webcamLayout->addWidget(m_directShowLabel, 0, 1, Qt::AlignLeft); - webcamLayout->addWidget(m_useMjpgCB, 1, 0, Qt::AlignRight); - webcamLayout->addWidget(new QLabel(tr("Use MJPG with Webcam")), 1, 1, - Qt::AlignLeft); + webcamLayout->addWidget(m_directShowCB, 0, 0, 1, 2); + webcamLayout->addWidget(m_useMjpgCB, 1, 0, 1, 2); webcamLayout->setColumnStretch(1, 30); webcamBox->setLayout(webcamLayout); webcamBox->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Maximum); @@ -1430,36 +1446,24 @@ StopMotionController::StopMotionController(QWidget *parent) : QWidget(parent) { timerLay->setHorizontalSpacing(3); timerLay->setVerticalSpacing(5); { - timerLay->addWidget(m_timerCB, 0, 0, 1, 2); - timerLay->addWidget(new QLabel(tr("Interval(sec):"), this), 1, 0, Qt::AlignRight); timerLay->addWidget(m_timerIntervalFld, 1, 1); } timerLay->setColumnStretch(0, 0); timerLay->setColumnStretch(1, 1); - timerFrame->setLayout(timerLay); - optionsOutsideLayout->addWidget(timerFrame); + m_timerCB->setLayout(timerLay); + optionsOutsideLayout->addWidget(m_timerCB); - checkboxLayout->addWidget(m_placeOnXSheetCB, 0, 0, 1, 1, Qt::AlignRight); - // checkboxLayout->addWidget(new QLabel(tr("Place in Scene")), 0, 1, - // Qt::AlignLeft); + checkboxLayout->addWidget(m_placeOnXSheetCB, 0, 0, 1, 2); m_placeOnXSheetCB->hide(); - checkboxLayout->addWidget(m_drawBeneathCB, 1, 0, Qt::AlignRight); - // checkboxLayout->addWidget(new QLabel(tr("Show Camera Below Other - // Levels")), - // 1, 1, Qt::AlignLeft); + checkboxLayout->addWidget(m_drawBeneathCB, 1, 0, 1, 2); m_drawBeneathCB->hide(); - checkboxLayout->addWidget(m_useNumpadCB, 2, 0, Qt::AlignRight); - checkboxLayout->addWidget( - new QLabel(tr("Use Numpad Shortcuts When Active")), 2, 1, - Qt::AlignLeft); - checkboxLayout->addWidget(m_liveViewOnAllFramesCB, 3, 0, Qt::AlignRight); + checkboxLayout->addWidget(m_useNumpadCB, 2, 0, 1, 2); + checkboxLayout->addWidget(m_liveViewOnAllFramesCB, 3, 0, 1, 2); m_liveViewOnAllFramesCB->hide(); - // checkboxLayout->addWidget(new QLabel(tr("Show Live View on All Frames")), - // 3, - // 1, Qt::AlignLeft); + checkboxLayout->addWidget(m_playSound, 4, 0, 1, 2); checkboxLayout->setColumnStretch(1, 30); optionsOutsideLayout->addLayout(checkboxLayout, Qt::AlignLeft); @@ -1766,7 +1770,8 @@ StopMotionController::StopMotionController(QWidget *parent) : QWidget(parent) { // Options Page ret = ret && connect(m_liveViewOnAllFramesCB, SIGNAL(stateChanged(int)), this, SLOT(onLiveViewOnAllFramesChanged(int))); - + ret = ret && connect(m_playSound, SIGNAL(toggled(bool)), this, + SLOT(onPlaySoundToggled(bool))); ret = ret && connect(m_placeOnXSheetCB, SIGNAL(stateChanged(int)), this, SLOT(onPlaceOnXSheetChanged(int))); ret = ret && connect(m_directShowCB, SIGNAL(stateChanged(int)), this, @@ -1802,6 +1807,8 @@ StopMotionController::StopMotionController(QWidget *parent) : QWidget(parent) { this, SLOT(onDrawBeneathSignal(bool))); ret = ret && connect(m_stopMotion, SIGNAL(reviewTimeChangedSignal(int)), this, SLOT(onReviewTimeChangedSignal(int))); + ret = ret && connect(m_stopMotion, SIGNAL(playCaptureSignal(bool)), this, + SLOT(onPlayCaptureSignal(bool))); // From Stop Motion Main ret = ret && connect(m_stopMotion, SIGNAL(newDimensions()), this, @@ -2024,6 +2031,7 @@ StopMotionController::StopMotionController(QWidget *parent) : QWidget(parent) { m_useNumpadCB->setChecked(m_stopMotion->getUseNumpadShortcuts()); m_drawBeneathCB->setChecked(m_stopMotion->m_drawBeneathLevels); m_liveViewOnAllFramesCB->setChecked(m_stopMotion->getAlwaysLiveView()); + m_playSound->setChecked(m_stopMotion->getPlayCaptureSound()); m_blackScreenForCapture->setChecked( m_stopMotion->m_light->getBlackCapture() ? true : false); if (m_stopMotion->m_light->getBlackCapture()) { @@ -2031,7 +2039,8 @@ StopMotionController::StopMotionController(QWidget *parent) : QWidget(parent) { m_screen2Box->setDisabled(true); m_screen3Box->setDisabled(true); } - m_postCaptureReviewFld->setValue(m_stopMotion->getReviewTime()); + m_postCaptureReviewFld->setValue(m_stopMotion->getReviewTimeDSec() / 10.0); + m_timerIntervalFld->setValue(m_stopMotion->getIntervalDSec() / 10.0); refreshCameraList(QString("")); onSceneSwitched(); @@ -2321,19 +2330,25 @@ void StopMotionController::onDrawBeneathSignal(bool on) { //----------------------------------------------------------------------------- void StopMotionController::onCaptureReviewFldEdited() { - m_stopMotion->setReviewTime(m_postCaptureReviewFld->getValue()); + m_stopMotion->setReviewTimeDSec(m_postCaptureReviewFld->getValue() * 10.0); } //----------------------------------------------------------------------------- void StopMotionController::onCaptureReviewSliderChanged(bool ignore) { - m_stopMotion->setReviewTime(m_postCaptureReviewFld->getValue()); + m_stopMotion->setReviewTimeDSec(m_postCaptureReviewFld->getValue() * 10.0); } //----------------------------------------------------------------------------- void StopMotionController::onReviewTimeChangedSignal(int time) { - m_postCaptureReviewFld->setValue(time); + m_postCaptureReviewFld->setValue(time / 10.0); +} + +//----------------------------------------------------------------------------- + +void StopMotionController::onPlayCaptureSignal(bool on) { + m_playSound->setChecked(on); } //----------------------------------------------------------------------------- @@ -3540,7 +3555,7 @@ void StopMotionController::onIntervalTimerCBToggled(bool on) { //----------------------------------------------------------------------------- void StopMotionController::onIntervalSliderValueChanged(bool on) { - m_stopMotion->setIntervalAmount(m_timerIntervalFld->getValue()); + m_stopMotion->setIntervalDSec(m_timerIntervalFld->getValue() * 10.0); } //----------------------------------------------------------------------------- @@ -3563,14 +3578,13 @@ void StopMotionController::onIntervalCountDownTimeout() { //----------------------------------------------------------------------------- void StopMotionController::onIntervalAmountChanged(int value) { m_timerIntervalFld->blockSignals(true); - m_timerIntervalFld->setValue(value); + m_timerIntervalFld->setValue(value / 10.0); m_timerIntervalFld->blockSignals(false); } //----------------------------------------------------------------------------- void StopMotionController::onIntervalToggled(bool on) { m_timerCB->blockSignals(true); - m_timerIntervalFld->setEnabled(on); m_captureButton->setCheckable(on); if (on) m_captureButton->setText(tr("Start Capturing")); @@ -3601,6 +3615,12 @@ void StopMotionController::onIntervalStopped() { //----------------------------------------------------------------------------- +void StopMotionController::onPlaySoundToggled(bool on) { + m_stopMotion->setPlayCaptureSound(on); +} + +//----------------------------------------------------------------------------- + void StopMotionController::openSaveInFolderPopup() { if (m_saveInFolderPopup->exec()) { QString oldPath = m_saveInFileFld->getPath(); diff --git a/toonz/sources/stopmotion/stopmotioncontroller.h b/toonz/sources/stopmotion/stopmotioncontroller.h index 14b21f82..4746c74c 100644 --- a/toonz/sources/stopmotion/stopmotioncontroller.h +++ b/toonz/sources/stopmotion/stopmotioncontroller.h @@ -15,6 +15,7 @@ #include "toonzqt/tabbar.h" #include "toonzqt/gutil.h" #include "toonzqt/colorfield.h" +#include "toonzqt/doublefield.h" // Qt includes #include @@ -208,21 +209,22 @@ class StopMotionController final : public QWidget { LevelNameLineEdit *m_levelNameEdit; QCheckBox *m_blackScreenForCapture, *m_placeOnXSheetCB, *m_directShowCB, *m_liveViewOnAllFramesCB, *m_useMjpgCB, *m_useNumpadCB, *m_drawBeneathCB, - *m_timerCB, *m_showScene1, *m_showScene2, + *m_playSound, *m_showScene1, *m_showScene2, *m_showScene3; //, *m_upsideDownCB; CameraCaptureLevelControl *m_camCapLevelControl; DVGui::FileField *m_saveInFileFld; DVGui::IntLineEdit *m_xSheetFrameNumberEdit; FrameNumberLineEdit *m_frameNumberEdit; - DVGui::IntField *m_onionOpacityFld, *m_postCaptureReviewFld, - *m_subsamplingFld; + DVGui::IntField *m_onionOpacityFld, *m_subsamplingFld; + DVGui::DoubleField *m_postCaptureReviewFld; StopMotionSaveInFolderPopup *m_saveInFolderPopup; - DVGui::IntField *m_timerIntervalFld; + DVGui::DoubleField *m_timerIntervalFld; DVGui::ColorField *m_screen1ColorFld, *m_screen2ColorFld, *m_screen3ColorFld; QGroupBox *m_screen1Box; QGroupBox *m_screen2Box; QGroupBox *m_screen3Box; QGroupBox *m_webcamAutoFocusGB; + QGroupBox *m_timerCB; QTimer *m_lightTestTimer; // tests variables @@ -302,6 +304,9 @@ protected slots: void onIntervalStarted(); void onIntervalStopped(); + // sound + void onPlaySoundToggled(bool); + // lights and screens void setScreen1Color(const TPixel32 &value, bool isDragging); void setScreen2Color(const TPixel32 &value, bool isDragging); @@ -384,6 +389,7 @@ protected slots: void onUseMjpgSignal(bool); void onUseDirectShowSignal(bool); void onReviewTimeChangedSignal(int); + void onPlayCaptureSignal(bool); void onUseNumpadSignal(bool); void onDrawBeneathSignal(bool); void onLiveViewChanged(bool); diff --git a/toonz/sources/toonz/Resources/camera_snap.wav b/toonz/sources/toonz/Resources/camera_snap.wav new file mode 100644 index 0000000000000000000000000000000000000000..1e7a1acec152479a74b6b133afd1dc7650c89a6c GIT binary patch literal 13644 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/brush.png Resources/camera.svg Resources/camera_small.svg + Resources/camera_snap.wav Resources/center.png Resources/clapboard.png Resources/curve.svg From 7dabca384cfd12bbc4db446def8f1d7a0448ed93 Mon Sep 17 00:00:00 2001 From: justburner Date: Sun, 6 Feb 2022 07:08:47 +0000 Subject: [PATCH 2/2] Stop motion patch --- toonz/sources/stopmotion/stopmotioncontroller.cpp | 1 - toonz/sources/stopmotion/stopmotioncontroller.h | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/toonz/sources/stopmotion/stopmotioncontroller.cpp b/toonz/sources/stopmotion/stopmotioncontroller.cpp index 75472045..8d7289a9 100644 --- a/toonz/sources/stopmotion/stopmotioncontroller.cpp +++ b/toonz/sources/stopmotion/stopmotioncontroller.cpp @@ -2049,7 +2049,6 @@ StopMotionController::StopMotionController(QWidget *parent) : QWidget(parent) { #ifndef _WIN32 m_directShowCB->hide(); - m_directShowLabel->hide(); #endif } diff --git a/toonz/sources/stopmotion/stopmotioncontroller.h b/toonz/sources/stopmotion/stopmotioncontroller.h index 4746c74c..9ad70cd0 100644 --- a/toonz/sources/stopmotion/stopmotioncontroller.h +++ b/toonz/sources/stopmotion/stopmotioncontroller.h @@ -192,7 +192,7 @@ class StopMotionController final : public QWidget { *m_focusFar3Button, *m_captureFilterSettingsBtn, *m_testLightsButton; QHBoxLayout *m_focusAndZoomLayout; QLabel *m_frameInfoLabel, *m_cameraSettingsLabel, *m_cameraModeLabel, - *m_resolutionLabel, *m_directShowLabel, *m_cameraStatusLabel, + *m_resolutionLabel, *m_cameraStatusLabel, *m_apertureLabel, *m_kelvinValueLabel, *m_isoLabel, *m_shutterSpeedLabel, *m_webcamLabel, *m_liveViewCompensationLabel; QToolButton *m_previousLevelButton, *m_previousFrameButton,