X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.diagram%2Fsrc%2Forg%2Fsimantics%2Fdiagram%2Felements%2FTextGridNode.java;h=afd9772db217cff501f82f360d1f9ecc6013d438;hb=569d9bd9d6a270e8ede5867ff0b1f13475047e8b;hp=227dea5b1771b841accceae981e52878a3c6e8f2;hpb=e785ea2594a871612806780acd918e35ef1751ed;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.diagram/src/org/simantics/diagram/elements/TextGridNode.java b/bundles/org.simantics.diagram/src/org/simantics/diagram/elements/TextGridNode.java index 227dea5b1..afd9772db 100644 --- a/bundles/org.simantics.diagram/src/org/simantics/diagram/elements/TextGridNode.java +++ b/bundles/org.simantics.diagram/src/org/simantics/diagram/elements/TextGridNode.java @@ -11,15 +11,8 @@ *******************************************************************************/ package org.simantics.diagram.elements; -import gnu.trove.map.TIntObjectMap; -import gnu.trove.map.TMap; -import gnu.trove.map.hash.THashMap; -import gnu.trove.map.hash.TIntObjectHashMap; -import gnu.trove.procedure.TObjectProcedure; - import java.awt.Color; import java.awt.Font; -import java.awt.Graphics2D; import java.awt.geom.AffineTransform; import java.awt.geom.Point2D; import java.awt.geom.Rectangle2D; @@ -42,6 +35,12 @@ import org.simantics.scenegraph.g2d.nodes.Decoration; import org.simantics.scenegraph.utils.NodeUtil; import org.simantics.scl.runtime.function.Function1; +import gnu.trove.map.TIntObjectMap; +import gnu.trove.map.TMap; +import gnu.trove.map.hash.THashMap; +import gnu.trove.map.hash.TIntObjectHashMap; +import gnu.trove.procedure.TObjectProcedure; + /** * TODO: does not work remotely, e.g. rowIds */ @@ -138,7 +137,7 @@ public class TextGridNode extends G2DParentNode implements Decoration { } } - private int computeRows() { + public int computeRows() { MaxY maxy = new MaxY(); nodes.forEachKey(maxy); return maxy.max; @@ -245,6 +244,7 @@ public class TextGridNode extends G2DParentNode implements Decoration { } public void removeRow(int y) { + rowIds.remove(y); List row = peekRowCells(y); if (row.isEmpty()) return; @@ -263,14 +263,42 @@ public class TextGridNode extends G2DParentNode implements Decoration { return rowIds.get(y); } + class FontSizeSum implements TObjectProcedure { + + final double[] hs; + + FontSizeSum(int maxY) { + hs = new double[maxY+1]; + } + + @Override + public boolean execute(Cell key) { + A a = nodes.get(key); + int h = a.getFont().getSize(); + if(h > hs[key.y]) + hs[key.y] = h; + return true; + } + + public double getH() { + double result = 0; + for(int i=0;i translator = null; private static double FACTOR = 1.0; @@ -349,8 +377,8 @@ public class TextGridNode extends G2DParentNode implements Decoration { Rectangle2D bounds = super.getBoundsInLocal(false); if(bounds == null) return false; Point2D localPos = NodeUtil.worldToLocal(this, event.controlPosition, new Point2D.Double()); - double x = localPos.getX(); - double y = localPos.getY()+2.1*computeRows()*(up ? 1.0 : 0.0); + double x = localPos.getX(); + double y = localPos.getY()+(up ? bounds.getHeight() : 0.0); boolean hit = bounds.contains(x, y); return hit;