<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>21853</bug_id>
          
          <creation_ts>2008-10-24 06:21:16 -0700</creation_ts>
          <short_desc>text drawing on WX port on OSX is a few pixels off</short_desc>
          <delta_ts>2008-10-24 18:16:05 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit wx</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Kevin Watters">kevinwatters</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>96500</commentid>
    <comment_count>0</comment_count>
    <who name="Kevin Watters">kevinwatters</who>
    <bug_when>2008-10-24 06:21:16 -0700</bug_when>
    <thetext>Font rendering on OS X in the wx port doesn&apos;t account for adjustments made internally in WX, resulting in text that&apos;s a few pixels off.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>96501</commentid>
    <comment_count>1</comment_count>
      <attachid>24639</attachid>
    <who name="Kevin Watters">kevinwatters</who>
    <bug_when>2008-10-24 06:23:13 -0700</bug_when>
    <thetext>Created attachment 24639
Use CGFont API for better metrics and fix y offset of text

This patch uses the CGFont API to obtain better measurements for text rendering on OS X. It also tweaks the y value text is drawn at.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>96512</commentid>
    <comment_count>2</comment_count>
      <attachid>24639</attachid>
    <who name="Kevin Ollivier">kevino</who>
    <bug_when>2008-10-24 09:30:16 -0700</bug_when>
    <thetext>Comment on attachment 24639
Use CGFont API for better metrics and fix y offset of text

