99 *******************************************************************************/
1010package org .eclipse .elk .alg .rectpacking .intermediate ;
1111
12+ import org .eclipse .elk .alg .common .nodespacing .NodeLabelAndSizeCalculator ;
1213import org .eclipse .elk .alg .rectpacking .options .InternalProperties ;
1314import org .eclipse .elk .core .alg .ILayoutProcessor ;
1415import org .eclipse .elk .core .math .KVector ;
1516import org .eclipse .elk .core .util .ElkUtil ;
1617import org .eclipse .elk .core .util .IElkProgressMonitor ;
18+ import org .eclipse .elk .core .util .adapters .ElkGraphAdapters ;
19+ import org .eclipse .elk .core .util .adapters .GraphAdapters .GraphAdapter ;
20+ import org .eclipse .elk .core .util .adapters .GraphAdapters .NodeAdapter ;
1721import org .eclipse .elk .graph .ElkNode ;
1822
1923/**
@@ -36,7 +40,19 @@ public class MinSizePreProcessor implements ILayoutProcessor<ElkNode> {
3640 @ Override
3741 public void process (ElkNode graph , IElkProgressMonitor progressMonitor ) {
3842 progressMonitor .begin ("Min Size Preprocessing" , 1 );
43+ // Get minimum size based on children.
3944 KVector minSize = ElkUtil .effectiveMinSizeConstraintFor (graph );
45+
46+ // Get minimum size based on labels.
47+ if (graph .getParent () != null ) {
48+ // only possible if a parent exists.
49+ GraphAdapter <?> graphAdapter = ElkGraphAdapters .adapt (graph .getParent ());
50+ NodeAdapter <?> nodeAdapter = ElkGraphAdapters .adaptSingleNode (graph );
51+
52+ KVector minSize2 = NodeLabelAndSizeCalculator .process (graphAdapter , nodeAdapter , false , true );
53+ minSize .x = Math .max (minSize .x , minSize2 .x );
54+ minSize .y = Math .max (minSize .y , minSize2 .y );
55+ }
4056 graph .setProperty (InternalProperties .MIN_WIDTH , minSize .x );
4157 graph .setProperty (InternalProperties .MIN_HEIGHT , minSize .y );
4258 progressMonitor .done ();
0 commit comments