From 26396a4f7239ea3bc49b883d48f5c3605c76610a Mon Sep 17 00:00:00 2001 From: peri4 Date: Thu, 20 Mar 2025 18:43:42 +0300 Subject: [PATCH] add MapItemBase::renderHints --- libs/map/mapitembase.cpp | 16 +++++++++++++++- libs/map/mapitembase.h | 8 ++++++-- libs/map/mapview.cpp | 7 +++++-- 3 files changed, 26 insertions(+), 5 deletions(-) diff --git a/libs/map/mapitembase.cpp b/libs/map/mapitembase.cpp index 019223f..9c4268c 100644 --- a/libs/map/mapitembase.cpp +++ b/libs/map/mapitembase.cpp @@ -4,7 +4,9 @@ #include "osm_math_p.h" -MapItemBase::MapItemBase() {} +MapItemBase::MapItemBase() { + m_hints = QPainter::Antialiasing | QPainter::SmoothPixmapTransform; +} MapItemBase::~MapItemBase() { @@ -19,6 +21,18 @@ void MapItemBase::setInteracive(bool newInteracive) { } +void MapItemBase::setRenderHints(QPainter::RenderHints h) { + m_hints = h; + updateParent(); +} + + +void MapItemBase::setRenderHint(QPainter::RenderHint h, bool on) { + m_hints.setFlag(h, on); + updateParent(); +} + + void MapItemBase::setVisible(bool newVisible) { m_visible = newVisible; updateParent(); diff --git a/libs/map/mapitembase.h b/libs/map/mapitembase.h index 59e45e8..cb97e1a 100644 --- a/libs/map/mapitembase.h +++ b/libs/map/mapitembase.h @@ -1,7 +1,7 @@ /* QAD - Qt ADvanced - Ivan Pelipenko peri4ko@yandex.ru + Ivan Pelipenko peri4ko@yandex.ru This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by @@ -38,10 +38,13 @@ public: explicit MapItemBase(); virtual ~MapItemBase(); - bool isInteracive() const { return m_interacive; } void setInteracive(bool newInteracive); + QPainter::RenderHints renderHints() const { return m_hints; } + void setRenderHints(QPainter::RenderHints h); + void setRenderHint(QPainter::RenderHint h, bool on = true); + bool isVisible() const { return m_visible; } void setVisible(bool newVisible); bool isHidden() const { return !isVisible(); } @@ -97,6 +100,7 @@ private: QPointF m_position, m_scale = {1., 1.}, m_offset; QRectF m_bounding; QCursor m_cursor; + QPainter::RenderHints m_hints; QMap data_; }; diff --git a/libs/map/mapview.cpp b/libs/map/mapview.cpp index 3cf5430..73149bd 100644 --- a/libs/map/mapview.cpp +++ b/libs/map/mapview.cpp @@ -320,8 +320,7 @@ void MapView::drawBackground() { void MapView::drawItems(QPainter & p) { auto src_tr = p.transform(); - p.setRenderHint(QPainter::Antialiasing); - p.setRenderHint(QPainter::SmoothPixmapTransform); + QPainter::RenderHints cur_hints; QPoint mouse = mapFromGlobal(QCursor::pos()); MapItemBase * hover = nullptr; for (auto * i: items_) { @@ -332,6 +331,10 @@ void MapView::drawItems(QPainter & p) { p.translate(i->m_offset.x(), -i->m_offset.y()); p.rotate(i->getRotation()); if (!i->ignore_scale) p.scale(i->getScale().x(), i->getScale().y()); + if (cur_hints != i->renderHints()) { + cur_hints = i->renderHints(); + p.setRenderHints(cur_hints); + } i->draw(&p); QTransform mtr; mtr.rotate(-i->getRotation());