public void setSize(int size, Graphics2D g2) {
        if( curSize != size ) {
            // System.out.println("Set size of " + getDebugName() + " to " + size);
            Rectangle2D newBounds;
            if( size == getMaxSize() ) {
                newBounds = defaultBounds;
            } else if( size == getMinSize() && minBounds != null ) {
                newBounds = minBounds;
            } else {
                // set it up
                // do it more effciently, share between all
                float s = painter.getFontSize();
                painter.setFontSize(size, false);
                painter.calibrate(g2);
                newBounds = new Rectangle2D.Double(0.0, 0.0, painter.getWidth(g2, nodeSizeReference), painter.getPreferredHeight());
                if( size == getMinSize() ) {
                    minBounds = newBounds;
                }
                painter.setFontSize(s, false);
                painter.calibrate(g2);
            }        

            if(prints>1) System.out.println("before " + getDebugName() + " at " + curSize + " to " + size  + " transorm " + transform);

            final double dx = newBounds.getWidth() - bounds.getWidth();
            final double dy = newBounds.getHeight() - bounds.getHeight();

            bounds = newBounds;
            if( taxonLabelJustification != Painter.Justification.CENTER ) {
                transform.translate(taxonLabelJustification == Painter.Justification.RIGHT ? -dx : 0 , -dy/2);
            } else {
                transform.translate(-dx/2, -dy);
            }
            if(prints>1) System.out.println("change size of " + getDebugName() + " to " + size  + " transorm " + transform);
            curSize = size;
        }
    }