This commit is contained in:
t 2026-01-14 13:26:52 -05:00 committed by GitHub
commit 2ff87b4782
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 24 additions and 4 deletions

View File

@ -70,7 +70,7 @@ private:
class Overlay
{
public:
Overlay() {
Overlay(QRect fromRect) : image(fromRect.size(), QImage::Format_ARGB32) {
this->x = 0;
this->y = 0;
this->angle = 0;
@ -79,10 +79,14 @@ public:
this->hidden = false;
this->opacity = 1.0;
this->clippingRect = nullptr;
this->image.setOffset(fromRect.topLeft());
this->image.fill(QColor(0, 0, 0, 0));
this->valid = false;
}
~Overlay() {
this->clearItems();
}
void invalidate() { this->valid = false; }
bool getHidden();
void setHidden(bool hidden);
int getOpacity();
@ -123,6 +127,8 @@ private:
bool hidden;
qreal opacity;
QRectF *clippingRect;
QImage image;
bool valid;
};
#else

View File

@ -59,7 +59,7 @@ void MapView::clearOverlayMap() {
Overlay * MapView::getOverlay(int layer) {
Overlay * overlay = this->overlayMap.value(layer, nullptr);
if (!overlay) {
overlay = new Overlay();
overlay = new Overlay(this->sceneRect().toRect());
this->overlayMap.insert(layer, overlay);
}
return overlay;

View File

@ -26,6 +26,18 @@ void Overlay::renderItems(QPainter *painter) {
painter->save();
// don't waste time if there are no updated to be made
if (!valid) {
QPainter overlayPainter(&this->image);
overlayPainter.setClipping(false);
QTransform t = overlayPainter.transform();
t.translate(-this->image.offset().x(), -this->image.offset().y());
overlayPainter.setTransform(t);
for (auto item : this->items) {
item->render(&overlayPainter);
}
}
if (this->clippingRect) {
painter->setClipping(true);
painter->setClipRect(*this->clippingRect);
@ -38,10 +50,11 @@ void Overlay::renderItems(QPainter *painter) {
painter->setTransform(transform);
painter->setOpacity(this->opacity);
for (auto item : this->items)
item->render(painter);
painter->drawImage(this->image.offset(), this->image);
painter->restore();
valid = true;
}
void Overlay::clearItems() {
@ -49,6 +62,7 @@ void Overlay::clearItems() {
delete item;
}
this->items.clear();
this->image.fill(QColor(0, 0, 0, 0));
}
QList<OverlayItem*> Overlay::getItems() {