Skip to content
Permalink
Browse files

Fix updating map extent on resize

  • Loading branch information
nyalldawson committed Oct 21, 2017
1 parent 53c8779 commit 45ffb262b7d8e9365b702f76be6572f22d07e12c
Showing with 26 additions and 7 deletions.
  1. +24 −2 src/core/layout/qgslayoutitemmap.cpp
  2. +2 −5 src/core/layout/qgslayoutitemmap.h
@@ -50,8 +50,7 @@ QgsLayoutItemMap::QgsLayoutItemMap( QgsLayout *layout )

connect( this, &QgsLayoutItem::sizePositionChanged, this, [ = ]
{
updateBoundingRect();
update();
shapeChanged();
} );

# if 0
@@ -945,6 +944,29 @@ void QgsLayoutItemMap::painterJobFinished()
update();
}

void QgsLayoutItemMap::shapeChanged()
{
// keep center as center
QgsPointXY oldCenter = mExtent.center();

double w = rect().width();
double h = rect().height();

// keep same width as before
double newWidth = mExtent.width();
// but scale height to match item's aspect ratio
double newHeight = newWidth * h / w;

mExtent = QgsRectangle::fromCenterAndSize( oldCenter, newWidth, newHeight );

//recalculate data defined scale and extents
refreshMapExtents();
updateBoundingRect();
invalidateCache();
emit changed();
emit extentChanged();
}

void QgsLayoutItemMap::connectUpdateSlot()
{
//connect signal from layer registry to update in case of new or deleted layers
@@ -507,6 +507,8 @@ class CORE_EXPORT QgsLayoutItemMap : public QgsLayoutItem

void painterJobFinished();

void shapeChanged();

private:


@@ -619,11 +621,6 @@ class CORE_EXPORT QgsLayoutItemMap : public QgsLayoutItem
//! True if annotation items, rubber band, etc. from the main canvas should be displayed
bool mDrawAnnotations = true;

/**
* Adjusts an extent rectangle to match the provided item width and height, so that extent
* center of extent remains the same */
void adjustExtentToItemShape( double itemWidth, double itemHeight, QgsRectangle &extent ) const;

//! True if map is being controlled by an atlas
bool mAtlasDriven = false;
//! Current atlas scaling mode

0 comments on commit 45ffb26

Please sign in to comment.
You can’t perform that action at this time.