diff --git a/stuff/profiles/layouts/menubar.xml b/stuff/profiles/layouts/menubar.xml
index 78ff09e9..e334b254 100644
--- a/stuff/profiles/layouts/menubar.xml
+++ b/stuff/profiles/layouts/menubar.xml
@@ -13,6 +13,7 @@
- MI_SaveLevelAs
- MI_Render
+ - MI_SaveAndRender
- MI_ShortcutPopup
diff --git a/stuff/profiles/layouts/rooms/Default/menubar_template.xml b/stuff/profiles/layouts/rooms/Default/menubar_template.xml
index e13f472b..b0e67801 100644
--- a/stuff/profiles/layouts/rooms/Default/menubar_template.xml
+++ b/stuff/profiles/layouts/rooms/Default/menubar_template.xml
@@ -245,6 +245,7 @@
MI_OutputSettings
MI_Render
+ MI_SaveAndRender
MI_FastRender
diff --git a/toonz/sources/toonz/mainwindow.cpp b/toonz/sources/toonz/mainwindow.cpp
index e2cdcb58..99b37426 100644
--- a/toonz/sources/toonz/mainwindow.cpp
+++ b/toonz/sources/toonz/mainwindow.cpp
@@ -1811,7 +1811,12 @@ void MainWindow::defineActions() {
tr("Control the settings that will be used to preview the scene."));
menuAct->setIcon(createQIcon("preview_settings"));
menuAct = createMenuRenderAction(
- MI_Render, tr("&Save and Render"), "Ctrl+Shift+R",
+ MI_Render, tr("&Render"), "Ctrl+Shift+R",
+ tr("Renders according to the settings and "
+ "location set in Output Settings."));
+ menuAct->setIcon(createQIcon("render"));
+ menuAct = createMenuRenderAction(
+ MI_SaveAndRender, tr("&Save and Render"), "",
tr("Saves the current scene and renders according to the settings and "
"location set in Output Settings."));
menuAct->setIcon(createQIcon("render"));
diff --git a/toonz/sources/toonz/menubar.cpp b/toonz/sources/toonz/menubar.cpp
index 1ed5c944..58be0332 100644
--- a/toonz/sources/toonz/menubar.cpp
+++ b/toonz/sources/toonz/menubar.cpp
@@ -622,7 +622,7 @@ QMenuBar *StackedMenuBar::createFullMenuBar() {
addMenuItem(renderMenu, MI_SavePreviewedFrames);
renderMenu->addSeparator();
addMenuItem(renderMenu, MI_OutputSettings);
- addMenuItem(renderMenu, MI_Render);
+ addMenuItem(renderMenu, MI_SaveAndRender);
renderMenu->addSeparator();
addMenuItem(renderMenu, MI_FastRender);
diff --git a/toonz/sources/toonz/menubarcommandids.h b/toonz/sources/toonz/menubarcommandids.h
index d5dd09a1..e87676bd 100644
--- a/toonz/sources/toonz/menubarcommandids.h
+++ b/toonz/sources/toonz/menubarcommandids.h
@@ -48,6 +48,7 @@
#define MI_OutputSettings "MI_OutputSettings"
#define MI_PreviewSettings "MI_PreviewSettings"
#define MI_Render "MI_Render"
+#define MI_SaveAndRender "MI_SaveAndRender"
#define MI_FastRender "MI_FastRender"
#define MI_Preview "MI_Preview"
#define MI_SoundTrack "MI_SoundTrack"
diff --git a/toonz/sources/toonz/outputsettingspopup.cpp b/toonz/sources/toonz/outputsettingspopup.cpp
index 51e8c36c..01c98f0f 100644
--- a/toonz/sources/toonz/outputsettingspopup.cpp
+++ b/toonz/sources/toonz/outputsettingspopup.cpp
@@ -222,14 +222,20 @@ OutputSettingsPopup::OutputSettingsPopup(bool isPreview)
QPushButton *removePresetButton = NULL;
m_dominantFieldOm = 0;
- m_renderButton = new QPushButton(tr("Save and Render"), this);
- if (isPreview) m_renderButton->setText("Preview");
+ m_renderButton = new QPushButton(tr("Render"), this);
+ m_saveAndRenderButton = new QPushButton(tr("Save and Render"), this);
+ if (isPreview) {
+ m_renderButton->setText("Preview");
+ m_saveAndRenderButton->hide();
+ }
if (!isPreview) {
showOtherSettingsButton = new QPushButton("", this);
otherSettingsLabel = new QLabel(tr("Other Settings"), this);
otherSettingsFrame = new QFrame(this);
m_renderButton->setIcon(createQIcon("render"));
m_renderButton->setIconSize(QSize(20, 20));
+ m_saveAndRenderButton->setIcon(createQIcon("render"));
+ m_saveAndRenderButton->setIconSize(QSize(20, 20));
// Board
m_addBoard = new DVGui::CheckBox(tr("Add Clapperboard"), this);
@@ -612,7 +618,10 @@ OutputSettingsPopup::OutputSettingsPopup(bool isPreview)
advancedSettingsBox->setLayout(fileSetBoxLay);
m_topLayout->addWidget(advancedSettingsBox, 0);
- m_topLayout->addWidget(m_renderButton);
+ QHBoxLayout* renderButtonLayout = new QHBoxLayout(this);
+ renderButtonLayout->addWidget(m_renderButton);
+ renderButtonLayout->addWidget(m_saveAndRenderButton);
+ m_topLayout->addLayout(renderButtonLayout);
m_topLayout->addStretch(1);
}
@@ -632,6 +641,8 @@ OutputSettingsPopup::OutputSettingsPopup(bool isPreview)
}
ret = ret && connect(m_renderButton, SIGNAL(pressed()), this,
SLOT(onRenderClicked()));
+ ret = ret && connect(m_saveAndRenderButton, SIGNAL(pressed()), this,
+ SLOT(onSaveAndRenderClicked()));
ret = ret &&
connect(m_outputCameraOm, SIGNAL(currentIndexChanged(const QString &)),
SLOT(onCameraChanged(const QString &)));
@@ -790,6 +801,12 @@ void OutputSettingsPopup::onRenderClicked() {
//-----------------------------------------------------------------------------
+void OutputSettingsPopup::onSaveAndRenderClicked() {
+ CommandManager::instance()->execute("MI_SaveAndRender");
+}
+
+//-----------------------------------------------------------------------------
+
/*! Update all field value take care current scene output properties.
*/
void OutputSettingsPopup::updateField() {
diff --git a/toonz/sources/toonz/outputsettingspopup.h b/toonz/sources/toonz/outputsettingspopup.h
index 723a34af..d42b31a6 100644
--- a/toonz/sources/toonz/outputsettingspopup.h
+++ b/toonz/sources/toonz/outputsettingspopup.h
@@ -50,6 +50,7 @@ class OutputSettingsPopup : public DVGui::Dialog {
DVGui::DoubleLineEdit *m_frameRateFld;
QPushButton *m_fileFormatButton;
QPushButton *m_renderButton;
+ QPushButton *m_saveAndRenderButton;
CameraSettingsPopup *m_cameraSettings;
QComboBox *m_presetCombo;
@@ -94,6 +95,7 @@ protected slots:
void onStereoChecked(int);
void onStereoChanged();
void onRenderClicked();
+ void onSaveAndRenderClicked();
/*-- OutputSettingsのPreset登録/削除/選択 --*/
void onAddPresetButtonPressed();
diff --git a/toonz/sources/toonz/rendercommand.cpp b/toonz/sources/toonz/rendercommand.cpp
index 811beacd..003906eb 100644
--- a/toonz/sources/toonz/rendercommand.cpp
+++ b/toonz/sources/toonz/rendercommand.cpp
@@ -174,6 +174,7 @@ public:
, m_timeStretchFactor(1)
, m_multimediaRender(0) {
setCommandHandler("MI_Render", this, &RenderCommand::onRender);
+ setCommandHandler("MI_SaveAndRender", this, &RenderCommand::onSaveAndRender);
setCommandHandler("MI_FastRender", this, &RenderCommand::onFastRender);
setCommandHandler("MI_Preview", this, &RenderCommand::onPreview);
}
@@ -182,6 +183,7 @@ public:
void rasterRender(bool isPreview);
void multimediaRender();
void onRender();
+ void onSaveAndRender();
void onFastRender();
void onPreview();
static void resetBgColor();
@@ -747,14 +749,22 @@ void RenderCommand::multimediaRender() {
//===================================================================
void RenderCommand::onRender() {
- bool saved = false;
- saved = IoCmd::saveAll();
- if (!saved) {
- return;
- }
doRender(false);
}
+//===================================================================
+
+void RenderCommand::onSaveAndRender() {
+ bool saved = false;
+ saved = IoCmd::saveAll();
+ if (!saved) {
+ return;
+ }
+ doRender(false);
+}
+
+//===================================================================
+
void RenderCommand::onFastRender() {
TOutputProperties *prop = TApp::instance()
->getCurrentScene()
@@ -787,6 +797,8 @@ void RenderCommand::onFastRender() {
prop->setPath(currPath);
}
+//---------------------------------------------------------
+
void RenderCommand::onPreview() { doRender(true); }
//---------------------------------------------------------