| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- /*
- * Copyright (c) Contributors to the Open 3D Engine Project.
- * For complete copyright and license terms please see the LICENSE at the root of this distribution.
- *
- * SPDX-License-Identifier: Apache-2.0 OR MIT
- *
- */
- #include <Window/MaterialEditorMainWindow.h>
- #include <Window/MaterialEditorViewportContent.h>
- #include <QApplication>
- #include <QMessageBox>
- #include <QWindow>
- namespace MaterialEditor
- {
- MaterialEditorMainWindow::MaterialEditorMainWindow(const AZ::Crc32& toolId, QWidget* parent)
- : Base(toolId, "MaterialEditorMainWindow", parent)
- {
- m_assetBrowser->GetSearchWidget()->SetFilterState("", AZ::RPI::StreamingImageAsset::Group, true);
- m_assetBrowser->GetSearchWidget()->SetFilterState("", AZ::RPI::MaterialAsset::Group, true);
- m_documentInspector = new AtomToolsFramework::AtomToolsDocumentInspector(m_toolId, this);
- m_documentInspector->SetDocumentSettingsPrefix("/O3DE/Atom/MaterialEditor/DocumentInspector");
- AddDockWidget("Inspector", m_documentInspector, Qt::RightDockWidgetArea);
- // Set up the toolbar that controls the viewport settings
- m_toolBar = new AtomToolsFramework::EntityPreviewViewportToolBar(m_toolId, this);
- // Create the viewport widget that will be shared between all material editor documents
- m_materialViewport = new AtomToolsFramework::EntityPreviewViewportWidget(m_toolId, this);
- // Initialize the entity context that will be used to create all of the entities displayed in the viewport
- auto entityContext = AZStd::make_shared<AzFramework::EntityContext>();
- entityContext->InitContext();
- // Initialize the atom scene and pipeline that will bind to the viewport window to render entities and presets
- auto viewportScene = AZStd::make_shared<AtomToolsFramework::EntityPreviewViewportScene>(
- m_toolId, m_materialViewport, entityContext, "MaterialEditorViewportWidget", "passes/mainrenderpipeline.azasset");
- // Viewport content will instantiate all of the entities that will be displayed and controlled by the viewport
- auto viewportContent = AZStd::make_shared<MaterialEditorViewportContent>(m_toolId, m_materialViewport, entityContext);
- // The input controller creates and binds input behaviors to control viewport objects
- auto viewportController = AZStd::make_shared<AtomToolsFramework::EntityPreviewViewportInputController>(m_toolId, m_materialViewport, viewportContent);
- // Inject the entity context, scene, content, and controller into the viewport widget
- m_materialViewport->Init(entityContext, viewportScene, viewportContent, viewportController);
- // Register the toolbar in the viewport as the central widget, or main view of the material editor
- centralWidget()->layout()->addWidget(m_toolBar);
- centralWidget()->layout()->addWidget(m_materialViewport);
- m_viewportSettingsInspector = new AtomToolsFramework::EntityPreviewViewportSettingsInspector(m_toolId, this);
- AddDockWidget("Viewport Settings", m_viewportSettingsInspector, Qt::LeftDockWidgetArea);
- SetDockWidgetVisible("Viewport Settings", false);
- OnDocumentOpened(AZ::Uuid::CreateNull());
- }
- void MaterialEditorMainWindow::OnDocumentOpened(const AZ::Uuid& documentId)
- {
- Base::OnDocumentOpened(documentId);
- m_documentInspector->SetDocumentId(documentId);
- }
- void MaterialEditorMainWindow::ResizeViewportRenderTarget(uint32_t width, uint32_t height)
- {
- QSize requestedViewportSize = QSize(width, height) / devicePixelRatioF();
- QSize currentViewportSize = m_materialViewport->size();
- QSize offset = requestedViewportSize - currentViewportSize;
- QSize requestedWindowSize = size() + offset;
- resize(requestedWindowSize);
- AZ_Assert(
- m_materialViewport->size() == requestedViewportSize,
- "Resizing the window did not give the expected viewport size. Requested %d x %d but got %d x %d.",
- requestedViewportSize.width(), requestedViewportSize.height(), m_materialViewport->size().width(),
- m_materialViewport->size().height());
- [[maybe_unused]] QSize newDeviceSize = m_materialViewport->size();
- AZ_Warning(
- "Material Editor", static_cast<uint32_t>(newDeviceSize.width()) == width && static_cast<uint32_t>(newDeviceSize.height()) == height,
- "Resizing the window did not give the expected frame size. Requested %d x %d but got %d x %d.", width, height,
- newDeviceSize.width(), newDeviceSize.height());
- }
- void MaterialEditorMainWindow::LockViewportRenderTargetSize(uint32_t width, uint32_t height)
- {
- m_materialViewport->LockRenderTargetSize(width, height);
- }
- void MaterialEditorMainWindow::UnlockViewportRenderTargetSize()
- {
- m_materialViewport->UnlockRenderTargetSize();
- }
- AZStd::string MaterialEditorMainWindow::GetHelpDialogText() const
- {
- return R"(<html><head/><body>
- <p><h3><u>Camera Controls</u></h3></p>
- <p><b>LMB</b> - rotate camera</p>
- <p><b>RMB</b> or <b>Alt+LMB</b> - orbit camera around target</p>
- <p><b>MMB</b> - pan camera on its xy plane</p>
- <p><b>Alt+RMB</b> or <b>LMB+RMB</b> - dolly camera on its z axis</p>
- <p><b>Ctrl+LMB</b> - rotate model</p>
- <p><b>Shift+LMB</b> - rotate environment</p>
- </body></html>)";
- }
- } // namespace MaterialEditor
- #include <Window/moc_MaterialEditorMainWindow.cpp>
|