&gt; Index: WebCore/platform/wx/wxcode/mac/carbon/non-kerned-drawing.cpp
&gt; ===================================================================
&gt; --- WebCore/platform/wx/wxcode/mac/carbon/non-kerned-drawing.cpp	(revision 37839)
&gt; +++ WebCore/platform/wx/wxcode/mac/carbon/non-kerned-drawing.cpp	(working copy)
&gt; @@ -57,11 +57,10 @@
&gt;          offset += glyphBuffer.advanceAt(from + i);
&gt;      }
&gt;      
&gt; -    // the y point is actually the bottom point of the text, turn it into the top
&gt; -    float height = font-&gt;ascent() - font-&gt;descent();
&gt; -    wxCoord ypoint = (wxCoord) (point.y() - height);
&gt; -     
&gt; -    dc-&gt;DrawText(text, (wxCoord)point.x(), ypoint);
&gt; +    // NOTE: The wx API actually adds the ascent to the y value internally,
&gt; +    // so we have to subtract it from the y point here so that the ascent
&gt; +    // isn&apos;t added twice. 
&gt; +    dc-&gt;DrawText(text, (wxCoord)point.x(), int(point.y() - font-&gt;ascent()));
&gt;  }
&gt;  
&gt;  }
&gt; Index: WebCore/platform/wx/wxcode/mac/carbon/fontprops.cpp
&gt; ===================================================================
&gt; --- WebCore/platform/wx/wxcode/mac/carbon/fontprops.cpp	(revision 37839)
&gt; +++ WebCore/platform/wx/wxcode/mac/carbon/fontprops.cpp	(working copy)
&gt; @@ -23,9 +23,7 @@
&gt;   * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
&gt;   */
&gt;  
&gt; -#if __WXMAC__
&gt;  #include &lt;ApplicationServices/ApplicationServices.h&gt;
&gt; -#endif
&gt;  
&gt;  #include &lt;wx/defs.h&gt;
&gt;  #include &lt;wx/gdicmn.h&gt;
&gt; @@ -39,23 +37,38 @@
&gt;  m_ascent(0), m_descent(0), m_lineGap(0), m_lineSpacing(0), m_xHeight(0)
&gt;  {
&gt;      ATSFontRef fontRef;
&gt; +    CGFontRef cgFont;
&gt;      
&gt;      fontRef = FMGetATSFontRefFromFont(font-&gt;MacGetATSUFontID());
&gt; -    if (fontRef){
&gt; -        ATSFontMetrics vMetrics;
&gt; -        OSStatus err;
&gt; +    
&gt; +    if (fontRef)
&gt; +        cgFont = CGFontCreateWithPlatformFont((void*)&amp;fontRef);
&gt;          
&gt; -        int height = font-&gt;GetPointSize(); //.GetHeight();
&gt; -        err = ATSFontGetHorizontalMetrics(fontRef, 0, &amp;vMetrics);
&gt; -        if (err != noErr)
&gt; -            fprintf(stderr, &quot;Error number is %d\n&quot;, err);
&gt; -        m_ascent = lroundf(vMetrics.ascent * height);
&gt; -        m_descent = lroundf(vMetrics.descent * height);
&gt; -        m_lineGap = lroundf(vMetrics.leading * height);
&gt; +    if (cgFont) {
&gt; +        int iAscent;
&gt; +        int iDescent;
&gt; +        int iLineGap;
&gt; +        float unitsPerEm;
&gt; +#ifdef BUILDING_ON_TIGER
&gt; +        wkGetFontMetrics(cgFont, &amp;iAscent, &amp;iDescent, &amp;iLineGap, &amp;unitsPerEm);
&gt; +#else
&gt; +        iAscent = CGFontGetAscent(cgFont);
&gt; +        iDescent = CGFontGetDescent(cgFont);
&gt; +        iLineGap = CGFontGetLeading(cgFont);
&gt; +        unitsPerEm = CGFontGetUnitsPerEm(cgFont);
&gt; +#endif
&gt; +        float pointSize = font-&gt;GetPointSize();
&gt; +        float fAscent = scaleEmToUnits(iAscent, unitsPerEm) * pointSize;
&gt; +        float fDescent = -scaleEmToUnits(iDescent, unitsPerEm) * pointSize;
&gt; +        float fLineGap = scaleEmToUnits(iLineGap, unitsPerEm) * pointSize;
&gt; +
&gt; +        m_ascent = lroundf(fAscent);
&gt; +        m_descent = lroundf(fDescent);
&gt; +        m_lineGap = lroundf(fLineGap);
&gt;          wxCoord xHeight = 0;
&gt;          GetTextExtent(*font, wxT(&quot;x&quot;), NULL, &amp;xHeight, NULL, NULL);
&gt;          m_xHeight = lroundf(xHeight);
&gt; -        m_lineSpacing = m_ascent - m_descent + m_lineGap;
&gt; +        m_lineSpacing = m_ascent + m_descent + m_lineGap;
&gt;  
&gt;      }
&gt;  
&gt; Index: WebCore/ChangeLog
&gt; ===================================================================
&gt; --- WebCore/ChangeLog	(revision 37840)
&gt; +++ WebCore/ChangeLog	(working copy)
&gt; @@ -1,3 +1,16 @@
&gt; +2008-10-23  Kevin Watters  &lt;kevinwatters@gmail.com&gt;
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        Use the CGFont metrics APIs for more accurate measurements, and tweak the y
&gt; +        value the text is drawn at (it was a couple pixels off before because wx
&gt; +        internally adds to the y value.
&gt; +
&gt; +        * platform/wx/wxcode/mac/carbon/fontprops.cpp:
&gt; +        (wxFontProperties::wxFontProperties):
&gt; +        * platform/wx/wxcode/mac/carbon/non-kerned-drawing.cpp:
&gt; +        (WebCore::drawTextWithSpacing):
&gt; +
&gt;  2008-10-23  Greg Bolsinga  &lt;bolsinga@apple.com&gt;
&gt;  
&gt;          Reviewed by Sam Weinig.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>96631</commentid>
    <comment_count>3</comment_count>
    <who name="Kevin Ollivier">kevino</who>
    <bug_when>2008-10-24 18:16:05 -0700</bug_when>
    <thetext>Landed in r37877, thanks! :-)</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>24639</attachid>
            <date>2008-10-24 06:23:13 -0700</date>
            <delta_ts>2008-10-24 09:30:16 -0700</delta_ts>
            <desc>Use CGFont API for better metrics and fix y offset of text</desc>
            <filename>wxmac_text_fixes.patch</filename>
            <type>text/plain</type>
            <size>4037</size>
            <attacher name="Kevin Watters">kevinwatters</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vd3gvd3hjb2RlL21hYy9jYXJib24vbm9uLWtlcm5lZC1k
cmF3aW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3d4L3d4Y29kZS9tYWMv
Y2FyYm9uL25vbi1rZXJuZWQtZHJhd2luZy5jcHAJKHJldmlzaW9uIDM3ODM5KQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS93eC93eGNvZGUvbWFjL2NhcmJvbi9ub24ta2VybmVkLWRyYXdpbmcuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01NywxMSArNTcsMTAgQEAKICAgICAgICAgb2Zmc2V0ICs9IGdseXBo
QnVmZmVyLmFkdmFuY2VBdChmcm9tICsgaSk7CiAgICAgfQogICAgIAotICAgIC8vIHRoZSB5IHBv
aW50IGlzIGFjdHVhbGx5IHRoZSBib3R0b20gcG9pbnQgb2YgdGhlIHRleHQsIHR1cm4gaXQgaW50
byB0aGUgdG9wCi0gICAgZmxvYXQgaGVpZ2h0ID0gZm9udC0+YXNjZW50KCkgLSBmb250LT5kZXNj
ZW50KCk7Ci0gICAgd3hDb29yZCB5cG9pbnQgPSAod3hDb29yZCkgKHBvaW50LnkoKSAtIGhlaWdo
dCk7Ci0gICAgIAotICAgIGRjLT5EcmF3VGV4dCh0ZXh0LCAod3hDb29yZClwb2ludC54KCksIHlw
b2ludCk7CisgICAgLy8gTk9URTogVGhlIHd4IEFQSSBhY3R1YWxseSBhZGRzIHRoZSBhc2NlbnQg
dG8gdGhlIHkgdmFsdWUgaW50ZXJuYWxseSwKKyAgICAvLyBzbyB3ZSBoYXZlIHRvIHN1YnRyYWN0
IGl0IGZyb20gdGhlIHkgcG9pbnQgaGVyZSBzbyB0aGF0IHRoZSBhc2NlbnQKKyAgICAvLyBpc24n
dCBhZGRlZCB0d2ljZS4gCisgICAgZGMtPkRyYXdUZXh0KHRleHQsICh3eENvb3JkKXBvaW50Lngo
KSwgaW50KHBvaW50LnkoKSAtIGZvbnQtPmFzY2VudCgpKSk7CiB9CiAKIH0KSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vd3gvd3hjb2RlL21hYy9jYXJib24vZm9udHByb3BzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3d4L3d4Y29kZS9tYWMvY2FyYm9uL2ZvbnRwcm9wcy5jcHAJ
KHJldmlzaW9uIDM3ODM5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS93eC93eGNvZGUvbWFjL2NhcmJv
bi9mb250cHJvcHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw5ICsyMyw3IEBACiAgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgogICovCiAKLSNpZiBfX1dYTUFDX18KICNpbmNsdWRlIDxBcHBsaWNhdGlvblNlcnZp
Y2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4KLSNlbmRpZgogCiAjaW5jbHVkZSA8d3gvZGVmcy5o
PgogI2luY2x1ZGUgPHd4L2dkaWNtbi5oPgpAQCAtMzksMjMgKzM3LDM4IEBACiBtX2FzY2VudCgw
KSwgbV9kZXNjZW50KDApLCBtX2xpbmVHYXAoMCksIG1fbGluZVNwYWNpbmcoMCksIG1feEhlaWdo
dCgwKQogewogICAgIEFUU0ZvbnRSZWYgZm9udFJlZjsKKyAgICBDR0ZvbnRSZWYgY2dGb250Owog
ICAgIAogICAgIGZvbnRSZWYgPSBGTUdldEFUU0ZvbnRSZWZGcm9tRm9udChmb250LT5NYWNHZXRB
VFNVRm9udElEKCkpOwotICAgIGlmIChmb250UmVmKXsKLSAgICAgICAgQVRTRm9udE1ldHJpY3Mg
dk1ldHJpY3M7Ci0gICAgICAgIE9TU3RhdHVzIGVycjsKKyAgICAKKyAgICBpZiAoZm9udFJlZikK
KyAgICAgICAgY2dGb250ID0gQ0dGb250Q3JlYXRlV2l0aFBsYXRmb3JtRm9udCgodm9pZCopJmZv
bnRSZWYpOwogICAgICAgICAKLSAgICAgICAgaW50IGhlaWdodCA9IGZvbnQtPkdldFBvaW50U2l6
ZSgpOyAvLy5HZXRIZWlnaHQoKTsKLSAgICAgICAgZXJyID0gQVRTRm9udEdldEhvcml6b250YWxN
ZXRyaWNzKGZvbnRSZWYsIDAsICZ2TWV0cmljcyk7Ci0gICAgICAgIGlmIChlcnIgIT0gbm9FcnIp
Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVycm9yIG51bWJlciBpcyAlZFxuIiwgZXJy
KTsKLSAgICAgICAgbV9hc2NlbnQgPSBscm91bmRmKHZNZXRyaWNzLmFzY2VudCAqIGhlaWdodCk7
Ci0gICAgICAgIG1fZGVzY2VudCA9IGxyb3VuZGYodk1ldHJpY3MuZGVzY2VudCAqIGhlaWdodCk7
Ci0gICAgICAgIG1fbGluZUdhcCA9IGxyb3VuZGYodk1ldHJpY3MubGVhZGluZyAqIGhlaWdodCk7
CisgICAgaWYgKGNnRm9udCkgeworICAgICAgICBpbnQgaUFzY2VudDsKKyAgICAgICAgaW50IGlE
ZXNjZW50OworICAgICAgICBpbnQgaUxpbmVHYXA7CisgICAgICAgIGZsb2F0IHVuaXRzUGVyRW07
CisjaWZkZWYgQlVJTERJTkdfT05fVElHRVIKKyAgICAgICAgd2tHZXRGb250TWV0cmljcyhjZ0Zv
bnQsICZpQXNjZW50LCAmaURlc2NlbnQsICZpTGluZUdhcCwgJnVuaXRzUGVyRW0pOworI2Vsc2UK
KyAgICAgICAgaUFzY2VudCA9IENHRm9udEdldEFzY2VudChjZ0ZvbnQpOworICAgICAgICBpRGVz
Y2VudCA9IENHRm9udEdldERlc2NlbnQoY2dGb250KTsKKyAgICAgICAgaUxpbmVHYXAgPSBDR0Zv
bnRHZXRMZWFkaW5nKGNnRm9udCk7CisgICAgICAgIHVuaXRzUGVyRW0gPSBDR0ZvbnRHZXRVbml0
c1BlckVtKGNnRm9udCk7CisjZW5kaWYKKyAgICAgICAgZmxvYXQgcG9pbnRTaXplID0gZm9udC0+
R2V0UG9pbnRTaXplKCk7CisgICAgICAgIGZsb2F0IGZBc2NlbnQgPSBzY2FsZUVtVG9Vbml0cyhp
QXNjZW50LCB1bml0c1BlckVtKSAqIHBvaW50U2l6ZTsKKyAgICAgICAgZmxvYXQgZkRlc2NlbnQg
PSAtc2NhbGVFbVRvVW5pdHMoaURlc2NlbnQsIHVuaXRzUGVyRW0pICogcG9pbnRTaXplOworICAg
ICAgICBmbG9hdCBmTGluZUdhcCA9IHNjYWxlRW1Ub1VuaXRzKGlMaW5lR2FwLCB1bml0c1BlckVt
KSAqIHBvaW50U2l6ZTsKKworICAgICAgICBtX2FzY2VudCA9IGxyb3VuZGYoZkFzY2VudCk7Cisg
ICAgICAgIG1fZGVzY2VudCA9IGxyb3VuZGYoZkRlc2NlbnQpOworICAgICAgICBtX2xpbmVHYXAg
PSBscm91bmRmKGZMaW5lR2FwKTsKICAgICAgICAgd3hDb29yZCB4SGVpZ2h0ID0gMDsKICAgICAg
ICAgR2V0VGV4dEV4dGVudCgqZm9udCwgd3hUKCJ4IiksIE5VTEwsICZ4SGVpZ2h0LCBOVUxMLCBO
VUxMKTsKICAgICAgICAgbV94SGVpZ2h0ID0gbHJvdW5kZih4SGVpZ2h0KTsKLSAgICAgICAgbV9s
aW5lU3BhY2luZyA9IG1fYXNjZW50IC0gbV9kZXNjZW50ICsgbV9saW5lR2FwOworICAgICAgICBt
X2xpbmVTcGFjaW5nID0gbV9hc2NlbnQgKyBtX2Rlc2NlbnQgKyBtX2xpbmVHYXA7CiAKICAgICB9
CiAKSW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdl
TG9nCShyZXZpc2lvbiAzNzg0MCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMTYgQEAKKzIwMDgtMTAtMjMgIEtldmluIFdhdHRlcnMgIDxrZXZpbndhdHRl
cnNAZ21haWwuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFVzZSB0aGUgQ0dGb250IG1ldHJpY3MgQVBJcyBmb3IgbW9yZSBhY2N1cmF0ZSBtZWFz
dXJlbWVudHMsIGFuZCB0d2VhayB0aGUgeQorICAgICAgICB2YWx1ZSB0aGUgdGV4dCBpcyBkcmF3
biBhdCAoaXQgd2FzIGEgY291cGxlIHBpeGVscyBvZmYgYmVmb3JlIGJlY2F1c2Ugd3gKKyAgICAg
ICAgaW50ZXJuYWxseSBhZGRzIHRvIHRoZSB5IHZhbHVlLgorCisgICAgICAgICogcGxhdGZvcm0v
d3gvd3hjb2RlL21hYy9jYXJib24vZm9udHByb3BzLmNwcDoKKyAgICAgICAgKHd4Rm9udFByb3Bl
cnRpZXM6Ond4Rm9udFByb3BlcnRpZXMpOgorICAgICAgICAqIHBsYXRmb3JtL3d4L3d4Y29kZS9t
YWMvY2FyYm9uL25vbi1rZXJuZWQtZHJhd2luZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpkcmF3
VGV4dFdpdGhTcGFjaW5nKToKKwogMjAwOC0xMC0yMyAgR3JlZyBCb2xzaW5nYSAgPGJvbHNpbmdh
QGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBTYW0gV2VpbmlnLgo=
</data>
<flag name="review"
          id="11256"
          type_id="1"
          status="+"
          setter="kevino"
    />
          </attachment>
      

    </bug>

</bugzilla>