зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1300025. Use embedded bitmaps in CJK fonts with skia on Windows. r=lsalzman
This commit is contained in:
Родитель
56e5119c61
Коммит
b4407fab22
|
@ -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());
|
||||
|
|
Загрузка…
Ссылка в новой задаче