Bug 1251995 part 1 - Add helper functions to simplify code.
MozReview-Commit-ID: 6UBvmEpo12f
--- a/dom/canvas/CanvasRenderingContext2D.cpp
+++ b/dom/canvas/CanvasRenderingContext2D.cpp
@@ -3494,23 +3494,19 @@ struct MOZ_STACK_CLASS CanvasBidiProcess
mDrawTarget,
mAppUnitsPerDevPixel,
flags,
mMissingFonts);
}
virtual nscoord GetWidth()
{
- gfxTextRun::Metrics textRunMetrics = mTextRun->MeasureText(0,
- mTextRun->GetLength(),
- mDoMeasureBoundingBox ?
- gfxFont::TIGHT_INK_EXTENTS :
- gfxFont::LOOSE_INK_EXTENTS,
- mDrawTarget,
- nullptr);
+ gfxTextRun::Metrics textRunMetrics = mTextRun->MeasureText(
+ mDoMeasureBoundingBox ? gfxFont::TIGHT_INK_EXTENTS
+ : gfxFont::LOOSE_INK_EXTENTS, mDrawTarget);
// this only measures the height; the total width is gotten from the
// the return value of ProcessText.
if (mDoMeasureBoundingBox) {
textRunMetrics.mBoundingBox.Scale(1.0 / mAppUnitsPerDevPixel);
mBoundingBox = mBoundingBox.Union(textRunMetrics.mBoundingBox);
}
@@ -3530,23 +3526,20 @@ struct MOZ_STACK_CLASS CanvasBidiProcess
// offset is given in terms of left side of string
if (rtl) {
// Bug 581092 - don't use rounded pixel width to advance to
// right-hand end of run, because this will cause different
// glyph positioning for LTR vs RTL drawing of the same
// glyph string on OS X and DWrite where textrun widths may
// involve fractional pixels.
gfxTextRun::Metrics textRunMetrics =
- mTextRun->MeasureText(0,
- mTextRun->GetLength(),
- mDoMeasureBoundingBox ?
- gfxFont::TIGHT_INK_EXTENTS :
- gfxFont::LOOSE_INK_EXTENTS,
- mDrawTarget,
- nullptr);
+ mTextRun->MeasureText(mDoMeasureBoundingBox ?
+ gfxFont::TIGHT_INK_EXTENTS :
+ gfxFont::LOOSE_INK_EXTENTS,
+ mDrawTarget);
inlineCoord += textRunMetrics.mAdvanceWidth;
// old code was:
// point.x += width * mAppUnitsPerDevPixel;
// TODO: restore this if/when we move to fractional coords
// throughout the text layout process
}
uint32_t numRuns;
--- a/gfx/thebes/gfxTextRun.cpp
+++ b/gfx/thebes/gfxTextRun.cpp
@@ -2066,18 +2066,17 @@ gfxFloat
gfxFontGroup::GetHyphenWidth(gfxTextRun::PropertyProvider *aProvider)
{
if (mHyphenWidth < 0) {
RefPtr<DrawTarget> dt(aProvider->GetDrawTarget());
if (dt) {
nsAutoPtr<gfxTextRun>
hyphRun(MakeHyphenTextRun(dt,
aProvider->GetAppUnitsPerDevUnit()));
- mHyphenWidth = hyphRun.get() ?
- hyphRun->GetAdvanceWidth(0, hyphRun->GetLength(), nullptr) : 0;
+ mHyphenWidth = hyphRun.get() ? hyphRun->GetAdvanceWidth() : 0;
}
}
return mHyphenWidth;
}
gfxTextRun *
gfxFontGroup::MakeTextRun(const uint8_t *aString, uint32_t aLength,
const Parameters *aParams, uint32_t aFlags,
--- a/gfx/thebes/gfxTextRun.h
+++ b/gfx/thebes/gfxTextRun.h
@@ -265,27 +265,38 @@ public:
* Uses GetSpacing from aBreakProvider.
* @param aBoundingBoxType which kind of bounding box (loose/tight)
*/
Metrics MeasureText(uint32_t aStart, uint32_t aLength,
gfxFont::BoundingBoxType aBoundingBoxType,
DrawTarget* aDrawTargetForTightBoundingBox,
PropertyProvider* aProvider);
+ Metrics MeasureText(gfxFont::BoundingBoxType aBoundingBoxType,
+ DrawTarget* aDrawTargetForTightBoundingBox,
+ PropertyProvider* aProvider = nullptr) {
+ return MeasureText(0, GetLength(), aBoundingBoxType,
+ aDrawTargetForTightBoundingBox, aProvider);
+ }
+
/**
* Computes just the advance width for a substring.
* Uses GetSpacing from aBreakProvider.
* If aSpacing is not null, the spacing attached before and after
* the substring would be returned in it. NOTE: the spacing is
* included in the advance width.
*/
gfxFloat GetAdvanceWidth(uint32_t aStart, uint32_t aLength,
PropertyProvider *aProvider,
PropertyProvider::Spacing* aSpacing = nullptr);
+ gfxFloat GetAdvanceWidth() {
+ return GetAdvanceWidth(0, GetLength(), nullptr);
+ }
+
/**
* Clear all stored line breaks for the given range (both before and after),
* and then set the line-break state before aStart to aBreakBefore and
* after the last cluster to aBreakAfter.
*
* We require that before and after line breaks be consistent. For clusters
* i and i+1, we require that if there is a break after cluster i, a break
* will be specified before cluster i+1. This may be temporarily violated
--- a/layout/generic/TextOverflow.cpp
+++ b/layout/generic/TextOverflow.cpp
@@ -798,17 +798,17 @@ TextOverflow::Marker::SetupString(nsIFra
{
if (mInitialized) {
return;
}
if (mStyle->mType == NS_STYLE_TEXT_OVERFLOW_ELLIPSIS) {
gfxTextRun* textRun = GetEllipsisTextRun(aFrame);
if (textRun) {
- mISize = textRun->GetAdvanceWidth(0, textRun->GetLength(), nullptr);
+ mISize = textRun->GetAdvanceWidth();
} else {
mISize = 0;
}
} else {
nsRenderingContext rc(
aFrame->PresContext()->PresShell()->CreateReferenceRenderingContext());
RefPtr<nsFontMetrics> fm;
nsLayoutUtils::GetFontMetricsForFrame(aFrame, getter_AddRefs(fm),
--- a/layout/generic/nsTextFrame.cpp
+++ b/layout/generic/nsTextFrame.cpp
@@ -5184,18 +5184,17 @@ nsTextFrame::UpdateTextEmphasis(WritingM
}
RefPtr<nsFontMetrics> fm;
nsLayoutUtils::GetFontMetricsOfEmphasisMarks(
StyleContext(), getter_AddRefs(fm), GetFontSizeInflation());
EmphasisMarkInfo* info = new EmphasisMarkInfo;
info->textRun =
GenerateTextRunForEmphasisMarks(this, fm, aWM, styleText);
- info->advance =
- info->textRun->GetAdvanceWidth(0, info->textRun->GetLength(), nullptr);
+ info->advance = info->textRun->GetAdvanceWidth();
// Calculate the baseline offset
LogicalSide side = styleText->TextEmphasisSide(aWM);
nsFontMetrics* baseFontMetrics = aProvider.GetFontMetrics();
LogicalSize frameSize = GetLogicalSize();
// The overflow rect is inflated in the inline direction by half
// advance of the emphasis mark on each side, so that even if a mark
// is drawn for a zero-width character, it won't be clipped.
@@ -5839,18 +5838,17 @@ AddHyphenToMetrics(nsTextFrame* aTextFra
{
// Fix up metrics to include hyphen
nsAutoPtr<gfxTextRun> hyphenTextRun(
GetHyphenTextRun(aBaseTextRun, aDrawTarget, aTextFrame));
if (!hyphenTextRun.get())
return;
gfxTextRun::Metrics hyphenMetrics =
- hyphenTextRun->MeasureText(0, hyphenTextRun->GetLength(), aBoundingBoxType,
- aDrawTarget, nullptr);
+ hyphenTextRun->MeasureText(aBoundingBoxType, aDrawTarget);
if (aTextFrame->GetWritingMode().IsLineInverted()) {
hyphenMetrics.mBoundingBox.y = -hyphenMetrics.mBoundingBox.YMost();
}
aMetrics->CombineWith(hyphenMetrics, aBaseTextRun->IsRightToLeft());
}
void
nsTextFrame::PaintOneShadow(uint32_t aOffset, uint32_t aLength,
@@ -6624,17 +6622,17 @@ nsTextFrame::DrawTextRun(gfxContext* con
if (aDrawSoftHyphen) {
// Don't use ctx as the context, because we need a reference context here,
// ctx may be transformed.
nsAutoPtr<gfxTextRun> hyphenTextRun(GetHyphenTextRun(mTextRun, nullptr, this));
if (hyphenTextRun.get()) {
// For right-to-left text runs, the soft-hyphen is positioned at the left
// of the text, minus its own width
gfxFloat hyphenBaselineX = aTextBaselinePt.x + mTextRun->GetDirection() * aAdvanceWidth -
- (mTextRun->IsRightToLeft() ? hyphenTextRun->GetAdvanceWidth(0, hyphenTextRun->GetLength(), nullptr) : 0);
+ (mTextRun->IsRightToLeft() ? hyphenTextRun->GetAdvanceWidth() : 0);
::DrawTextRun(hyphenTextRun.get(), aCtx,
gfxPoint(hyphenBaselineX, aTextBaselinePt.y),
0, hyphenTextRun->GetLength(),
nullptr, aTextColor, nullptr, aContextPaint, aCallbacks);
}
}
}
--- a/layout/mathml/nsMathMLChar.cpp
+++ b/layout/mathml/nsMathMLChar.cpp
@@ -1016,19 +1016,17 @@ nsMathMLChar::SetFontFamily(nsPresContex
}
return true;
}
static nsBoundingMetrics
MeasureTextRun(DrawTarget* aDrawTarget, gfxTextRun* aTextRun)
{
gfxTextRun::Metrics metrics =
- aTextRun->MeasureText(0, aTextRun->GetLength(),
- gfxFont::TIGHT_HINTED_OUTLINE_EXTENTS,
- aDrawTarget, nullptr);
+ aTextRun->MeasureText(gfxFont::TIGHT_HINTED_OUTLINE_EXTENTS, aDrawTarget);
nsBoundingMetrics bm;
bm.leftBearing = NSToCoordFloor(metrics.mBoundingBox.X());
bm.rightBearing = NSToCoordCeil(metrics.mBoundingBox.XMost());
bm.ascent = NSToCoordCeil(-metrics.mBoundingBox.Y());
bm.descent = NSToCoordCeil(metrics.mBoundingBox.YMost());
bm.width = NSToCoordRound(metrics.mAdvanceWidth);
--- a/layout/svg/SVGTextFrame.cpp
+++ b/layout/svg/SVGTextFrame.cpp
@@ -337,18 +337,17 @@ IsGlyphPositioningAttribute(nsIAtom* aAt
static nscoord
GetBaselinePosition(nsTextFrame* aFrame,
gfxTextRun* aTextRun,
uint8_t aDominantBaseline,
float aFontSizeScaleFactor)
{
WritingMode writingMode = aFrame->GetWritingMode();
gfxTextRun::Metrics metrics =
- aTextRun->MeasureText(0, aTextRun->GetLength(), gfxFont::LOOSE_INK_EXTENTS,
- nullptr, nullptr);
+ aTextRun->MeasureText(gfxFont::LOOSE_INK_EXTENTS, nullptr);
switch (aDominantBaseline) {
case NS_STYLE_DOMINANT_BASELINE_HANGING:
case NS_STYLE_DOMINANT_BASELINE_TEXT_BEFORE_EDGE:
return writingMode.IsVerticalRL()
? metrics.mAscent + metrics.mDescent : 0;
case NS_STYLE_DOMINANT_BASELINE_USE_SCRIPT: