Skip to content
Permalink
Browse files

Make sure items in legend always occupy the set number of columns

In some cases (eg a legend with 4 items and 3 columns) less
columns were being created

(cherry-picked from 52eef90)
  • Loading branch information
nyalldawson committed Sep 14, 2016
1 parent 430abed commit 9ddb5d9d0371dc0edc32d86aba0359f8633f5e38
Showing with 13 additions and 7 deletions.
  1. +13 −7 src/core/qgslegendrenderer.cpp
@@ -296,13 +296,19 @@ void QgsLegendRenderer::setColumns( QList<Atom>& atomList )
currentHeight += spaceAboveAtom( atom );
currentHeight += atom.size.height();

// Recalc average height for remaining columns including current
avgColumnHeight = ( totalHeight - closedColumnsHeight ) / ( mSettings.columnCount() - currentColumn );
if (( currentHeight - avgColumnHeight ) > atom.size.height() / 2 // center of current atom is over average height
&& currentColumnAtomCount > 0 // do not leave empty column
&& currentHeight > maxAtomHeight // no sense to make smaller columns than max atom height
&& currentHeight > maxColumnHeight // no sense to make smaller columns than max column already created
&& currentColumn < mSettings.columnCount() - 1 ) // must not exceed max number of columns
bool canCreateNewColumn = ( currentColumnAtomCount > 0 ) // do not leave empty column
&& ( currentColumn < mSettings.columnCount() - 1 ); // must not exceed max number of columns

bool shouldCreateNewColumn = ( currentHeight - avgColumnHeight ) > atom.size.height() / 2 // center of current atom is over average height
&& currentColumnAtomCount > 0 // do not leave empty column
&& currentHeight > maxAtomHeight // no sense to make smaller columns than max atom height
&& currentHeight > maxColumnHeight; // no sense to make smaller columns than max column already created

// also should create a new column if the number of items left < number of columns left
// in this case we should spread the remaining items out over the remaining columns
shouldCreateNewColumn |= ( atomList.size() - i < mSettings.columnCount() - currentColumn );

if ( canCreateNewColumn && shouldCreateNewColumn )
{
// New column
currentColumn++;

0 comments on commit 9ddb5d9

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