aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core
diff options
context:
space:
mode:
authorGravatar halcanary <halcanary@google.com>2016-08-16 09:36:23 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2016-08-16 09:36:23 -0700
commit3287588a467ee579c3947fe13c6add5048b14aa9 (patch)
treece5c0591a097af58fdcc8c3c0d068b483143f19f /src/core
parent883c8efae702462fa28e7ce4f17199bbfa1ce360 (diff)
SkPDF: SkPDFFont class changes
SkPDFFont: * inline some one-line methdods. - SkPDFFont::typeface() - SkPDFFont::fontInfo() - SkPDFFont::firstGlyphID() - SkPDFFont::lastGlyphID() - SkPDFFont::getFontDescriptor() * de-virtualize some methods: - SkPDFFont::getType() - SkPDFFont::multiByteGlyphs() * Constructor takes more arguments: fontType, multiByteGlyphs * re-order fields (pointers before shorts) * use sk_sp<T> more, T* less SkAdvancedTypefaceMetrics: * SkAdvancedTypefaceMetrics::fFont now a uint8_t * other enumes are sized. * SkAdvancedTypefaceMetrics::fStyle now big enough. * remove use of SkTBitOr, replaced with fancy templates No public API changes. TBR=reed@google.com GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2246903002 Review-Url: https://codereview.chromium.org/2246903002
Diffstat (limited to 'src/core')
-rw-r--r--src/core/SkAdvancedTypefaceMetrics.h46
-rw-r--r--src/core/SkTypeface.cpp8
2 files changed, 25 insertions, 29 deletions
diff --git a/src/core/SkAdvancedTypefaceMetrics.h b/src/core/SkAdvancedTypefaceMetrics.h
index 1b490e0199..17255ab217 100644
--- a/src/core/SkAdvancedTypefaceMetrics.h
+++ b/src/core/SkAdvancedTypefaceMetrics.h
@@ -5,16 +5,14 @@
* found in the LICENSE file.
*/
-
#ifndef SkAdvancedTypefaceMetrics_DEFINED
#define SkAdvancedTypefaceMetrics_DEFINED
+#include "SkBitmaskEnum.h"
#include "SkRect.h"
#include "SkRefCnt.h"
#include "SkString.h"
#include "SkTDArray.h"
-#include "SkTemplates.h"
-#include "SkSinglyLinkedList.h"
/** \class SkAdvancedTypefaceMetrics
@@ -22,16 +20,15 @@
embed typefaces. This class is created and filled in with information by
SkTypeface::getAdvancedTypefaceMetrics.
*/
-
class SkAdvancedTypefaceMetrics : public SkRefCnt {
public:
SkAdvancedTypefaceMetrics()
: fType(SkAdvancedTypefaceMetrics::kOther_Font)
- , fFlags(SkAdvancedTypefaceMetrics::kEmpty_FontFlag)
+ , fFlags((FontFlags)0)
, fLastGlyphID(0)
, fEmSize(0)
- , fStyle(0)
+ , fStyle((StyleFlags)0)
, fItalicAngle(0)
, fAscent(0)
, fDescent(0)
@@ -43,7 +40,7 @@ public:
SkString fFontName;
- enum FontType {
+ enum FontType : uint8_t {
kType1_Font,
kType1CID_Font,
kCFF_Font,
@@ -55,29 +52,28 @@ public:
// information will never be populated.
FontType fType;
- enum FontFlags {
- kEmpty_FontFlag = 0x0, //!<No flags set
- kMultiMaster_FontFlag = 0x1, //!<May be true for Type1, CFF, or TrueType fonts.
- kNotEmbeddable_FontFlag = 0x2, //!<May not be embedded.
- kNotSubsettable_FontFlag = 0x4, //!<May not be subset.
+ enum FontFlags : uint8_t {
+ kMultiMaster_FontFlag = 0x01, //!<May be true for Type1, CFF, or TrueType fonts.
+ kNotEmbeddable_FontFlag = 0x02, //!<May not be embedded.
+ kNotSubsettable_FontFlag = 0x04, //!<May not be subset.
};
- // Global font flags.
- FontFlags fFlags;
+ FontFlags fFlags; // Global font flags.
uint16_t fLastGlyphID; // The last valid glyph ID in the font.
uint16_t fEmSize; // The size of the em box (defines font units).
// These enum values match the values used in the PDF file format.
- enum StyleFlags {
- kFixedPitch_Style = 0x00001,
- kSerif_Style = 0x00002,
- kScript_Style = 0x00008,
- kItalic_Style = 0x00040,
- kAllCaps_Style = 0x10000,
- kSmallCaps_Style = 0x20000,
- kForceBold_Style = 0x40000
+ enum StyleFlags : uint32_t {
+ kFixedPitch_Style = 0x00000001,
+ kSerif_Style = 0x00000002,
+ kScript_Style = 0x00000008,
+ kItalic_Style = 0x00000040,
+ kAllCaps_Style = 0x00010000,
+ kSmallCaps_Style = 0x00020000,
+ kForceBold_Style = 0x00040000
};
- uint16_t fStyle; // Font style characteristics.
+ StyleFlags fStyle; // Font style characteristics.
+
int16_t fItalicAngle; // Counterclockwise degrees from vertical of the
// dominant vertical stroke for an Italic face.
// The following fields are all in font units.
@@ -99,5 +95,9 @@ private:
typedef SkRefCnt INHERITED;
};
+namespace skstd {
+template <> struct is_bitmask_enum<SkAdvancedTypefaceMetrics::FontFlags> : std::true_type {};
+template <> struct is_bitmask_enum<SkAdvancedTypefaceMetrics::StyleFlags> : std::true_type {};
+}
#endif
diff --git a/src/core/SkTypeface.cpp b/src/core/SkTypeface.cpp
index 24e1a67864..cda9b5ce5e 100644
--- a/src/core/SkTypeface.cpp
+++ b/src/core/SkTypeface.cpp
@@ -298,14 +298,10 @@ SkAdvancedTypefaceMetrics* SkTypeface::getAdvancedTypefaceMetrics(
(os2table.version.v2.fsType.field.Restricted &&
!(os2table.version.v2.fsType.field.PreviewPrint ||
os2table.version.v2.fsType.field.Editable))) {
- result->fFlags = SkTBitOr<SkAdvancedTypefaceMetrics::FontFlags>(
- result->fFlags,
- SkAdvancedTypefaceMetrics::kNotEmbeddable_FontFlag);
+ result->fFlags |= SkAdvancedTypefaceMetrics::kNotEmbeddable_FontFlag;
}
if (os2table.version.v2.fsType.field.NoSubsetting) {
- result->fFlags = SkTBitOr<SkAdvancedTypefaceMetrics::FontFlags>(
- result->fFlags,
- SkAdvancedTypefaceMetrics::kNotSubsettable_FontFlag);
+ result->fFlags |= SkAdvancedTypefaceMetrics::kNotSubsettable_FontFlag;
}
}
}