6#include "MarbleGraphicsItem.h"
8#include "MarbleGraphicsItem_p.h"
11#include "MarbleDebug.h"
22MarbleGraphicsItem::MarbleGraphicsItem(MarbleGraphicsItemPrivate *dd)
27MarbleGraphicsItem::~MarbleGraphicsItem()
34 Q_D(MarbleGraphicsItem);
36 if (!d->m_visibility) {
40 if (d->m_repaintNeeded) {
41 d->updateChildPositions();
43 d->m_repaintNeeded =
false;
46 setProjection( viewport );
48 if (d->positions().size() == 0) {
54 if ( ItemCoordinateCache == cacheMode()
55 || DeviceCoordinateCache == cacheMode() )
61 if (d->m_pixmap.size() != neededPixmapSize ||
62 d->m_pixmap.devicePixelRatio() != scale) {
65 if ( size().
isValid() && !size().isNull() ) {
66 d->m_pixmap =
QPixmap(neededPixmapSize);
67 d->m_pixmap.setDevicePixelRatio(scale);
70 mDebug() <<
"Warning: Invalid pixmap size suggested: " << d->m_size;
74 QPainter pixmapPainter(&d->m_pixmap);
78 pixmapPainter.translate( 0.5, 0.5 );
79 paint( &pixmapPainter );
82 for (MarbleGraphicsItem *item: d->m_children) {
83 item->paintEvent( &pixmapPainter, viewport );
87 for (
const QPointF& position: d->positions()) {
92 for (
const QPointF& position: d->positions()) {
99 for (MarbleGraphicsItem *item: d->m_children) {
100 item->paintEvent( painter, viewport );
110bool MarbleGraphicsItem::contains(
const QPointF& point )
const
112 Q_D(
const MarbleGraphicsItem);
113 for (
const QRectF& rect: d->boundingRects()) {
114 if( rect.contains( point ) )
127 for (
const QPointF &point: positions) {
128 QRectF rect( point, m_size );
140QSizeF MarbleGraphicsItem::size()
const
142 Q_D(
const MarbleGraphicsItem);
146AbstractMarbleGraphicsLayout *MarbleGraphicsItem::layout()
const
148 Q_D(
const MarbleGraphicsItem);
152void MarbleGraphicsItem::setLayout( AbstractMarbleGraphicsLayout *layout )
154 Q_D(MarbleGraphicsItem);
157 d->m_layout = layout;
161MarbleGraphicsItem::CacheMode MarbleGraphicsItem::cacheMode()
const
163 Q_D(
const MarbleGraphicsItem);
164 return d->m_cacheMode;
167void MarbleGraphicsItem::setCacheMode( CacheMode mode )
169 Q_D(MarbleGraphicsItem);
170 d->m_cacheMode = mode;
171 if (d->m_cacheMode == NoCache) {
172 d->m_repaintNeeded =
true;
176void MarbleGraphicsItem::update()
178 Q_D(MarbleGraphicsItem);
179 d->m_repaintNeeded =
true;
183 d->m_parent->update();
187bool MarbleGraphicsItem::visible()
const
189 Q_D(
const MarbleGraphicsItem);
190 return d->m_visibility;
193void MarbleGraphicsItem::setVisible(
bool visible )
195 Q_D(MarbleGraphicsItem);
196 d->m_visibility = visible;
199void MarbleGraphicsItem::hide()
204void MarbleGraphicsItem::show()
209void MarbleGraphicsItem::setSize(
const QSizeF& size )
211 Q_D(MarbleGraphicsItem);
212 if (d->m_size != size) {
218QSizeF MarbleGraphicsItem::contentSize()
const
223void MarbleGraphicsItem::setContentSize(
const QSizeF& size )
228QRectF MarbleGraphicsItem::contentRect()
const
233void MarbleGraphicsItem::paint(
QPainter *painter )
238bool MarbleGraphicsItem::eventFilter(
QObject *
object,
QEvent *e )
248 Q_D(
const MarbleGraphicsItem);
251 if (!d->m_children.isEmpty()) {
254 for(
const QPointF& absolutePosition: absolutePositions ) {
255 QPoint shiftedPos =
event->pos() - absolutePosition.toPoint();
257 if (
QRect(
QPoint( 0, 0 ), size().toSize() ).contains( shiftedPos ) ) {
258 for (MarbleGraphicsItem *child: d->m_children) {
261 for(
const QRectF& childRect: childRects ) {
262 if( childRect.toRect().contains( shiftedPos ) ) {
263 if( child->eventFilter(
object, e ) ) {
276void MarbleGraphicsItem::setProjection(
const ViewportParams *viewport )
278 Q_D(MarbleGraphicsItem);
279 d->setProjection(viewport);
This file contains the headers for ViewportParams.
A public class that controls what is visible in the viewport of a Marble map.
bool isValid(QStringView ifopt)
KIOCORE_EXPORT QStringList list(const QString &fileClass)
Binds a QML item to a specific geodetic location in screen coordinates.
void append(QList< T > &&value)
qsizetype count() const const
void reserve(qsizetype size)
qreal devicePixelRatio() const const
QPaintDevice * device() const const
void drawPixmap(const QPoint &point, const QPixmap &pixmap)
void translate(const QPoint &offset)
QSize toSize() const const