Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 7 additions & 1 deletion include/ui/overlay.h
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ class OverlayPixmap : public OverlayItem {
class Overlay
{
public:
Overlay() {
Overlay(QRect fromRect) : image(fromRect.size(), QImage::Format_ARGB32) {
this->x = 0;
this->y = 0;
this->angle = 0;
Expand All @@ -77,10 +77,14 @@ class Overlay
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();
Expand Down Expand Up @@ -121,6 +125,8 @@ class Overlay
bool hidden;
qreal opacity;
QRectF *clippingRect;
QImage image;
bool valid;
};

#endif // OVERLAY_H
2 changes: 1 addition & 1 deletion src/ui/graphicsview.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,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;
Expand Down
18 changes: 16 additions & 2 deletions src/ui/overlay.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,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);
Expand All @@ -37,17 +49,19 @@ 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() {
for (auto item : this->items) {
delete item;
}
this->items.clear();
this->image.fill(QColor(0, 0, 0, 0));
}

QList<OverlayItem*> Overlay::getItems() {
Expand Down