#ifndef ORBITHUB_RDP_DISPLAY_WIDGET_H #define ORBITHUB_RDP_DISPLAY_WIDGET_H #include #include class QKeyEvent; class QMouseEvent; class QPaintEvent; class QResizeEvent; class QWheelEvent; class RdpDisplayWidget : public QWidget { Q_OBJECT public: explicit RdpDisplayWidget(QWidget* parent = nullptr); void setFrame(const QImage& frame); void setRemoteDesktopSize(int width, int height); void clearFrame(); signals: void keyInput(int key, quint32 nativeScanCode, const QString& text, bool pressed, int modifiers); void mouseMoveInput(int x, int y); void mouseButtonInput(int x, int y, int button, bool pressed); void mouseWheelInput(int x, int y, int deltaX, int deltaY); void viewportSizeChanged(int width, int height); protected: void paintEvent(QPaintEvent* event) override; void resizeEvent(QResizeEvent* event) override; void keyPressEvent(QKeyEvent* event) override; void keyReleaseEvent(QKeyEvent* event) override; void mousePressEvent(QMouseEvent* event) override; void mouseReleaseEvent(QMouseEvent* event) override; void mouseMoveEvent(QMouseEvent* event) override; void wheelEvent(QWheelEvent* event) override; private: QImage m_frame; QSize m_remoteSize; QRectF renderRect() const; QPoint mapToRemote(const QPointF& pos) const; QSize effectiveRemoteSize() const; }; #endif