Historically, we've calculated font height as ascent+descent+1.
In Qt 4, a patch was added to work around this by subtracting
1 from the descent of the font engines. We now remove the +1 and
the work arounds.
Change-Id: I7e25d49b97ac892015d3328f32d70eb9a7c2d88f
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@nokia.com>
Reviewed-by: Lars Knoll <lars.knoll@nokia.com>
QSizeF s = handler.iface->intrinsicSize(document(), posInDocument, format);
item.setWidth(s.width());
- item.setAscent(s.height() - 1);
+ item.setAscent(s.height());
item.setDescent(0);
}
QFixed QFontEngineFT::descent() const
{
- // subtract a pixel to work around QFontMetrics's built-in + 1
- return QFixed::fromFixed(-metrics.descender - 64);
+ return QFixed::fromFixed(-metrics.descender);
}
QFixed QFontEngineFT::leading() const
glyph_metrics_t overall;
// initialize with line height, we get the same behaviour on all platforms
overall.y = -ascent();
- overall.height = ascent() + descent() + 1;
+ overall.height = ascent() + descent();
QFixed ymax = 0;
QFixed xmax = 0;
QFixed QFontEngineDirectWrite::descent() const
{
return fontDef.styleStrategy & QFont::ForceIntegerMetrics
- ? (m_descent - 1).round()
- : (m_descent - 1);
+ ? (m_descent).round()
+ : (m_descent);
}
QFixed QFontEngineDirectWrite::leading() const
{
QFontEngine *engine = d->engineForScript(QUnicodeTables::Common);
Q_ASSERT(engine != 0);
- return qRound(engine->ascent()) + qRound(engine->descent()) + 1;
+ return qRound(engine->ascent()) + qRound(engine->descent());
}
/*!
{
QFontEngine *engine = d->engineForScript(QUnicodeTables::Common);
Q_ASSERT(engine != 0);
- return qRound(engine->leading()) + qRound(engine->ascent()) + qRound(engine->descent()) + 1;
+ return qRound(engine->leading()) + qRound(engine->ascent()) + qRound(engine->descent());
}
/*!
QFontEngine *engine = d->engineForScript(QUnicodeTables::Common);
Q_ASSERT(engine != 0);
- return (engine->ascent() + engine->descent() + 1).toReal();
+ return (engine->ascent() + engine->descent()).toReal();
}
/*!
{
QFontEngine *engine = d->engineForScript(QUnicodeTables::Common);
Q_ASSERT(engine != 0);
- return (engine->leading() + engine->ascent() + engine->descent() + 1).toReal();
+ return (engine->leading() + engine->ascent() + engine->descent()).toReal();
}
/*!
QFixed leading;
QFixed width;
int glyph_data_offset;
- QFixed height() const { return ascent + descent + 1; }
+ QFixed height() const { return ascent + descent; }
};
mutable uint gridfitted : 1;
uint hasTrailingSpaces : 1;
uint leadingIncluded : 1;
- QFixed height() const { return (ascent + descent).ceil() + 1
+ QFixed height() const { return (ascent + descent).ceil()
+ (leadingIncluded? qMax(QFixed(),leading) : QFixed()); }
QFixed base() const { return ascent
+ (leadingIncluded ? qMax(QFixed(),leading) : QFixed()); }
}
/*!
- Returns the line's height. This is equal to ascent() + descent() + 1
+ Returns the line's height. This is equal to ascent() + descent()
if leading is not included. If leading is included, this equals to
- ascent() + descent() + leading() + 1.
+ ascent() + descent() + leading().
\sa ascent(), descent(), leading(), setLeadingIncluded()
*/
if (fontDef.styleStrategy & QFont::ForceIntegerMetrics)
d = d.round();
- // subtract a pixel to even out the historical +1 in QFontMetrics::height().
- // Fix in Qt 5.
- return d - 1;
+ return d;
}
QFixed QCoreTextFontEngine::leading() const
{
QFixed QWindowsFontEngine::descent() const
{
- // ### we subtract 1 to even out the historical +1 in QFontMetrics'
- // ### height=asc+desc+1 equation. Fix in Qt5.
- return tm.tmDescent - 1;
+ return tm.tmDescent;
}
QFixed QWindowsFontEngine::leading() const
font = fdb.font(family, style, 12);
QFontMetrics fontmetrics(font);
- QCOMPARE(fontmetrics.ascent() + fontmetrics.descent() + 1,
+ QCOMPARE(fontmetrics.ascent() + fontmetrics.descent(),
fontmetrics.height());
QCOMPARE(fontmetrics.height() + fontmetrics.leading(),
font = fdb.font(family, style, size);
QFontMetrics fontmetrics(font);
- QCOMPARE(fontmetrics.ascent() + fontmetrics.descent() + 1,
+ QCOMPARE(fontmetrics.ascent() + fontmetrics.descent(),
fontmetrics.height());
QCOMPARE(fontmetrics.height() + fontmetrics.leading(),
fontmetrics.lineSpacing());
QCOMPARE(qRound(line.naturalTextWidth()), thirdLineWidth);
y += qRound(line.ascent() + line.descent());
- QCOMPARE(layout.boundingRect(), QRectF(0, 0, longestLine, y + 1));
+ QCOMPARE(layout.boundingRect(), QRectF(0, 0, longestLine, y));
}
void tst_QTextLayout::boundingRectWithLongLineAndNoWrap()
QCOMPARE(line.textStart(), pos);
QCOMPARE(line.textLength(),2);
QCOMPARE(qRound(line.naturalTextWidth()),testFont.pixelSize());
- QCOMPARE((int) line.height(), testFont.pixelSize() + 1); // + 1 baseline
+ QCOMPARE((int) line.height(), testFont.pixelSize());
QCOMPARE(line.xToCursor(0), line.textStart());
pos += line.textLength();
QCOMPARE(line.textStart(),pos);
QCOMPARE(line.textLength(),1);
QCOMPARE(qRound(line.naturalTextWidth()), 0);
- QCOMPARE((int) line.height(), testFont.pixelSize() + 1); // + 1 baseline
+ QCOMPARE((int) line.height(), testFont.pixelSize());
QCOMPARE(line.xToCursor(0), line.textStart());
pos += line.textLength();
QCOMPARE(line.textStart(),pos);
QCOMPARE(line.textLength(),2);
QCOMPARE(qRound(line.naturalTextWidth()),testFont.pixelSize());
- QCOMPARE(qRound(line.height()), testFont.pixelSize() + 1); // + 1 baseline
+ QCOMPARE(qRound(line.height()), testFont.pixelSize());
QCOMPARE(line.xToCursor(0), line.textStart());
pos += line.textLength();
QCOMPARE(line.textStart(),pos);
QCOMPARE(line.textLength(),1);
QCOMPARE(qRound(line.naturalTextWidth()), testFont.pixelSize());
- QCOMPARE((int) line.height(), testFont.pixelSize() + 1); // + 1 baseline
+ QCOMPARE((int) line.height(), testFont.pixelSize());
QCOMPARE(line.xToCursor(0), line.textStart());
}