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 piccolo2d-dev+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to