1 package prefuse.render; 2 3 import java.awt.BasicStroke ; 4 import java.awt.Graphics2D ; 5 import java.awt.Shape ; 6 import java.awt.geom.AffineTransform ; 7 import java.awt.geom.Point2D ; 8 9 import prefuse.util.GraphicsLib; 10 import prefuse.visual.VisualItem; 11 12 13 33 public abstract class AbstractShapeRenderer implements Renderer { 34 35 public static final int RENDER_TYPE_NONE = 0; 36 public static final int RENDER_TYPE_DRAW = 1; 37 public static final int RENDER_TYPE_FILL = 2; 38 public static final int RENDER_TYPE_DRAW_AND_FILL = 3; 39 40 private int m_renderType = RENDER_TYPE_DRAW_AND_FILL; 41 protected AffineTransform m_transform = new AffineTransform (); 42 protected boolean m_manageBounds = true; 43 44 public void setManageBounds(boolean b) { 45 m_manageBounds = b; 46 } 47 48 51 public void render(Graphics2D g, VisualItem item) { 52 Shape shape = getShape(item); 53 if (shape != null) 54 drawShape(g, item, shape); 55 } 56 57 62 protected void drawShape(Graphics2D g, VisualItem item, Shape shape) { 63 GraphicsLib.paint(g, item, shape, getStroke(item), getRenderType(item)); 64 } 65 66 71 public Shape getShape(VisualItem item) { 72 AffineTransform at = getTransform(item); 73 Shape rawShape = getRawShape(item); 74 return (at==null || rawShape==null ? rawShape 75 : at.createTransformedShape(rawShape)); 76 } 77 78 87 protected BasicStroke getStroke(VisualItem item) { 88 return item.getStroke(); 89 } 90 91 97 protected abstract Shape getRawShape(VisualItem item); 98 99 106 protected AffineTransform getTransform(VisualItem item) { 107 return null; 108 } 109 110 115 public int getRenderType(VisualItem item) { 116 return m_renderType; 117 } 118 119 126 public void setRenderType(int type) { 127 if ( type < RENDER_TYPE_NONE || type > RENDER_TYPE_DRAW_AND_FILL ) { 128 throw new IllegalArgumentException ("Unrecognized render type."); 129 } 130 m_renderType = type; 131 } 132 133 136 public boolean locatePoint(Point2D p, VisualItem item) { 137 if ( item.getBounds().contains(p) ) { 138 Shape s = getShape(item); 140 return (s != null ? s.contains(p) : false); 141 } else { 142 return false; 143 } 144 } 145 146 149 public void setBounds(VisualItem item) { 150 if ( !m_manageBounds ) return; 151 Shape shape = getShape(item); 152 if ( shape == null ) { 153 item.setBounds(item.getX(), item.getY(), 0, 0); 154 } else { 155 GraphicsLib.setBounds(item, shape, getStroke(item)); 156 } 157 } 158 159 } | Popular Tags |