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