Just as a reminder to understand the flash text properties:
http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/images/text-metrics.jpg

textWidth reports the width of text without the 2px gutter. _width includes the gutter, so textWidth + 2*2 == _width (only if autoSize!='none').


On 4/2/2010 4:51 PM, P T Withington wrote:
I guess we need to dig deeper. 8 is a multiple of 4, so it's probably
related. Perhaps the 4 us being added somewhere where it should have
been subtracted? We just need to be careful not to throw in a random 4
and throw eveything else off.

On Apr 2, 2010, at 10:30, Henry Minsky <[email protected]
<mailto:[email protected]>> wrote:

From this test case

<view>
<inputtext fontsize="28" fgcolor="red" bgcolor="#cccccc"
id="it6">DEWWW</inputtext>
</view>

<text x="500" y="80" text="${'it6.getTextWidth() '+ it6.getTextWidth()
+ ' it6.width = '+it6.width}"/>

When the inputtext is created, it gets a width 128, and that's what
the view's width gets set to, but when you call getTextWidth() to
examine the value it returns a value of 136.


The funny thing is that the sprite appears to be returning the
'correct' value when an input text is constructed, and then subsequent
calls to getTextWidth are returning a different value.

The first time (which is during text field construct) getTextWidth
returns the 'correct' (e.g., swf8 LPS 4.2 compatible) value.

The second time it's called, it returns a value 8 pixels wider.

Now, it's kind of an uncommon use case, because in most applications,
I don't think people let input text fields autosize their width, but
it's disturbing to have two different values returned.




On Thu, Apr 1, 2010 at 9:06 PM, P T Withington <
<mailto:[email protected]>[email protected] <mailto:[email protected]>> wrote:

    I think this is the history:

    1) we used to use this Flash API that for unknown reasons reports
    the text width 4px too small, but only when 'autosize' is on.

    2) this caused italics to get clipped, so we always added 4 pixels
    to the width.

    3) we split the lfc, but left the compensation for the "4 pixel
    bug" in the general part

    4) we decided we wanted HTML metrics to match flash, so we had to
    fake the 4-pixel delta in the DHTML kernel

    5) we discovered that the Flash 4-pixel offset only happened
    sometimes (when 'autosize' is on), but we had it always on in the
    DHTML kernel.

    6) I got rid of the 4-pixel offset in the general lfc and switched
    the Flash API to be one that doesn't conditionally subtract 4 pixels.

    7) So now everyone should be in agreement, as long as they use the
    LFC API.

    What is the bug that you are seeing? I claim the numbers should
    all be the same at the LFC API, all we did was change the kernel
    (sprite) API to be consistent across platforms.

    On 2010-04-01, at 16:58, Henry Minsky wrote:

    > I'm confused now -- what does it mean to have
    > I'm going around in a little circle here for some reason..
    >
    > We have as a goal to have text fields with the same font style
    and content
    > measure the same width and height across all platforms, right?
    >
    > So we set target pixel values for what we want to see, and we've
    picked
    > whatever was the old 4.2 swf8 LzText behavior for backward
    compatibilty
    > reasons.
    >
    > So isn't the contract for LzTextSprite.getTextWidth() for each
    platform to
    > ensure that
    > it returns the same value as the old swf8 "monolithic LFC" returned?
    >
    >
    >
    >
    > On Thu, Apr 1, 2010 at 4:32 PM, P T Withington <
    <mailto:[email protected]>[email protected] <mailto:[email protected]>> wrote:
    >
    >> Before I did this, I would _really_ want to understand why it
    was changed.
    >> It seems this was the end result of a _lot_ of discussion
    related to:
    >>
    >>
    
<http://jira.openlaszlo.org/jira/browse/LPP-6580>http://jira.openlaszlo.org/jira/browse/LPP-6580
    >>
    >> You, Max, and André all had input on this.
    >>
    >> getTextWidth is a Kernel API, which is used by the LFC. So, it
    needs to
    >> have a contract that is the _same_ for all platforms.
    >>
    >> I changed this and left a note as to why:
    >>
    >> /**
    >> * Calculates the current width of the text held by the text field.
    >> *
    >> * @devnote NOTE: [2009-03-01 ptw] this is _not_ the clip
    textWidth, which
    >> * "when autoSize is true is always 4 pixels less than _width"
    (which
    >> * is why we have to add 4 pixels for emulate_flash_font_metrics
    >> * in the DHTML version of this method, and why Henry used to add
    >> * PAD_TEXTWIDTH to the textWidth!)
    >> *
    >> * @devnote NOTE: [2009-03-28 ptw] But if the text is empty, we
    return
    >> * 0. <sigh />
    >> */
    >>
    >> The way I read that, when we split the LFC to have platform
    kernels we
    >> screwed up the abstraction and left part of the
    platform-specific stuff
    >> (this 4px offset from the Flash API) in the general part of the
    kernel.
    >> This change fixes that, so that _all_ the kernels are measuring
    the same
    >> thing.
    >>
    >> You clearly cannot just change the Flash kernel, because then
    it would be
    >> skewed from the other kernels.
    >>
    >> On 2010-04-01, at 14:08, Henry Minsky wrote:
    >>
    >>> We used to measure text width in LzTextSprite by looking at
    the Flash
    >>> 'TextField.textWidth' property (and adding
    >>> 4 pixels of padding because it clipped otherwise).
    >>>
    >>> At some point that method was changed to look at the
    TextField._width
    >>> instead, which gives different values (slightly larger ones).
    >>>
    >>> Anyone remember what the thinking there was? I'm inclined to
    revert that,
    >> so
    >>> that we're compatible with the
    >>> 4.2 text width in swf8.
    >>>
    >>>
    >>>
    >>> r13517 by ptw has the last assignment according to svn blame
    >>>
    >>> " Fixed getTextWidth, getTextHeight, getTextfieldHeight,
    >>> to obey kernel API contract."
    >>>
    >>>
    >>>
    >>> --
    >>> Henry Minsky
    >>> Software Architect
    >>> <mailto:[email protected]>[email protected]
    <mailto:[email protected]>
    >>
    >>
    >
    >
    > --
    > Henry Minsky
    > Software Architect
    > <mailto:[email protected]>[email protected]
    <mailto:[email protected]>




--
Henry Minsky
Software Architect
<mailto:[email protected]>[email protected]
<mailto:[email protected]>


Reply via email to