rpcsx/rpcs3/rpcs3qt/gs_frame.h
kd-11 58860614e3 rsx/qt: Implement native window hooks for win32 windows to allow communication between WndProc thread and rsx::thread
- This communication is important in communicating window events. Helps properly synchronize swapchain management on vulkan and stops nvidia crashing
- Do not block the message queue lest the driver detect window as not responding
2017-10-12 13:51:29 +03:00

52 lines
1.4 KiB
C++

#pragma once
#include "stdafx.h"
#include "Emu/RSX/GSRender.h"
#include <QWidget>
#include <QWindow>
class gs_frame : public QWindow, public GSFrameBase
{
Q_OBJECT
u64 m_frames = 0;
QString m_windowTitle;
bool m_show_fps;
bool m_disable_mouse;
bool m_in_sizing_event = false; //a signal that the window is about to be resized was received
bool m_user_interaction_active = false; //a signal indicating the window is being manually moved/resized was received
bool m_interactive_resize = false; //resize signal received while dragging window
public:
gs_frame(const QString& title, int w, int h, QIcon appIcon, bool disableMouse);
wm_event get_default_wm_event() const override;
protected:
virtual void paintEvent(QPaintEvent *event);
void keyPressEvent(QKeyEvent *keyEvent) override;
void OnFullScreen();
void close() override;
bool shown() override;
void hide() override;
void show() override;
void mouseDoubleClickEvent(QMouseEvent* ev) override;
void* handle() const override;
void* make_context() override;
void set_current(draw_context_t context) override;
void delete_context(void* context) override;
void flip(draw_context_t context, bool skip_frame=false) override;
int client_width() override;
int client_height() override;
bool nativeEvent(const QByteArray &eventType, void *message, long *result) override;
bool event(QEvent* ev) override;
private Q_SLOTS:
void HandleCursor(QWindow::Visibility visibility);
};