mirror of
https://github.com/huderlem/porymap.git
synced 2026-03-21 17:45:44 -05:00
Merge 520b1003b0 into af931c7f4d
This commit is contained in:
commit
2ff87b4782
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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() {
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user