From 4a15402e9c9a28df2d5b197eba6a725270bb6302 Mon Sep 17 00:00:00 2001 From: Yuri Blankenstein Date: Wed, 24 May 2023 15:05:48 +0200 Subject: [PATCH] #366 Bugfix for calculating if label fits inside bar --- .../org/jfree/chart/renderer/xy/XYBarRenderer.java | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/main/java/org/jfree/chart/renderer/xy/XYBarRenderer.java b/src/main/java/org/jfree/chart/renderer/xy/XYBarRenderer.java index 8c045e3e8..2a9f50f8d 100644 --- a/src/main/java/org/jfree/chart/renderer/xy/XYBarRenderer.java +++ b/src/main/java/org/jfree/chart/renderer/xy/XYBarRenderer.java @@ -1028,18 +1028,17 @@ private String calculateLabeltoDraw(String label, Point2D anchorPoint, } String result = label; - while (result != null) { - Shape bounds = TextUtils.calculateRotatedStringBounds(result, + while (result != null && !result.isEmpty()) { + Rectangle2D labelBounds = TextUtils.calculateRotatedStringBounds(result, g2, (float) anchorPoint.getX(), (float) anchorPoint.getY(), position.getTextAnchor(), position.getAngle(), - position.getRotationAnchor()); - Rectangle2D bounds2D = bounds == null ? null : bounds.getBounds2D(); + position.getRotationAnchor()).getBounds2D(); - if (bounds2D != null && labelBar.contains(bounds2D)) { + if (labelBar.getHeight() >= labelBounds.getHeight() && labelBar.getWidth() >= labelBounds.getWidth()) { // Label fits return result; - } else if (bounds2D != null && labelBar.getHeight() < bounds2D.getHeight()) { - // Label will never fit, insufficient height + } else if (labelBar.getHeight() < labelBounds.getHeight()) { + // Optimization: label will never fit due to insufficient height return null; } else { switch (position.getItemLabelClip()) {