package org.biojava.bio.gui.sequence; import java.awt.Graphics2D; import java.awt.geom.Point2D; import java.awt.geom.Rectangle2D; import org.biojava.bio.symbol.Location; import org.biojava.bio.symbol.RangeLocation; /** * * * @author Matthew Pocock * @author Kalle Näslund * @since 1.4 */ public final class GUITools { private GUITools() {} public static Location getVisibleRange(SequenceRenderContext src, Graphics2D g2) { Rectangle2D clip = g2.getClipBounds(); int min = Math.max( src.getRange().getMin(), src.graphicsToSequence( new Point2D.Double(clip.getMinX(), clip.getMinY()) ) - 1 ); int max = Math.min( src.getRange().getMax(), src.graphicsToSequence( new Point2D.Double(clip.getMaxX(), clip.getMaxY()) ) + 1 ); // this happens when the clip region doesnt overlap with the SymbolList range if( min > max ) { return Location.empty; } else { return new RangeLocation(min, max); } } public static Rectangle2D createOuterBounds(CircularRendererContext crc, double depth) { // do we need some extra data in crc to deal with origins not at 0? double outer = crc.getRadius() + depth; return new Rectangle2D.Double(-outer, -outer, 2.0 * outer, 2.0 * outer); } public static Rectangle2D createInnerBounds(CircularRendererContext crc) { // do we need some extra data in crc to deal with origins not at 0? double outer = crc.getRadius(); return new Rectangle2D.Double(-outer, -outer, 2.0 * outer, 2.0 * outer); } }