Integrating github/staging through commit b0dd7ed
This commit is contained in:
@@ -41,6 +41,65 @@
|
||||
|
||||
#include <AzQtComponents/Utilities/QtWindowUtilities.h>
|
||||
|
||||
// Class to implement the WindowRequestBus::Handler instead of the QViewport class.
|
||||
// This is to bypass a link warning that occurs in unity builds if EditorCommon dll
|
||||
// is linked along with a gem that also implements WindowRequestBus::Handler. The
|
||||
// issue is that QViewport has a dllexport so it causes duplicate code to be linked
|
||||
// in and a warning that there will be two of the same symbol in memory
|
||||
class QViewportRequests
|
||||
: public AzFramework::WindowRequestBus::Handler
|
||||
{
|
||||
public:
|
||||
QViewportRequests(QViewport& viewport)
|
||||
: m_viewport(viewport)
|
||||
{
|
||||
}
|
||||
|
||||
~QViewportRequests() override
|
||||
{
|
||||
AzFramework::WindowRequestBus::Handler::BusDisconnect();
|
||||
}
|
||||
|
||||
// WindowRequestBus::Handler...
|
||||
void SetWindowTitle(const AZStd::string& title) override
|
||||
{
|
||||
m_viewport.SetWindowTitle(title);
|
||||
}
|
||||
|
||||
AzFramework::WindowSize GetClientAreaSize() const override
|
||||
{
|
||||
return m_viewport.GetClientAreaSize();
|
||||
}
|
||||
|
||||
void ResizeClientArea(AzFramework::WindowSize clientAreaSize) override
|
||||
{
|
||||
m_viewport.ResizeClientArea(clientAreaSize);
|
||||
}
|
||||
|
||||
bool GetFullScreenState() const override
|
||||
{
|
||||
return m_viewport.GetFullScreenState();
|
||||
}
|
||||
|
||||
void SetFullScreenState(bool fullScreenState) override
|
||||
{
|
||||
m_viewport.SetFullScreenState(fullScreenState);
|
||||
}
|
||||
|
||||
bool CanToggleFullScreenState() const override
|
||||
{
|
||||
return m_viewport.CanToggleFullScreenState();
|
||||
}
|
||||
|
||||
void ToggleFullScreenState() override
|
||||
{
|
||||
m_viewport.ToggleFullScreenState();
|
||||
}
|
||||
|
||||
private:
|
||||
QViewport& m_viewport;
|
||||
};
|
||||
|
||||
struct QViewport::SPreviousContext
|
||||
{
|
||||
CCamera renderCamera;
|
||||
@@ -188,6 +247,8 @@ QViewport::QViewport(QWidget* parent, StartupMode startupMode)
|
||||
, m_private(new SPrivate())
|
||||
, m_cameraControlMode(CameraControlMode::NONE)
|
||||
{
|
||||
m_viewportRequests = AZStd::make_unique<QViewportRequests>(*this);
|
||||
|
||||
if (startupMode & StartupMode_Immediate)
|
||||
Startup();
|
||||
}
|
||||
@@ -213,6 +274,8 @@ void QViewport::Startup()
|
||||
QViewport::~QViewport()
|
||||
{
|
||||
DestroyRenderContext();
|
||||
|
||||
m_viewportRequests.reset();
|
||||
}
|
||||
|
||||
void QViewport::UpdateBackgroundColor()
|
||||
@@ -316,7 +379,7 @@ bool QViewport::CreateRenderContext()
|
||||
|
||||
if (AZ::Interface<AzFramework::AtomActiveInterface>::Get())
|
||||
{
|
||||
AzFramework::WindowRequestBus::Handler::BusConnect(windowHandle);
|
||||
m_viewportRequests.get()->BusConnect(windowHandle);
|
||||
AzFramework::WindowSystemNotificationBus::Broadcast(&AzFramework::WindowSystemNotificationBus::Handler::OnWindowCreated, windowHandle);
|
||||
|
||||
m_lastHwnd = windowHandle;
|
||||
@@ -346,7 +409,7 @@ void QViewport::DestroyRenderContext()
|
||||
m_renderContextCreated = false;
|
||||
|
||||
AzFramework::WindowNotificationBus::Event(windowHandle, &AzFramework::WindowNotificationBus::Handler::OnWindowClosed);
|
||||
AzFramework::WindowRequestBus::Handler::BusDisconnect();
|
||||
m_viewportRequests.get()->BusDisconnect();
|
||||
m_lastHwnd = 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -41,6 +41,7 @@ struct SMouseEvent;
|
||||
struct SViewportSettings;
|
||||
struct SViewportState;
|
||||
class QElapsedTimer;
|
||||
class QViewportRequests;
|
||||
|
||||
class EDITOR_COMMON_API QViewport;
|
||||
struct SRenderContext
|
||||
@@ -66,7 +67,6 @@ AZ_PUSH_DISABLE_DLL_EXPORT_BASECLASS_WARNING
|
||||
AZ_PUSH_DISABLE_DLL_EXPORT_MEMBER_WARNING
|
||||
class EDITOR_COMMON_API QViewport
|
||||
: public QWidget
|
||||
, public AzFramework::WindowRequestBus::Handler
|
||||
{
|
||||
Q_OBJECT
|
||||
AZ_POP_DISABLE_DLL_EXPORT_MEMBER_WARNING
|
||||
@@ -107,14 +107,14 @@ public:
|
||||
void SetSize(const QSize& size);
|
||||
void GetImageOffscreen(CImageEx& image, const QSize& customSize);
|
||||
|
||||
// WindowRequestBus::Handler...
|
||||
void SetWindowTitle(const AZStd::string& title) override;
|
||||
AzFramework::WindowSize GetClientAreaSize() const override;
|
||||
void ResizeClientArea(AzFramework::WindowSize clientAreaSize) override;
|
||||
bool GetFullScreenState() const override;
|
||||
void SetFullScreenState(bool fullScreenState) override;
|
||||
bool CanToggleFullScreenState() const override;
|
||||
void ToggleFullScreenState() override;
|
||||
// WindowRequestBus::Handler... (handler moved to cpp to resolve link issues in unity builds)
|
||||
void SetWindowTitle(const AZStd::string& title);
|
||||
AzFramework::WindowSize GetClientAreaSize() const;
|
||||
void ResizeClientArea(AzFramework::WindowSize clientAreaSize);
|
||||
bool GetFullScreenState() const;
|
||||
void SetFullScreenState(bool fullScreenState);
|
||||
bool CanToggleFullScreenState() const;
|
||||
void ToggleFullScreenState();
|
||||
|
||||
public slots:
|
||||
void Update();
|
||||
@@ -197,6 +197,7 @@ private:
|
||||
std::unique_ptr<SViewportSettings> m_settings;
|
||||
std::unique_ptr<SViewportState> m_state;
|
||||
std::vector<QViewportConsumer*> m_consumers;
|
||||
AZStd::unique_ptr<QViewportRequests> m_viewportRequests;
|
||||
AZ_POP_DISABLE_DLL_EXPORT_MEMBER_WARNING
|
||||
HWND m_lastHwnd = 0;
|
||||
bool m_resizeWindowEvent = false;
|
||||
|
||||
Reference in New Issue
Block a user