QGIS API Documentation  2.18.21-Las Palmas (9fba24a)
qgsmapcanvasmap.cpp
Go to the documentation of this file.
1 /***************************************************************************
2  qgsmapcanvasmap.cpp - draws the map in map canvas
3  ----------------------
4  begin : February 2006
5  copyright : (C) 2006 by Martin Dobias
6  email : wonder.sk at gmail dot com
7  ***************************************************************************
8  * *
9  * This program is free software; you can redistribute it and/or modify *
10  * it under the terms of the GNU General Public License as published by *
11  * the Free Software Foundation; either version 2 of the License, or *
12  * (at your option) any later version. *
13  * *
14  ***************************************************************************/
15 
16 #include "qgslogger.h"
17 #include "qgsmapcanvas.h"
18 #include "qgsmapcanvasmap.h"
19 #include "qgsmaprenderer.h"
20 #include "qgsmapsettings.h"
21 #include "qgsmaplayer.h"
22 
23 #include <QPainter>
24 
26  : QgsMapCanvasItem( canvas )
27 {
28  setZValue( -10 );
29 }
30 
32 {
33 }
34 
36 {
37  mImage = image;
38 
39  // For true retro fans: this is approximately how the graphics looked like in 1990
40  if ( mMapCanvas->property( "retro" ).toBool() )
41  mImage = mImage.scaled( mImage.width() / 3, mImage.height() / 3 )
42  .convertToFormat( QImage::Format_Indexed8, Qt::OrderedDither | Qt::OrderedAlphaDither );
43 
44  setRect( rect );
45 }
46 
48 {
49  int w = qRound( boundingRect().width() ) - 2, h = qRound( boundingRect().height() ) - 2; // setRect() makes the size +2 :-(
50  if ( mImage.size() != QSize( w, h ) )
51  {
52  QgsDebugMsg( QString( "map paint DIFFERENT SIZE: img %1,%2 item %3,%4" ).arg( mImage.width() ).arg( mImage.height() ).arg( w ).arg( h ) );
53  // This happens on zoom events when ::paint is called before
54  // the renderer has completed
55  }
56 
57  painter->drawImage( QRect( 0, 0, w, h ), mImage );
58 
59  // For debugging:
60 #if 0
61  QRectF br = boundingRect();
62  QPointF c = br.center();
63  double rad = std::max( br.width(), br.height() ) / 10;
64  painter->drawRoundedRect( br, rad, rad );
65  painter->drawLine( QLineF( 0, 0, br.width(), br.height() ) );
66  painter->drawLine( QLineF( br.width(), 0, 0, br.height() ) );
67 
68  double nw = br.width() * 0.5;
69  double nh = br.height() * 0.5;
70  br = QRectF( c - QPointF( nw / 2, nh / 2 ), QSize( nw, nh ) );
71  painter->drawRoundedRect( br, rad, rad );
72 
73  nw = br.width() * 0.5;
74  nh = br.height() * 0.5;
75  br = QRectF( c - QPointF( nw / 2, nh / 2 ), QSize( nw, nh ) );
76  painter->drawRoundedRect( br, rad, rad );
77 #endif
78 }
79 
81 {
82  return mImage;
83 }
A rectangle specified with double values.
Definition: qgsrectangle.h:35
QgsRectangle rect() const
returns canvas item rectangle in map units
#define QgsDebugMsg(str)
Definition: qgslogger.h:33
An abstract class for items that can be placed on the map canvas.
void drawLine(const QLineF &line)
Map canvas is a class for displaying all GIS data types on a canvas.
Definition: qgsmapcanvas.h:109
double ANALYSIS_EXPORT max(double x, double y)
Returns the maximum of two doubles or the first argument if both are equal.
virtual QRectF boundingRect() const override
default implementation for canvas items
QVariant property(const char *name) const
int width() const
void drawRoundedRect(const QRectF &rect, qreal xRadius, qreal yRadius, Qt::SizeMode mode)
Q_DECL_DEPRECATED QPaintDevice & paintDevice()
void setRect(const QgsRectangle &r, bool resetRotation=true)
sets canvas item rectangle in map units
QPointF center() const
virtual void paint(QPainter *painter) override
function to be implemented by derived classes
void drawImage(const QRectF &target, const QImage &image, const QRectF &source, QFlags< Qt::ImageConversionFlag > flags)
qreal width() const
void setContent(const QImage &image, const QgsRectangle &rect)
QgsMapCanvas * mMapCanvas
pointer to map canvas
QSize size() const
bool toBool() const
qreal height() const
int height() const
QString arg(qlonglong a, int fieldWidth, int base, const QChar &fillChar) const
QgsMapCanvasMap(QgsMapCanvas *canvas)
constructor
void setZValue(qreal z)
QImage scaled(int width, int height, Qt::AspectRatioMode aspectRatioMode, Qt::TransformationMode transformMode) const