Canvas renders fonts differently than span so have to use span to measure
Project: http://git-wip-us.apache.org/repos/asf/flex-asjs/repo Commit: http://git-wip-us.apache.org/repos/asf/flex-asjs/commit/82682482 Tree: http://git-wip-us.apache.org/repos/asf/flex-asjs/tree/82682482 Diff: http://git-wip-us.apache.org/repos/asf/flex-asjs/diff/82682482 Branch: refs/heads/tlf Commit: 82682482e6a592e551d06dcd8ab239937614ca67 Parents: 3172982 Author: Alex Harui <[email protected]> Authored: Thu Jun 15 22:09:56 2017 -0700 Committer: Alex Harui <[email protected]> Committed: Fri Jun 16 22:08:44 2017 -0700 ---------------------------------------------------------------------- .../flex/org/apache/flex/text/html/TextLine.as | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/82682482/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 ba74a85..1bbdf65 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 @@ -366,15 +366,17 @@ package org.apache.flex.text.html else { var s:String = element.firstChild.textContent; - var canvas:HTMLCanvasElement = document.createElement("canvas") as HTMLCanvasElement; - canvas.style.height = "100%"; - canvas.style.width = "100%"; - element.appendChild(canvas); - var ctx:CanvasRenderingContext2D = canvas.getContext("2d") as CanvasRenderingContext2D; - - var w1:Number = (atomIndex == 0) ? 0 : ctx.measureText(s.substring(0, atomIndex - 1)).width; - w = ctx.measureText(s.substring(0, atomIndex)).width; - element.removeChild(canvas); + var span:HTMLSpanElement = document.createElement("span") as HTMLSpanElement; + element.appendChild(span); + var w1:Number = 0; + if (atomIndex > 0) + { + span.innerHTML = s.substring(0, atomIndex); + w1 = span.getClientRects()[0].width; + } + span.innerHTML = s.substring(0, atomIndex + 1); + w = span.getClientRects()[0].width; + element.removeChild(span); return new Rectangle(w1, 1.2 - _textBlock.content.elementFormat.fontSize, w - w1, 1.2); } }
