From 276b645e2c8c588f5a6ecda43f6c22f3cffabcd4 Mon Sep 17 00:00:00 2001 From: ArsenArsen Date: Wed, 6 Dec 2017 20:00:17 +0100 Subject: [PATCH] Finish up work for #46 --- src/screenoverlay/screenoverlay.cpp | 49 +++++++++++++++++++++++ src/screenoverlay/screenoverlay.hpp | 61 ++++++++++------------------- 2 files changed, 70 insertions(+), 40 deletions(-) diff --git a/src/screenoverlay/screenoverlay.cpp b/src/screenoverlay/screenoverlay.cpp index 02d9f11..3d588f8 100644 --- a/src/screenoverlay/screenoverlay.cpp +++ b/src/screenoverlay/screenoverlay.cpp @@ -6,6 +6,7 @@ #include #include #include +#include #include #include @@ -222,3 +223,51 @@ void ScreenOverlay::loadSettings() { setMovementPattern(settings::settings().value("movementPattern", MP_HJKL).value()); setGrid(settings::settings().value("gridEnabled", true).toBool()); } + +void ScreenOverlay::contextMenuEvent(QGraphicsSceneContextMenuEvent *e) { + QMenu menu(e->widget()); + connect(menu.addAction("Screen overlay settings"), &QAction::triggered, this, &ScreenOverlay::showSettings); + customizeContextMenu(e, &menu); + menu.exec(e->screenPos()); +} + +void ScreenOverlay::setCursorPos(QPointF cursorPos) { + if (!pixmap().rect().contains(cursorPos.toPoint())) return; + _cursorPos = cursorPos; +} + +QPointF ScreenOverlay::cursorPos() { + return _cursorPos; +} + +void ScreenOverlay::setGrid(bool grid) { + _grid = grid; + if (grid) { + updateMagnifierGrid(); + } else { + for (auto r : gridRectsX) delete r; + gridRectsX.clear(); + for (auto r : gridRectsY) delete r; + gridRectsY.clear(); + } +} + +bool ScreenOverlay::grid() { + return _grid; +} + +QColor ScreenOverlay::highlight() { + return _highlight; +} + +QPixmap &ScreenOverlay::pixmap() { + return _pixmap; +} + +void ScreenOverlay::setMovementPattern(MovementPattern nmp) { + _movementPattern = nmp; +} + +ScreenOverlay::MovementPattern ScreenOverlay::movementPattern() { + return _movementPattern; +} diff --git a/src/screenoverlay/screenoverlay.hpp b/src/screenoverlay/screenoverlay.hpp index 3ad6b39..2c5ada6 100644 --- a/src/screenoverlay/screenoverlay.hpp +++ b/src/screenoverlay/screenoverlay.hpp @@ -5,65 +5,42 @@ #include #include #include +#include class ScreenOverlay : public QGraphicsScene { Q_OBJECT public: enum MovementPattern { MP_JKL, MP_HJKL, MP_ARROWS }; + explicit ScreenOverlay(QPixmap pixmap, QObject *parent = 0); - void moveMouse(QPoint newPoint); - void moveMouseBy(QPoint delta); - MovementPattern movementPattern() { - return _movementPattern; - } - void setMovementPattern(MovementPattern nmp) { - _movementPattern = nmp; - } + MovementPattern movementPattern(); + void setMovementPattern(MovementPattern nmp); - QPixmap &pixmap() { - return _pixmap; - } - void updateMag(); - virtual QString generateMagHint() { - return QString(); - }; - void hideMag(); + QPixmap &pixmap(); void updateMagnifierGrid(); - QColor highlight() { - return _highlight; - } + QColor highlight(); void setHighlight(QColor highlight); - bool grid() { - return _grid; - } - void setGrid(bool grid) { - _grid = grid; - if (grid) { - updateMagnifierGrid(); - } else { - for (auto r : gridRectsX) delete r; - gridRectsX.clear(); - for (auto r : gridRectsY) delete r; - gridRectsY.clear(); - } - } - QPointF cursorPos() { - return _cursorPos; - } - void setCursorPos(QPointF cursorPos) { - if (!pixmap().rect().contains(cursorPos.toPoint())) return; - _cursorPos = cursorPos; - } + bool grid(); + void setGrid(bool grid); + QPointF cursorPos(); + void setCursorPos(QPointF cursorPos); + +public slots: void showSettings(); void hide(); void show(); void loadSettings(); + void updateMag(); + void hideMag(); + void moveMouse(QPoint newPoint); + void moveMouseBy(QPoint delta); protected: void mouseMoveEvent(QGraphicsSceneMouseEvent *e) override; void wheelEvent(QGraphicsSceneWheelEvent *e) override; void keyPressEvent(QKeyEvent *e) override; + void contextMenuEvent(QGraphicsSceneContextMenuEvent *e) override; virtual void mouseMoved(QGraphicsSceneMouseEvent *, QPointF, QPointF) { } @@ -72,6 +49,8 @@ protected: virtual QString generateHint() { return QString(); } + virtual void customizeContextMenu(QGraphicsSceneContextMenuEvent *, QMenu *) { + } private: QPointF _cursorPos = QPoint(0, 0); @@ -88,4 +67,6 @@ private: MovementPattern _movementPattern = MP_ARROWS; }; +Q_DECLARE_METATYPE(ScreenOverlay::MovementPattern) + #endif /* SCREENOVERLAY_HPP */