зеркало из https://github.com/mozilla/pjs.git
Bug 406299. Make sure we include the font ascent/descent of a soft hyphen if there is one (gfx bits). r+sr=dbaron
This commit is contained in:
Родитель
1d75b20afc
Коммит
cd221bb533
|
@ -521,19 +521,13 @@ public:
|
|||
/**
|
||||
* Metrics for a particular string
|
||||
*/
|
||||
struct RunMetrics {
|
||||
struct THEBES_API RunMetrics {
|
||||
RunMetrics() {
|
||||
mAdvanceWidth = mAscent = mDescent = 0.0;
|
||||
mBoundingBox = gfxRect(0,0,0,0);
|
||||
}
|
||||
|
||||
void CombineWith(const RunMetrics& aOtherOnRight) {
|
||||
mAscent = PR_MAX(mAscent, aOtherOnRight.mAscent);
|
||||
mDescent = PR_MAX(mDescent, aOtherOnRight.mDescent);
|
||||
mBoundingBox =
|
||||
mBoundingBox.Union(aOtherOnRight.mBoundingBox + gfxPoint(mAdvanceWidth, 0));
|
||||
mAdvanceWidth += aOtherOnRight.mAdvanceWidth;
|
||||
}
|
||||
void CombineWith(const RunMetrics& aOther, PRBool aOtherIsOnLeft);
|
||||
|
||||
// can be negative (partly due to negative spacing).
|
||||
// Advance widths should be additive: the advance width of the
|
||||
|
|
|
@ -246,6 +246,21 @@ gfxFontCache::DestroyFont(gfxFont *aFont)
|
|||
delete aFont;
|
||||
}
|
||||
|
||||
void
|
||||
gfxFont::RunMetrics::CombineWith(const RunMetrics& aOther, PRBool aOtherIsOnLeft)
|
||||
{
|
||||
mAscent = PR_MAX(mAscent, aOther.mAscent);
|
||||
mDescent = PR_MAX(mDescent, aOther.mDescent);
|
||||
if (aOtherIsOnLeft) {
|
||||
mBoundingBox =
|
||||
(mBoundingBox + gfxPoint(aOther.mAdvanceWidth, 0)).Union(aOther.mBoundingBox);
|
||||
} else {
|
||||
mBoundingBox =
|
||||
mBoundingBox.Union(aOther.mBoundingBox + gfxPoint(mAdvanceWidth, 0));
|
||||
}
|
||||
mAdvanceWidth += aOther.mAdvanceWidth;
|
||||
}
|
||||
|
||||
gfxFont::gfxFont(gfxFontEntry *aFontEntry, const gfxFontStyle *aFontStyle) :
|
||||
mIsValid(PR_TRUE), mStyle(*aFontStyle), mFontEntry(aFontEntry), mSyntheticBoldOffset(0)
|
||||
{
|
||||
|
@ -1753,7 +1768,6 @@ gfxTextRun::DrawToPath(gfxContext *aContext, gfxPoint aPt,
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
gfxTextRun::AccumulateMetricsForRun(gfxFont *aFont,
|
||||
PRUint32 aStart, PRUint32 aEnd,
|
||||
|
@ -1767,13 +1781,7 @@ gfxTextRun::AccumulateMetricsForRun(gfxFont *aFont,
|
|||
aSpacingStart, aSpacingEnd, &spacingBuffer);
|
||||
Metrics metrics = aFont->Measure(this, aStart, aEnd, aTight, aRefContext,
|
||||
haveSpacing ? spacingBuffer.Elements() : nsnull);
|
||||
|
||||
if (IsRightToLeft()) {
|
||||
metrics.CombineWith(*aMetrics);
|
||||
*aMetrics = metrics;
|
||||
} else {
|
||||
aMetrics->CombineWith(metrics);
|
||||
}
|
||||
aMetrics->CombineWith(metrics, IsRightToLeft());
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -1809,12 +1817,7 @@ gfxTextRun::AccumulatePartialLigatureMetrics(gfxFont *aFont,
|
|||
: data.mPartAdvance;
|
||||
metrics.mAdvanceWidth = data.mPartWidth;
|
||||
|
||||
if (IsRightToLeft()) {
|
||||
metrics.CombineWith(*aMetrics);
|
||||
*aMetrics = metrics;
|
||||
} else {
|
||||
aMetrics->CombineWith(metrics);
|
||||
}
|
||||
aMetrics->CombineWith(metrics, IsRightToLeft());
|
||||
}
|
||||
|
||||
gfxTextRun::Metrics
|
||||
|
|
Загрузка…
Ссылка в новой задаче