You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
o3de/Code/Editor/QtUtilWin.h

78 lines
2.0 KiB
C++

/*
* 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
*
*/
#pragma once
#include <QRect>
#include <QColor>
#include <QPixmap>
#include <QString>
#include <QPointF>
#include <QRectF>
#include <QVector>
#include <QWidget>
#include <QWindow>
#include <QApplication>
#ifdef Q_OS_WIN
# include <QtWinExtras/QtWin>
# include <QtGui/qpa/qplatformnativeinterface.h>
# include <objidl.h>
AZ_PUSH_DISABLE_WARNING(4458, "-Wunknown-warning-option")
# include <GdiPlus.h>
AZ_POP_DISABLE_WARNING
#endif // Q_OS_WIN
#include "Util/EditorUtils.h"
namespace QtUtil
{
#ifdef Q_OS_WIN
inline HWND getNativeHandle(QWidget* widget)
{
QWindow* window = widget->windowHandle();
QPlatformNativeInterface* nativeInterface = QGuiApplication::platformNativeInterface();
return static_cast<HWND>(nativeInterface->nativeResourceForWindow(QByteArrayLiteral("handle"), window));
}
#endif // Q_OS_WIN
//! a helper class which captures the HWND of a given widget for the duration of its life cycle.
//! used mainly to set the parent of popup dialogs like file dialogs which are still MFC classes.
class QtMFCScopedHWNDCapture
{
public:
QtMFCScopedHWNDCapture(QWidget* source = nullptr)
{
if (!source)
{
source = qApp->activeWindow();
}
if (source)
{
m_widget = source;
}
}
~QtMFCScopedHWNDCapture()
{
m_widget = nullptr;
m_attached = false;
}
// this is here so that it will also work for widgets that need parents if we upgrade the file dialog and other dialogs to be widget based
operator QWidget*()
{
return m_widget;
}
private:
bool m_attached = false;
QWidget* m_widget = nullptr;
};
}