Marble

ScreenOverlayGraphicsItem.cpp
1 // SPDX-License-Identifier: LGPL-2.1-or-later
2 //
3 // SPDX-FileCopyrightText: 2012 Mohammed Nafees <[email protected]>
4 // SPDX-FileCopyrightText: 2012 Dennis Nienhüser <[email protected]>
5 //
6 
7 #include "ScreenOverlayGraphicsItem.h"
8 
9 #include "ViewportParams.h"
10 #include "GeoDataScreenOverlay.h"
11 #include "GeoPainter.h"
12 
13 namespace Marble {
14 
15 ScreenOverlayGraphicsItem::ScreenOverlayGraphicsItem( const GeoDataScreenOverlay *screenOverlay ) :
16  m_screenOverlay( screenOverlay )
17 {
18  /** @todo: take the possible size values into account according to kml spec */
19  setSize( QSizeF( m_screenOverlay->size().x(), m_screenOverlay->size().y() ) );
20 
21  if ( !m_screenOverlay->icon().isNull() ) {
22  m_pixmap = QPixmap::fromImage( m_screenOverlay->icon().scaled( size().toSize() ) );
23  }
24 }
25 
26 const GeoDataScreenOverlay *ScreenOverlayGraphicsItem::screenOverlay() const
27 {
28  return m_screenOverlay;
29 }
30 
31 void ScreenOverlayGraphicsItem::setProjection( const ViewportParams *viewport )
32 {
34  /** @todo: take overlayXY into account */
35  setPosition( QPointF( pixelValue( m_screenOverlay->screenXY().xunit(),
36  viewport->width(),
37  size().width(),
38  m_screenOverlay->screenXY().x() ),
39  viewport->height()-pixelValue( m_screenOverlay->screenXY().yunit(),
40  viewport->height(),
41  size().height(),
42  m_screenOverlay->screenXY().y() ) ) );
43 }
44 
45 qreal ScreenOverlayGraphicsItem::pixelValue( GeoDataVec2::Unit unit, qreal screenSize, qreal imageSize, qreal value )
46 {
47  switch (unit) {
48  case GeoDataVec2::Pixels:
49  return imageSize;
50  case GeoDataVec2::Fraction:
51  return value * screenSize;
52  case GeoDataVec2::InsetPixels:
53  return screenSize - imageSize - value;
54  }
55 
56  Q_ASSERT( false );
57  return 0.0;
58 }
59 
60 void ScreenOverlayGraphicsItem::paint( QPainter *painter )
61 {
62  if ( m_pixmap.isNull() ) {
63  painter->setBrush( m_screenOverlay->color() );
64  painter->drawRect( QRectF( QPointF( 0.0, 0.0 ), size() ) );
65  } else {
66  painter->drawPixmap( QPointF( 0.0, 0.0 ), m_pixmap );
67  }
68 }
69 
70 }
QPixmap fromImage(const QImage &image, Qt::ImageConversionFlags flags)
void drawPixmap(const QRectF &target, const QPixmap &pixmap, const QRectF &source)
void drawRect(const QRectF &rectangle)
Binds a QML item to a specific geodetic location in screen coordinates.
void setBrush(const QBrush &brush)
Q_INVOKABLE void setProjection(uint proj)
This file is part of the KDE documentation.
Documentation copyright © 1996-2023 The KDE developers.
Generated on Wed Oct 4 2023 04:09:43 by doxygen 1.8.17 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.