The Text Engine needs to specify base offset for adornments

Project: http://git-wip-us.apache.org/repos/asf/flex-asjs/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-asjs/commit/6066f252
Tree: http://git-wip-us.apache.org/repos/asf/flex-asjs/tree/6066f252
Diff: http://git-wip-us.apache.org/repos/asf/flex-asjs/diff/6066f252

Branch: refs/heads/feature/strand-work
Commit: 6066f2528ddcbbf4f2060c7e31125b68674cd910
Parents: adf157a
Author: Harbs <ha...@in-tools.com>
Authored: Wed Aug 2 17:31:44 2017 +0300
Committer: Harbs <ha...@in-tools.com>
Committed: Wed Aug 2 17:31:44 2017 +0300

----------------------------------------------------------------------
 .../textLayout/compose/utils/AdornmentUtils.as  |  2 +-
 .../flex/textLayout/elements/FlowLeafElement.as | 14 +++++++++++++-
 .../apache/flex/text/engine/ElementFormat.as    |  2 +-
 .../org/apache/flex/text/engine/FontMetrics.as  | 20 ++++++++++++++++++++
 .../org/apache/flex/text/engine/ITextLine.as    |  3 ++-
 .../flex/org/apache/flex/text/html/TextLine.as  |  5 +++++
 6 files changed, 42 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/6066f252/frameworks/projects/TLF/src/main/flex/org/apache/flex/textLayout/compose/utils/AdornmentUtils.as
----------------------------------------------------------------------
diff --git 
a/frameworks/projects/TLF/src/main/flex/org/apache/flex/textLayout/compose/utils/AdornmentUtils.as
 
b/frameworks/projects/TLF/src/main/flex/org/apache/flex/textLayout/compose/utils/AdornmentUtils.as
index abaa81e..9fa970e 100644
--- 
a/frameworks/projects/TLF/src/main/flex/org/apache/flex/textLayout/compose/utils/AdornmentUtils.as
+++ 
b/frameworks/projects/TLF/src/main/flex/org/apache/flex/textLayout/compose/utils/AdornmentUtils.as
@@ -210,7 +210,6 @@ package org.apache.flex.textLayout.compose.utils
 
                        var metrics:FontMetrics = 
element.getComputedFontMetrics();
 
-
                        var backgroundOnly:Boolean = 
!(element.computedFormat.textDecoration == TextDecoration.UNDERLINE || 
element.computedFormat.lineThrough);
                                
                        if (!backgroundOnly)
@@ -223,6 +222,7 @@ package org.apache.flex.textLayout.compose.utils
                                                
                                var stOffset:Number = 
calculateStrikeThrough(element,tLine, blockProgression, metrics);
                                var ulOffset:Number = 
calculateUnderlineOffset(element, stOffset, blockProgression, metrics, tLine);
+                               ulOffset += tLine.getAdornmentOffsetBase();
                        }
                                                
                        if (blockProgression != BlockProgression.RL)

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/6066f252/frameworks/projects/TLF/src/main/flex/org/apache/flex/textLayout/elements/FlowLeafElement.as
----------------------------------------------------------------------
diff --git 
a/frameworks/projects/TLF/src/main/flex/org/apache/flex/textLayout/elements/FlowLeafElement.as
 
b/frameworks/projects/TLF/src/main/flex/org/apache/flex/textLayout/elements/FlowLeafElement.as
index cee6fac..8f78fa3 100644
--- 
a/frameworks/projects/TLF/src/main/flex/org/apache/flex/textLayout/elements/FlowLeafElement.as
+++ 
b/frameworks/projects/TLF/src/main/flex/org/apache/flex/textLayout/elements/FlowLeafElement.as
@@ -329,7 +329,19 @@ package org.apache.flex.textLayout.elements
                        var tf:ITextFlow = getTextFlow();
                        if (tf && tf.flowComposer && tf.flowComposer.swfContext)
                                return 
tf.flowComposer.swfContext.callInContext(ef.getFontMetrics, ef, null, true);
-                       return ef.getFontMetrics();
+                       COMPILE::SWF
+                       {
+                               return ef.getFontMetrics();
+                       }
+                       COMPILE::JS
+                       {
+                               var metrics:FontMetrics = ef.getFontMetrics();
+                               metrics.underlineOffset *= ef.fontSize;
+                               metrics.underlineThickness *= ef.fontSize;
+                               metrics.strikethroughOffset *= ef.fontSize;
+                               metrics.strikethroughThickness *= ef.fontSize;
+                               return metrics;
+                       }
                }
 
                /** @private */

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/6066f252/frameworks/projects/Text/src/main/flex/org/apache/flex/text/engine/ElementFormat.as
----------------------------------------------------------------------
diff --git 
a/frameworks/projects/Text/src/main/flex/org/apache/flex/text/engine/ElementFormat.as
 
