1 /***************************************************************************
2   qgsquickmaptransform.cpp
3   --------------------------------------
4   Date                 : 27.12.2014
5   Copyright            : (C) 2014 by Matthias Kuhn
6   Email                : matthias (at) opengis.ch
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 "qgsquickmaptransform.h"
17 #include "qgsquickmapsettings.h"
18 
applyTo(QMatrix4x4 * matrix) const19 void QgsQuickMapTransform::applyTo( QMatrix4x4 *matrix ) const
20 {
21   *matrix *= mMatrix;
22   matrix->optimize();
23 }
24 
mapSettings() const25 QgsQuickMapSettings *QgsQuickMapTransform::mapSettings() const
26 {
27   return mMapSettings;
28 }
29 
setMapSettings(QgsQuickMapSettings * mapSettings)30 void QgsQuickMapTransform::setMapSettings( QgsQuickMapSettings *mapSettings )
31 {
32   if ( mapSettings == mMapSettings )
33     return;
34 
35   if ( mMapSettings )
36     disconnect( mMapSettings, &QgsQuickMapSettings::visibleExtentChanged, this, &QgsQuickMapTransform::updateMatrix );
37 
38   mMapSettings = mapSettings;
39 
40   if ( mMapSettings )
41     connect( mMapSettings, &QgsQuickMapSettings::visibleExtentChanged, this, &QgsQuickMapTransform::updateMatrix );
42 
43   updateMatrix();
44 
45   emit mapSettingsChanged();
46 }
47 
updateMatrix()48 void QgsQuickMapTransform::updateMatrix()
49 {
50   QMatrix4x4 matrix;
51   float scaleFactor = static_cast<float>( 1.0 / mMapSettings->mapUnitsPerPixel() );
52 
53   matrix.scale( scaleFactor, -scaleFactor );
54   matrix.translate( static_cast<float>( -mMapSettings->visibleExtent().xMinimum( ) ),
55                     static_cast<float>( -mMapSettings->visibleExtent().yMaximum() ) );
56 
57   mMatrix = matrix;
58   update();
59 }
60