3
0

ResolutionSettingItemWidget.cpp 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. /*
  2. * Copyright (c) Contributors to the Open 3D Engine Project.
  3. * For complete copyright and license terms please see the LICENSE at the root of this distribution.
  4. *
  5. * SPDX-License-Identifier: Apache-2.0 OR MIT
  6. *
  7. */
  8. #include "ResolutionSettingItemWidget.h"
  9. #include <Source/Editor/ui_ResolutionSettingItemWidget.h>
  10. #include <BuilderSettings/PresetSettings.h>
  11. #include <QComboBox>
  12. #include <QSpinBox>
  13. namespace ImageProcessingAtomEditor
  14. {
  15. using namespace ImageProcessingAtom;
  16. ResolutionSettingItemWidget::ResolutionSettingItemWidget(ResoultionWidgetType type, QWidget* parent /*= nullptr*/)
  17. : QWidget(parent)
  18. , m_ui(new Ui::ResolutionSettingItemWidget)
  19. {
  20. m_ui->setupUi(this);
  21. m_type = type;
  22. EditorInternalNotificationBus::Handler::BusConnect();
  23. }
  24. ResolutionSettingItemWidget::~ResolutionSettingItemWidget()
  25. {
  26. EditorInternalNotificationBus::Handler::BusDisconnect();
  27. }
  28. void ResolutionSettingItemWidget::Init(AZStd::string platform, EditorTextureSetting* editorTextureSetting)
  29. {
  30. m_platform = platform;
  31. m_editorTextureSetting = editorTextureSetting;
  32. m_textureSetting = &m_editorTextureSetting->m_settingsMap[m_platform];
  33. m_preset = BuilderSettingManager::Instance()->GetPreset(m_textureSetting->m_preset, platform);
  34. SetupResolutionInfo();
  35. RefreshUI();
  36. if (m_type == ResoultionWidgetType::TexturePropety)
  37. {
  38. m_ui->formatLabel->show();
  39. m_ui->formatComboBox->hide();
  40. }
  41. else
  42. {
  43. m_ui->formatLabel->hide();
  44. m_ui->formatComboBox->show();
  45. QObject::connect(m_ui->formatComboBox, static_cast<void(QComboBox::*)(int)>(&QComboBox::currentIndexChanged), this, &ResolutionSettingItemWidget::OnChangeFormat);
  46. }
  47. QObject::connect(m_ui->downResSpinBox, static_cast<void(QSpinBox::*)(int)>(&QSpinBox::valueChanged), this, &ResolutionSettingItemWidget::OnChangeDownRes);
  48. }
  49. void ResolutionSettingItemWidget::RefreshUI()
  50. {
  51. m_ui->platformLabel->setText(EditorHelper::ToReadablePlatformString(m_platform).c_str());
  52. m_ui->downResSpinBox->setRange(m_minReduce, m_maxReduce);
  53. int clampedReduce = AZStd::min<int>(AZStd::max<int>(m_textureSetting->m_sizeReduceLevel, s_MinReduceLevel), s_MaxReduceLevel);
  54. auto it = m_resolutionInfos.begin();
  55. it = AZStd::next(it, clampedReduce);
  56. m_ui->downResSpinBox->setValue(it->reduce);
  57. QString finalResolution;
  58. if (it->arrayCount > 1)
  59. {
  60. finalResolution = QString("%1 x %2 x %3").arg(QString::number(it->width), QString::number(it->height), QString::number(it->arrayCount));
  61. }
  62. else
  63. {
  64. finalResolution = QString("%1 x %2").arg(QString::number(it->width), QString::number(it->height));
  65. }
  66. m_ui->sizeLabel->setText(finalResolution);
  67. QString finalFormat = GetFinalFormat(m_textureSetting->m_preset);
  68. if (m_type == ResoultionWidgetType::TexturePropety)
  69. {
  70. m_ui->formatLabel->setText(finalFormat);
  71. }
  72. else
  73. {
  74. SetupFormatComboBox();
  75. m_ui->formatComboBox->setCurrentText(finalFormat);
  76. }
  77. }
  78. void ResolutionSettingItemWidget::SetupResolutionInfo()
  79. {
  80. m_resolutionInfos = m_editorTextureSetting->GetResolutionInfo(m_platform, m_minReduce, m_maxReduce);
  81. }
  82. void ResolutionSettingItemWidget::OnChangeDownRes(int downRes)
  83. {
  84. if ((unsigned int)downRes >= m_minReduce && (unsigned int)downRes <= m_maxReduce)
  85. {
  86. m_textureSetting->m_sizeReduceLevel = downRes;
  87. RefreshUI();
  88. EditorInternalNotificationBus::Broadcast(&EditorInternalNotificationBus::Events::OnEditorSettingsChanged, false, m_platform);
  89. }
  90. }
  91. QString ResolutionSettingItemWidget::GetFinalFormat([[maybe_unused]] const ImageProcessingAtom::PresetName& preset)
  92. {
  93. if (m_preset && m_preset->m_pixelFormat >= 0 && m_preset->m_pixelFormat < ePixelFormat_Count)
  94. {
  95. return EditorHelper::s_PixelFormatString[m_preset->m_pixelFormat];
  96. }
  97. return QString();
  98. }
  99. void ResolutionSettingItemWidget::SetupFormatComboBox()
  100. {
  101. m_ui->formatComboBox->clear();
  102. }
  103. void ResolutionSettingItemWidget::OnChangeFormat([[maybe_unused]] int index)
  104. {
  105. bool oldState = m_ui->formatComboBox->blockSignals(true);
  106. m_ui->formatComboBox->blockSignals(oldState);
  107. }
  108. void ResolutionSettingItemWidget::OnEditorSettingsChanged(bool needRefresh, const AZStd::string& /*platform*/)
  109. {
  110. if (needRefresh)
  111. {
  112. m_preset = BuilderSettingManager::Instance()->GetPreset(m_textureSetting->m_preset, m_platform);
  113. SetupResolutionInfo();
  114. RefreshUI();
  115. }
  116. }
  117. }//namespace ImageProcessingAtomEditor
  118. #include <Source/Editor/moc_ResolutionSettingItemWidget.cpp>