[Development] QFontMetrics and QScriptLine height calculation

Saether Jan-Arve Jan-Arve.Saether at digia.com
Wed Oct 10 15:05:16 CEST 2012

QAccessibleTextInterface::characterRect() is supposed to return the bounding box,
so if it's one pixel too high or something it's not something I would worry about.

The test could therefore be relaxed a bit. 
It should also be improved so that it doesn't just verify the size 
(it currently simply ignores the position, which should have much bigger variation 
 than the size).

I'll see what I can do with it.

Jan Arve

> -----Original Message-----
> From: development-bounces+jan-arve.saether=digia.com at qt-project.org
> [mailto:development-bounces+jan-arve.saether=digia.com at qt-project.org]
> On Behalf Of Rafael Roquetto
> Sent: 4. oktober 2012 22:23
> To: development at qt-project.org
> Subject: [Development] QFontMetrics and QScriptLine height calculation 
> Hello,
> I am trying to fix tst_QAccessibility for QNX, and I have a problem on 
> line 2750:
> QCOMPARE(iface->textInterface()->characterRect(0,
> QAccessible2::RelativeToParent).size(), QSize(fm.width("h"), 
> fm.height()));
> This comparison is failing, because the caracter rect height is bigger 
> than the height returned by QFontMetrics. And...?
> Well, ultimately the height of the character rect comes from 
> QScriptLine::height(). Here is how it is calculated (simplified):
>     height = ascent + descent + 1 (leadingIncluded ? leading :
> QFixed())
> While QFontMetrics does not use 'leading' to compute 'height'
> (simplified):
>     height = ascent + descent + 1
> Which leads to a few questions:
> 1. Is this meant to be like that or is either class implementation 
> incorrect?
> 2. If this is correct, then is the test erroneusly assuming that
> QFontMetrics::height() == QScriptLine::height() for every use case? Or...
> 3. Should the 'leading' be '0' in the context of the test (what 
> happens in Qt built for Linux, but not for QNX)?
> Well, I will continue to investigate it, but since I do not know much 
> about this corner of Qt, I thought it wouldn't hurt to ask :)
> Thanks a lot in advance,
> Rafael

More information about the Development mailing list