WPEQtViewBackend.h [plain text]
#pragma once
#include <gbm.h>
#include <epoxy/egl.h>
#include <QHoverEvent>
#include <QKeyEvent>
#include <QMouseEvent>
#include <QOffscreenSurface>
#include <QOpenGLContext>
#include <QPointer>
#include <QWheelEvent>
#include <wpe/fdo-egl.h>
#include <wpe/fdo.h>
class WPEQtView;
class Q_DECL_EXPORT WPEQtViewBackend {
WTF_MAKE_FAST_ALLOCATED;
public:
static std::unique_ptr<WPEQtViewBackend> create(const QSizeF&, QPointer<QOpenGLContext>, EGLDisplay, QPointer<WPEQtView>);
WPEQtViewBackend(const QSizeF&, EGLDisplay, EGLContext, QPointer<QOpenGLContext>, QPointer<WPEQtView>);
virtual ~WPEQtViewBackend();
void resize(const QSizeF&);
GLuint texture(QOpenGLContext*);
bool hasValidSurface() const { return m_surface.isValid(); };
void dispatchHoverEnterEvent(QHoverEvent*);
void dispatchHoverLeaveEvent(QHoverEvent*);
void dispatchHoverMoveEvent(QHoverEvent*);
void dispatchMousePressEvent(QMouseEvent*);
void dispatchMouseReleaseEvent(QMouseEvent*);
void dispatchWheelEvent(QWheelEvent*);
void dispatchKeyEvent(QKeyEvent*, bool state);
void dispatchTouchEvent(QTouchEvent*);
struct wpe_view_backend* backend() const { return wpe_view_backend_exportable_fdo_get_view_backend(m_exportable); };
private:
void displayImage(struct wpe_fdo_egl_exported_image*);
uint32_t modifiers() const;
EGLDisplay m_eglDisplay { nullptr };
EGLContext m_eglContext { nullptr };
struct wpe_view_backend_exportable_fdo* m_exportable { nullptr };
struct wpe_fdo_egl_exported_image* m_lockedImage { nullptr };
QPointer<WPEQtView> m_view;
QOffscreenSurface m_surface;
QSizeF m_size;
GLuint m_textureId { 0 };
unsigned m_program { 0 };
unsigned m_textureUniform { 0 };
bool m_hovering { false };
uint32_t m_mouseModifiers { 0 };
uint32_t m_keyboardModifiers { 0 };
uint32_t m_mousePressedButton { 0 };
};