mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-01-22 12:04:38 +00:00
9bd2203649
WR tries to normalize Mac FontInstances so that regardless of the font color we only need to generate one version of the glyph in the cache. This strategy backfires for fonts with color glyphs that are nominally supposed to ignore the font color, but may choose to opt-in to the font color per-glyph based on table data. This determination is problematic to do in WR itself, but Gecko knows whether a font has color glyphs ahead of time. So we let Gecko pass this data into ScaledFonts which can then transmit the knowledge of whether the font has color glyphs to the WR Mac font backend, which will then take appropriate action. Differential Revision: https://phabricator.services.mozilla.com/D130819
99 lines
3.2 KiB
C++
99 lines
3.2 KiB
C++
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
|
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
|
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
#ifndef MOZILLA_GFX_SCALEDFONTMAC_H_
|
|
#define MOZILLA_GFX_SCALEDFONTMAC_H_
|
|
|
|
#ifdef MOZ_WIDGET_COCOA
|
|
# include <ApplicationServices/ApplicationServices.h>
|
|
#else
|
|
# include <CoreGraphics/CoreGraphics.h>
|
|
# include <CoreText/CoreText.h>
|
|
#endif
|
|
|
|
#include "2D.h"
|
|
|
|
#include "ScaledFontBase.h"
|
|
|
|
namespace mozilla {
|
|
namespace gfx {
|
|
|
|
class UnscaledFontMac;
|
|
|
|
class ScaledFontMac : public ScaledFontBase {
|
|
public:
|
|
MOZ_DECLARE_REFCOUNTED_VIRTUAL_TYPENAME(ScaledFontMac, override)
|
|
ScaledFontMac(
|
|
CGFontRef aFont, const RefPtr<UnscaledFont>& aUnscaledFont, Float aSize,
|
|
bool aOwnsFont = false,
|
|
const DeviceColor& aFontSmoothingBackgroundColor = DeviceColor(),
|
|
bool aUseFontSmoothing = true, bool aApplySyntheticBold = false,
|
|
bool aHasColorGlyphs = false);
|
|
ScaledFontMac(
|
|
CTFontRef aFont, const RefPtr<UnscaledFont>& aUnscaledFont,
|
|
const DeviceColor& aFontSmoothingBackgroundColor = DeviceColor(),
|
|
bool aUseFontSmoothing = true, bool aApplySyntheticBold = false,
|
|
bool aHasColorGlyphs = false);
|
|
~ScaledFontMac();
|
|
|
|
FontType GetType() const override { return FontType::MAC; }
|
|
SkTypeface* CreateSkTypeface() override;
|
|
void SetupSkFontDrawOptions(SkFont& aFont) override;
|
|
already_AddRefed<Path> GetPathForGlyphs(const GlyphBuffer& aBuffer,
|
|
const DrawTarget* aTarget) override;
|
|
|
|
bool GetFontInstanceData(FontInstanceDataOutput aCb, void* aBaton) override;
|
|
|
|
bool GetWRFontInstanceOptions(
|
|
Maybe<wr::FontInstanceOptions>* aOutOptions,
|
|
Maybe<wr::FontInstancePlatformOptions>* aOutPlatformOptions,
|
|
std::vector<FontVariation>* aOutVariations) override;
|
|
|
|
bool CanSerialize() override { return true; }
|
|
|
|
DeviceColor FontSmoothingBackgroundColor() {
|
|
return mFontSmoothingBackgroundColor;
|
|
}
|
|
|
|
cairo_font_face_t* CreateCairoFontFace(
|
|
cairo_font_options_t* aFontOptions) override;
|
|
|
|
private:
|
|
friend class DrawTargetSkia;
|
|
friend class UnscaledFontMac;
|
|
|
|
CGFontRef mFont;
|
|
CTFontRef
|
|
mCTFont; // only created if CTFontDrawGlyphs is available, otherwise null
|
|
|
|
DeviceColor mFontSmoothingBackgroundColor;
|
|
bool mUseFontSmoothing;
|
|
bool mApplySyntheticBold;
|
|
bool mHasColorGlyphs;
|
|
|
|
struct InstanceData {
|
|
explicit InstanceData(ScaledFontMac* aScaledFont)
|
|
: mFontSmoothingBackgroundColor(
|
|
aScaledFont->mFontSmoothingBackgroundColor),
|
|
mUseFontSmoothing(aScaledFont->mUseFontSmoothing),
|
|
mApplySyntheticBold(aScaledFont->mApplySyntheticBold),
|
|
mHasColorGlyphs(aScaledFont->mHasColorGlyphs) {}
|
|
|
|
InstanceData(const wr::FontInstanceOptions* aOptions,
|
|
const wr::FontInstancePlatformOptions* aPlatformOptions);
|
|
|
|
DeviceColor mFontSmoothingBackgroundColor;
|
|
bool mUseFontSmoothing;
|
|
bool mApplySyntheticBold;
|
|
bool mHasColorGlyphs;
|
|
};
|
|
};
|
|
|
|
} // namespace gfx
|
|
} // namespace mozilla
|
|
|
|
#endif /* MOZILLA_GFX_SCALEDFONTMAC_H_ */
|