Fix updating map extent on resize

This commit is contained in:
Nyall Dawson 2017-10-21 11:23:51 +10:00
parent 53c877963a
commit 45ffb262b7
2 changed files with 26 additions and 7 deletions

View File

@ -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

View File

@ -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