You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flex.apache.org by ah...@apache.org on 2017/05/08 18:59:31 UTC
[19/21] git commit: [flex-asjs] [refs/heads/tlf] - need
currentContainer in order to measure text
need currentContainer in order to measure text
Project: http://git-wip-us.apache.org/repos/asf/flex-asjs/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-asjs/commit/c341287a
Tree: http://git-wip-us.apache.org/repos/asf/flex-asjs/tree/c341287a
Diff: http://git-wip-us.apache.org/repos/asf/flex-asjs/diff/c341287a
Branch: refs/heads/tlf
Commit: c341287ab8773dd3ea516f6485390c608843109a
Parents: 91ef059
Author: Alex Harui <ah...@apache.org>
Authored: Mon May 8 11:07:53 2017 -0700
Committer: Alex Harui <ah...@apache.org>
Committed: Mon May 8 11:59:03 2017 -0700
----------------------------------------------------------------------
.../container/TextContainerManager.as | 3 +-
.../flex/textLayout/factory/ITLFFactory.as | 10 ++++-
.../textLayout/factory/StandardTLFFactory.as | 11 ++++++
.../org/apache/flex/text/engine/ITextFactory.as | 10 +++++
.../apache/flex/text/html/HTMLTextFactory.as | 14 ++++++-
.../flex/org/apache/flex/text/html/TextBlock.as | 7 ++++
.../flex/org/apache/flex/text/html/TextLine.as | 40 ++++++++++++++++----
7 files changed, 84 insertions(+), 11 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/c341287a/frameworks/projects/TLF/src/main/flex/org/apache/flex/textLayout/container/TextContainerManager.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/TLF/src/main/flex/org/apache/flex/textLayout/container/TextContainerManager.as b/frameworks/projects/TLF/src/main/flex/org/apache/flex/textLayout/container/TextContainerManager.as
index 72ba0c1..4488faf 100644
--- a/frameworks/projects/TLF/src/main/flex/org/apache/flex/textLayout/container/TextContainerManager.as
+++ b/frameworks/projects/TLF/src/main/flex/org/apache/flex/textLayout/container/TextContainerManager.as
@@ -1632,7 +1632,8 @@ package org.apache.flex.textLayout.container
private function convertToTextFlow():void
{
CONFIG::debug { assert(_sourceState != SOURCE_TEXTFLOW,"bad call to convertToTextFlow"); }
-
+
+ TLFFactory.defaultTLFFactory.currentContainer = container;
_textFlow = new TextFlow(TLFFactory.defaultTLFFactory, _config);
_textFlow.hostFormat = _hostFormat;
if(_swfContext)
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/c341287a/frameworks/projects/TLF/src/main/flex/org/apache/flex/textLayout/factory/ITLFFactory.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/TLF/src/main/flex/org/apache/flex/textLayout/factory/ITLFFactory.as b/frameworks/projects/TLF/src/main/flex/org/apache/flex/textLayout/factory/ITLFFactory.as
index 4b204b5..c8da7ad 100644
--- a/frameworks/projects/TLF/src/main/flex/org/apache/flex/textLayout/factory/ITLFFactory.as
+++ b/frameworks/projects/TLF/src/main/flex/org/apache/flex/textLayout/factory/ITLFFactory.as
@@ -25,6 +25,14 @@ package org.apache.flex.textLayout.factory {
function get textFactory():ITextFactory;
function getRect():IRect;
function getCompoundGraphic():ICompoundGraphic;
- function getContainer():IParentIUIBase;
+ function getContainer():IParentIUIBase;
+
+ // in JS, in order to measure text, TextLines need to be put
+ // in the DOM early, so you need to pick one DOM widget to use as
+ // at least a temporary parent.
+ // in SWF, this isn't really needed since FTE is given all
+ // of the font information it needs
+ function get currentContainer():IParentIUIBase;
+ function set currentContainer(value:IParentIUIBase):void
}
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/c341287a/frameworks/projects/TLF/src/main/flex/org/apache/flex/textLayout/factory/StandardTLFFactory.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/TLF/src/main/flex/org/apache/flex/textLayout/factory/StandardTLFFactory.as b/frameworks/projects/TLF/src/main/flex/org/apache/flex/textLayout/factory/StandardTLFFactory.as
index 460621b..7ed3439 100644
--- a/frameworks/projects/TLF/src/main/flex/org/apache/flex/textLayout/factory/StandardTLFFactory.as
+++ b/frameworks/projects/TLF/src/main/flex/org/apache/flex/textLayout/factory/StandardTLFFactory.as
@@ -45,7 +45,18 @@ package org.apache.flex.textLayout.factory {
public function get textFactory() : ITextFactory {
if(!factory)
factory = new HTMLTextFactory();
+ factory.currentContainer = currentContainer;
return factory;
}
+
+ private var _currentContainer:IParentIUIBase;
+ public function get currentContainer():IParentIUIBase
+ {
+ return _currentContainer;
+ }
+ public function set currentContainer(value:IParentIUIBase):void
+ {
+ _currentContainer = value;
+ }
}
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/c341287a/frameworks/projects/Text/src/main/flex/org/apache/flex/text/engine/ITextFactory.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/Text/src/main/flex/org/apache/flex/text/engine/ITextFactory.as b/frameworks/projects/Text/src/main/flex/org/apache/flex/text/engine/ITextFactory.as
index 5ef254c..6987c22 100644
--- a/frameworks/projects/Text/src/main/flex/org/apache/flex/text/engine/ITextFactory.as
+++ b/frameworks/projects/Text/src/main/flex/org/apache/flex/text/engine/ITextFactory.as
@@ -19,11 +19,21 @@
package org.apache.flex.text.engine
{
import org.apache.flex.core.IUIBase;
+ import org.apache.flex.core.IParentIUIBase;
public interface ITextFactory
{
function getTextBlock():ITextBlock;
function getTextContainer():IUIBase;
function getFontLoader():IFontLoader;
+
+ // in JS, in order to measure text, TextLines need to be put
+ // in the DOM early, so you need to pick one DOM widget to use as
+ // at least a temporary parent.
+ // in SWF, this isn't really needed since FTE is given all
+ // of the font information it needs
+ function get currentContainer():IParentIUIBase;
+ function set currentContainer(value:IParentIUIBase):void
+
}
}
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/c341287a/frameworks/projects/Text/src/main/flex/org/apache/flex/text/html/HTMLTextFactory.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/Text/src/main/flex/org/apache/flex/text/html/HTMLTextFactory.as b/frameworks/projects/Text/src/main/flex/org/apache/flex/text/html/HTMLTextFactory.as
index e7021b7..48bd8bf 100644
--- a/frameworks/projects/Text/src/main/flex/org/apache/flex/text/html/HTMLTextFactory.as
+++ b/frameworks/projects/Text/src/main/flex/org/apache/flex/text/html/HTMLTextFactory.as
@@ -21,6 +21,7 @@ package org.apache.flex.text.html
import org.apache.flex.text.engine.ITextFactory;
import org.apache.flex.text.engine.ITextBlock;
import org.apache.flex.core.IUIBase;
+ import org.apache.flex.core.IParentIUIBase;
import org.apache.flex.html.Div;
import org.apache.flex.text.engine.IFontLoader;
@@ -40,7 +41,18 @@ package org.apache.flex.text.html
{
// no fontLoader for this factory at this point. It uses standard broswer fonts.
return _fontLoader;
- }
+ }
+
+ private var _currentContainer:IParentIUIBase;
+ public function get currentContainer():IParentIUIBase
+ {
+ return _currentContainer;
+ }
+ public function set currentContainer(value:IParentIUIBase):void
+ {
+ _currentContainer = value;
+ }
+
}
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/c341287a/frameworks/projects/Text/src/main/flex/org/apache/flex/text/html/TextBlock.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/Text/src/main/flex/org/apache/flex/text/html/TextBlock.as b/frameworks/projects/Text/src/main/flex/org/apache/flex/text/html/TextBlock.as
index 088588a..934b8e5 100644
--- a/frameworks/projects/Text/src/main/flex/org/apache/flex/text/html/TextBlock.as
+++ b/frameworks/projects/Text/src/main/flex/org/apache/flex/text/html/TextBlock.as
@@ -30,6 +30,8 @@ package org.apache.flex.text.html
import org.apache.flex.text.html.TextLine;
import org.apache.flex.html.Span;
+ import org.apache.flex.core.IParent;
+
public class TextBlock implements ITextBlock
{
public function TextBlock(factory:ITextFactory)
@@ -182,6 +184,9 @@ package org.apache.flex.text.html
private var lines:Array = [];
+ /**
+ * @flexjsignorecoercion org.apache.flex.core.IParent
+ */
public function createTextLine(previousLine:ITextLine = null, width:Number = 1000000, lineOffset:Number = 0.0, fitSomething:Boolean = false):ITextLine
{
if (previousLine == null)
@@ -209,8 +214,10 @@ package org.apache.flex.text.html
}
COMPILE::JS
{
+ textFactory.currentContainer.addElement(tl); // add to DOM early so textWidth is valid
var span:Span = new Span();
span.text = textElem.text;
+ //span.element.style.display = "block";
tl.addElement(span);
}
if (previousLine == null)
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/c341287a/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 fbb17a3..b865f33 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
@@ -71,10 +71,14 @@ package org.apache.flex.text.html
}
COMPILE::JS
{
- return 0;
+ // needs improvement. For now assume 2 pixel descent.
+ return _textBlock.content.elementFormat.fontSize - 2;
}
}
+ /**
+ * @flexjsignorecoercion HTMLElement
+ */
public function get atomCount():int
{
COMPILE::SWF
@@ -83,7 +87,7 @@ package org.apache.flex.text.html
}
COMPILE::JS
{
- return 0;
+ return (element.firstChild as HTMLElement).firstChild["length"];
}
}
@@ -103,7 +107,11 @@ package org.apache.flex.text.html
{
return textField.getLineMetrics(0).descent;
}
- return 0;
+ COMPILE::JS
+ {
+ // needs improvement. For now assume 2 pixel descent.
+ return 2;
+ }
}
private var _doubleClickEnabled:Boolean;
@@ -150,7 +158,7 @@ package org.apache.flex.text.html
}
COMPILE::JS
{
- return 0;
+ return atomCount;
}
}
@@ -172,6 +180,9 @@ package org.apache.flex.text.html
return _beginIndex;
}
+ /**
+ * @flexjsignorecoercion HTMLElement
+ */
public function get textHeight():Number
{
COMPILE::SWF
@@ -180,10 +191,13 @@ package org.apache.flex.text.html
}
COMPILE::JS
{
- return 0;
+ return (element.firstChild as HTMLElement).getClientRects()[0].height;
}
}
+ /**
+ * @flexjsignorecoercion HTMLElement
+ */
public function get textWidth():Number
{
COMPILE::SWF
@@ -192,7 +206,15 @@ package org.apache.flex.text.html
}
COMPILE::JS
{
- return 0;
+ if (element.firstChild.textContent == "\u2029")
+ {
+ // if para terminator, use nbsp instead
+ (element.firstChild as HTMLElement).innerHTML = "\u00A0";
+ var w:Number = (element.firstChild as HTMLElement).getClientRects()[0].width;
+ (element.firstChild as HTMLElement).innerHTML = "\u2029";
+ return w;
+ }
+ return (element.firstChild as HTMLElement).getClientRects()[0].width;
}
}
@@ -277,7 +299,7 @@ package org.apache.flex.text.html
}
COMPILE::JS
{
- return null;
+ return new Rectangle(element.offsetLeft, element.offsetTop, element.offsetWidth, element.offsetHeight);
}
}
@@ -295,7 +317,8 @@ package org.apache.flex.text.html
}
COMPILE::JS
{
- return null;
+ // fake an answer
+ return new Rectangle(0, 1.2 - _textBlock.content.elementFormat.fontSize, 3, 1.2);
}
}
@@ -325,6 +348,7 @@ package org.apache.flex.text.html
}
COMPILE::JS
{
+ trace("getAtomIndexAtPoint not implemented");
//TODO atom locations. This one will be fun...
return 0;
}