[Development] QFontMetrics and QScriptLine height calculation

Rafael Roquetto rafael.roquetto at kdab.com
Fri Oct 5 12:26:42 CEST 2012


Hi there,

Thanks for the prompty reply. I am indeed talking about 4.8. Should I maybe
then backport the 5.0 implementation of QAccessibleTextWidget, should this
ever be possible or make sense? Or even better, fix the test to use
QFontMetrics::lineSpacing()?

Any other suggestions? As I said, this is an obscure corner of Qt to me, so
apologies if I seem to be grunting garbage.

Cheers,
Rafael

On Fri, Oct 05, 2012 at 01:13:50AM +0300, Konstantin Ritt wrote:
> First of all, which Qt version you're talking about?
> I assume it is 4.8 since QAccessibleTextWidget has been reworked alot
> in 5.0 and the problem you've described seems to gone there (see
> QAccessibleTextWidget::characterRect() impl).
> If it is 5.0, then you're probably subclassing the accessibility
> widgets, are you?
> 
> Briefly:
> the QTextDocumentLayout sets the leadingIncluded to true for every
> line in a blocks (re-)layouting code and thus the line's height equals
> to QFontMetrics::lineSpacing(), whilst QFontMetrics::height() better
> suites to what characterRect() should return as a rect's height.
> 
> Anyways, more info required...
> 
> 
> Konstantin
> 
> 
> 2012/10/4 Rafael Roquetto <rafael.roquetto at kdab.com>:
> > 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
> >
> > --
> > ** Qt Developer Conference: http://qtconference.kdab.com/ **
> >
> > Rafael Roquetto | rafael.roquetto at kdab.com | Software Engineer
> > Klarälvdalens Datakonsult AB, a KDAB Group company
> > Tel. Sweden (HQ) +46-563-540090, USA +1-866-777-KDAB(5322)
> > KDAB - Qt Experts - Platform-independent software solutions
> >
> >
> > _______________________________________________
> > Development mailing list
> > Development at qt-project.org
> > http://lists.qt-project.org/mailman/listinfo/development
> >

-- 
** Qt Developer Conference: http://qtconference.kdab.com/ **

Rafael Roquetto | rafael.roquetto at kdab.com | Software Engineer
Klarälvdalens Datakonsult AB, a KDAB Group company
Tel. Sweden (HQ) +46-563-540090, USA +1-866-777-KDAB(5322)
KDAB - Qt Experts - Platform-independent software solutions

-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/x-pkcs7-signature
Size: 3721 bytes
Desc: not available
URL: <http://lists.qt-project.org/pipermail/development/attachments/20121005/570fa8c4/attachment.bin>


More information about the Development mailing list