Revision: 1273
Author:   heuermh
Date:     Tue Dec 30 03:46:18 2014 UTC
Log:      Issue 261 ; applying patch from jlessner@
https://code.google.com/p/piccolo2d/source/detail?r=1273

Modified:
/piccolo2d.java/trunk/extras/src/main/java/org/piccolo2d/extras/nodes/PStyledText.java

=======================================
--- /piccolo2d.java/trunk/extras/src/main/java/org/piccolo2d/extras/nodes/PStyledText.java Tue Dec 30 03:32:29 2014 UTC +++ /piccolo2d.java/trunk/extras/src/main/java/org/piccolo2d/extras/nodes/PStyledText.java Tue Dec 30 03:46:18 2014 UTC
@@ -285,7 +285,7 @@
         return curElement;
     }

- private void applyFontAttribute(final RunInfo paragraphRange, final AttributedString attributedString, + protected void applyFontAttribute(final RunInfo paragraphRange, final AttributedString attributedString,
             final Element curElement, final Font font) {
         if (font != null) {
attributedString.addAttribute(TextAttribute.FONT, font, Math.max(0, curElement.getStartOffset()
@@ -294,7 +294,7 @@
         }
     }

- private void applyStrikeThroughAttribute(final RunInfo paragraphRange, final AttributedString attributedString, + protected void applyStrikeThroughAttribute(final RunInfo paragraphRange, final AttributedString attributedString,
             final Element curElement, final AttributeSet attributes) {
final boolean strikethrough = StyleConstants.isStrikeThrough(attributes);
         if (strikethrough) {
@@ -305,18 +305,18 @@
         }
     }

- private void applyUnderlineAttribute(final RunInfo paragraphRange, final AttributedString attributedString, + protected void applyUnderlineAttribute(final RunInfo paragraphRange, final AttributedString attributedString,
             final Element curElement, final AttributeSet attributes) {
         final boolean underline = StyleConstants.isUnderline(attributes);
         if (underline) {
- attributedString.addAttribute(TextAttribute.UNDERLINE, Boolean.TRUE, Math.max(0, curElement
-                    .getStartOffset()
- - paragraphRange.startIndex), Math.min(paragraphRange.endIndex - paragraphRange.startIndex, - curElement.getEndOffset() - paragraphRange.startIndex)); + int startOffset = Math.max(0, curElement.getStartOffset() - paragraphRange.startIndex); + int endOffset = Math.min(paragraphRange.endIndex - paragraphRange.startIndex,
+                    curElement.getEndOffset() - paragraphRange.startIndex);
+ attributedString.addAttribute(TextAttribute.UNDERLINE, Boolean.TRUE, startOffset, endOffset);
         }
     }

- private void applyBackgroundAttribute(final StyleContext style, final RunInfo paragraphRange, + protected void applyBackgroundAttribute(final StyleContext style, final RunInfo paragraphRange, final AttributedString attributedString, final Element curElement, final AttributeSet attributes) {
         if (attributes.isDefined(StyleConstants.Background)) {
             final Color background = style.getBackground(attributes);
@@ -476,12 +476,7 @@

aTextLayout = measurer.nextLayout(Float.MAX_VALUE, Math.min(lineEnd, itr.getRunLimit()), false);

-                final SegmentInfo sInfo = new SegmentInfo();
-                sInfo.font = (Font) itr.getAttribute(TextAttribute.FONT);
- sInfo.foreground = (Color) itr.getAttribute(TextAttribute.FOREGROUND); - sInfo.background = (Color) itr.getAttribute(TextAttribute.BACKGROUND); - sInfo.underline = (Boolean) itr.getAttribute(TextAttribute.UNDERLINE);
-                sInfo.layout = aTextLayout;
+ final SegmentInfo sInfo = createSegmentInfo(itr, aTextLayout);

final FontMetrics metrics = StyleContext.getDefaultStyleContext().getFontMetrics(
                         (Font) itr.getAttribute(TextAttribute.FONT));
@@ -505,6 +500,20 @@
         constrainDimensionsIfNeeded(textWidth, textHeight);
     }

+ protected SegmentInfo createSegmentInfo(final AttributedCharacterIterator itr, TextLayout aTextLayout) {
+        final SegmentInfo sInfo = newSegmentInfo();
+        sInfo.font = (Font) itr.getAttribute(TextAttribute.FONT);
+ sInfo.foreground = (Color) itr.getAttribute(TextAttribute.FOREGROUND); + sInfo.background = (Color) itr.getAttribute(TextAttribute.BACKGROUND); + sInfo.underline = (Boolean) itr.getAttribute(TextAttribute.UNDERLINE);
+        sInfo.layout = aTextLayout;
+        return sInfo;
+    }
+
+    protected SegmentInfo newSegmentInfo() {
+        return new SegmentInfo();
+    }
+
     /**
      * @param lineInfo
      * @return
@@ -625,10 +634,7 @@
                 sInfo.layout.draw(g2, curX, y);

                 // Draw the underline and the strikethrough after the text
-                if (sInfo.underline != null) {
- paintLine.setLine(curX, y + lineInfo.maxDescent / 2, x + width, y + lineInfo.maxDescent / 2);
-                    g2.draw(paintLine);
-                }
+ drawUnderlineAndStrikethroughAfterText(curX, y, g2, lineInfo, sInfo, width);

                 curX = curX + width;
             }
@@ -636,6 +642,14 @@
             y += lineInfo.maxDescent + lineInfo.leading;
         }
     }
+
+    protected void drawUnderlineAndStrikethroughAfterText
+ (final float x, float y, final Graphics2D g2, LineInfo lineInfo, final SegmentInfo sInfo, final float width) {
+        if (sInfo.underline != null) {
+ paintLine.setLine(x, y + 1 + lineInfo.maxDescent / 2, x + width, y + 1 + lineInfo.maxDescent / 2);
+            g2.draw(paintLine);
+        }
+    }

     /**
      * {@inheritDoc}
@@ -735,6 +749,15 @@
         public int length() {
             return endIndex - startIndex;
         }
+
+        public int getStartIndex() {
+            return startIndex;
+        }
+
+        public int getEndIndex() {
+            return endIndex;
+        }
+
     }

     /**

--
--
Piccolo2D Developers Group: http://groups.google.com/group/piccolo2d-dev?hl=en
--- You received this message because you are subscribed to the Google Groups "Piccolo2D Developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to