b/frameworks/projects/Text/src/main/flex/org/apache/flex/text/engine/ElementFormat.as
index b144b90..00a5c82 100644
--- 
a/frameworks/projects/Text/src/main/flex/org/apache/flex/text/engine/ElementFormat.as
+++ 
b/frameworks/projects/Text/src/main/flex/org/apache/flex/text/engine/ElementFormat.as
@@ -86,7 +86,7 @@ package org.apache.flex.text.engine
                public function getFontMetrics():FontMetrics
                {
                        assert(fontDescription != null,"fontDescription not 
assigned!");
-                       return 
fontDescription.fontLoader.getFont(fontDescription.fontName,fontDescription.fontStyle).fontMetrics;
+                       return 
fontDescription.fontLoader.getFont(fontDescription.fontName,fontDescription.fontStyle).fontMetrics.clone();
                }
        }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/6066f252/frameworks/projects/Text/src/main/flex/org/apache/flex/text/engine/FontMetrics.as
----------------------------------------------------------------------
diff --git 
a/frameworks/projects/Text/src/main/flex/org/apache/flex/text/engine/FontMetrics.as
 
b/frameworks/projects/Text/src/main/flex/org/apache/flex/text/engine/FontMetrics.as
index 5472c73..6cde245 100644
--- 
a/frameworks/projects/Text/src/main/flex/org/apache/flex/text/engine/FontMetrics.as
+++ 
b/frameworks/projects/Text/src/main/flex/org/apache/flex/text/engine/FontMetrics.as
@@ -87,5 +87,25 @@ package org.apache.flex.text.engine
                {
                        return 1 / unitsPerEm * fontSize;
                }
+               public function clone():FontMetrics
+               {
+                       var metrics:FontMetrics = new FontMetrics();
+                       if(emBox)
+                               metrics.emBox = emBox.clone();
+                       metrics.lineGap = lineGap;
+                       metrics.strikethroughOffset = strikethroughOffset;
+                       metrics.strikethroughThickness = strikethroughThickness;
+                       metrics.subscriptOffset = subscriptOffset;
+                       metrics.subscriptScale = subscriptScale;
+                       metrics.superscriptOffset = superscriptOffset;
+                       metrics.superscriptScale = superscriptScale;
+                       metrics.underlineOffset = underlineOffset;
+                       metrics.underlineThickness = underlineThickness;
+                       metrics.ascender = ascender;
+                       metrics.descender = descender;
+                       metrics.xHeight = xHeight;
+                       metrics.capsHeight = capsHeight;
+                       return metrics;
+               }
        }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/6066f252/frameworks/projects/Text/src/main/flex/org/apache/flex/text/engine/ITextLine.as
----------------------------------------------------------------------
diff --git 
a/frameworks/projects/Text/src/main/flex/org/apache/flex/text/engine/ITextLine.as
 
b/frameworks/projects/Text/src/main/flex/org/apache/flex/text/engine/ITextLine.as
index f451ee8..60b6082 100644
--- 
a/frameworks/projects/Text/src/main/flex/org/apache/flex/text/engine/ITextLine.as
+++ 
b/frameworks/projects/Text/src/main/flex/org/apache/flex/text/engine/ITextLine.as
@@ -69,7 +69,8 @@ package org.apache.flex.text.engine
                function getAtomTextRotation(atomIndex:int):String;
                function getAtomWordBoundaryOnLeft(atomIndex:int):Boolean;
                function getBaselinePosition(baseline:String):Number;
-               
+               function getAdornmentOffsetBase():Number;
+
                
[SWFOverride(returns="flash.geom.Rectangle",params="flash.display.DisplayObject",altparams="Object")]
                function getBounds(ref:Object):Rectangle;
                

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/6066f252/frameworks/projects/Text/src/main/flex/org/apache/flex/text/html/TextLine.as
----------------------------------------------------------------------
diff --git 
a/frameworks/projects/Text/src/main/flex/org/apache/flex/text/html/TextLine.as 
b/frameworks/projects/Text/src/main/flex/org/apache/flex/text/html/TextLine.as
index 5818a60..33d4b22 100644
--- 
a/frameworks/projects/Text/src/main/flex/org/apache/flex/text/html/TextLine.as
+++ 
b/frameworks/projects/Text/src/main/flex/org/apache/flex/text/html/TextLine.as
@@ -506,5 +506,10 @@ package org.apache.flex.text.html
                        _numberLine = value;
                }
 
+               public function getAdornmentOffsetBase():Number
+               {
+                       return 0;
+               }
+
        }
 }
\ No newline at end of file

Reply via email to