Merge pull request #739 from shun-iwasawa/stageinch2

Introducing Stage::standardDpi instead of updating Stage::inch
This commit is contained in:
Jeremy Bullock 2016-08-23 21:17:05 -06:00 committed by GitHub
commit 1bad81ba81
14 changed files with 82 additions and 24 deletions

View file

@ -347,14 +347,15 @@ TMeasureManager::TMeasureManager() {
m->add(cameraYFld.clone());
add(m);
const double stage_inch = 53.33333; // Consider changing to 120 or 160
const double stage_inch = 53.33333;
const double stage_standardDpi = 120;
TUnit fxLength(L"fxLength"),
fxInch(L"in", new TSimpleUnitConverter(1 / stage_inch)),
fxCm(L"cm", new TSimpleUnitConverter(2.54 / stage_inch)),
fxMm(L"mm", new TSimpleUnitConverter(25.4 / stage_inch)),
fxXfld(L"fld", new TSimpleUnitConverter(2 / stage_inch)),
fxPx(L"px", new TSimpleUnitConverter(1));
fxPx(L"px", new TSimpleUnitConverter(stage_standardDpi / stage_inch));
fxInch.addExtension(L"inch");
fxInch.addExtension(L"\"");
fxInch.addExtension(L"''");

View file

@ -43,7 +43,7 @@ namespace Stage {
//=============================================================================
DVVAR extern const double inch;
DVVAR extern const double vectorDpi;
DVVAR extern const double standardDpi;
class Visitor;
struct VisitArgs;

View file

@ -42,6 +42,9 @@ Constructs TCamera with default value, size (12,9) and resolution (768,576).
Constructs TCamera with default value, size (36, 20.25) and resolution
(1920,1080).
- 05/31/16
Constructs TCamera with default value, size (16, 9) and resolution
(1920,1080).
- 08/16/16
*/
TCamera();

View file

@ -54,6 +54,8 @@ public:
void notifyPreferenceChanged() { emit preferenceChanged(); }
void notifyPixelUnitSelected(bool on) { emit pixelUnitSelected(on); }
void setDirtyFlag(bool dirtyFlag) {
if (m_dirtyFlag == dirtyFlag) return;
m_dirtyFlag = dirtyFlag;
@ -75,6 +77,7 @@ signals:
void castFolderAdded(const TFilePath &path);
void nameSceneChanged();
void preferenceChanged();
void pixelUnitSelected(bool on);
};
#endif // TSCENEHANDLE_H

View file

@ -244,7 +244,8 @@ void CameraSettingsPopup::updateFields() {
TCamera *camera = cameraObject->getCamera();
if (Preferences::instance()->getPixelsOnly()) {
TDimension res = camera->getRes();
camera->setSize(TDimensionD(res.lx / Stage::inch, res.ly / Stage::inch));
camera->setSize(
TDimensionD(res.lx / Stage::standardDpi, res.ly / Stage::standardDpi));
}
if (camera) m_cameraSettingsWidget->setFields(camera);
}

View file

@ -1257,8 +1257,8 @@ bool IoCmd::saveSceneIfNeeded(QString msg) {
void IoCmd::newScene() {
RenderingSuspender suspender;
TApp *app = TApp::instance();
double cameraDpi = 53.33333; // used to be 64, consider changing to 120 or
// 160
double cameraDpi = 120; // used to be 64 and 53.33333
if (!saveSceneIfNeeded(QApplication::tr("New Scene"))) return;
IconGenerator::instance()->clearRequests();
@ -1861,6 +1861,35 @@ bool IoCmd::loadScene(const TFilePath &path, bool updateRecentFile,
QAction *act = CommandManager::instance()->getAction(MI_RevertScene);
if (act) act->setEnabled(exist);
// check if the output dpi is incompatible with pixels only mode
if (Preferences::instance()->getPixelsOnly()) {
TPointD dpi = scene->getCurrentCamera()->getDpi();
if (!areAlmostEqual(dpi.x, Stage::standardDpi) ||
!areAlmostEqual(dpi.y, Stage::standardDpi)) {
QString question = QObject::tr(
"This scene is incompatible with pixels only mode of the current "
"OpenToonz version.\nWhat would you like to do?");
QString turnOffPixelAnswer = QObject::tr("Turn off pixels only mode");
QString resizeSceneAnswer =
QObject::tr("Keep pixels only mode on and resize the scene");
int ret =
DVGui::MsgBox(question, turnOffPixelAnswer, resizeSceneAnswer, 0);
if (ret == 0) {
} // do nothing
else if (ret == 1) { // Turn off pixels only mode
Preferences::instance()->setPixelsOnly(false);
app->getCurrentScene()->notifyPixelUnitSelected(false);
} else { // ret = 2 : Resize the scene
TDimensionD camSize = scene->getCurrentCamera()->getSize();
TDimension camRes(camSize.lx * Stage::standardDpi,
camSize.ly * Stage::standardDpi);
scene->getCurrentCamera()->setRes(camRes);
app->getCurrentScene()->setDirtyFlag(true);
app->getCurrentXsheet()->notifyXsheetChanged();
}
}
}
printf("%s:%s loadScene() completed :\n", __FILE__, __FUNCTION__);
return true;
}

View file

@ -27,6 +27,7 @@
#include "toonz/tcamera.h"
#include "toonz/levelproperties.h"
#include "toonz/tonionskinmaskhandle.h"
#include "toonz/stage.h"
// TnzCore includes
#include "tsystem.h"
@ -217,22 +218,22 @@ Preferences::LevelFormat PreferencesPopup::FormatProperties::levelFormat()
void PreferencesPopup::onPixelsOnlyChanged(int index) {
bool enabled = index == Qt::Checked;
if (enabled) {
m_pref->setDefLevelDpi(53.33333);
m_pref->setDefLevelDpi(Stage::standardDpi);
m_pref->setPixelsOnly(true);
TCamera *camera;
camera =
TApp::instance()->getCurrentScene()->getScene()->getCurrentCamera();
TDimension camRes = camera->getRes();
TDimensionD camSize;
camSize.lx = camRes.lx / 53.33333;
camSize.ly = camRes.ly / 53.33333;
camSize.lx = camRes.lx / Stage::standardDpi;
camSize.ly = camRes.ly / Stage::standardDpi;
camera->setSize(camSize);
TDimension cleanupRes = CleanupSettingsModel::instance()
->getCurrentParameters()
->m_camera.getRes();
TDimensionD cleanupSize;
cleanupSize.lx = cleanupRes.lx / 53.33333;
cleanupSize.ly = cleanupRes.ly / 53.33333;
cleanupSize.lx = cleanupRes.lx / Stage::standardDpi;
cleanupSize.ly = cleanupRes.ly / Stage::standardDpi;
CleanupSettingsModel::instance()->getCurrentParameters()->m_camera.setSize(
cleanupSize);
m_pref->storeOldUnits();
@ -241,7 +242,7 @@ void PreferencesPopup::onPixelsOnlyChanged(int index) {
m_unitOm->setDisabled(true);
m_cameraUnitOm->setDisabled(true);
m_defLevelDpi->setDisabled(true);
m_defLevelDpi->setValue(53.33333);
m_defLevelDpi->setValue(Stage::standardDpi);
m_defLevelWidth->setMeasure("camera.lx");
m_defLevelHeight->setMeasure("camera.ly");
m_defLevelWidth->setValue(m_pref->getDefLevelWidth());
@ -275,6 +276,15 @@ void PreferencesPopup::onPixelsOnlyChanged(int index) {
}
}
//-----------------------------------------------------------------------------
void PreferencesPopup::onPixelUnitExternallySelected(bool on) {
// call slot function onPixelsOnlyChanged() accordingly
m_pixelsOnlyCB->setCheckState((on) ? Qt::Checked : Qt::Unchecked);
}
//-----------------------------------------------------------------------------
void PreferencesPopup::onUnitChanged(int index) {
if (index == 4 && m_pixelsOnlyCB->isChecked() == false) {
m_pixelsOnlyCB->setCheckState(Qt::Checked);
@ -1844,6 +1854,11 @@ PreferencesPopup::PreferencesPopup()
SLOT(onStyleSheetTypeChanged(int)));
ret = ret && connect(m_pixelsOnlyCB, SIGNAL(stateChanged(int)),
SLOT(onPixelsOnlyChanged(int)));
// pixels unit may deactivated externally on loading scene (see
// IoCmd::loadScene())
ret = ret && connect(TApp::instance()->getCurrentScene(),
SIGNAL(pixelUnitSelected(bool)), this,
SLOT(onPixelUnitExternallySelected(bool)));
ret = ret && connect(m_unitOm, SIGNAL(currentIndexChanged(int)),
SLOT(onUnitChanged(int)));
ret = ret && connect(m_cameraUnitOm, SIGNAL(currentIndexChanged(int)),

View file

@ -79,6 +79,7 @@ private:
private slots:
void onPixelsOnlyChanged(int index);
void onPixelUnitExternallySelected(bool on);
void onUnitChanged(int index);
void onCameraUnitChanged(int index);
void onRoomChoiceChanged(int index);

View file

@ -1864,8 +1864,12 @@ void SceneViewer::zoomQt(bool forward, bool reset) {
/*! a factor for getting pixel-based zoom ratio
*/
double SceneViewer::getDpiFactor() {
// When the current unit is "pixels", always use a standard dpi
if (Preferences::instance()->getPixelsOnly()) {
return Stage::inch / Stage::standardDpi;
}
// When preview mode, use a camera DPI
if (isPreviewEnabled()) {
else if (isPreviewEnabled()) {
return Stage::inch /
TApp::instance()
->getCurrentScene()

View file

@ -69,8 +69,8 @@ typedef std::vector<Player> PlayerSet;
thickness of
images .pli.
*/
const double Stage::inch = 53.33333; // consider changing to 120 or 160
const double Stage::vectorDpi = 53.3333;
const double Stage::inch = 53.33333;
const double Stage::standardDpi = 120;
namespace {
void updateOnionSkinSize(const PlayerSet &players) {

View file

@ -10,7 +10,8 @@
TCamera::TCamera()
//: m_size(12, 9), m_res(768, 576), m_xPrevalence(true)
: m_size(36, 20.25),
//: m_size(36, 20.25),
: m_size(16, 9),
m_res(1920, 1080),
m_xPrevalence(true) {}

View file

@ -759,8 +759,8 @@ void CameraSettingsWidget::onYResChanged() {
void CameraSettingsWidget::onXDpiChanged() {
if (Preferences::instance()->getPixelsOnly()) {
m_xDpiFld->setValue(Stage::inch);
m_yDpiFld->setValue(Stage::inch);
m_xDpiFld->setValue(Stage::standardDpi);
m_yDpiFld->setValue(Stage::standardDpi);
} else if (m_fspChk->isChecked())
m_yDpiFld->setValue(m_xDpiFld->getValue());
@ -781,8 +781,8 @@ void CameraSettingsWidget::onXDpiChanged() {
void CameraSettingsWidget::onYDpiChanged() {
if (Preferences::instance()->getPixelsOnly()) {
m_xDpiFld->setValue(Stage::inch);
m_yDpiFld->setValue(Stage::inch);
m_xDpiFld->setValue(Stage::standardDpi);
m_yDpiFld->setValue(Stage::standardDpi);
} else if (m_fspChk->isChecked())
m_xDpiFld->setValue(m_yDpiFld->getValue());
@ -850,8 +850,8 @@ void CameraSettingsWidget::onPresetSelected(const QString &str) {
}
if (Preferences::instance()->getPixelsOnly()) {
m_lxFld->setValue(xres / Stage::inch);
m_lyFld->setValue(yres / Stage::inch);
m_lxFld->setValue(xres / Stage::standardDpi);
m_lyFld->setValue(yres / Stage::standardDpi);
}
if (m_forCleanup && m_offsX && m_offsY && !xoffset.isEmpty() &&

View file

@ -95,7 +95,7 @@ void CleanupCameraSettingsWidget::setFields(
if (Preferences::instance()->getPixelsOnly()) {
TDimension res = cleanupParameters->m_camera.getRes();
cleanupParameters->m_camera.setSize(
TDimensionD(res.lx / Stage::inch, res.ly / Stage::inch));
TDimensionD(res.lx / Stage::standardDpi, res.ly / Stage::standardDpi));
}
m_cameraWidget->setFields(&cleanupParameters->m_camera);
m_offsX->setValue(cleanupParameters->m_offx);

View file

@ -31,7 +31,7 @@
using namespace DVGui;
QString DialogTitle = QObject::tr("OpenToonz 1.0");
QString DialogTitle = QObject::tr("OpenToonz 1.1");
//=============================================================================
namespace {