From d09cb8f9d8392ea93c6739b76e35faeca70b4002 Mon Sep 17 00:00:00 2001 From: Andreas Beeker Date: Sat, 2 Jun 2018 13:01:14 +0000 Subject: [PATCH] sonar fixes git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1832735 13f79535-47bb-0310-9956-ffa450edef68 --- .../poi/common/usermodel/fonts/FontGroup.java | 6 +- .../org/apache/poi/sl/draw/SLGraphics.java | 84 +- .../EvaluationConditionalFormatRule.java | 22 +- .../poi/ss/usermodel/TableStyleType.java | 36 +- .../poi/openxml4j/opc/EncryptionOption.java | 29 - .../opc/PackageRelationshipCollection.java | 31 +- .../poi/poifs/crypt/dsig/SignatureInfo.java | 2 +- .../org/apache/poi/hpbf/model/HPBFPart.java | 25 +- .../apache/poi/hslf/model/PPGraphics2D.java | 1828 +---------------- .../HSLFTabStopPropCollection.java | 6 +- .../textproperties/TextPropCollection.java | 2 +- .../poi/hslf/usermodel/HSLFTextParagraph.java | 3 - .../org/apache/poi/hwpf/model/ListTables.java | 16 +- 13 files changed, 118 insertions(+), 1972 deletions(-) delete mode 100644 src/ooxml/java/org/apache/poi/openxml4j/opc/EncryptionOption.java diff --git a/src/java/org/apache/poi/common/usermodel/fonts/FontGroup.java b/src/java/org/apache/poi/common/usermodel/fonts/FontGroup.java index c8a1a1cc04..1cfdc3aeca 100644 --- a/src/java/org/apache/poi/common/usermodel/fonts/FontGroup.java +++ b/src/java/org/apache/poi/common/usermodel/fonts/FontGroup.java @@ -111,18 +111,18 @@ public enum FontGroup { * @return the FontGroup */ public static List getFontGroupRanges(final String runText) { - List ttrList = new ArrayList<>(); + final List ttrList = new ArrayList<>(); if (runText == null || runText.isEmpty()) { return ttrList; } FontGroupRange ttrLast = null; - final int rlen = (runText != null) ? runText.length() : 0; + final int rlen = runText.length(); for(int cp, i = 0, charCount; i < rlen; i += charCount) { cp = runText.codePointAt(i); charCount = Character.charCount(cp); // don't switch the font group for a few default characters supposedly available in all fonts - FontGroup tt; + final FontGroup tt; if (ttrLast != null && " \n\r".indexOf(cp) > -1) { tt = ttrLast.fontGroup; } else { diff --git a/src/java/org/apache/poi/sl/draw/SLGraphics.java b/src/java/org/apache/poi/sl/draw/SLGraphics.java index c9b70cfba0..fada4c6431 100644 --- a/src/java/org/apache/poi/sl/draw/SLGraphics.java +++ b/src/java/org/apache/poi/sl/draw/SLGraphics.java @@ -67,12 +67,10 @@ import org.apache.poi.util.SuppressForbidden; /** * Translates Graphics2D calls into PowerPoint. - * - * @author Yegor Kozlov */ -public final class SLGraphics extends Graphics2D implements Cloneable { +public class SLGraphics extends Graphics2D implements Cloneable { - protected POILogger log = POILogFactory.getLogger(this.getClass()); + private static final POILogger LOG = POILogFactory.getLogger(SLGraphics.class); //The ppt object to write into. private GroupShape _group; @@ -303,7 +301,8 @@ public final class SLGraphics extends Graphics2D implements Cloneable { float ascent = layout.getAscent(); float width = (float) Math.floor(layout.getAdvance()); - /** + + /* * Even if top and bottom margins are set to 0 PowerPoint * always sets extra space between the text and its bounding box. * @@ -384,8 +383,8 @@ public final class SLGraphics extends Graphics2D implements Cloneable { */ @NotImplemented public void clip(Shape s){ - if (log.check(POILogger.WARN)) { - log.log(POILogger.WARN, "Not implemented"); + if (LOG.check(POILogger.WARN)) { + LOG.log(POILogger.WARN, "Not implemented"); } } @@ -407,8 +406,8 @@ public final class SLGraphics extends Graphics2D implements Cloneable { */ @NotImplemented public Shape getClip(){ - if (log.check(POILogger.WARN)) { - log.log(POILogger.WARN, "Not implemented"); + if (LOG.check(POILogger.WARN)) { + LOG.log(POILogger.WARN, "Not implemented"); } return null; } @@ -676,8 +675,8 @@ public final class SLGraphics extends Graphics2D implements Cloneable { public boolean drawImage(Image img, int x, int y, Color bgcolor, ImageObserver observer){ - if (log.check(POILogger.WARN)) { - log.log(POILogger.WARN, "Not implemented"); + if (LOG.check(POILogger.WARN)) { + LOG.log(POILogger.WARN, "Not implemented"); } return false; @@ -726,8 +725,8 @@ public final class SLGraphics extends Graphics2D implements Cloneable { int width, int height, Color bgcolor, ImageObserver observer){ - if (log.check(POILogger.WARN)) { - log.log(POILogger.WARN, "Not implemented"); + if (LOG.check(POILogger.WARN)) { + LOG.log(POILogger.WARN, "Not implemented"); } return false; @@ -786,8 +785,8 @@ public final class SLGraphics extends Graphics2D implements Cloneable { int dx1, int dy1, int dx2, int dy2, int sx1, int sy1, int sx2, int sy2, ImageObserver observer){ - if (log.check(POILogger.WARN)) { - log.log(POILogger.WARN, "Not implemented"); + if (LOG.check(POILogger.WARN)) { + LOG.log(POILogger.WARN, "Not implemented"); } return false; } @@ -851,8 +850,8 @@ public final class SLGraphics extends Graphics2D implements Cloneable { int sx1, int sy1, int sx2, int sy2, Color bgcolor, ImageObserver observer){ - if (log.check(POILogger.WARN)) { - log.log(POILogger.WARN, "Not implemented"); + if (LOG.check(POILogger.WARN)) { + LOG.log(POILogger.WARN, "Not implemented"); } return false; } @@ -892,8 +891,8 @@ public final class SLGraphics extends Graphics2D implements Cloneable { @NotImplemented public boolean drawImage(Image img, int x, int y, ImageObserver observer) { - if (log.check(POILogger.WARN)) { - log.log(POILogger.WARN, "Not implemented"); + if (LOG.check(POILogger.WARN)) { + LOG.log(POILogger.WARN, "Not implemented"); } return false; } @@ -1079,8 +1078,8 @@ public final class SLGraphics extends Graphics2D implements Cloneable { */ @NotImplemented public void setClip(Shape clip) { - if (log.check(POILogger.WARN)) { - log.log(POILogger.WARN, "Not implemented"); + if (LOG.check(POILogger.WARN)) { + LOG.log(POILogger.WARN, "Not implemented"); } } @@ -1102,11 +1101,10 @@ public final class SLGraphics extends Graphics2D implements Cloneable { * @since JDK1.1 */ public Rectangle getClipBounds(){ - Shape c = getClip(); - if (c==null) { - return null; + if (LOG.check(POILogger.WARN)) { + LOG.log(POILogger.WARN, "Not implemented"); } - return c.getBounds(); + return null; } /** @@ -1379,8 +1377,8 @@ public final class SLGraphics extends Graphics2D implements Cloneable { */ @NotImplemented public void setComposite(Composite comp){ - if (log.check(POILogger.WARN)) { - log.log(POILogger.WARN, "Not implemented"); + if (LOG.check(POILogger.WARN)) { + LOG.log(POILogger.WARN, "Not implemented"); } } @@ -1393,8 +1391,8 @@ public final class SLGraphics extends Graphics2D implements Cloneable { */ @NotImplemented public Composite getComposite(){ - if (log.check(POILogger.WARN)) { - log.log(POILogger.WARN, "Not implemented"); + if (LOG.check(POILogger.WARN)) { + LOG.log(POILogger.WARN, "Not implemented"); } return null; } @@ -1537,8 +1535,8 @@ public final class SLGraphics extends Graphics2D implements Cloneable { */ @NotImplemented public void drawString(AttributedCharacterIterator iterator, float x, float y) { - if (log.check(POILogger.WARN)) { - log.log(POILogger.WARN, "Not implemented"); + if (LOG.check(POILogger.WARN)) { + LOG.log(POILogger.WARN, "Not implemented"); } } @@ -1644,8 +1642,8 @@ public final class SLGraphics extends Graphics2D implements Cloneable { */ @NotImplemented public boolean drawImage(Image img, AffineTransform xform, ImageObserver obs) { - if (log.check(POILogger.WARN)) { - log.log(POILogger.WARN, "Not implemented"); + if (LOG.check(POILogger.WARN)) { + LOG.log(POILogger.WARN, "Not implemented"); } return false; } @@ -1690,8 +1688,8 @@ public final class SLGraphics extends Graphics2D implements Cloneable { public boolean drawImage(Image img, int x, int y, int width, int height, ImageObserver observer) { - if (log.check(POILogger.WARN)) { - log.log(POILogger.WARN, "Not implemented"); + if (LOG.check(POILogger.WARN)) { + LOG.log(POILogger.WARN, "Not implemented"); } return false; } @@ -1741,8 +1739,8 @@ public final class SLGraphics extends Graphics2D implements Cloneable { */ @NotImplemented public void setXORMode(Color c1) { - if (log.check(POILogger.WARN)) { - log.log(POILogger.WARN, "Not implemented"); + if (LOG.check(POILogger.WARN)) { + LOG.log(POILogger.WARN, "Not implemented"); } } @@ -1755,8 +1753,8 @@ public final class SLGraphics extends Graphics2D implements Cloneable { */ @NotImplemented public void setPaintMode() { - if (log.check(POILogger.WARN)) { - log.log(POILogger.WARN, "Not implemented"); + if (LOG.check(POILogger.WARN)) { + LOG.log(POILogger.WARN, "Not implemented"); } } @@ -1793,8 +1791,8 @@ public final class SLGraphics extends Graphics2D implements Cloneable { */ @NotImplemented public void drawRenderedImage(RenderedImage img, AffineTransform xform) { - if (log.check(POILogger.WARN)) { - log.log(POILogger.WARN, "Not implemented"); + if (LOG.check(POILogger.WARN)) { + LOG.log(POILogger.WARN, "Not implemented"); } } @@ -1821,8 +1819,8 @@ public final class SLGraphics extends Graphics2D implements Cloneable { */ @NotImplemented public void drawRenderableImage(RenderableImage img, AffineTransform xform) { - if (log.check(POILogger.WARN)) { - log.log(POILogger.WARN, "Not implemented"); + if (LOG.check(POILogger.WARN)) { + LOG.log(POILogger.WARN, "Not implemented"); } } diff --git a/src/java/org/apache/poi/ss/formula/EvaluationConditionalFormatRule.java b/src/java/org/apache/poi/ss/formula/EvaluationConditionalFormatRule.java index 55a684d5cd..42c626b512 100644 --- a/src/java/org/apache/poi/ss/formula/EvaluationConditionalFormatRule.java +++ b/src/java/org/apache/poi/ss/formula/EvaluationConditionalFormatRule.java @@ -632,7 +632,7 @@ public class EvaluationConditionalFormatRule implements Comparable c) break; - if (c >= firstStart && c <= secondStart -1) return new CellRangeAddress(table.getStartRowIndex(), table.getEndRowIndex(), firstStart, secondStart - 1); + while (firstStart <= c) { + if (c >= firstStart && c <= secondStart -1) { + return new CellRangeAddress(table.getStartRowIndex(), table.getEndRowIndex(), firstStart, secondStart - 1); + } firstStart = secondStart + c2Stripe; secondStart = firstStart + c1Stripe; } @@ -86,14 +87,15 @@ public enum TableStyleType { int firstStart = table.getStartColIndex(); int secondStart = firstStart + c1Stripe; - int c = cell.getCol(); + final int c = cell.getCol(); // look for the stripe containing c, accounting for the style element stripe size // could do fancy math, but tables can't be that wide, a simple loop is fine // if not in this type of stripe, return null - while (true) { - if (firstStart > c) break; - if (c >= secondStart && c <= secondStart + c2Stripe -1) return new CellRangeAddress(table.getStartRowIndex(), table.getEndRowIndex(), secondStart, secondStart + c2Stripe - 1); + while (firstStart <= c) { + if (c >= secondStart && c <= secondStart + c2Stripe -1) { + return new CellRangeAddress(table.getStartRowIndex(), table.getEndRowIndex(), secondStart, secondStart + c2Stripe - 1); + } firstStart = secondStart + c2Stripe; secondStart = firstStart + c1Stripe; } @@ -113,14 +115,15 @@ public enum TableStyleType { int firstStart = table.getStartRowIndex() + table.getHeaderRowCount(); int secondStart = firstStart + c1Stripe; - int c = cell.getRow(); + final int c = cell.getRow(); // look for the stripe containing c, accounting for the style element stripe size // could do fancy math, but tables can't be that wide, a simple loop is fine // if not in this type of stripe, return null - while (true) { - if (firstStart > c) break; - if (c >= firstStart && c <= secondStart -1) return new CellRangeAddress(firstStart, secondStart - 1, table.getStartColIndex(), table.getEndColIndex()); + while (firstStart <= c) { + if (c >= firstStart && c <= secondStart -1) { + return new CellRangeAddress(firstStart, secondStart - 1, table.getStartColIndex(), table.getEndColIndex()); + } firstStart = secondStart + c2Stripe; secondStart = firstStart + c1Stripe; } @@ -140,14 +143,15 @@ public enum TableStyleType { int firstStart = table.getStartRowIndex() + table.getHeaderRowCount(); int secondStart = firstStart + c1Stripe; - int c = cell.getRow(); + final int c = cell.getRow(); // look for the stripe containing c, accounting for the style element stripe size // could do fancy math, but tables can't be that wide, a simple loop is fine // if not in this type of stripe, return null - while (true) { - if (firstStart > c) break; - if (c >= secondStart && c <= secondStart +c2Stripe -1) return new CellRangeAddress(secondStart, secondStart + c2Stripe - 1, table.getStartColIndex(), table.getEndColIndex()); + while (firstStart <= c) { + if (c >= secondStart && c <= secondStart +c2Stripe -1) { + return new CellRangeAddress(secondStart, secondStart + c2Stripe - 1, table.getStartColIndex(), table.getEndColIndex()); + } firstStart = secondStart + c2Stripe; secondStart = firstStart + c1Stripe; } diff --git a/src/ooxml/java/org/apache/poi/openxml4j/opc/EncryptionOption.java b/src/ooxml/java/org/apache/poi/openxml4j/opc/EncryptionOption.java deleted file mode 100644 index bc994e0f1c..0000000000 --- a/src/ooxml/java/org/apache/poi/openxml4j/opc/EncryptionOption.java +++ /dev/null @@ -1,29 +0,0 @@ -/* ==================================================================== - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -==================================================================== */ - -package org.apache.poi.openxml4j.opc; - -/** - * Specifies the encryption option for parts in a Package. - * - * @author Julien Chable - * @version 0.1 - */ -public enum EncryptionOption { - /** No encryption. */ - NONE -} diff --git a/src/ooxml/java/org/apache/poi/openxml4j/opc/PackageRelationshipCollection.java b/src/ooxml/java/org/apache/poi/openxml4j/opc/PackageRelationshipCollection.java index b70d0aed16..9b1bfedb27 100644 --- a/src/ooxml/java/org/apache/poi/openxml4j/opc/PackageRelationshipCollection.java +++ b/src/ooxml/java/org/apache/poi/openxml4j/opc/PackageRelationshipCollection.java @@ -244,13 +244,11 @@ public final class PackageRelationshipCollection implements * The relationship ID to remove. */ public void removeRelationship(String id) { - if (relationshipsByID != null && relationshipsByType != null) { - PackageRelationship rel = relationshipsByID.get(id); - if (rel != null) { - relationshipsByID.remove(rel.getId()); - relationshipsByType.values().remove(rel); - internalRelationshipsByTargetName.values().remove(rel); - } + PackageRelationship rel = relationshipsByID.get(id); + if (rel != null) { + relationshipsByID.remove(rel.getId()); + relationshipsByType.values().remove(rel); + internalRelationshipsByTargetName.values().remove(rel); } } @@ -413,28 +411,23 @@ public final class PackageRelationshipCollection implements @Override public String toString() { - String str; - if (relationshipsByID == null) { - str = "relationshipsByID=null"; - } else { - str = relationshipsByID.size() + " relationship(s) = ["; - } + String str = relationshipsByID.size() + " relationship(s) = ["; if ((relationshipPart != null) && (relationshipPart._partName != null)) { - str = str + "," + relationshipPart._partName; + str += relationshipPart._partName; } else { - str = str + ",relationshipPart=null"; + str += "relationshipPart=null"; } // Source of this relationship if ((sourcePart != null) && (sourcePart._partName != null)) { - str = str + "," + sourcePart._partName; + str += "," + sourcePart._partName; } else { - str = str + ",sourcePart=null"; + str += ",sourcePart=null"; } if (partName != null) { - str = str + "," + partName; + str += "," + partName; } else { - str = str + ",uri=null)"; + str += ",uri=null)"; } return str + "]"; } diff --git a/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/SignatureInfo.java b/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/SignatureInfo.java index 730331c72b..285e226200 100644 --- a/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/SignatureInfo.java +++ b/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/SignatureInfo.java @@ -316,7 +316,7 @@ public class SignatureInfo implements SignatureConfigurable { } catch (InvalidFormatException e) { LOG.log(POILogger.WARN, "Reference to signature is invalid.", e); } - } while (sigPart == null); + } while (sigRelPart == null); return new SignaturePart(sigRelPart, signatureConfig); } diff --git a/src/scratchpad/src/org/apache/poi/hpbf/model/HPBFPart.java b/src/scratchpad/src/org/apache/poi/hpbf/model/HPBFPart.java index 49e2ac43a2..f3fefe55c6 100644 --- a/src/scratchpad/src/org/apache/poi/hpbf/model/HPBFPart.java +++ b/src/scratchpad/src/org/apache/poi/hpbf/model/HPBFPart.java @@ -32,12 +32,15 @@ import org.apache.poi.util.IOUtils; */ public abstract class HPBFPart { private byte[] data; + private final String[] path; + /** * @param path the path to the part, eg Contents or Quill, QuillSub, CONTENTS */ public HPBFPart(DirectoryNode baseDir, String[] path) throws IOException { + this.path = path; - DirectoryNode dir = getDir(path, baseDir); + DirectoryNode dir = getDir(baseDir, path); String name = path[path.length-1]; if (!dir.hasEntry(name)) { @@ -45,11 +48,12 @@ public abstract class HPBFPart { } // Grab the data from the part stream - InputStream is = dir.createDocumentInputStream(name); - data = IOUtils.toByteArray(is); - is.close(); + try (InputStream is = dir.createDocumentInputStream(name)) { + data = IOUtils.toByteArray(is); + } } - private DirectoryNode getDir(String[] path, DirectoryNode baseDir) { + + private static DirectoryNode getDir(DirectoryNode baseDir, String[] path) { DirectoryNode dir = baseDir; for(int i=0; iStroke in the - * Graphics2D context. - * @return the current Graphics2D Stroke, - * which defines the line style. - * @see #setStroke - */ - public Stroke getStroke(){ - return _stroke; - } - - /** - * Sets the Stroke for the Graphics2D context. - * @param s the Stroke object to be used to stroke a - * Shape during the rendering process - */ - public void setStroke(Stroke s){ - this._stroke = s; - } - - /** - * Returns the current Paint of the - * Graphics2D context. - * @return the current Graphics2D Paint, - * which defines a color or pattern. - * @see #setPaint - * @see java.awt.Graphics#setColor - */ - public Paint getPaint(){ - return _paint; - } - - /** - * Sets the Paint attribute for the - * Graphics2D context. Calling this method - * with a null Paint object does - * not have any effect on the current Paint attribute - * of this Graphics2D. - * @param paint the Paint object to be used to generate - * color during the rendering process, or null - * @see java.awt.Graphics#setColor - */ - public void setPaint(Paint paint){ - if(paint == null) return; - - this._paint = paint; - if (paint instanceof Color) _foreground = (Color)paint; - } - - /** - * Returns a copy of the current Transform in the - * Graphics2D context. - * @return the current AffineTransform in the - * Graphics2D context. - * @see #_transform - * @see #setTransform - */ - public AffineTransform getTransform(){ - return new AffineTransform(_transform); - } - - /** - * Sets the Transform in the Graphics2D - * context. - * @param Tx the AffineTransform object to be used in the - * rendering process - * @see #_transform - * @see AffineTransform - */ - public void setTransform(AffineTransform Tx) { - _transform = new AffineTransform(Tx); - } - - /** - * Strokes the outline of a Shape using the settings of the - * current Graphics2D context. The rendering attributes - * applied include the Clip, Transform, - * Paint, Composite and - * Stroke attributes. - * @param shape the Shape to be rendered - * @see #setStroke - * @see #setPaint - * @see java.awt.Graphics#setColor - * @see #_transform - * @see #setTransform - * @see #clip - * @see #setClip - * @see #setComposite - */ - public void draw(Shape shape){ - Path2D.Double path = new Path2D.Double(_transform.createTransformedShape(shape)); - HSLFFreeformShape p = new HSLFFreeformShape(_group); - p.setPath(path); - p.getFill().setForegroundColor(null); - applyStroke(p); - if (_paint instanceof Color) { - p.setLineColor((Color)_paint); - } - _group.addShape(p); - } - - /** - * Renders the text specified by the specified String, - * using the current text attribute state in the Graphics2D context. - * The baseline of the first character is at position - * (xy) in the User Space. - * The rendering attributes applied include the Clip, - * Transform, Paint, Font and - * Composite attributes. For characters in script systems - * such as Hebrew and Arabic, the glyphs can be rendered from right to - * left, in which case the coordinate supplied is the location of the - * leftmost character on the baseline. - * @param s the String to be rendered - * @param x the x coordinate of the location where the - * String should be rendered - * @param y the y coordinate of the location where the - * String should be rendered - * @throws NullPointerException if str is - * null - * @see #setPaint - * @see java.awt.Graphics#setColor - * @see java.awt.Graphics#setFont - * @see #setTransform - * @see #setComposite - * @see #setClip - */ - public void drawString(String s, float x, float y) { - HSLFTextBox txt = new HSLFTextBox(_group); - txt.setSheet(_group.getSheet()); - txt.setText(s); - - HSLFTextRun rt = txt.getTextParagraphs().get(0).getTextRuns().get(0); - rt.setFontSize((double)_font.getSize()); - rt.setFontFamily(_font.getFamily()); - - if (getColor() != null) rt.setFontColor(DrawPaint.createSolidPaint(getColor())); - if (_font.isBold()) rt.setBold(true); - if (_font.isItalic()) rt.setItalic(true); - - txt.setBottomInset(0); - txt.setTopInset(0); - txt.setLeftInset(0); - txt.setRightInset(0); - txt.setWordWrap(false); - txt.setHorizontalCentered(false); - txt.setVerticalAlignment(VerticalAlignment.MIDDLE); - - - TextLayout layout = new TextLayout(s, _font, getFontRenderContext()); - float ascent = layout.getAscent(); - - float width = (float) Math.floor(layout.getAdvance()); - /** - * Even if top and bottom margins are set to 0 PowerPoint - * always sets extra space between the text and its bounding box. - * - * The approximation height = ascent*2 works good enough in most cases - */ - float height = ascent * 2; - - /* - In powerpoint anchor of a shape is its top left corner. - Java graphics sets string coordinates by the baseline of the first character - so we need to shift up by the height of the textbox - */ - y -= height / 2 + ascent / 2; - - /* - In powerpoint anchor of a shape is its top left corner. - Java graphics sets string coordinates by the baseline of the first character - so we need to shift down by the height of the textbox - */ - txt.setAnchor(new Rectangle((int)x, (int)y, (int)width, (int)height)); - - _group.addShape(txt); - } - - /** - * Fills the interior of a Shape using the settings of the - * Graphics2D context. The rendering attributes applied - * include the Clip, Transform, - * Paint, and Composite. - * @param shape the Shape to be filled - * @see #setPaint - * @see java.awt.Graphics#setColor - * @see #_transform - * @see #setTransform - * @see #setComposite - * @see #clip - * @see #setClip - */ - public void fill(Shape shape){ - Path2D.Double path = new Path2D.Double(_transform.createTransformedShape(shape)); - HSLFFreeformShape p = new HSLFFreeformShape(_group); - p.setPath(path); - applyPaint(p); - p.setLineColor(null); //Fills must be "No Line" - _group.addShape(p); - } - - /** - * Translates the origin of the graphics context to the point - * (xy) in the current coordinate system. - * Modifies this graphics context so that its new origin corresponds - * to the point (xy) in this graphics context's - * original coordinate system. All coordinates used in subsequent - * rendering operations on this graphics context will be relative - * to this new origin. - * @param x the x coordinate. - * @param y the y coordinate. - */ - public void translate(int x, int y){ - _transform.translate(x, y); - } - - /** - * Intersects the current Clip with the interior of the - * specified Shape and sets the Clip to the - * resulting intersection. The specified Shape is - * transformed with the current Graphics2D - * Transform before being intersected with the current - * Clip. This method is used to make the current - * Clip smaller. - * To make the Clip larger, use setClip. - * The user clip modified by this method is independent of the - * clipping associated with device bounds and visibility. If no clip has - * previously been set, or if the clip has been cleared using - * {@link java.awt.Graphics#setClip(Shape) setClip} with a - * null argument, the specified Shape becomes - * the new user clip. - * @param s the Shape to be intersected with the current - * Clip. If s is null, - * this method clears the current Clip. - */ - @NotImplemented - public void clip(Shape s){ - if (LOG.check(POILogger.WARN)) { - LOG.log(POILogger.WARN, "Not implemented"); - } - } - - /** - * Gets the current clipping area. - * This method returns the user clip, which is independent of the - * clipping associated with device bounds and window visibility. - * If no clip has previously been set, or if the clip has been - * cleared using setClip(null), this method returns - * null. - * @return a Shape object representing the - * current clipping area, or null if - * no clip is set. - * @see java.awt.Graphics#getClipBounds() - * @see java.awt.Graphics#clipRect - * @see java.awt.Graphics#setClip(int, int, int, int) - * @see java.awt.Graphics#setClip(Shape) - * @since JDK1.1 - */ - @NotImplemented - public Shape getClip(){ - if (LOG.check(POILogger.WARN)) { - LOG.log(POILogger.WARN, "Not implemented"); - } - return null; - } - - /** - * Concatenates the current Graphics2D - * Transform with a scaling transformation - * Subsequent rendering is resized according to the specified scaling - * factors relative to the previous scaling. - * This is equivalent to calling transform(S), where S is an - * AffineTransform represented by the following matrix: - *
-     *          [   sx   0    0   ]
-     *          [   0    sy   0   ]
-     *          [   0    0    1   ]
-     * 
- * @param sx the amount by which X coordinates in subsequent - * rendering operations are multiplied relative to previous - * rendering operations. - * @param sy the amount by which Y coordinates in subsequent - * rendering operations are multiplied relative to previous - * rendering operations. - */ - public void scale(double sx, double sy){ - _transform.scale(sx, sy); - } - - /** - * Draws an outlined round-cornered rectangle using this graphics - * context's current color. The left and right edges of the rectangle - * are at x and x + width, - * respectively. The top and bottom edges of the rectangle are at - * y and y + height. - * @param x the x coordinate of the rectangle to be drawn. - * @param y the y coordinate of the rectangle to be drawn. - * @param width the width of the rectangle to be drawn. - * @param height the height of the rectangle to be drawn. - * @param arcWidth the horizontal diameter of the arc - * at the four corners. - * @param arcHeight the vertical diameter of the arc - * at the four corners. - * @see java.awt.Graphics#fillRoundRect - */ - public void drawRoundRect(int x, int y, int width, int height, - int arcWidth, int arcHeight){ - RoundRectangle2D rect = new RoundRectangle2D.Float(x, y, width, height, arcWidth, arcHeight); - draw(rect); - } - - /** - * Draws the text given by the specified string, using this - * graphics context's current font and color. The baseline of the - * first character is at position (xy) in this - * graphics context's coordinate system. - * @param str the string to be drawn. - * @param x the x coordinate. - * @param y the y coordinate. - * @see java.awt.Graphics#drawBytes - * @see java.awt.Graphics#drawChars - */ - public void drawString(String str, int x, int y){ - drawString(str, (float)x, (float)y); - } - - /** - * Fills an oval bounded by the specified rectangle with the - * current color. - * @param x the x coordinate of the upper left corner - * of the oval to be filled. - * @param y the y coordinate of the upper left corner - * of the oval to be filled. - * @param width the width of the oval to be filled. - * @param height the height of the oval to be filled. - * @see java.awt.Graphics#drawOval - */ - public void fillOval(int x, int y, int width, int height){ - Ellipse2D oval = new Ellipse2D.Float(x, y, width, height); - fill(oval); - } - - /** - * Fills the specified rounded corner rectangle with the current color. - * The left and right edges of the rectangle - * are at x and x + width - 1, - * respectively. The top and bottom edges of the rectangle are at - * y and y + height - 1. - * @param x the x coordinate of the rectangle to be filled. - * @param y the y coordinate of the rectangle to be filled. - * @param width the width of the rectangle to be filled. - * @param height the height of the rectangle to be filled. - * @param arcWidth the horizontal diameter - * of the arc at the four corners. - * @param arcHeight the vertical diameter - * of the arc at the four corners. - * @see java.awt.Graphics#drawRoundRect - */ - public void fillRoundRect(int x, int y, int width, int height, - int arcWidth, int arcHeight){ - - RoundRectangle2D rect = new RoundRectangle2D.Float(x, y, width, height, arcWidth, arcHeight); - fill(rect); - } - - /** - * Fills a circular or elliptical arc covering the specified rectangle. - *

- * The resulting arc begins at startAngle and extends - * for arcAngle degrees. - * Angles are interpreted such that 0 degrees - * is at the 3 o'clock position. - * A positive value indicates a counter-clockwise rotation - * while a negative value indicates a clockwise rotation. - *

- * The center of the arc is the center of the rectangle whose origin - * is (xy) and whose size is specified by the - * width and height arguments. - *

- * The resulting arc covers an area - * width + 1 pixels wide - * by height + 1 pixels tall. - *

- * The angles are specified relative to the non-square extents of - * the bounding rectangle such that 45 degrees always falls on the - * line from the center of the ellipse to the upper right corner of - * the bounding rectangle. As a result, if the bounding rectangle is - * noticeably longer in one axis than the other, the angles to the - * start and end of the arc segment will be skewed farther along the - * longer axis of the bounds. - * @param x the x coordinate of the - * upper-left corner of the arc to be filled. - * @param y the y coordinate of the - * upper-left corner of the arc to be filled. - * @param width the width of the arc to be filled. - * @param height the height of the arc to be filled. - * @param startAngle the beginning angle. - * @param arcAngle the angular extent of the arc, - * relative to the start angle. - * @see java.awt.Graphics#drawArc - */ - public void fillArc(int x, int y, int width, int height, - int startAngle, int arcAngle){ - Arc2D arc = new Arc2D.Float(x, y, width, height, startAngle, arcAngle, Arc2D.PIE); - fill(arc); - } - - /** - * Draws the outline of a circular or elliptical arc - * covering the specified rectangle. - *

- * The resulting arc begins at startAngle and extends - * for arcAngle degrees, using the current color. - * Angles are interpreted such that 0 degrees - * is at the 3 o'clock position. - * A positive value indicates a counter-clockwise rotation - * while a negative value indicates a clockwise rotation. - *

- * The center of the arc is the center of the rectangle whose origin - * is (xy) and whose size is specified by the - * width and height arguments. - *

- * The resulting arc covers an area - * width + 1 pixels wide - * by height + 1 pixels tall. - *

- * The angles are specified relative to the non-square extents of - * the bounding rectangle such that 45 degrees always falls on the - * line from the center of the ellipse to the upper right corner of - * the bounding rectangle. As a result, if the bounding rectangle is - * noticeably longer in one axis than the other, the angles to the - * start and end of the arc segment will be skewed farther along the - * longer axis of the bounds. - * @param x the x coordinate of the - * upper-left corner of the arc to be drawn. - * @param y the y coordinate of the - * upper-left corner of the arc to be drawn. - * @param width the width of the arc to be drawn. - * @param height the height of the arc to be drawn. - * @param startAngle the beginning angle. - * @param arcAngle the angular extent of the arc, - * relative to the start angle. - * @see java.awt.Graphics#fillArc - */ - public void drawArc(int x, int y, int width, int height, - int startAngle, int arcAngle) { - Arc2D arc = new Arc2D.Float(x, y, width, height, startAngle, arcAngle, Arc2D.OPEN); - draw(arc); - } - - - /** - * Draws a sequence of connected lines defined by - * arrays of x and y coordinates. - * Each pair of (xy) coordinates defines a point. - * The figure is not closed if the first point - * differs from the last point. - * @param xPoints an array of x points - * @param yPoints an array of y points - * @param nPoints the total number of points - * @see java.awt.Graphics#drawPolygon(int[], int[], int) - * @since JDK1.1 - */ - public void drawPolyline(int[] xPoints, int[] yPoints, - int nPoints){ - if(nPoints > 0){ - GeneralPath path = new GeneralPath(); - path.moveTo(xPoints[0], yPoints[0]); - for(int i=1; ix, y, - * width, and height arguments. - *

- * The oval covers an area that is - * width + 1 pixels wide - * and height + 1 pixels tall. - * @param x the x coordinate of the upper left - * corner of the oval to be drawn. - * @param y the y coordinate of the upper left - * corner of the oval to be drawn. - * @param width the width of the oval to be drawn. - * @param height the height of the oval to be drawn. - * @see java.awt.Graphics#fillOval - */ - public void drawOval(int x, int y, int width, int height){ - Ellipse2D oval = new Ellipse2D.Float(x, y, width, height); - draw(oval); - } - - /** - * Draws as much of the specified image as is currently available. - * The image is drawn with its top-left corner at - * (xy) in this graphics context's coordinate - * space. Transparent pixels are drawn in the specified - * background color. - *

- * This operation is equivalent to filling a rectangle of the - * width and height of the specified image with the given color and then - * drawing the image on top of it, but possibly more efficient. - *

- * This method returns immediately in all cases, even if the - * complete image has not yet been loaded, and it has not been dithered - * and converted for the current output device. - *

- * If the image has not yet been completely loaded, then - * drawImage returns false. As more of - * the image becomes available, the process that draws the image notifies - * the specified image observer. - * @param img the specified image to be drawn. - * @param x the x coordinate. - * @param y the y coordinate. - * @param bgcolor the background color to paint under the - * non-opaque portions of the image. - * @param observer object to be notified as more of - * the image is converted. - * @see java.awt.Image - * @see java.awt.image.ImageObserver - * @see java.awt.image.ImageObserver#imageUpdate(java.awt.Image, int, int, int, int, int) - */ - @NotImplemented - public boolean drawImage(Image img, int x, int y, - Color bgcolor, - ImageObserver observer){ - if (LOG.check(POILogger.WARN)) { - LOG.log(POILogger.WARN, "Not implemented"); - } - - return false; - } - - /** - * Draws as much of the specified image as has already been scaled - * to fit inside the specified rectangle. - *

- * The image is drawn inside the specified rectangle of this - * graphics context's coordinate space, and is scaled if - * necessary. Transparent pixels are drawn in the specified - * background color. - * This operation is equivalent to filling a rectangle of the - * width and height of the specified image with the given color and then - * drawing the image on top of it, but possibly more efficient. - *

- * This method returns immediately in all cases, even if the - * entire image has not yet been scaled, dithered, and converted - * for the current output device. - * If the current output representation is not yet complete then - * drawImage returns false. As more of - * the image becomes available, the process that draws the image notifies - * the specified image observer. - *

- * A scaled version of an image will not necessarily be - * available immediately just because an unscaled version of the - * image has been constructed for this output device. Each size of - * the image may be cached separately and generated from the original - * data in a separate image production sequence. - * @param img the specified image to be drawn. - * @param x the x coordinate. - * @param y the y coordinate. - * @param width the width of the rectangle. - * @param height the height of the rectangle. - * @param bgcolor the background color to paint under the - * non-opaque portions of the image. - * @param observer object to be notified as more of - * the image is converted. - * @see java.awt.Image - * @see java.awt.image.ImageObserver - * @see java.awt.image.ImageObserver#imageUpdate(java.awt.Image, int, int, int, int, int) - */ - @NotImplemented - public boolean drawImage(Image img, int x, int y, - int width, int height, - Color bgcolor, - ImageObserver observer){ - if (LOG.check(POILogger.WARN)) { - LOG.log(POILogger.WARN, "Not implemented"); - } - - return false; - } - - - /** - * Draws as much of the specified area of the specified image as is - * currently available, scaling it on the fly to fit inside the - * specified area of the destination drawable surface. Transparent pixels - * do not affect whatever pixels are already there. - *

- * This method returns immediately in all cases, even if the - * image area to be drawn has not yet been scaled, dithered, and converted - * for the current output device. - * If the current output representation is not yet complete then - * drawImage returns false. As more of - * the image becomes available, the process that draws the image notifies - * the specified image observer. - *

- * This method always uses the unscaled version of the image - * to render the scaled rectangle and performs the required - * scaling on the fly. It does not use a cached, scaled version - * of the image for this operation. Scaling of the image from source - * to destination is performed such that the first coordinate - * of the source rectangle is mapped to the first coordinate of - * the destination rectangle, and the second source coordinate is - * mapped to the second destination coordinate. The subimage is - * scaled and flipped as needed to preserve those mappings. - * @param img the specified image to be drawn - * @param dx1 the x coordinate of the first corner of the - * destination rectangle. - * @param dy1 the y coordinate of the first corner of the - * destination rectangle. - * @param dx2 the x coordinate of the second corner of the - * destination rectangle. - * @param dy2 the y coordinate of the second corner of the - * destination rectangle. - * @param sx1 the x coordinate of the first corner of the - * source rectangle. - * @param sy1 the y coordinate of the first corner of the - * source rectangle. - * @param sx2 the x coordinate of the second corner of the - * source rectangle. - * @param sy2 the y coordinate of the second corner of the - * source rectangle. - * @param observer object to be notified as more of the image is - * scaled and converted. - * @see java.awt.Image - * @see java.awt.image.ImageObserver - * @see java.awt.image.ImageObserver#imageUpdate(java.awt.Image, int, int, int, int, int) - * @since JDK1.1 - */ - @NotImplemented - public boolean drawImage(Image img, - int dx1, int dy1, int dx2, int dy2, - int sx1, int sy1, int sx2, int sy2, - ImageObserver observer){ - if (LOG.check(POILogger.WARN)) { - LOG.log(POILogger.WARN, "Not implemented"); - } - return false; - } - - /** - * Draws as much of the specified area of the specified image as is - * currently available, scaling it on the fly to fit inside the - * specified area of the destination drawable surface. - *

- * Transparent pixels are drawn in the specified background color. - * This operation is equivalent to filling a rectangle of the - * width and height of the specified image with the given color and then - * drawing the image on top of it, but possibly more efficient. - *

- * This method returns immediately in all cases, even if the - * image area to be drawn has not yet been scaled, dithered, and converted - * for the current output device. - * If the current output representation is not yet complete then - * drawImage returns false. As more of - * the image becomes available, the process that draws the image notifies - * the specified image observer. - *

- * This method always uses the unscaled version of the image - * to render the scaled rectangle and performs the required - * scaling on the fly. It does not use a cached, scaled version - * of the image for this operation. Scaling of the image from source - * to destination is performed such that the first coordinate - * of the source rectangle is mapped to the first coordinate of - * the destination rectangle, and the second source coordinate is - * mapped to the second destination coordinate. The subimage is - * scaled and flipped as needed to preserve those mappings. - * @param img the specified image to be drawn - * @param dx1 the x coordinate of the first corner of the - * destination rectangle. - * @param dy1 the y coordinate of the first corner of the - * destination rectangle. - * @param dx2 the x coordinate of the second corner of the - * destination rectangle. - * @param dy2 the y coordinate of the second corner of the - * destination rectangle. - * @param sx1 the x coordinate of the first corner of the - * source rectangle. - * @param sy1 the y coordinate of the first corner of the - * source rectangle. - * @param sx2 the x coordinate of the second corner of the - * source rectangle. - * @param sy2 the y coordinate of the second corner of the - * source rectangle. - * @param bgcolor the background color to paint under the - * non-opaque portions of the image. - * @param observer object to be notified as more of the image is - * scaled and converted. - * @see java.awt.Image - * @see java.awt.image.ImageObserver - * @see java.awt.image.ImageObserver#imageUpdate(java.awt.Image, int, int, int, int, int) - * @since JDK1.1 - */ - @NotImplemented - public boolean drawImage(Image img, - int dx1, int dy1, int dx2, int dy2, - int sx1, int sy1, int sx2, int sy2, - Color bgcolor, - ImageObserver observer){ - if (LOG.check(POILogger.WARN)) { - LOG.log(POILogger.WARN, "Not implemented"); - } - return false; - } - - /** - * Draws as much of the specified image as is currently available. - * The image is drawn with its top-left corner at - * (xy) in this graphics context's coordinate - * space. Transparent pixels in the image do not affect whatever - * pixels are already there. - *

- * This method returns immediately in all cases, even if the - * complete image has not yet been loaded, and it has not been dithered - * and converted for the current output device. - *

- * If the image has completely loaded and its pixels are - * no longer being changed, then - * drawImage returns true. - * Otherwise, drawImage returns false - * and as more of - * the image becomes available - * or it is time to draw another frame of animation, - * the process that loads the image notifies - * the specified image observer. - * @param img the specified image to be drawn. This method does - * nothing if img is null. - * @param x the x coordinate. - * @param y the y coordinate. - * @param observer object to be notified as more of - * the image is converted. - * @return false if the image pixels are still changing; - * true otherwise. - * @see java.awt.Image - * @see java.awt.image.ImageObserver - * @see java.awt.image.ImageObserver#imageUpdate(java.awt.Image, int, int, int, int, int) - */ - @NotImplemented - public boolean drawImage(Image img, int x, int y, - ImageObserver observer) { - if (LOG.check(POILogger.WARN)) { - LOG.log(POILogger.WARN, "Not implemented"); - } - return false; - } - - /** - * Disposes of this graphics context and releases - * any system resources that it is using. - * A Graphics object cannot be used after - * disposehas been called. - *

- * When a Java program runs, a large number of Graphics - * objects can be created within a short time frame. - * Although the finalization process of the garbage collector - * also disposes of the same system resources, it is preferable - * to manually free the associated resources by calling this - * method rather than to rely on a finalization process which - * may not run to completion for a long period of time. - *

- * Graphics objects which are provided as arguments to the - * paint and update methods - * of components are automatically released by the system when - * those methods return. For efficiency, programmers should - * call dispose when finished using - * a Graphics object only if it was created - * directly from a component or another Graphics object. - * @see java.awt.Graphics#finalize - * @see java.awt.Component#paint - * @see java.awt.Component#update - * @see java.awt.Component#getGraphics - * @see java.awt.Graphics#create - */ - public void dispose() { - } - - /** - * Draws a line, using the current color, between the points - * (x1, y1) and (x2, y2) - * in this graphics context's coordinate system. - * @param x1 the first point's x coordinate. - * @param y1 the first point's y coordinate. - * @param x2 the second point's x coordinate. - * @param y2 the second point's y coordinate. - */ - public void drawLine(int x1, int y1, int x2, int y2){ - Line2D line = new Line2D.Float(x1, y1, x2, y2); - draw(line); - } - - /** - * Fills a closed polygon defined by - * arrays of x and y coordinates. - *

- * This method draws the polygon defined by nPoint line - * segments, where the first nPoint - 1 - * line segments are line segments from - * (xPoints[i - 1], yPoints[i - 1]) - * to (xPoints[i], yPoints[i]), for - * 1 ≤ i ≤ nPoints. - * The figure is automatically closed by drawing a line connecting - * the final point to the first point, if those points are different. - *

- * The area inside the polygon is defined using an - * even-odd fill rule, also known as the alternating rule. - * @param xPoints a an array of x coordinates. - * @param yPoints a an array of y coordinates. - * @param nPoints a the total number of points. - * @see java.awt.Graphics#drawPolygon(int[], int[], int) - */ - public void fillPolygon(int[] xPoints, int[] yPoints, - int nPoints){ - java.awt.Polygon polygon = new java.awt.Polygon(xPoints, yPoints, nPoints); - fill(polygon); - } - - /** - * Fills the specified rectangle. - * The left and right edges of the rectangle are at - * x and x + width - 1. - * The top and bottom edges are at - * y and y + height - 1. - * The resulting rectangle covers an area - * width pixels wide by - * height pixels tall. - * The rectangle is filled using the graphics context's current color. - * @param x the x coordinate - * of the rectangle to be filled. - * @param y the y coordinate - * of the rectangle to be filled. - * @param width the width of the rectangle to be filled. - * @param height the height of the rectangle to be filled. - * @see java.awt.Graphics#clearRect - * @see java.awt.Graphics#drawRect - */ - public void fillRect(int x, int y, int width, int height){ - Rectangle rect = new Rectangle(x, y, width, height); - fill(rect); - } - - /** - * Draws the outline of the specified rectangle. - * The left and right edges of the rectangle are at - * x and x + width. - * The top and bottom edges are at - * y and y + height. - * The rectangle is drawn using the graphics context's current color. - * @param x the x coordinate - * of the rectangle to be drawn. - * @param y the y coordinate - * of the rectangle to be drawn. - * @param width the width of the rectangle to be drawn. - * @param height the height of the rectangle to be drawn. - * @see java.awt.Graphics#fillRect - * @see java.awt.Graphics#clearRect - */ - public void drawRect(int x, int y, int width, int height) { - Rectangle rect = new Rectangle(x, y, width, height); - draw(rect); - } - - /** - * Draws a closed polygon defined by - * arrays of x and y coordinates. - * Each pair of (xy) coordinates defines a point. - *

- * This method draws the polygon defined by nPoint line - * segments, where the first nPoint - 1 - * line segments are line segments from - * (xPoints[i - 1], yPoints[i - 1]) - * to (xPoints[i], yPoints[i]), for - * 1 ≤ i ≤ nPoints. - * The figure is automatically closed by drawing a line connecting - * the final point to the first point, if those points are different. - * @param xPoints a an array of x coordinates. - * @param yPoints a an array of y coordinates. - * @param nPoints a the total number of points. - * @see java.awt.Graphics#fillPolygon(int[],int[],int) - * @see java.awt.Graphics#drawPolyline - */ - public void drawPolygon(int[] xPoints, int[] yPoints, - int nPoints){ - java.awt.Polygon polygon = new java.awt.Polygon(xPoints, yPoints, nPoints); - draw(polygon); - } - - /** - * Intersects the current clip with the specified rectangle. - * The resulting clipping area is the intersection of the current - * clipping area and the specified rectangle. If there is no - * current clipping area, either because the clip has never been - * set, or the clip has been cleared using setClip(null), - * the specified rectangle becomes the new clip. - * This method sets the user clip, which is independent of the - * clipping associated with device bounds and window visibility. - * This method can only be used to make the current clip smaller. - * To set the current clip larger, use any of the setClip methods. - * Rendering operations have no effect outside of the clipping area. - * @param x the x coordinate of the rectangle to intersect the clip with - * @param y the y coordinate of the rectangle to intersect the clip with - * @param width the width of the rectangle to intersect the clip with - * @param height the height of the rectangle to intersect the clip with - * @see #setClip(int, int, int, int) - * @see #setClip(Shape) - */ - public void clipRect(int x, int y, int width, int height){ - clip(new Rectangle(x, y, width, height)); - } - - /** - * Sets the current clipping area to an arbitrary clip shape. - * Not all objects that implement the Shape - * interface can be used to set the clip. The only - * Shape objects that are guaranteed to be - * supported are Shape objects that are - * obtained via the getClip method and via - * Rectangle objects. This method sets the - * user clip, which is independent of the clipping associated - * with device bounds and window visibility. - * @param clip the Shape to use to set the clip - * @see java.awt.Graphics#getClip() - * @see java.awt.Graphics#clipRect - * @see java.awt.Graphics#setClip(int, int, int, int) - * @since JDK1.1 - */ - @NotImplemented - public void setClip(Shape clip) { - if (LOG.check(POILogger.WARN)) { - LOG.log(POILogger.WARN, "Not implemented"); - } - } - - /** - * Returns the bounding rectangle of the current clipping area. - * This method refers to the user clip, which is independent of the - * clipping associated with device bounds and window visibility. - * If no clip has previously been set, or if the clip has been - * cleared using setClip(null), this method returns - * null. - * The coordinates in the rectangle are relative to the coordinate - * system origin of this graphics context. - * @return the bounding rectangle of the current clipping area, - * or null if no clip is set. - * @see java.awt.Graphics#getClip - * @see java.awt.Graphics#clipRect - * @see java.awt.Graphics#setClip(int, int, int, int) - * @see java.awt.Graphics#setClip(Shape) - * @since JDK1.1 - */ - public Rectangle getClipBounds(){ - Shape c = getClip(); - if (c==null) { - return null; - } - return c.getBounds(); - } - - /** - * Draws the text given by the specified iterator, using this - * graphics context's current color. The iterator has to specify a font - * for each character. The baseline of the - * first character is at position (xy) in this - * graphics context's coordinate system. - * @param iterator the iterator whose text is to be drawn - * @param x the x coordinate. - * @param y the y coordinate. - * @see java.awt.Graphics#drawBytes - * @see java.awt.Graphics#drawChars - */ - public void drawString(AttributedCharacterIterator iterator, - int x, int y){ - drawString(iterator, (float)x, (float)y); - } - - /** - * Clears the specified rectangle by filling it with the background - * color of the current drawing surface. This operation does not - * use the current paint mode. - *

- * Beginning with Java 1.1, the background color - * of offscreen images may be system dependent. Applications should - * use setColor followed by fillRect to - * ensure that an offscreen image is cleared to a specific color. - * @param x the x coordinate of the rectangle to clear. - * @param y the y coordinate of the rectangle to clear. - * @param width the width of the rectangle to clear. - * @param height the height of the rectangle to clear. - * @see java.awt.Graphics#fillRect(int, int, int, int) - * @see java.awt.Graphics#drawRect - * @see java.awt.Graphics#setColor(java.awt.Color) - * @see java.awt.Graphics#setPaintMode - * @see java.awt.Graphics#setXORMode(java.awt.Color) - */ - public void clearRect(int x, int y, int width, int height) { - Paint paint = getPaint(); - setColor(getBackground()); - fillRect(x, y, width, height); - setPaint(paint); - } - - public void copyArea(int x, int y, int width, int height, int dx, int dy) { - } - - /** - * Sets the current clip to the rectangle specified by the given - * coordinates. This method sets the user clip, which is - * independent of the clipping associated with device bounds - * and window visibility. - * Rendering operations have no effect outside of the clipping area. - * @param x the x coordinate of the new clip rectangle. - * @param y the y coordinate of the new clip rectangle. - * @param width the width of the new clip rectangle. - * @param height the height of the new clip rectangle. - * @see java.awt.Graphics#clipRect - * @see java.awt.Graphics#setClip(Shape) - * @since JDK1.1 - */ - public void setClip(int x, int y, int width, int height){ - setClip(new Rectangle(x, y, width, height)); - } - - /** - * Concatenates the current Graphics2D - * Transform with a rotation transform. - * Subsequent rendering is rotated by the specified radians relative - * to the previous origin. - * This is equivalent to calling transform(R), where R is an - * AffineTransform represented by the following matrix: - *

-     *          [   cos(theta)    -sin(theta)    0   ]
-     *          [   sin(theta)     cos(theta)    0   ]
-     *          [       0              0         1   ]
-     * 
- * Rotating with a positive angle theta rotates points on the positive - * x axis toward the positive y axis. - * @param theta the angle of rotation in radians - */ - public void rotate(double theta){ - _transform.rotate(theta); - } - - /** - * Concatenates the current Graphics2D - * Transform with a translated rotation - * transform. Subsequent rendering is transformed by a transform - * which is constructed by translating to the specified location, - * rotating by the specified radians, and translating back by the same - * amount as the original translation. This is equivalent to the - * following sequence of calls: - *
-     *          translate(x, y);
-     *          rotate(theta);
-     *          translate(-x, -y);
-     * 
- * Rotating with a positive angle theta rotates points on the positive - * x axis toward the positive y axis. - * @param theta the angle of rotation in radians - * @param x x coordinate of the origin of the rotation - * @param y y coordinate of the origin of the rotation - */ - public void rotate(double theta, double x, double y){ - _transform.rotate(theta, x, y); - } - - /** - * Concatenates the current Graphics2D - * Transform with a shearing transform. - * Subsequent renderings are sheared by the specified - * multiplier relative to the previous position. - * This is equivalent to calling transform(SH), where SH - * is an AffineTransform represented by the following - * matrix: - *
-     *          [   1   shx   0   ]
-     *          [  shy   1    0   ]
-     *          [   0    0    1   ]
-     * 
- * @param shx the multiplier by which coordinates are shifted in - * the positive X axis direction as a function of their Y coordinate - * @param shy the multiplier by which coordinates are shifted in - * the positive Y axis direction as a function of their X coordinate - */ - public void shear(double shx, double shy){ - _transform.shear(shx, shy); - } - - /** - * Get the rendering context of the Font within this - * Graphics2D context. - * The {@link FontRenderContext} - * encapsulates application hints such as anti-aliasing and - * fractional metrics, as well as target device specific information - * such as dots-per-inch. This information should be provided by the - * application when using objects that perform typographical - * formatting, such as Font and - * TextLayout. This information should also be provided - * by applications that perform their own layout and need accurate - * measurements of various characteristics of glyphs such as advance - * and line height when various rendering hints have been applied to - * the text rendering. - * - * @return a reference to an instance of FontRenderContext. - * @see java.awt.font.FontRenderContext - * @see java.awt.Font#createGlyphVector(FontRenderContext,char[]) - * @see java.awt.font.TextLayout - * @since JDK1.2 - */ - public FontRenderContext getFontRenderContext() { - boolean isAntiAliased = RenderingHints.VALUE_TEXT_ANTIALIAS_ON.equals( - getRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING)); - boolean usesFractionalMetrics = RenderingHints.VALUE_FRACTIONALMETRICS_ON.equals( - getRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS)); - - - return new FontRenderContext(new AffineTransform(), isAntiAliased, usesFractionalMetrics); - } - - /** - * Composes an AffineTransform object with the - * Transform in this Graphics2D according - * to the rule last-specified-first-applied. If the current - * Transform is Cx, the result of composition - * with Tx is a new Transform Cx'. Cx' becomes the - * current Transform for this Graphics2D. - * Transforming a point p by the updated Transform Cx' is - * equivalent to first transforming p by Tx and then transforming - * the result by the original Transform Cx. In other - * words, Cx'(p) = Cx(Tx(p)). A copy of the Tx is made, if necessary, - * so further modifications to Tx do not affect rendering. - * @param Tx the AffineTransform object to be composed with - * the current Transform - * @see #setTransform - * @see AffineTransform - */ - public void transform(AffineTransform Tx) { - _transform.concatenate(Tx); - } - - /** - * Renders a BufferedImage that is - * filtered with a - * {@link BufferedImageOp}. - * The rendering attributes applied include the Clip, - * Transform - * and Composite attributes. This is equivalent to: - *
-     * img1 = op.filter(img, null);
-     * drawImage(img1, new AffineTransform(1f,0f,0f,1f,x,y), null);
-     * 
- * @param img the BufferedImage to be rendered - * @param op the filter to be applied to the image before rendering - * @param x the x coordinate in user space where the image is rendered - * @param y the y coordinate in user space where the image is rendered - * @see #_transform - * @see #setTransform - * @see #setComposite - * @see #clip - * @see #setClip(Shape) - */ - public void drawImage(BufferedImage img, - BufferedImageOp op, - int x, - int y){ - img = op.filter(img, null); - drawImage(img, x, y, null); - } - - /** - * Sets the background color for the Graphics2D context. - * The background color is used for clearing a region. - * When a Graphics2D is constructed for a - * Component, the background color is - * inherited from the Component. Setting the background color - * in the Graphics2D context only affects the subsequent - * clearRect calls and not the background color of the - * Component. To change the background - * of the Component, use appropriate methods of - * the Component. - * @param color the background color that isused in - * subsequent calls to clearRect - * @see #getBackground - * @see java.awt.Graphics#clearRect - */ - public void setBackground(Color color) { - if(color == null) - return; - - _background = color; - } - - /** - * Returns the background color used for clearing a region. - * @return the current Graphics2D Color, - * which defines the background color. - * @see #setBackground - */ - public Color getBackground(){ - return _background; - } - - /** - * Sets the Composite for the Graphics2D context. - * The Composite is used in all drawing methods such as - * drawImage, drawString, draw, - * and fill. It specifies how new pixels are to be combined - * with the existing pixels on the graphics device during the rendering - * process. - *

If this Graphics2D context is drawing to a - * Component on the display screen and the - * Composite is a custom object rather than an - * instance of the AlphaComposite class, and if - * there is a security manager, its checkPermission - * method is called with an AWTPermission("readDisplayPixels") - * permission. - * - * @param comp the Composite object to be used for rendering - * @throws SecurityException - * if a custom Composite object is being - * used to render to the screen and a security manager - * is set and its checkPermission method - * does not allow the operation. - * @see java.awt.Graphics#setXORMode - * @see java.awt.Graphics#setPaintMode - * @see java.awt.AlphaComposite - */ - @NotImplemented - public void setComposite(Composite comp){ - if (LOG.check(POILogger.WARN)) { - LOG.log(POILogger.WARN, "Not implemented"); - } - } - - /** - * Returns the current Composite in the - * Graphics2D context. - * @return the current Graphics2D Composite, - * which defines a compositing style. - * @see #setComposite - */ - @NotImplemented - public Composite getComposite(){ - if (LOG.check(POILogger.WARN)) { - LOG.log(POILogger.WARN, "Not implemented"); - } - return null; - } - - /** - * Returns the value of a single preference for the rendering algorithms. - * Hint categories include controls for rendering quality and overall - * time/quality trade-off in the rendering process. Refer to the - * RenderingHints class for definitions of some common - * keys and values. - * @param hintKey the key corresponding to the hint to get. - * @return an object representing the value for the specified hint key. - * Some of the keys and their associated values are defined in the - * RenderingHints class. - * @see RenderingHints - */ - public Object getRenderingHint(RenderingHints.Key hintKey){ - return _hints.get(hintKey); - } - - /** - * Sets the value of a single preference for the rendering algorithms. - * Hint categories include controls for rendering quality and overall - * time/quality trade-off in the rendering process. Refer to the - * RenderingHints class for definitions of some common - * keys and values. - * @param hintKey the key of the hint to be set. - * @param hintValue the value indicating preferences for the specified - * hint category. - * @see RenderingHints - */ - public void setRenderingHint(RenderingHints.Key hintKey, Object hintValue){ - _hints.put(hintKey, hintValue); - } - - - /** - * Renders the text of the specified - * {@link GlyphVector} using - * the Graphics2D context's rendering attributes. - * The rendering attributes applied include the Clip, - * Transform, Paint, and - * Composite attributes. The GlyphVector - * specifies individual glyphs from a {@link Font}. - * The GlyphVector can also contain the glyph positions. - * This is the fastest way to render a set of characters to the - * screen. - * - * @param g the GlyphVector to be rendered - * @param x the x position in user space where the glyphs should be - * rendered - * @param y the y position in user space where the glyphs should be - * rendered - * - * @see java.awt.Font#createGlyphVector(FontRenderContext, char[]) - * @see java.awt.font.GlyphVector - * @see #setPaint - * @see java.awt.Graphics#setColor - * @see #setTransform - * @see #setComposite - * @see #setClip(Shape) - */ - public void drawGlyphVector(GlyphVector g, float x, float y) { - Shape glyphOutline = g.getOutline(x, y); - fill(glyphOutline); - } - - /** - * Returns the device configuration associated with this - * Graphics2D. - * @return the device configuration - */ - public GraphicsConfiguration getDeviceConfiguration() { - return GraphicsEnvironment.getLocalGraphicsEnvironment(). - getDefaultScreenDevice().getDefaultConfiguration(); - } - - /** - * Sets the values of an arbitrary number of preferences for the - * rendering algorithms. - * Only values for the rendering hints that are present in the - * specified Map object are modified. - * All other preferences not present in the specified - * object are left unmodified. - * Hint categories include controls for rendering quality and - * overall time/quality trade-off in the rendering process. - * Refer to the RenderingHints class for definitions of - * some common keys and values. - * @param hints the rendering hints to be set - * @see RenderingHints - */ - public void addRenderingHints(Map hints){ - this._hints.putAll(hints); - } - - /** - * Concatenates the current - * Graphics2D Transform - * with a translation transform. - * Subsequent rendering is translated by the specified - * distance relative to the previous position. - * This is equivalent to calling transform(T), where T is an - * AffineTransform represented by the following matrix: - *

-     *          [   1    0    tx  ]
-     *          [   0    1    ty  ]
-     *          [   0    0    1   ]
-     * 
- * @param tx the distance to translate along the x-axis - * @param ty the distance to translate along the y-axis - */ - public void translate(double tx, double ty){ - _transform.translate(tx, ty); - } - - /** - * Renders the text of the specified iterator, using the - * Graphics2D context's current Paint. The - * iterator must specify a font - * for each character. The baseline of the - * first character is at position (xy) in the - * User Space. - * The rendering attributes applied include the Clip, - * Transform, Paint, and - * Composite attributes. - * For characters in script systems such as Hebrew and Arabic, - * the glyphs can be rendered from right to left, in which case the - * coordinate supplied is the location of the leftmost character - * on the baseline. - * @param iterator the iterator whose text is to be rendered - * @param x the x coordinate where the iterator's text is to be - * rendered - * @param y the y coordinate where the iterator's text is to be - * rendered - * @see #setPaint - * @see java.awt.Graphics#setColor - * @see #setTransform - * @see #setComposite - * @see #setClip - */ - @NotImplemented - public void drawString(AttributedCharacterIterator iterator, float x, float y) { - if (LOG.check(POILogger.WARN)) { - LOG.log(POILogger.WARN, "Not implemented"); - } - } - - /** - * Checks whether or not the specified Shape intersects - * the specified {@link Rectangle}, which is in device - * space. If onStroke is false, this method checks - * whether or not the interior of the specified Shape - * intersects the specified Rectangle. If - * onStroke is true, this method checks - * whether or not the Stroke of the specified - * Shape outline intersects the specified - * Rectangle. - * The rendering attributes taken into account include the - * Clip, Transform, and Stroke - * attributes. - * @param rect the area in device space to check for a hit - * @param s the Shape to check for a hit - * @param onStroke flag used to choose between testing the - * stroked or the filled shape. If the flag is true, the - * Stroke oultine is tested. If the flag is - * false, the filled Shape is tested. - * @return true if there is a hit; false - * otherwise. - * @see #setStroke - * @see #fill(Shape) - * @see #draw(Shape) - * @see #_transform - * @see #setTransform - * @see #clip - * @see #setClip(Shape) - */ - public boolean hit(Rectangle rect, - Shape s, - boolean onStroke){ - if (onStroke) { - s = getStroke().createStrokedShape(s); - } - - s = getTransform().createTransformedShape(s); - - return s.intersects(rect); - } - - /** - * Gets the preferences for the rendering algorithms. Hint categories - * include controls for rendering quality and overall time/quality - * trade-off in the rendering process. - * Returns all of the hint key/value pairs that were ever specified in - * one operation. Refer to the - * RenderingHints class for definitions of some common - * keys and values. - * @return a reference to an instance of RenderingHints - * that contains the current preferences. - * @see RenderingHints - */ - public RenderingHints getRenderingHints(){ - return _hints; - } - - /** - * Replaces the values of all preferences for the rendering - * algorithms with the specified hints. - * The existing values for all rendering hints are discarded and - * the new set of known hints and values are initialized from the - * specified {@link Map} object. - * Hint categories include controls for rendering quality and - * overall time/quality trade-off in the rendering process. - * Refer to the RenderingHints class for definitions of - * some common keys and values. - * @param hints the rendering hints to be set - * @see RenderingHints - */ - public void setRenderingHints(Map hints){ - this._hints = new RenderingHints(null); - this._hints.putAll(hints); - } - - /** - * Renders an image, applying a transform from image space into user space - * before drawing. - * The transformation from user space into device space is done with - * the current Transform in the Graphics2D. - * The specified transformation is applied to the image before the - * transform attribute in the Graphics2D context is applied. - * The rendering attributes applied include the Clip, - * Transform, and Composite attributes. - * Note that no rendering is done if the specified transform is - * noninvertible. - * @param img the Image to be rendered - * @param xform the transformation from image space into user space - * @param obs the {@link ImageObserver} - * to be notified as more of the Image - * is converted - * @return true if the Image is - * fully loaded and completely rendered; - * false if the Image is still being loaded. - * @see #_transform - * @see #setTransform - * @see #setComposite - * @see #clip - * @see #setClip(Shape) - */ - @NotImplemented - public boolean drawImage(Image img, AffineTransform xform, ImageObserver obs) { - if (LOG.check(POILogger.WARN)) { - LOG.log(POILogger.WARN, "Not implemented"); - } - return false; - } - - /** - * Draws as much of the specified image as has already been scaled - * to fit inside the specified rectangle. - *

- * The image is drawn inside the specified rectangle of this - * graphics context's coordinate space, and is scaled if - * necessary. Transparent pixels do not affect whatever pixels - * are already there. - *

- * This method returns immediately in all cases, even if the - * entire image has not yet been scaled, dithered, and converted - * for the current output device. - * If the current output representation is not yet complete, then - * drawImage returns false. As more of - * the image becomes available, the process that loads the image notifies - * the image observer by calling its imageUpdate method. - *

- * A scaled version of an image will not necessarily be - * available immediately just because an unscaled version of the - * image has been constructed for this output device. Each size of - * the image may be cached separately and generated from the original - * data in a separate image production sequence. - * @param img the specified image to be drawn. This method does - * nothing if img is null. - * @param x the x coordinate. - * @param y the y coordinate. - * @param width the width of the rectangle. - * @param height the height of the rectangle. - * @param observer object to be notified as more of - * the image is converted. - * @return false if the image pixels are still changing; - * true otherwise. - * @see java.awt.Image - * @see java.awt.image.ImageObserver - * @see java.awt.image.ImageObserver#imageUpdate(java.awt.Image, int, int, int, int, int) - */ - @NotImplemented - public boolean drawImage(Image img, int x, int y, - int width, int height, - ImageObserver observer) { - if (LOG.check(POILogger.WARN)) { - LOG.log(POILogger.WARN, "Not implemented"); - } - return false; - } - - /** - * Creates a new Graphics object that is - * a copy of this Graphics object. - * @return a new graphics context that is a copy of - * this graphics context. - */ - public Graphics create() { - try { - return (Graphics)clone(); - } catch (CloneNotSupportedException e){ - throw new HSLFException(e); - } - } - - /** - * Gets the font metrics for the specified font. - * @return the font metrics for the specified font. - * @param f the specified font - * @see java.awt.Graphics#getFont - * @see java.awt.FontMetrics - * @see java.awt.Graphics#getFontMetrics() - */ - @SuppressWarnings("deprecation") - @SuppressForbidden - public FontMetrics getFontMetrics(Font f) { - return Toolkit.getDefaultToolkit().getFontMetrics(f); - } - - /** - * Sets the paint mode of this graphics context to alternate between - * this graphics context's current color and the new specified color. - * This specifies that logical pixel operations are performed in the - * XOR mode, which alternates pixels between the current color and - * a specified XOR color. - *

- * When drawing operations are performed, pixels which are the - * current color are changed to the specified color, and vice versa. - *

- * Pixels that are of colors other than those two colors are changed - * in an unpredictable but reversible manner; if the same figure is - * drawn twice, then all pixels are restored to their original values. - * @param c1 the XOR alternation color - */ - @NotImplemented - public void setXORMode(Color c1) { - if (LOG.check(POILogger.WARN)) { - LOG.log(POILogger.WARN, "Not implemented"); - } - } - - /** - * Sets the paint mode of this graphics context to overwrite the - * destination with this graphics context's current color. - * This sets the logical pixel operation function to the paint or - * overwrite mode. All subsequent rendering operations will - * overwrite the destination with the current color. - */ - @NotImplemented - public void setPaintMode() { - if (LOG.check(POILogger.WARN)) { - LOG.log(POILogger.WARN, "Not implemented"); - } - } - - /** - * Renders a - * {@link RenderableImage}, - * applying a transform from image space into user space before drawing. - * The transformation from user space into device space is done with - * the current Transform in the Graphics2D. - * The specified transformation is applied to the image before the - * transform attribute in the Graphics2D context is applied. - * The rendering attributes applied include the Clip, - * Transform, and Composite attributes. Note - * that no rendering is done if the specified transform is - * noninvertible. - *

- * Rendering hints set on the Graphics2D object might - * be used in rendering the RenderableImage. - * If explicit control is required over specific hints recognized by a - * specific RenderableImage, or if knowledge of which hints - * are used is required, then a RenderedImage should be - * obtained directly from the RenderableImage - * and rendered using - *{@link #drawRenderedImage(RenderedImage, AffineTransform) drawRenderedImage}. - * @param img the image to be rendered. This method does - * nothing if img is null. - * @param xform the transformation from image space into user space - * @see #_transform - * @see #setTransform - * @see #setComposite - * @see #clip - * @see #setClip - * @see #drawRenderedImage - */ - @NotImplemented - public void drawRenderedImage(RenderedImage img, AffineTransform xform) { - if (LOG.check(POILogger.WARN)) { - LOG.log(POILogger.WARN, "Not implemented"); - } - } - - /** - * Renders a {@link RenderedImage}, - * applying a transform from image - * space into user space before drawing. - * The transformation from user space into device space is done with - * the current Transform in the Graphics2D. - * The specified transformation is applied to the image before the - * transform attribute in the Graphics2D context is applied. - * The rendering attributes applied include the Clip, - * Transform, and Composite attributes. Note - * that no rendering is done if the specified transform is - * noninvertible. - * @param img the image to be rendered. This method does - * nothing if img is null. - * @param xform the transformation from image space into user space - * @see #_transform - * @see #setTransform - * @see #setComposite - * @see #clip - * @see #setClip - */ - @NotImplemented - public void drawRenderableImage(RenderableImage img, AffineTransform xform) { - if (LOG.check(POILogger.WARN)) { - LOG.log(POILogger.WARN, "Not implemented"); - } - } - - protected void applyStroke(HSLFSimpleShape shape) { - if (_stroke instanceof BasicStroke){ - BasicStroke bs = (BasicStroke)_stroke; - shape.setLineWidth(bs.getLineWidth()); - float[] dash = bs.getDashArray(); - if (dash != null) { - //TODO: implement more dashing styles - shape.setLineDash(StrokeStyle.LineDash.DASH); - } - } - } - - protected void applyPaint(HSLFSimpleShape shape) { - if (_paint instanceof Color) { - shape.getFill().setForegroundColor((Color)_paint); - } + super(group); } } diff --git a/src/scratchpad/src/org/apache/poi/hslf/model/textproperties/HSLFTabStopPropCollection.java b/src/scratchpad/src/org/apache/poi/hslf/model/textproperties/HSLFTabStopPropCollection.java index 7f7f6bd9cf..282b7791e9 100644 --- a/src/scratchpad/src/org/apache/poi/hslf/model/textproperties/HSLFTabStopPropCollection.java +++ b/src/scratchpad/src/org/apache/poi/hslf/model/textproperties/HSLFTabStopPropCollection.java @@ -113,11 +113,7 @@ public class HSLFTabStopPropCollection extends TextProp { @Override public int hashCode() { - final int prime = 31; - int result = super.hashCode(); - result = prime * result - + ((tabStops == null) ? 0 : tabStops.hashCode()); - return result; + return 31 * super.hashCode() + tabStops.hashCode(); } @Override diff --git a/src/scratchpad/src/org/apache/poi/hslf/model/textproperties/TextPropCollection.java b/src/scratchpad/src/org/apache/poi/hslf/model/textproperties/TextPropCollection.java index 976e8550f5..b859a4c099 100644 --- a/src/scratchpad/src/org/apache/poi/hslf/model/textproperties/TextPropCollection.java +++ b/src/scratchpad/src/org/apache/poi/hslf/model/textproperties/TextPropCollection.java @@ -338,7 +338,7 @@ public class TextPropCollection { result = prime * result + charactersCovered; result = prime * result + maskSpecial; result = prime * result + indentLevel; - result = prime * result + ((textProps == null) ? 0 : textProps.hashCode()); + result = prime * result + textProps.hashCode(); return result; } /** diff --git a/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFTextParagraph.java b/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFTextParagraph.java index 4e68c63fed..5b9bdfa5bc 100644 --- a/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFTextParagraph.java +++ b/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFTextParagraph.java @@ -193,9 +193,6 @@ public final class HSLFTextParagraph implements TextParagraph