Bug 1355931 - move ScaledFont::VariationSetting into separate header for sharing with thebes. r=jrmuizel

MozReview-Commit-ID: 4UThWTMCuz9
This commit is contained in:
Lee Salzman 2017-04-14 14:11:02 -04:00
parent 28471864af
commit bfa3b7a714
7 changed files with 42 additions and 29 deletions

View File

@ -12,6 +12,7 @@
#include "Matrix.h"
#include "Quaternion.h"
#include "UserData.h"
#include "FontVariation.h"
#include <vector>
// GenericRefCountedBase allows us to hold on to refcounted objects of any type
@ -770,11 +771,6 @@ public:
*/
virtual void GetGlyphDesignMetrics(const uint16_t* aGlyphIndices, uint32_t aNumGlyphs, GlyphMetrics* aGlyphMetrics) = 0;
struct VariationSetting {
uint32_t mTag;
float mValue;
};
typedef void (*FontInstanceDataOutput)(const uint8_t* aData, uint32_t aLength, void* aBaton);
virtual bool GetFontInstanceData(FontInstanceDataOutput, void *) { return false; }

26
gfx/2d/FontVariation.h Normal file
View File

@ -0,0 +1,26 @@
/* -*- Mode: c++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
* 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_FONTVARIATION_H_
#define MOZILLA_GFX_FONTVARIATION_H_
namespace mozilla {
namespace gfx {
// An OpenType variation tag and value pair
struct FontVariation
{
uint32_t mTag;
float mValue;
bool operator==(const FontVariation& aOther) const {
return mTag == aOther.mTag && mValue == aOther.mValue;
}
};
} // namespace gfx
} // namespace mozilla
#endif /* MOZILLA_GFX_FONTVARIATION_H_ */

View File

@ -238,7 +238,7 @@ static void CollectVariationSetting(const void *key, const void *value, void *co
{
auto keyPtr = static_cast<const CFTypeRef>(key);
auto valuePtr = static_cast<const CFTypeRef>(value);
auto vpp = static_cast<ScaledFont::VariationSetting**>(context);
auto vpp = static_cast<FontVariation**>(context);
if (CFGetTypeID(keyPtr) == CFNumberGetTypeID() &&
CFGetTypeID(valuePtr) == CFNumberGetTypeID()) {
uint64_t t;
@ -331,7 +331,7 @@ ScaledFontMac::GetFontInstanceData(FontInstanceDataOutput aCb, void* aBaton)
{
// Collect any variation settings that were incorporated into the CTFont.
uint32_t variationCount = 0;
VariationSetting* variations = nullptr;
FontVariation* variations = nullptr;
// Avoid calling potentially buggy variation APIs on pre-Sierra macOS
// versions (see bug 1331683)
if (nsCocoaFeatures::OnSierraOrLater()) {
@ -340,8 +340,8 @@ ScaledFontMac::GetFontInstanceData(FontInstanceDataOutput aCb, void* aBaton)
if (dict) {
CFIndex count = CFDictionaryGetCount(dict);
if (count > 0) {
variations = new VariationSetting[count];
VariationSetting* vPtr = variations;
variations = new FontVariation[count];
FontVariation* vPtr = variations;
CFDictionaryApplyFunction(dict, CollectVariationSetting, &vPtr);
variationCount = vPtr - variations;
}
@ -350,7 +350,7 @@ ScaledFontMac::GetFontInstanceData(FontInstanceDataOutput aCb, void* aBaton)
}
}
aCb(reinterpret_cast<uint8_t*>(variations), variationCount * sizeof(VariationSetting), aBaton);
aCb(reinterpret_cast<uint8_t*>(variations), variationCount * sizeof(FontVariation), aBaton);
delete[] variations;
return true;
@ -358,7 +358,7 @@ ScaledFontMac::GetFontInstanceData(FontInstanceDataOutput aCb, void* aBaton)
static CFDictionaryRef
CreateVariationDictionaryOrNull(CGFontRef aCGFont, uint32_t aVariationCount,
const ScaledFont::VariationSetting* aVariations)
const FontVariation* aVariations)
{
// Avoid calling potentially buggy variation APIs on pre-Sierra macOS
// versions (see bug 1331683)
@ -460,7 +460,7 @@ CreateVariationDictionaryOrNull(CGFontRef aCGFont, uint32_t aVariationCount,
CGFontRef
UnscaledFontMac::CreateCGFontWithVariations(CGFontRef aFont,
uint32_t aVariationCount,
const ScaledFont::VariationSetting* aVariations)
const FontVariation* aVariations)
{
MOZ_ASSERT(aVariationCount > 0);
MOZ_ASSERT(aVariations);
@ -480,9 +480,9 @@ UnscaledFontMac::CreateScaledFont(Float aGlyphSize,
uint32_t aInstanceDataLength)
{
uint32_t variationCount =
aInstanceDataLength / sizeof(ScaledFont::VariationSetting);
const ScaledFont::VariationSetting* variations =
reinterpret_cast<const ScaledFont::VariationSetting*>(aInstanceData);
aInstanceDataLength / sizeof(FontVariation);
const FontVariation* variations =
reinterpret_cast<const FontVariation*>(aInstanceData);
CGFontRef fontRef = mFont;
if (variationCount > 0) {

View File

@ -46,7 +46,7 @@ public:
static CGFontRef
CreateCGFontWithVariations(CGFontRef aFont,
uint32_t aVariationCount,
const ScaledFont::VariationSetting* aVariations);
const FontVariation* aVariations);
private:
CGFontRef mFont;

View File

@ -26,6 +26,7 @@ EXPORTS.mozilla.gfx += [
'DrawEventRecorder.h',
'DrawTargetTiled.h',
'Filters.h',
'FontVariation.h',
'Helpers.h',
'HelpersCairo.h',
'IterableArena.h',

View File

@ -7,16 +7,8 @@
#ifndef GFX_FONT_VARIATIONS_H
#define GFX_FONT_VARIATIONS_H
// An OpenType variation tag and value pair
struct gfxFontVariation {
uint32_t mTag;
float mValue;
};
#include "mozilla/gfx/FontVariation.h"
inline bool
operator==(const gfxFontVariation& a, const gfxFontVariation& b)
{
return (a.mTag == b.mTag) && (a.mValue == b.mValue);
}
typedef mozilla::gfx::FontVariation gfxFontVariation;
#endif

View File

@ -41,13 +41,11 @@ gfxMacFont::gfxMacFont(const RefPtr<UnscaledFontMac>& aUnscaledFont,
mIsValid = false;
return;
}
MOZ_ASSERT(sizeof(ScaledFont::VariationSetting) == sizeof(gfxFontVariation));
mCGFont =
UnscaledFontMac::CreateCGFontWithVariations(
baseFont,
aFontStyle->variationSettings.Length(),
reinterpret_cast<const ScaledFont::VariationSetting*>(
aFontStyle->variationSettings.Elements()));
aFontStyle->variationSettings.Elements());
if (!mCGFont) {
::CFRetain(baseFont);
mCGFont = baseFont;