From fd88184b47ca815341f84d79ff86fddb4b41dd26 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Fri, 31 Dec 2021 16:12:04 -0500 Subject: [PATCH] Add opacity to scripting overlay --- include/mainwindow.h | 3 +++ include/ui/mapview.h | 1 + include/ui/overlay.h | 4 ++++ src/mainwindow_scriptapi.cpp | 20 ++++++++++++++++++++ src/ui/graphicsview.cpp | 5 +++++ src/ui/overlay.cpp | 13 +++++++++++++ 6 files changed, 46 insertions(+) diff --git a/include/mainwindow.h b/include/mainwindow.h index 8d456476..27403e34 100644 --- a/include/mainwindow.h +++ b/include/mainwindow.h @@ -87,6 +87,9 @@ public: Q_INVOKABLE void setOverlaysPosition(int x, int y); Q_INVOKABLE void moveOverlay(int deltaX, int deltaY, int layer = 0); Q_INVOKABLE void moveOverlays(int deltaX, int deltaY); + Q_INVOKABLE int getOverlayOpacity(int layer); + Q_INVOKABLE void setOverlayOpacity(int opacity, int layer = 0); + Q_INVOKABLE void setOverlaysOpacity(int opacity); Q_INVOKABLE void addText(QString text, int x, int y, QString color = "#000000", int fontSize = 12, int layer = 0); Q_INVOKABLE void addRect(int x, int y, int width, int height, QString color = "#000000", int layer = 0); Q_INVOKABLE void addFilledRect(int x, int y, int width, int height, QString color = "#000000", int layer = 0); diff --git a/include/ui/mapview.h b/include/ui/mapview.h index a6c18aaa..54b1760f 100644 --- a/include/ui/mapview.h +++ b/include/ui/mapview.h @@ -16,6 +16,7 @@ public: void setOverlaysY(int y); void setOverlaysPosition(int x, int y); void moveOverlays(int deltaX, int deltaY); + void setOverlaysOpacity(int opacity); public: QMap overlayMap; diff --git a/include/ui/overlay.h b/include/ui/overlay.h index 27987f52..cc126e8d 100644 --- a/include/ui/overlay.h +++ b/include/ui/overlay.h @@ -75,12 +75,15 @@ public: this->x = 0; this->y = 0; this->hidden = false; + this->opacity = 1.0; } ~Overlay() { this->clearItems(); } bool getHidden(); void setHidden(bool hidden); + int getOpacity(); + void setOpacity(int opacity); int getX(); int getY(); void setX(int x); @@ -99,6 +102,7 @@ private: int x; int y; bool hidden; + qreal opacity; }; #endif // OVERLAY_H diff --git a/src/mainwindow_scriptapi.cpp b/src/mainwindow_scriptapi.cpp index 2ac40c10..64db8a89 100644 --- a/src/mainwindow_scriptapi.cpp +++ b/src/mainwindow_scriptapi.cpp @@ -353,6 +353,26 @@ void MainWindow::moveOverlays(int deltaX, int deltaY) { this->ui->graphicsView_Map->scene()->update(); } +int MainWindow::getOverlayOpacity(int layer) { + if (!this->ui || !this->ui->graphicsView_Map) + return 0; + return this->ui->graphicsView_Map->getOverlay(layer)->getOpacity(); +} + +void MainWindow::setOverlayOpacity(int opacity, int layer) { + if (!this->ui || !this->ui->graphicsView_Map) + return; + this->ui->graphicsView_Map->getOverlay(layer)->setOpacity(opacity); + this->ui->graphicsView_Map->scene()->update(); +} + +void MainWindow::setOverlaysOpacity(int opacity) { + if (!this->ui || !this->ui->graphicsView_Map) + return; + this->ui->graphicsView_Map->setOverlaysOpacity(opacity); + this->ui->graphicsView_Map->scene()->update(); +} + void MainWindow::addText(QString text, int x, int y, QString color, int fontSize, int layer) { if (!this->ui || !this->ui->graphicsView_Map) return; diff --git a/src/ui/graphicsview.cpp b/src/ui/graphicsview.cpp index 2c8d9e20..556b3eeb 100644 --- a/src/ui/graphicsview.cpp +++ b/src/ui/graphicsview.cpp @@ -69,6 +69,11 @@ void MapView::setOverlaysPosition(int x, int y) { overlay->setPosition(x, y); } +void MapView::setOverlaysOpacity(int opacity) { + foreach (Overlay * overlay, this->overlayMap) + overlay->setOpacity(opacity); +} + void MapView::moveOverlays(int deltaX, int deltaY) { foreach (Overlay * overlay, this->overlayMap) overlay->move(deltaX, deltaY); diff --git a/src/ui/overlay.cpp b/src/ui/overlay.cpp index f5483e39..635d76f9 100644 --- a/src/ui/overlay.cpp +++ b/src/ui/overlay.cpp @@ -26,6 +26,7 @@ void OverlayImage::render(QPainter *painter, int x, int y) { void Overlay::renderItems(QPainter *painter) { if (this->hidden) return; + painter->setOpacity(this->opacity); for (auto item : this->items) item->render(painter, this->x, this->y); } @@ -49,6 +50,18 @@ void Overlay::setHidden(bool hidden) { this->hidden = hidden; } +int Overlay::getOpacity() { + return this->opacity * 100; +} + +void Overlay::setOpacity(int opacity) { + if (opacity < 0 || opacity > 100) { + logError(QString("Invalid overlay opacity '%1'").arg(opacity)); + return; + } + this->opacity = static_cast(opacity) / 100; +} + int Overlay::getX() { return this->x; }