fix camera settings response

This commit is contained in:
shun-iwasawa 2020-12-18 14:28:25 +09:00 committed by manongjohn
parent fc41561bb3
commit af3d141dba
3 changed files with 16 additions and 10 deletions

View file

@ -40,7 +40,7 @@ class DoubleLineEdit;
class IntLineEdit;
class MeasuredDoubleLineEdit;
class CheckBox;
}
} // namespace DVGui
//---------------------------------------------------------------
@ -124,8 +124,8 @@ public:
// camera => widget fields (i.e. initialize widget)
void setFields(const TCamera *camera);
// widget fields => camera
void getFields(TCamera *camera);
// widget fields => camera return true if the value is actually changed
bool getFields(TCamera *camera);
QSize sizeHint() const override { return minimumSize(); }

View file

@ -224,11 +224,12 @@ void CameraSettingsPopup::updateWindowTitle() {
void CameraSettingsPopup::onChanged() {
TCamera *camera = getCamera();
if (!camera) return;
m_cameraSettingsWidget->getFields(camera);
TApp::instance()->getCurrentScene()->notifySceneChanged();
TApp::instance()->getCurrentXsheet()->notifyXsheetChanged();
if (m_cameraSettingsWidget->getFields(camera)) {
TApp::instance()->getCurrentScene()->notifySceneChanged();
TApp::instance()->getCurrentXsheet()->notifyXsheetChanged();
emit changed();
emit changed();
}
}
void CameraSettingsPopup::onNameChanged() {

View file

@ -591,9 +591,14 @@ void CameraSettingsWidget::setFields(const TCamera *camera) {
updatePresetListOm();
}
void CameraSettingsWidget::getFields(TCamera *camera) {
bool CameraSettingsWidget::getFields(TCamera *camera) {
TDimensionD old_sz = camera->getSize();
TDimension old_res = camera->getRes();
if (old_sz == getSize() && old_res == getRes()) return false;
camera->setSize(getSize());
camera->setRes(getRes());
return true;
}
TDimensionD CameraSettingsWidget::getSize() const {
@ -954,8 +959,8 @@ double CameraSettingsWidget::aspectRatioStringToValue(const QString &s) {
}
int i = s.indexOf("/");
if (i <= 0 || i + 1 >= s.length()) return s.toDouble();
int num = s.left(i).toInt();
int den = s.mid(i + 1).toInt();
int num = s.left(i).toInt();
int den = s.mid(i + 1).toInt();
if (den <= 0) den = 1;
return (double)num / (double)den;
}