Bug 1300025. Use embedded bitmaps in CJK fonts with skia on Windows. r=lsalzman

This commit is contained in:
Mason Chang 2016-09-08 09:34:10 -07:00
Родитель 56e5119c61
Коммит b4407fab22
5 изменённых файлов: 27 добавлений и 5 удалений

Просмотреть файл

@ -1481,7 +1481,8 @@ public:
CreateScaledFontForDWriteFont(IDWriteFont* aFont,
IDWriteFontFamily* aFontFamily,
IDWriteFontFace* aFontFace,
Float aSize);
Float aSize,
bool aUseEmbeddedBitmap);
private:
static ID2D1Device *mD2D1Device;

Просмотреть файл

@ -41,6 +41,10 @@
#include "CGTextDrawing.h"
#endif
#ifdef XP_WIN
#include "ScaledFontDWrite.h"
#endif
namespace mozilla {
namespace gfx {
@ -1291,6 +1295,12 @@ DrawTargetSkia::FillGlyphs(ScaledFont *aFont,
}
break;
}
case FontType::DWRITE:
{
ScaledFontDWrite* dwriteFont = static_cast<ScaledFontDWrite*>(aFont);
paint.mPaint.setEmbeddedBitmapText(dwriteFont->UseEmbeddedBitmaps());
break;
}
default:
break;
}

Просмотреть файл

@ -705,9 +705,10 @@ already_AddRefed<ScaledFont>
Factory::CreateScaledFontForDWriteFont(IDWriteFont* aFont,
IDWriteFontFamily* aFontFamily,
IDWriteFontFace* aFontFace,
float aSize)
float aSize,
bool aUseEmbeddedBitmap)
{
return MakeAndAddRef<ScaledFontDWrite>(aFont, aFontFamily, aFontFace, aSize);
return MakeAndAddRef<ScaledFontDWrite>(aFont, aFontFamily, aFontFace, aSize, aUseEmbeddedBitmap);
}
#endif // XP_WIN

Просмотреть файл

@ -23,14 +23,16 @@ public:
, mFont(nullptr)
, mFontFamily(nullptr)
, mFontFace(aFont)
, mUseEmbeddedBitmap(false)
{}
ScaledFontDWrite(IDWriteFont* aFont, IDWriteFontFamily* aFontFamily,
IDWriteFontFace *aFontFace, Float aSize)
IDWriteFontFace *aFontFace, Float aSize, bool aUseEmbeddedBitmap)
: ScaledFontBase(aSize)
, mFont(aFont)
, mFontFamily(aFontFamily)
, mFontFace(aFontFace)
, mUseEmbeddedBitmap(aUseEmbeddedBitmap)
{}
virtual FontType GetType() const { return FontType::DWRITE; }
@ -46,6 +48,8 @@ public:
virtual AntialiasMode GetDefaultAAMode() override;
bool UseEmbeddedBitmaps() { return mUseEmbeddedBitmap; }
#ifdef USE_SKIA
virtual SkTypeface* GetSkTypeface();
bool GetFontDataFromSystemFonts(IDWriteFactory* aFactory);
@ -56,6 +60,7 @@ public:
RefPtr<IDWriteFont> mFont;
RefPtr<IDWriteFontFamily> mFontFamily;
RefPtr<IDWriteFontFace> mFontFace;
bool mUseEmbeddedBitmap;
protected:
#ifdef USE_CAIRO_SCALED_FONT

Просмотреть файл

@ -702,9 +702,14 @@ gfxDWriteFont::GetScaledFont(mozilla::gfx::DrawTarget *aTarget)
GetAdjustedSize(),
GetCairoScaledFont());
} else if (aTarget->GetBackendType() == BackendType::SKIA) {
gfxDWriteFontEntry *fe =
static_cast<gfxDWriteFontEntry*>(mFontEntry.get());
bool useEmbeddedBitmap = (fe->IsCJKFont() && HasBitmapStrikeForSize(NS_lround(mAdjustedSize)));
mAzureScaledFont =
Factory::CreateScaledFontForDWriteFont(mFont, mFontFamily,
mFontFace, GetAdjustedSize());
mFontFace, GetAdjustedSize(),
useEmbeddedBitmap);
} else {
mAzureScaledFont = Factory::CreateScaledFontForNativeFont(nativeFont,
GetAdjustedSize());