From: <mu...@us...> - 2008-06-18 07:40:53
|
Revision: 1179 http://jfreechart.svn.sourceforge.net/jfreechart/?rev=1179&view=rev Author: mungady Date: 2008-06-18 00:40:51 -0700 (Wed, 18 Jun 2008) Log Message: ----------- 2008-06-17 David Gilbert <dav...@ob...> * source/org/jfree/chart/LegendItem.java (labelFont): New field, (labelPaint): Likewise, (getLabelFont): New method, (setLabelFont): Likewise, (getLabelPaint): Likewise, (setLabelPaint): Likewise, (setFillPaint): Likewise, (setLinePaint): Likewise, (setOutlinePaint): Likewise, (equals): Test new fields, (writeObject): Handle new field, (readObject): Likewise, * source/org/jfree/chart/renderer/AbstractRenderer.java (legendShape): New field, (baseLegendShape): Likewise, (legendTextFont): Likewise, (baseLegendTextFont): Likewise, (legendTextPaint): Likewise, (baseLegendTextPaint): Likewise, (AbstractRenderer): Initialise new fields, (lookupLegendShape): New method, (getLegendShape): Likewise, (setLegendShape): Likewise, (getBaseLegendShape): Likewise, (setBaseLegendShape): Likewise, (lookupLegendTextFont): Likewise, (getLegendTextFont): Likewise, (setLegendTextFont): Likewise, (getBaseLegendTextFont): Likewise, (setBaseLegendTextFont): Likewise, (lookupLegendTextPaint): Likewise, (getLegendTextPaint): Likewise, (setLegendTextPaint): Likewise, (getBaseLegendTextPaint): Likewise, (setBaseLegendTextPaint): Likewise, (equals): Handle new fields, (clone): Likewise, (writeObject): Likewise, (readObject): Likewise, * source/org/jfree/chart/renderer/category/AbstractCategoryItemRenderer.java, * source/org/jfree/chart/renderer/category/AreaRenderer.java, * source/org/jfree/chart/renderer/category/BarRenderer.java, * source/org/jfree/chart/renderer/category/BoxAndWhiskerRenderer.java, * source/org/jfree/chart/renderer/category/CategoryStepRenderer.java, * source/org/jfree/chart/renderer/category/LineAndShapeRenderer.java, * source/org/jfree/chart/renderer/category/ScatterRenderer.java, * source/org/jfree/chart/renderer/xy/AbstractXYItemRenderer.java, * source/org/jfree/chart/renderer/xy/StandardXYItemRenderer.java, * source/org/jfree/chart/renderer/xy/XYAreaRenderer.java, * source/org/jfree/chart/renderer/xy/XYAreaRenderer2.java, * source/org/jfree/chart/renderer/xy/XYBarRenderer.java, * source/org/jfree/chart/renderer/xy/XYBubbleRenderer.java, * source/org/jfree/chart/renderer/xy/XYDifferenceRenderer.java, * source/org/jfree/chart/renderer/xy/XYDotRenderer.java, * source/org/jfree/chart/renderer/xy/XYLineAndShapeRenderer.java, (getLegendItem): Use new legend attributes, * source/org/jfree/chart/title/LegendTitle.java (createLegendItemBlock): Pass new attributes to text block. Modified Paths: -------------- trunk/source/org/jfree/chart/LegendItem.java trunk/source/org/jfree/chart/renderer/AbstractRenderer.java trunk/source/org/jfree/chart/renderer/category/AbstractCategoryItemRenderer.java trunk/source/org/jfree/chart/renderer/category/AreaRenderer.java trunk/source/org/jfree/chart/renderer/category/BarRenderer.java trunk/source/org/jfree/chart/renderer/category/BoxAndWhiskerRenderer.java trunk/source/org/jfree/chart/renderer/category/CategoryStepRenderer.java trunk/source/org/jfree/chart/renderer/category/LineAndShapeRenderer.java trunk/source/org/jfree/chart/renderer/category/ScatterRenderer.java trunk/source/org/jfree/chart/renderer/xy/AbstractXYItemRenderer.java trunk/source/org/jfree/chart/renderer/xy/StandardXYItemRenderer.java trunk/source/org/jfree/chart/renderer/xy/XYAreaRenderer.java trunk/source/org/jfree/chart/renderer/xy/XYAreaRenderer2.java trunk/source/org/jfree/chart/renderer/xy/XYBarRenderer.java trunk/source/org/jfree/chart/renderer/xy/XYBubbleRenderer.java trunk/source/org/jfree/chart/renderer/xy/XYDifferenceRenderer.java trunk/source/org/jfree/chart/renderer/xy/XYDotRenderer.java trunk/source/org/jfree/chart/renderer/xy/XYLineAndShapeRenderer.java trunk/source/org/jfree/chart/title/LegendTitle.java Modified: trunk/source/org/jfree/chart/LegendItem.java =================================================================== --- trunk/source/org/jfree/chart/LegendItem.java 2008-06-17 18:03:25 UTC (rev 1178) +++ trunk/source/org/jfree/chart/LegendItem.java 2008-06-18 07:40:51 UTC (rev 1179) @@ -55,6 +55,8 @@ * 18-May-2007 : Added dataset and seriesKey fields (DG); * 20-Jun-2007 : Removed JCommon dependencies (DG); * 03-Aug-2007 : Fixed null pointer exception (DG); + * 23-Apr-2008 : Added new constructor and implemented Cloneable (DG); + * 17-Jun-2008 : Added optional labelFont and labelPaint attributes (DG); * */ @@ -62,10 +64,12 @@ import java.awt.BasicStroke; import java.awt.Color; +import java.awt.Font; import java.awt.Paint; import java.awt.Shape; import java.awt.Stroke; import java.awt.geom.Line2D; +import java.awt.geom.Rectangle2D; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; @@ -76,6 +80,8 @@ import org.jfree.chart.util.AttributedStringUtilities; import org.jfree.chart.util.GradientPaintTransformer; import org.jfree.chart.util.ObjectUtilities; +import org.jfree.chart.util.PaintUtilities; +import org.jfree.chart.util.PublicCloneable; import org.jfree.chart.util.SerialUtilities; import org.jfree.chart.util.ShapeUtilities; import org.jfree.chart.util.StandardGradientPaintTransformer; @@ -85,7 +91,7 @@ * A temporary storage object for recording the properties of a legend item, * without any consideration for layout issues. */ -public class LegendItem implements Serializable { +public class LegendItem implements Cloneable, Serializable { /** For serialization. */ private static final long serialVersionUID = -797214582948827144L; @@ -113,6 +119,20 @@ /** The label. */ private String label; + /** + * The label font (<code>null</code> is permitted). + * + * @since 1.0.11 + */ + private Font labelFont; + + /** + * The label paint (<code>null</code> is permitted). + * + * @since 1.0.11 + */ + private transient Paint labelPaint; + /** The attributed label (if null, fall back to the regular label). */ private transient AttributedString attributedLabel; @@ -180,6 +200,19 @@ private static final Stroke UNUSED_STROKE = new BasicStroke(0.0f); /** + * Creates a legend item with the specified label. The remaining + * attributes take default values. + * + * @param label the label (<code>null</code> not permitted). + * + * @since 1.0.10 + */ + public LegendItem(String label) { + this(label, null, null, null, new Rectangle2D.Double(-4.0, -4.0, 8.0, + 8.0), Color.black); + } + + /** * Creates a legend item with a filled shape. The shape is not outlined, * and no line is visible. * @@ -306,6 +339,7 @@ "Null 'outlineStroke' argument."); } this.label = label; + this.labelPaint = null; this.attributedLabel = null; this.description = description; this.shapeVisible = shapeVisible; @@ -396,8 +430,7 @@ /* shape visible = */ false, UNUSED_SHAPE, /* shape filled = */ false, Color.black, /* shape outlined = */ false, Color.black, UNUSED_STROKE, - /* line visible = */ true, line, lineStroke, linePaint - ); + /* line visible = */ true, line, lineStroke, linePaint); } /** @@ -421,7 +454,7 @@ * permitted). * @param lineVisible a flag that controls whether or not the line is * visible. - * @param line the line. + * @param line the line (<code>null</code> not permitted). * @param lineStroke the stroke (<code>null</code> not permitted). * @param linePaint the line paint (<code>null</code> not permitted). */ @@ -443,6 +476,12 @@ if (lineStroke == null) { throw new IllegalArgumentException("Null 'lineStroke' argument."); } + if (line == null) { + throw new IllegalArgumentException("Null 'line' argument."); + } + if (linePaint == null) { + throw new IllegalArgumentException("Null 'linePaint' argument."); + } if (outlinePaint == null) { throw new IllegalArgumentException("Null 'outlinePaint' argument."); } @@ -601,6 +640,50 @@ } /** + * Returns the label font. + * + * @return The label font (possibly <code>null</code>). + * + * @since 1.0.11 + */ + public Font getLabelFont() { + return this.labelFont; + } + + /** + * Sets the label font. + * + * @param font the font (<code>null</code> permitted). + * + * @since 1.0.11 + */ + public void setLabelFont(Font font) { + this.labelFont = font; + } + + /** + * Returns the paint used to draw the label. + * + * @return The paint (possibly <code>null</code>). + * + * @since 1.0.11 + */ + public Paint getLabelPaint() { + return this.labelPaint; + } + + /** + * Sets the paint used to draw the label. + * + * @param paint the paint (<code>null</code> permitted). + * + * @since 1.0.11 + */ + public void setLabelPaint(Paint paint) { + this.labelPaint = paint; + } + + /** * Returns the attributed label. * * @return The attributed label (possibly <code>null</code>). @@ -674,6 +757,20 @@ } /** + * Sets the fill paint. + * + * @param paint the paint (<code>null</code> not permitted). + * + * @since 1.0.11 + */ + public void setFillPaint(Paint paint) { + if (paint == null) { + throw new IllegalArgumentException("Null 'paint' argument."); + } + this.fillPaint = paint; + } + + /** * Returns the flag that controls whether or not the shape outline * is visible. * @@ -695,13 +792,27 @@ /** * Returns the paint used for lines. * - * @return The paint. + * @return The paint (never <code>null</code>). */ public Paint getLinePaint() { return this.linePaint; } /** + * Sets the line paint. + * + * @param paint the paint (<code>null</code> not permitted). + * + * @since 1.0.11 + */ + public void setLinePaint(Paint paint) { + if (paint == null) { + throw new IllegalArgumentException("Null 'paint' argument."); + } + this.linePaint = paint; + } + + /** * Returns the outline paint. * * @return The outline paint (never <code>null</code>). @@ -711,6 +822,20 @@ } /** + * Sets the outline paint. + * + * @param paint the paint (<code>null</code> not permitted). + * + * @since 1.0.11 + */ + public void setOutlinePaint(Paint paint) { + if (paint == null) { + throw new IllegalArgumentException("Null 'paint' argument."); + } + this.outlinePaint = paint; + } + + /** * Returns the outline stroke. * * @return The outline stroke (never <code>null</code>). @@ -731,7 +856,7 @@ /** * Returns the line. * - * @return The line. + * @return The line (never <code>null</code>). */ public Shape getLine() { return this.line; @@ -808,7 +933,7 @@ if (this.shapeFilled != that.shapeFilled) { return false; } - if (!this.fillPaint.equals(that.fillPaint)) { + if (!PaintUtilities.equal(this.fillPaint, that.fillPaint)) { return false; } if (!ObjectUtilities.equal(this.fillPaintTransformer, @@ -821,7 +946,7 @@ if (!this.outlineStroke.equals(that.outlineStroke)) { return false; } - if (!this.outlinePaint.equals(that.outlinePaint)) { + if (!PaintUtilities.equal(this.outlinePaint, that.outlinePaint)) { return false; } if (!this.lineVisible == that.lineVisible) { @@ -833,13 +958,45 @@ if (!this.lineStroke.equals(that.lineStroke)) { return false; } - if (!this.linePaint.equals(that.linePaint)) { + if (!PaintUtilities.equal(this.linePaint, that.linePaint)) { return false; } + if (!ObjectUtilities.equal(this.labelFont, that.labelFont)) { + return false; + } + if (!PaintUtilities.equal(this.labelPaint, that.labelPaint)) { + return false; + } return true; } /** + * Returns an independent copy of this object (except that the clone will + * still reference the same dataset as the original + * <code>LegendItem</code>). + * + * @return A clone. + * + * @since 1.0.10 + */ + public Object clone() throws CloneNotSupportedException { + LegendItem clone = (LegendItem) super.clone(); + if (this.seriesKey instanceof PublicCloneable) { + PublicCloneable pc = (PublicCloneable) this.seriesKey; + clone.seriesKey = (Comparable) pc.clone(); + } + // FIXME: Clone the attributed string if it is not null + clone.shape = ShapeUtilities.clone(this.shape); + if (this.fillPaintTransformer instanceof PublicCloneable) { + PublicCloneable pc = (PublicCloneable) this.fillPaintTransformer; + clone.fillPaintTransformer = (GradientPaintTransformer) pc.clone(); + + } + clone.line = ShapeUtilities.clone(this.line); + return clone; + } + + /** * Provides serialization support. * * @param stream the output stream (<code>null</code> not permitted). @@ -856,6 +1013,7 @@ SerialUtilities.writeShape(this.line, stream); SerialUtilities.writeStroke(this.lineStroke, stream); SerialUtilities.writePaint(this.linePaint, stream); + SerialUtilities.writePaint(this.labelPaint, stream); } /** @@ -877,6 +1035,7 @@ this.line = SerialUtilities.readShape(stream); this.lineStroke = SerialUtilities.readStroke(stream); this.linePaint = SerialUtilities.readPaint(stream); + this.labelPaint = SerialUtilities.readPaint(stream); } } Modified: trunk/source/org/jfree/chart/renderer/AbstractRenderer.java =================================================================== --- trunk/source/org/jfree/chart/renderer/AbstractRenderer.java 2008-06-17 18:03:25 UTC (rev 1178) +++ trunk/source/org/jfree/chart/renderer/AbstractRenderer.java 2008-06-18 07:40:51 UTC (rev 1179) @@ -81,6 +81,9 @@ * 23-Oct-2007 : Updated lookup methods to better handle overridden * methods (DG); * 04-Dec-2007 : Modified hashCode() implementation (DG); + * 29-Apr-2008 : Minor API doc update (DG); + * 17-Jun-2008 : Added legendShape, legendTextFont and legendTextPaint + * attributes (DG); * */ @@ -206,8 +209,8 @@ private PaintList outlinePaintList; /** - * A flag that controls whether or not the outlinePaintList is auto-populated - * in the {@link #lookupSeriesOutlinePaint(int)} method. + * A flag that controls whether or not the outlinePaintList is + * auto-populated in the {@link #lookupSeriesOutlinePaint(int)} method. * * @since 1.0.6 */ @@ -303,6 +306,51 @@ */ private boolean baseCreateEntities; + /** + * The per-series legend shape settings. + * + * @since 1.0.11 + */ + private ShapeList legendShape; + + /** + * The base shape for legend items. If this is <code>null</code>, the + * series shape will be used. + * + * @since 1.0.11 + */ + private transient Shape baseLegendShape; + + /** + * The per-series legend text font. + * + * @since 1.0.11 + */ + private ObjectList legendTextFont; + + /** + * The base legend font. + * + * @since 1.0.11 + */ + private Font baseLegendTextFont; + + /** + * The per series legend text paint settings. + * + * @since 1.0.11 + */ + private PaintList legendTextPaint; + + /** + * The default paint for the legend text items (if this is + * <code>null</code>, the {@link LegendTitle} class will determine the + * text paint to use. + * + * @since 1.0.11 + */ + private transient Paint baseLegendTextPaint; + /** Storage for registered change listeners. */ private transient EventListenerList listenerList; @@ -364,6 +412,15 @@ this.createEntitiesList = new BooleanList(); this.baseCreateEntities = true; + this.legendShape = new ShapeList(); + this.baseLegendShape = null; + + this.legendTextFont = new ObjectList(); + this.baseLegendTextFont = null; + + this.legendTextPaint = new PaintList(); + this.baseLegendTextPaint = null; + this.listenerList = new EventListenerList(); } @@ -604,8 +661,8 @@ * Returns the paint used to fill data items as they are drawn. * <p> * The default implementation passes control to the - * <code>getSeriesPaint</code> method. You can override this method if you - * require different behaviour. + * <code>lookupSeriesPaint()</code> method. You can override this method + * if you require different behaviour. * * @param row the row (or series) index (zero-based). * @param column the column (or category) index (zero-based). @@ -901,7 +958,8 @@ /** * Sets the flag that controls whether or not the series fill paint list is - * automatically populated when {@link #lookupSeriesFillPaint(int)} is called. + * automatically populated when {@link #lookupSeriesFillPaint(int)} is + * called. * * @param auto the new flag value. * @@ -2248,6 +2306,222 @@ } } + /** + * Performs a lookup for the legend shape. + * + * @param series the series index. + * + * @return The shape (possibly <code>null</code>). + * + * @since 1.0.11 + */ + public Shape lookupLegendShape(int series) { + Shape result = getLegendShape(series); + if (result == null) { + result = this.baseLegendShape; + } + if (result == null) { + result = lookupSeriesShape(series); + } + return result; + } + + /** + * Returns the legend shape defined for the specified series (possibly + * <code>null</code>). + * + * @param series the series index. + * + * @return The shape (possibly <code>null</code>). + * + * @see #lookupLegendShape(int) + * + * @since 1.0.11 + */ + public Shape getLegendShape(int series) { + return this.legendShape.getShape(series); + } + + /** + * Sets the shape used for the legend item for the specified series, and + * sends a {@link RendererChangeEvent} to all registered listeners. + * + * @param series the series index. + * @param shape the shape (<code>null</code> permitted). + * + * @since 1.0.11 + */ + public void setLegendShape(int series, Shape shape) { + this.legendShape.setShape(series, shape); + fireChangeEvent(); + } + + /** + * Returns the default legend shape, which may be <code>null</code>. + * + * @return The default legend shape. + * + * @since 1.0.11 + */ + public Shape getBaseLegendShape() { + return this.baseLegendShape; + } + + /** + * Sets the default legend shape and sends a + * {@link RendererChangeEvent} to all registered listeners. + * + * @param shape the shape (<code>null</code> permitted). + * + * @since 1.0.11 + */ + public void setBaseLegendShape(Shape shape) { + this.baseLegendShape = shape; + fireChangeEvent(); + } + + /** + * Performs a lookup for the legend text font. + * + * @param series the series index. + * + * @return The font (possibly <code>null</code>). + * + * @since 1.0.11 + */ + public Font lookupLegendTextFont(int series) { + Font result = getLegendTextFont(series); + if (result == null) { + result = this.baseLegendTextFont; + } + return result; + } + + /** + * Returns the legend text font defined for the specified series (possibly + * <code>null</code>). + * + * @param series the series index. + * + * @return The font (possibly <code>null</code>). + * + * @see #lookupLegendTextFont(int) + * + * @since 1.0.11 + */ + public Font getLegendTextFont(int series) { + return (Font) this.legendTextFont.get(series); + } + + /** + * Sets the font used for the legend text for the specified series, and + * sends a {@link RendererChangeEvent} to all registered listeners. + * + * @param series the series index. + * @param font the font (<code>null</code> permitted). + * + * @since 1.0.11 + */ + public void setLegendTextFont(int series, Font font) { + this.legendTextFont.set(series, font); + fireChangeEvent(); + } + + /** + * Returns the default legend text font, which may be <code>null</code>. + * + * @return The default legend text font. + * + * @since 1.0.11 + */ + public Font getBaseLegendTextFont() { + return this.baseLegendTextFont; + } + + /** + * Sets the default legend text font and sends a + * {@link RendererChangeEvent} to all registered listeners. + * + * @param font the font (<code>null</code> permitted). + * + * @since 1.0.11 + */ + public void setBaseLegendTextFont(Font font) { + this.baseLegendTextFont = font; + fireChangeEvent(); + } + + /** + * Performs a lookup for the legend text paint. + * + * @param series the series index. + * + * @return The paint (possibly <code>null</code>). + * + * @since 1.0.11 + */ + public Paint lookupLegendTextPaint(int series) { + Paint result = getLegendTextPaint(series); + if (result == null) { + result = this.baseLegendTextPaint; + } + return result; + } + + /** + * Returns the legend text paint defined for the specified series (possibly + * <code>null</code>). + * + * @param series the series index. + * + * @return The paint (possibly <code>null</code>). + * + * @see #lookupLegendTextPaint(int) + * + * @since 1.0.11 + */ + public Paint getLegendTextPaint(int series) { + return this.legendTextPaint.getPaint(series); + } + + /** + * Sets the paint used for the legend text for the specified series, and + * sends a {@link RendererChangeEvent} to all registered listeners. + * + * @param series the series index. + * @param paint the paint (<code>null</code> permitted). + * + * @since 1.0.11 + */ + public void setLegendTextPaint(int series, Paint paint) { + this.legendTextPaint.setPaint(series, paint); + fireChangeEvent(); + } + + /** + * Returns the default legend text paint, which may be <code>null</code>. + * + * @return The default legend text paint. + * + * @since 1.0.11 + */ + public Paint getBaseLegendTextPaint() { + return this.baseLegendTextPaint; + } + + /** + * Sets the default legend text paint and sends a + * {@link RendererChangeEvent} to all registered listeners. + * + * @param paint the paint (<code>null</code> permitted). + * + * @since 1.0.11 + */ + public void setBaseLegendTextPaint(Paint paint) { + this.baseLegendTextPaint = paint; + fireChangeEvent(); + } + /** The adjacent offset. */ private static final double ADJ = Math.cos(Math.PI / 6.0); @@ -2567,6 +2841,28 @@ if (this.baseCreateEntities != that.baseCreateEntities) { return false; } + if (!ObjectUtilities.equal(this.legendShape, that.legendShape)) { + return false; + } + if (!ShapeUtilities.equal(this.baseLegendShape, + that.baseLegendShape)) { + return false; + } + if (!ObjectUtilities.equal(this.legendTextFont, that.legendTextFont)) { + return false; + } + if (!ObjectUtilities.equal(this.baseLegendTextFont, + that.baseLegendTextFont)) { + return false; + } + if (!ObjectUtilities.equal(this.legendTextPaint, + that.legendTextPaint)) { + return false; + } + if (!PaintUtilities.equal(this.baseLegendTextPaint, + that.baseLegendTextPaint)) { + return false; + } return true; } @@ -2704,6 +3000,16 @@ clone.createEntitiesList = (BooleanList) this.createEntitiesList.clone(); } + + if (this.legendShape != null) { + clone.legendShape = (ShapeList) this.legendShape.clone(); + } + if (this.legendTextFont != null) { + clone.legendTextFont = (ObjectList) this.legendTextFont.clone(); + } + if (this.legendTextPaint != null) { + clone.legendTextPaint = (PaintList) this.legendTextPaint.clone(); + } clone.listenerList = new EventListenerList(); clone.event = null; return clone; @@ -2726,6 +3032,8 @@ SerialUtilities.writeStroke(this.baseOutlineStroke, stream); SerialUtilities.writeShape(this.baseShape, stream); SerialUtilities.writePaint(this.baseItemLabelPaint, stream); + SerialUtilities.writeShape(this.baseLegendShape, stream); + SerialUtilities.writePaint(this.baseLegendTextPaint, stream); } @@ -2748,6 +3056,8 @@ this.baseOutlineStroke = SerialUtilities.readStroke(stream); this.baseShape = SerialUtilities.readShape(stream); this.baseItemLabelPaint = SerialUtilities.readPaint(stream); + this.baseLegendShape = SerialUtilities.readShape(stream); + this.baseLegendTextPaint = SerialUtilities.readPaint(stream); // listeners are not restored automatically, but storage must be // provided... Modified: trunk/source/org/jfree/chart/renderer/category/AbstractCategoryItemRenderer.java =================================================================== --- trunk/source/org/jfree/chart/renderer/category/AbstractCategoryItemRenderer.java 2008-06-17 18:03:25 UTC (rev 1178) +++ trunk/source/org/jfree/chart/renderer/category/AbstractCategoryItemRenderer.java 2008-06-18 07:40:51 UTC (rev 1179) @@ -97,6 +97,7 @@ * 27-Jun-2007 : Added some new methods with 'notify' argument, renamed * methods containing 'ItemURL' to just 'URL' (DG); * 06-Jul-2007 : Added annotation support (DG); + * 17-Jun-2008 : Apply legend shape, font and paint attributes (DG); * */ @@ -161,7 +162,8 @@ * but it makes the job easier. */ public abstract class AbstractCategoryItemRenderer extends AbstractRenderer - implements CategoryItemRenderer, Cloneable, PublicCloneable, Serializable { + implements CategoryItemRenderer, Cloneable, PublicCloneable, + Serializable { /** For serialization. */ private static final long serialVersionUID = 1247553218442497391L; @@ -1263,13 +1265,18 @@ urlText = this.legendItemURLGenerator.generateLabel(dataset, series); } - Shape shape = lookupSeriesShape(series); + Shape shape = lookupLegendShape(series); Paint paint = lookupSeriesPaint(series); Paint outlinePaint = lookupSeriesOutlinePaint(series); Stroke outlineStroke = lookupSeriesOutlineStroke(series); LegendItem item = new LegendItem(label, description, toolTipText, urlText, shape, paint, outlineStroke, outlinePaint); + item.setLabelFont(lookupLegendTextFont(series)); + Paint labelPaint = lookupLegendTextPaint(series); + if (labelPaint != null) { + item.setLabelPaint(labelPaint); + } item.setSeriesKey(dataset.getRowKey(series)); item.setSeriesIndex(series); item.setDataset(dataset); @@ -1614,7 +1621,7 @@ throw new IllegalArgumentException("Null 'generator' argument."); } this.legendItemLabelGenerator = generator; - notifyListeners(new RendererChangeEvent(this)); + fireChangeEvent(); } /** @@ -1639,7 +1646,7 @@ public void setLegendItemToolTipGenerator( CategorySeriesLabelGenerator generator) { this.legendItemToolTipGenerator = generator; - notifyListeners(new RendererChangeEvent(this)); + fireChangeEvent(); } /** @@ -1664,7 +1671,7 @@ public void setLegendItemURLGenerator( CategorySeriesLabelGenerator generator) { this.legendItemURLGenerator = generator; - notifyListeners(new RendererChangeEvent(this)); + fireChangeEvent(); } /** Modified: trunk/source/org/jfree/chart/renderer/category/AreaRenderer.java =================================================================== --- trunk/source/org/jfree/chart/renderer/category/AreaRenderer.java 2008-06-17 18:03:25 UTC (rev 1178) +++ trunk/source/org/jfree/chart/renderer/category/AreaRenderer.java 2008-06-18 07:40:51 UTC (rev 1179) @@ -65,6 +65,7 @@ * 17-May-2007 : Set datasetIndex and seriesIndex in getLegendItem() (DG); * 18-May-2007 : Set dataset and seriesKey for LegendItem (DG); * 20-Jun-2007 : Removed JCommon dependencies (DG); + * 17-Jun-2008 : Apply legend shape, font and paint attributes (DG); * */ @@ -95,7 +96,7 @@ * with the {@link org.jfree.chart.plot.CategoryPlot} class. */ public class AreaRenderer extends AbstractCategoryItemRenderer - implements Cloneable, PublicCloneable, Serializable { + implements Cloneable, PublicCloneable, Serializable { /** For serialization. */ private static final long serialVersionUID = -4231878281385812757L; @@ -109,6 +110,7 @@ public AreaRenderer() { super(); this.endType = AreaRendererEndType.TAPER; + setBaseLegendShape(new Rectangle2D.Double(-4.0, -4.0, 8.0, 8.0)); } /** @@ -136,7 +138,7 @@ throw new IllegalArgumentException("Null 'type' argument."); } this.endType = type; - notifyListeners(new RendererChangeEvent(this)); + fireChangeEvent(); } /** @@ -174,13 +176,18 @@ urlText = getLegendItemURLGenerator().generateLabel(dataset, series); } - Shape shape = new Rectangle2D.Double(-4.0, -4.0, 8.0, 8.0); + Shape shape = lookupLegendShape(series); Paint paint = lookupSeriesPaint(series); Paint outlinePaint = lookupSeriesOutlinePaint(series); Stroke outlineStroke = lookupSeriesOutlineStroke(series); LegendItem result = new LegendItem(label, description, toolTipText, urlText, shape, paint, outlineStroke, outlinePaint); + result.setLabelFont(lookupLegendTextFont(series)); + Paint labelPaint = lookupLegendTextPaint(series); + if (labelPaint != null) { + result.setLabelPaint(labelPaint); + } result.setDataset(dataset); result.setDatasetIndex(datasetIndex); result.setSeriesKey(dataset.getRowKey(series)); Modified: trunk/source/org/jfree/chart/renderer/category/BarRenderer.java =================================================================== --- trunk/source/org/jfree/chart/renderer/category/BarRenderer.java 2008-06-17 18:03:25 UTC (rev 1178) +++ trunk/source/org/jfree/chart/renderer/category/BarRenderer.java 2008-06-18 07:40:51 UTC (rev 1179) @@ -82,6 +82,9 @@ * 18-May-2007 : Set dataset and seriesKey for LegendItem (DG); * 20-Jun-2007 : Removed JCommon dependencies (DG); * 06-Jul-2007 : Changed default for drawBarOutline attribute (DG); + * 07-May-2008 : If minimumBarLength is > 0.0, extend the non-base end of the + * bar (DG); + * 17-Jun-2008 : Apply legend shape, font and paint attributes (DG); * */ @@ -201,6 +204,7 @@ this.negativeItemLabelPositionFallback = null; this.gradientPaintTransformer = new StandardGradientPaintTransformer(); this.minimumBarLength = 0.0; + setBaseLegendShape(new Rectangle2D.Double(-4.0, -4.0, 8.0, 8.0)); } /** @@ -225,7 +229,7 @@ */ public void setBase(double base) { this.base = base; - notifyListeners(new RendererChangeEvent(this)); + fireChangeEvent(); } /** @@ -252,7 +256,7 @@ */ public void setItemMargin(double percent) { this.itemMargin = percent; - notifyListeners(new RendererChangeEvent(this)); + fireChangeEvent(); } /** @@ -276,7 +280,7 @@ */ public void setDrawBarOutline(boolean draw) { this.drawBarOutline = draw; - notifyListeners(new RendererChangeEvent(this)); + fireChangeEvent(); } /** @@ -302,11 +306,12 @@ */ public void setMaximumBarWidth(double percent) { this.maximumBarWidth = percent; - notifyListeners(new RendererChangeEvent(this)); + fireChangeEvent(); } /** - * Returns the minimum bar length (in Java2D units). + * Returns the minimum bar length (in Java2D units). The default value is + * 0.0. * * @return The minimum bar length. * @@ -320,15 +325,22 @@ * Sets the minimum bar length and sends a {@link RendererChangeEvent} to * all registered listeners. The minimum bar length is specified in Java2D * units, and can be used to prevent bars that represent very small data - * values from disappearing when drawn on the screen. + * values from disappearing when drawn on the screen. Typically you would + * set this to (say) 0.5 or 1.0 Java 2D units. Use this attribute with + * caution, however, because setting it to a non-zero value will + * artificially increase the length of bars representing small values, + * which may misrepresent your data. * - * @param min the minimum bar length (in Java2D units). + * @param min the minimum bar length (in Java2D units, must be >= 0.0). * * @see #getMinimumBarLength() */ public void setMinimumBarLength(double min) { + if (min < 0.0) { + throw new IllegalArgumentException("Requires 'min' >= 0.0"); + } this.minimumBarLength = min; - notifyListeners(new RendererChangeEvent(this)); + fireChangeEvent(); } /** @@ -354,7 +366,7 @@ public void setGradientPaintTransformer( GradientPaintTransformer transformer) { this.gradientPaintTransformer = transformer; - notifyListeners(new RendererChangeEvent(this)); + fireChangeEvent(); } /** @@ -381,7 +393,7 @@ public void setPositiveItemLabelPositionFallback( ItemLabelPosition position) { this.positiveItemLabelPositionFallback = position; - notifyListeners(new RendererChangeEvent(this)); + fireChangeEvent(); } /** @@ -408,7 +420,7 @@ public void setNegativeItemLabelPositionFallback( ItemLabelPosition position) { this.negativeItemLabelPositionFallback = position; - notifyListeners(new RendererChangeEvent(this)); + fireChangeEvent(); } /** @@ -442,7 +454,7 @@ public void setIncludeBaseInRange(boolean include) { if (this.includeBaseInRange != include) { this.includeBaseInRange = include; - notifyListeners(new RendererChangeEvent(this)); + fireChangeEvent(); } } @@ -678,7 +690,7 @@ urlText = getLegendItemURLGenerator().generateLabel(dataset, series); } - Shape shape = new Rectangle2D.Double(-4.0, -4.0, 8.0, 8.0); + Shape shape = lookupLegendShape(series); Paint paint = lookupSeriesPaint(series); Paint outlinePaint = lookupSeriesOutlinePaint(series); Stroke outlineStroke = lookupSeriesOutlineStroke(series); @@ -687,6 +699,11 @@ urlText, true, shape, true, paint, isDrawBarOutline(), outlinePaint, outlineStroke, false, new Line2D.Float(), new BasicStroke(1.0f), Color.black); + result.setLabelFont(lookupLegendTextFont(series)); + Paint labelPaint = lookupLegendTextPaint(series); + if (labelPaint != null) { + result.setLabelPaint(labelPaint); + } result.setDataset(dataset); result.setDatasetIndex(datasetIndex); result.setSeriesKey(dataset.getRowKey(series)); @@ -729,7 +746,6 @@ } double value = dataValue.doubleValue(); - PlotOrientation orientation = plot.getOrientation(); double barW0 = calculateBarW0(plot, orientation, dataArea, domainAxis, state, row, column); @@ -741,19 +757,43 @@ RectangleEdge edge = plot.getRangeAxisEdge(); double transL0 = rangeAxis.valueToJava2D(barL0L1[0], dataArea, edge); double transL1 = rangeAxis.valueToJava2D(barL0L1[1], dataArea, edge); + + // in the following code, barL0 is (in Java2D coordinates) the LEFT + // end of the bar for a horizontal bar chart, and the TOP end of the + // bar for a vertical bar chart. Whether this is the BASE of the bar + // or not depends also on (a) whether the data value is 'negative' + // relative to the base value and (b) whether or not the range axis is + // inverted. This only matters if/when we apply the minimumBarLength + // attribute, because we should extend the non-base end of the bar + boolean positive = (value >= this.base); + boolean inverted = rangeAxis.isInverted(); double barL0 = Math.min(transL0, transL1); - double barLength = Math.max(Math.abs(transL1 - transL0), - getMinimumBarLength()); + double barLength = Math.abs(transL1 - transL0); + double barLengthAdj = 0.0; + if (barLength > 0.0 && barLength < getMinimumBarLength()) { + barLengthAdj = getMinimumBarLength() - barLength; + } + double barL0Adj = 0.0; + if (orientation == PlotOrientation.HORIZONTAL) { + if (positive && inverted || !positive && !inverted) { + barL0Adj = barLengthAdj; + } + } + else { + if (positive && !inverted || !positive && inverted) { + barL0Adj = barLengthAdj; + } + } // draw the bar... Rectangle2D bar = null; if (orientation == PlotOrientation.HORIZONTAL) { - bar = new Rectangle2D.Double(barL0, barW0, barLength, - state.getBarWidth()); + bar = new Rectangle2D.Double(barL0 - barL0Adj, barW0, + barLength + barLengthAdj, state.getBarWidth()); } else { - bar = new Rectangle2D.Double(barW0, barL0, state.getBarWidth(), - barLength); + bar = new Rectangle2D.Double(barW0, barL0 - barL0Adj, + state.getBarWidth(), barLength + barLengthAdj); } Paint itemPaint = getItemPaint(row, column); GradientPaintTransformer t = getGradientPaintTransformer(); Modified: trunk/source/org/jfree/chart/renderer/category/BoxAndWhiskerRenderer.java =================================================================== --- trunk/source/org/jfree/chart/renderer/category/BoxAndWhiskerRenderer.java 2008-06-17 18:03:25 UTC (rev 1178) +++ trunk/source/org/jfree/chart/renderer/category/BoxAndWhiskerRenderer.java 2008-06-18 07:40:51 UTC (rev 1179) @@ -72,6 +72,7 @@ * 14-Feb-2008 : Fix bar position for horizontal chart, see patch * 1888422 (RVdS); * 27-Mar-2008 : Boxes should use outlinePaint/Stroke settings (DG); + * 17-Jun-2008 : Apply legend shape, font and paint attributes (DG); * */ @@ -119,8 +120,7 @@ * {@link CategoryPlot} class. */ public class BoxAndWhiskerRenderer extends AbstractCategoryItemRenderer - implements Cloneable, PublicCloneable, - Serializable { + implements Cloneable, PublicCloneable, Serializable { /** For serialization. */ private static final long serialVersionUID = 632027470694481177L; @@ -148,6 +148,7 @@ this.fillBox = true; this.itemMargin = 0.20; this.maximumBarWidth = 1.0; + setBaseLegendShape(new Rectangle2D.Double(-4.0, -4.0, 8.0, 8.0)); } /** @@ -291,12 +292,17 @@ urlText = getLegendItemURLGenerator().generateLabel(dataset, series); } - Shape shape = new Rectangle2D.Double(-4.0, -4.0, 8.0, 8.0); + Shape shape = lookupLegendShape(series); Paint paint = lookupSeriesPaint(series); Paint outlinePaint = lookupSeriesOutlinePaint(series); Stroke outlineStroke = lookupSeriesOutlineStroke(series); LegendItem result = new LegendItem(label, description, toolTipText, urlText, shape, paint, outlineStroke, outlinePaint); + result.setLabelFont(lookupLegendTextFont(series)); + Paint labelPaint = lookupLegendTextPaint(series); + if (labelPaint != null) { + result.setLabelPaint(labelPaint); + } result.setDataset(dataset); result.setDatasetIndex(datasetIndex); result.setSeriesKey(dataset.getRowKey(series)); Modified: trunk/source/org/jfree/chart/renderer/category/CategoryStepRenderer.java =================================================================== --- trunk/source/org/jfree/chart/renderer/category/CategoryStepRenderer.java 2008-06-17 18:03:25 UTC (rev 1178) +++ trunk/source/org/jfree/chart/renderer/category/CategoryStepRenderer.java 2008-06-18 07:40:51 UTC (rev 1179) @@ -46,6 +46,7 @@ * 20-Apr-2007 : Updated getLegendItem() for renderer change (DG); * 18-May-2007 : Set dataset and seriesKey for LegendItem (DG); * 21-Jun-2007 : Removed JCommon dependencies (DG); + * 17-Jun-2008 : Apply legend shape, font and paint attributes (DG); * */ @@ -75,8 +76,7 @@ * that can be used with the {@link CategoryPlot} class. */ public class CategoryStepRenderer extends AbstractCategoryItemRenderer - implements Cloneable, PublicCloneable, - Serializable { + implements Cloneable, PublicCloneable, Serializable { /** * State information for the renderer. @@ -129,6 +129,7 @@ */ public CategoryStepRenderer(boolean stagger) { this.stagger = stagger; + setBaseLegendShape(new Rectangle2D.Double(-4.0, -3.0, 8.0, 6.0)); } /** @@ -149,7 +150,7 @@ */ public void setStagger(boolean shouldStagger) { this.stagger = shouldStagger; - notifyListeners(new RendererChangeEvent(this)); + fireChangeEvent(); } /** @@ -186,11 +187,16 @@ urlText = getLegendItemURLGenerator().generateLabel(dataset, series); } - Shape shape = new Rectangle2D.Double(-4.0, -3.0, 8.0, 6.0); + Shape shape = lookupLegendShape(series); Paint paint = lookupSeriesPaint(series); LegendItem item = new LegendItem(label, description, toolTipText, urlText, shape, paint); + item.setLabelFont(lookupLegendTextFont(series)); + Paint labelPaint = lookupLegendTextPaint(series); + if (labelPaint != null) { + item.setLabelPaint(labelPaint); + } item.setSeriesKey(dataset.getRowKey(series)); item.setSeriesIndex(series); item.setDataset(dataset); Modified: trunk/source/org/jfree/chart/renderer/category/LineAndShapeRenderer.java =================================================================== --- trunk/source/org/jfree/chart/renderer/category/LineAndShapeRenderer.java 2008-06-17 18:03:25 UTC (rev 1178) +++ trunk/source/org/jfree/chart/renderer/category/LineAndShapeRenderer.java 2008-06-18 07:40:51 UTC (rev 1179) @@ -88,6 +88,7 @@ * 24-Sep-2007 : Fixed bug in clone() method and added change event to * setUseOutlinePaint() method (DG); * 27-Sep-2007 : Added option to offset series x-position within category (DG); + * 17-Jun-2008 : Apply legend shape, font and paint attributes (DG); * */ @@ -119,8 +120,7 @@ * items (for use with the {@link CategoryPlot} class). */ public class LineAndShapeRenderer extends AbstractCategoryItemRenderer - implements Cloneable, PublicCloneable, - Serializable { + implements Cloneable, PublicCloneable, Serializable { /** For serialization. */ private static final long serialVersionUID = -197749519869226398L; @@ -260,7 +260,7 @@ */ public void setSeriesLinesVisible(int series, Boolean flag) { this.seriesLinesVisible.setBoolean(series, flag); - notifyListeners(new RendererChangeEvent(this)); + fireChangeEvent(); } /** @@ -297,7 +297,7 @@ */ public void setBaseLinesVisible(boolean flag) { this.baseLinesVisible = flag; - notifyListeners(new RendererChangeEvent(this)); + fireChangeEvent(); } // SHAPES VISIBLE @@ -359,7 +359,7 @@ */ public void setSeriesShapesVisible(int series, Boolean flag) { this.seriesShapesVisible.setBoolean(series, flag); - notifyListeners(new RendererChangeEvent(this)); + fireChangeEvent(); } /** @@ -383,7 +383,7 @@ */ public void setBaseShapesVisible(boolean flag) { this.baseShapesVisible = flag; - notifyListeners(new RendererChangeEvent(this)); + fireChangeEvent(); } /** @@ -412,7 +412,7 @@ */ public void setDrawOutlines(boolean flag) { this.drawOutlines = flag; - notifyListeners(new RendererChangeEvent(this)); + fireChangeEvent(); } /** @@ -438,7 +438,7 @@ */ public void setUseOutlinePaint(boolean use) { this.useOutlinePaint = use; - notifyListeners(new RendererChangeEvent(this)); + fireChangeEvent(); } // SHAPES FILLED @@ -489,7 +489,7 @@ */ public void setSeriesShapesFilled(int series, Boolean filled) { this.seriesShapesFilled.setBoolean(series, filled); - notifyListeners(new RendererChangeEvent(this)); + fireChangeEvent(); } /** @@ -502,8 +502,8 @@ * @see #getSeriesShapesFilled(int) */ public void setSeriesShapesFilled(int series, boolean filled) { - this.seriesShapesFilled.setBoolean(series, Boolean.valueOf(filled)); - notifyListeners(new RendererChangeEvent(this)); + // delegate + setSeriesShapesFilled(series, Boolean.valueOf(filled)); } /** @@ -527,7 +527,7 @@ */ public void setBaseShapesFilled(boolean flag) { this.baseShapesFilled = flag; - notifyListeners(new RendererChangeEvent(this)); + fireChangeEvent(); } /** @@ -554,7 +554,7 @@ */ public void setUseFillPaint(boolean flag) { this.useFillPaint = flag; - notifyListeners(new RendererChangeEvent(this)); + fireChangeEvent(); } /** @@ -584,7 +584,7 @@ */ public void setUseSeriesOffset(boolean offset) { this.useSeriesOffset = offset; - notifyListeners(new RendererChangeEvent(this)); + fireChangeEvent(); } /** @@ -621,7 +621,7 @@ throw new IllegalArgumentException("Requires 0.0 <= margin < 1.0."); } this.itemMargin = margin; - notifyListeners(new RendererChangeEvent(this)); + fireChangeEvent(); } /** @@ -654,7 +654,7 @@ urlText = getLegendItemURLGenerator().generateLabel( dataset, series); } - Shape shape = lookupSeriesShape(series); + Shape shape = lookupLegendShape(series); Paint paint = lookupSeriesPaint(series); Paint fillPaint = (this.useFillPaint ? getItemFillPaint(series, 0) : paint); @@ -669,6 +669,11 @@ fillPaint, shapeOutlineVisible, outlinePaint, outlineStroke, lineVisible, new Line2D.Double(-7.0, 0.0, 7.0, 0.0), getItemStroke(series, 0), getItemPaint(series, 0)); + result.setLabelFont(lookupLegendTextFont(series)); + Paint labelPaint = lookupLegendTextPaint(series); + if (labelPaint != null) { + result.setLabelPaint(labelPaint); + } result.setDataset(dataset); result.setDatasetIndex(datasetIndex); result.setSeriesKey(dataset.getRowKey(series)); Modified: trunk/source/org/jfree/chart/renderer/category/ScatterRenderer.java =================================================================== --- trunk/source/org/jfree/chart/renderer/category/ScatterRenderer.java 2008-06-17 18:03:25 UTC (rev 1178) +++ trunk/source/org/jfree/chart/renderer/category/ScatterRenderer.java 2008-06-18 07:40:51 UTC (rev 1179) @@ -36,6 +36,7 @@ * ------- * 08-Oct-2007 : Version 1, based on patch 1780779 by David Forslund (DG); * 11-Oct-2007 : Renamed ScatterRenderer (DG); + * 17-Jun-2008 : Apply legend shape, font and paint attributes (DG); * */ @@ -152,7 +153,7 @@ */ public void setUseSeriesOffset(boolean offset) { this.useSeriesOffset = offset; - notifyListeners(new RendererChangeEvent(this)); + fireChangeEvent(); } /** @@ -185,7 +186,7 @@ throw new IllegalArgumentException("Requires 0.0 <= margin < 1.0."); } this.itemMargin = margin; - notifyListeners(new RendererChangeEvent(this)); + fireChangeEvent(); } /** @@ -214,7 +215,7 @@ */ public void setDrawOutlines(boolean flag) { this.drawOutlines = flag; - notifyListeners(new RendererChangeEvent(this)); + fireChangeEvent(); } /** @@ -231,7 +232,8 @@ /** * Sets the flag that controls whether the outline paint is used for shape - * outlines. + * outlines, and sends a {@link RendererChangeEvent} to all registered + * listeners. * * @param use the flag. * @@ -239,7 +241,7 @@ */ public void setUseOutlinePaint(boolean use) { this.useOutlinePaint = use; - notifyListeners(new RendererChangeEvent(this)); + fireChangeEvent(); } // SHAPES FILLED @@ -277,25 +279,27 @@ } /** - * Sets the 'shapes filled' flag for a series. + * Sets the 'shapes filled' flag for a series and sends a + * {@link RendererChangeEvent} to all registered listeners. * * @param series the series index (zero-based). * @param filled the flag. */ public void setSeriesShapesFilled(int series, Boolean filled) { this.seriesShapesFilled.setBoolean(series, filled); - notifyListeners(new RendererChangeEvent(this)); + fireChangeEvent(); } /** - * Sets the 'shapes filled' flag for a series. + * Sets the 'shapes filled' flag for a series and sends a + * {@link RendererChangeEvent} to all registered listeners. * * @param series the series index (zero-based). * @param filled the flag. */ public void setSeriesShapesFilled(int series, boolean filled) { this.seriesShapesFilled.setBoolean(series, Boolean.valueOf(filled)); - notifyListeners(new RendererChangeEvent(this)); + fireChangeEvent(); } /** @@ -308,13 +312,14 @@ } /** - * Sets the base 'shapes filled' flag. + * Sets the base 'shapes filled' flag and sends a + * {@link RendererChangeEvent} to all registered listeners. * * @param flag the flag. */ public void setBaseShapesFilled(boolean flag) { this.baseShapesFilled = flag; - notifyListeners(new RendererChangeEvent(this)); + fireChangeEvent(); } /** @@ -337,7 +342,7 @@ */ public void setUseFillPaint(boolean flag) { this.useFillPaint = flag; - notifyListeners(new RendererChangeEvent(this)); + fireChangeEvent(); } /** @@ -449,7 +454,7 @@ urlText = getLegendItemURLGenerator().generateLabel( dataset, series); } - Shape shape = lookupSeriesShape(series); + Shape shape = lookupLegendShape(series); Paint paint = lookupSeriesPaint(series); Paint fillPaint = (this.useFillPaint ? getItemFillPaint(series, 0) : paint); @@ -462,6 +467,11 @@ fillPaint, shapeOutlineVisible, outlinePaint, outlineStroke, false, new Line2D.Double(-7.0, 0.0, 7.0, 0.0), getItemStroke(series, 0), getItemPaint(series, 0)); + result.setLabelFont(lookupLegendTextFont(series)); + Paint labelPaint = lookupLegendTextPaint(series); + if (labelPaint != null) { + result.setLabelPaint(labelPaint); + } result.setDataset(dataset); result.setDatasetIndex(datasetIndex); result.setSeriesKey(dataset.getRowKey(series)); Modified: trunk/source/org/jfree/chart/renderer/xy/AbstractXYItemRenderer.java =================================================================== --- trunk/source/org/jfree/chart/renderer/xy/AbstractXYItemRenderer.java 2008-06-17 18:03:25 UTC (rev 1178) +++ trunk/source/org/jfree/chart/renderer/xy/AbstractXYItemRenderer.java 2008-06-18 07:40:51 UTC (rev 1179) @@ -106,6 +106,7 @@ * 07-Apr-2008 : Updated various methods to use fireChangeEvent(), plus * minor API doc update (DG); * 02-Jun-2008 : Added isPointInRect() method (DG); + * 17-Jun-2008 : Apply legend shape, font and paint attributes (DG); * */ @@ -143,6 +144,7 @@ import org.jfree.chart.plot.DrawingSupplier; import org.jfree.chart.plot.IntervalMarker; import org.jfree.chart.plot.Marker; +import org.jfree.chart.plot.Plot; import org.jfree.chart.plot.PlotOrientation; import org.jfree.chart.plot.PlotRenderingInfo; import org.jfree.chart.plot.ValueMarker; @@ -883,12 +885,17 @@ urlText = getLegendItemURLGenerator().generateLabel( dataset, series); } - Shape shape = lookupSeriesShape(series); + Shape shape = lookupLegendShape(series); Paint paint = lookupSeriesPaint(series); Paint outlinePaint = lookupSeriesOutlinePaint(series); Stroke outlineStroke = lookupSeriesOutlineStroke(series); result = new LegendItem(label, description, toolTipText, urlText, shape, paint, outlineStroke, outlinePaint); + Paint labelPaint = lookupLegendTextPaint(series); + result.setLabelFont(lookupLegendTextFont(series)); + if (labelPaint != null) { + result.setLabelPaint(labelPaint); + } result.setSeriesKey(dataset.getSeriesKey(series)); result.setSeriesIndex(series); result.setDataset(dataset); @@ -970,6 +977,48 @@ } /** + * Draws a grid line against the range axis. + * + * @param g2 the graphics device. + * @param plot the plot. + * @param axis the value axis. + * @param dataArea the area for plotting data (not yet adjusted for any + * 3D effect). + * @param value the value at which the grid line should be drawn. + */ + public void drawDomainGridLine(Graphics2D g2, + XYPlot plot, + ValueAxis axis, + Rectangle2D dataArea, + double value) { + + Range range = axis.getRange(); + if (!range.contains(value)) { + return; + } + + PlotOrientation orientation = plot.getOrientation(); + double v = axis.valueToJava2D(value, dataArea, + plot.getDomainAxisEdge()); + Line2D line = null; + if (orientation == PlotOrientation.HORIZONTAL) { + line = new Line2D.Double(dataArea.getMinX(), v, + dataArea.getMaxX(), v); + } + else if (orientation == PlotOrientation.VERTICAL) { + line = new Line2D.Double(v, dataArea.getMinY(), v, + dataArea.getMaxY()); + } + + Paint paint = plot.getDomainGridlinePaint(); + Stroke stroke = plot.getDomainGridlineStroke(); + g2.setPaint(paint != null ? paint : Plot.DEFAULT_OUTLINE_PAINT); + g2.setStroke(stroke != null ? stroke : Plot.DEFAULT_OUTLINE_STROKE); + g2.draw(line); + + } + + /** * Draws a line perpendicular to the domain axis. * * @param g2 the graphics device. @@ -1759,7 +1808,7 @@ if (urlster != null) { url = urlster.generateURL(dataset, series, item); } - XYItemEntity entity = new XYItemEntity(area, dataset, series, item, + XYItemEntity entity = new XYItemEntity(hotspot, dataset, series, item, tip, url); entities.add(entity); } Modified: trunk/source/org/jfree/chart/renderer/xy/StandardXYItemRenderer.java =================================================================== --- trunk/source/org/jfree/chart/renderer/xy/StandardXYItemRenderer.java 2008-06-17 18:03:25 UTC (rev 1178) +++ trunk/source/org/jfree/chart/renderer/xy/StandardXYItemRenderer.java 2008-06-18 07:40:51 UTC (rev 1179) @@ -105,6 +105,7 @@ * 27-Jun-2007 : Updated constructor for method changes in XYItemRenderer (DG); * 02-Jul-2007 : Removed override field (DG); * 02-Jun-2008 : Fixed tooltips at lower edges of data area (DG); + * 17-Jun-2008 : Apply legend shape, font and paint attributes (DG); * */ @@ -597,7 +598,7 @@ urlText = getLegendItemURLGenerator().generateLabel( dataset, series); } - Shape shape = lookupSeriesShape(series); + Shape shape = lookupLegendShape(series); boolean shapeFilled = getItemShapeFilled(series, 0); Paint paint = lookupSeriesPaint(series); Paint linePaint = paint; @@ -606,6 +607,11 @@ urlText, this.baseShapesVisible, shape, shapeFilled, paint, !shapeFilled, paint, lineStroke, this.plotLines, this.legendLine, lineStroke, linePaint); + result.setLabelFont(lookupLegendTextFont(series)); + Paint labelPaint = lookupLegendTextPaint(series); + if (labelPaint != null) { + result.setLabelPaint(labelPaint); + } result.setDataset(dataset); result.setDatasetIndex(datasetIndex); result.setSeriesKey(dataset.getSeriesKey(series)); Modified: trunk/source/org/jfree/chart/renderer/xy/XYAreaRenderer.java =================================================================== --- trunk/source/org/jfree/chart/renderer/xy/XYAreaRenderer.java 2008-06-17 18:03:25 UTC (rev 1178) +++ trunk/source/org/jfree/chart/renderer/xy/XYAreaRenderer.java 2008-06-18 07:40:51 UTC (rev 1179) @@ -75,6 +75,7 @@ * 18-May-2007 : Set dataset and seriesKey for LegendItem (DG); * 21-Jun-2007 : Removed JCommon dependencies (DG); * 27-Jun-2007 : Updated drawItem() to use addEntity() (DG); + * 17-Jun-2008 : Apply legend font and paint attributes (DG); * */ @@ -296,7 +297,7 @@ */ publ... [truncated message content] |