Chromium Code Reviews| Index: include/core/SkFont.h |
| diff --git a/include/core/SkFont.h b/include/core/SkFont.h |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..45722285bec0e6886752f554deae074392a9313a |
| --- /dev/null |
| +++ b/include/core/SkFont.h |
| @@ -0,0 +1,151 @@ |
| +/* |
| + * Copyright 2014 Google Inc. |
| + * |
| + * Use of this source code is governed by a BSD-style license that can be |
| + * found in the LICENSE file. |
| + */ |
| + |
| +#include "SkRefCnt.h" |
| +#include "SkScalar.h" |
| + |
| +class SkPaint; |
| +class SkTypeface; |
| + |
| +enum SkTextEncoding { |
| + kUTF8_SkTextEncoding, |
| + kUTF16_SkTextEncoding, |
| + kUTF32_SkTextEncoding, |
| + kGlyphID_SkTextEncoding, |
| +}; |
| + |
| +/* |
| + 1. The Hinting enum in SkPaint is gone entirely, absorbed into SkFont's flags. |
| + |
| + 2. SkPaint Flags look like this today |
| + |
| + enum Flags { |
| + kAntiAlias_Flag = 0x01, //!< mask to enable antialiasing |
| + kDither_Flag = 0x04, //!< mask to enable dithering |
| + kUnderlineText_Flag = 0x08, //!< mask to enable underline text |
| + kStrikeThruText_Flag = 0x10, //!< mask to enable strike-thru text |
| + kFakeBoldText_Flag = 0x20, //!< mask to enable fake-bold text |
| + kLinearText_Flag = 0x40, //!< mask to enable linear-text |
| + kSubpixelText_Flag = 0x80, //!< mask to enable subpixel text positioning |
| + kDevKernText_Flag = 0x100, //!< mask to enable device kerning text |
| + kLCDRenderText_Flag = 0x200, //!< mask to enable subpixel glyph renderering |
| + kEmbeddedBitmapText_Flag = 0x400, //!< mask to enable embedded bitmap strikes |
| + kAutoHinting_Flag = 0x800, //!< mask to force Freetype's autohinter |
| + kVerticalText_Flag = 0x1000, |
| + kGenA8FromLCD_Flag = 0x2000, // hack for GDI -- do not use if you can help it |
| + }; |
| + |
| + SkFont would absorb these: |
| + |
| + kFakeBoldText_Flag = 0x20, //!< mask to enable fake-bold text |
| + kLinearText_Flag = 0x40, //!< mask to enable linear-text |
| + kSubpixelText_Flag = 0x80, //!< mask to enable subpixel text positioning |
| + kDevKernText_Flag = 0x100, //!< mask to enable device kerning text |
| + kLCDRenderText_Flag = 0x200, //!< mask to enable subpixel glyph renderering |
| + kEmbeddedBitmapText_Flag = 0x400, //!< mask to enable embedded bitmap strikes |
| + kAutoHinting_Flag = 0x800, //!< mask to force Freetype's autohinter |
| + kVerticalText_Flag = 0x1000, |
| + kGenA8FromLCD_Flag = 0x2000, // hack for GDI -- do not use if you can help it |
| + |
| + leaving these still in paint |
| + |
| + kAntiAlias_Flag = 0x01, //!< mask to enable antialiasing |
| + kDither_Flag = 0x04, //!< mask to enable dithering |
| + kUnderlineText_Flag = 0x08, //!< mask to enable underline text |
| + kStrikeThruText_Flag = 0x10, //!< mask to enable strike-thru text |
| + |
| + 3. Antialiasing |
| + |
| + SkFont has a mask-type: BW, AA, LCD |
| + SkPaint has antialias boolean |
| + |
| + What to do if the font's mask-type disagrees with the paint? |
| + |
| + */ |
| + |
| +class SkFont : public SkRefCnt { |
| +public: |
| + enum Flags { |
| + /** |
| + * Use the system's automatic hinting mechanism to hint the typeface. |
| + * If both bytecode and auto hints are specified, attempt to use the bytecodes first. |
| + * If that fails (e.g. there are no codes), then attempt to autohint. |
| + */ |
| + kEnableAutoHints_Flag = 1 << 0, |
| + |
| + /** |
| + * If the typeface contains explicit bytecodes for hinting, use them. |
| + * If both bytecode and auto hints are specified, attempt to use the bytecodes first; |
| + * if that fails (e.g. there are no codes), then attempt to autohint. |
| + */ |
| + kEnableByteCodeHints_Flag = 1 << 1, |
| + |
| + /** |
| + * Use rounded metric values (e.g. advance). |
| + * If either auto or bytecode hinting was used, apply those results to the metrics of the |
| + * glyphs as well. If no hinting was applied, the metrics will just be rounded to the |
| + * nearest integer. |
| + * |
| + * This applies to calls that return metrics (e.g. measureText) and to drawing the glyphs |
| + * (see SkCanvas drawText and drawPosText). |
| + */ |
| + kUseNonlinearMetrics_Flag = 1 << 2, |
| + |
| + kVertical_Flag = 1 << 3, |
| + kEmbeddedBitmaps_Flag = 1 << 4, |
|
bungeman-skia
2014/05/02 19:29:43
I was just working on this with relation to Direct
|
| + kGenA8FromLCD_Flag = 1 << 5, |
| + kEmbolden_Flag = 1 << 6, |
| + kDevKern_Flag = 1 << 7, // ifdef ANDROID ? |
| + }; |
| + |
| + enum MaskType { |
| + kBW_MaskType, |
| + kA8_MaskType, |
| + kLCD_MaskType, |
| + }; |
| + |
| + static SkFont* Create(SkTypeface*, SkScalar size, MaskType, uint32_t flags); |
| + static SkFont* Create(SkTypeface*, SkScalar size, SkScalar scaleX, SkScalar skewX, |
| + MaskType, uint32_t flags); |
| + |
| + /** |
| + * Return a font with the same attributes of this font, but with the specified size. |
| + * If size is not supported (e.g. <= 0 or non-finite) NULL will be returned. |
| + */ |
| + SkFont* cloneWithSize(SkScalar size) const; |
| + |
| + SkTypeface* getTypeface() const { return fTypeface; } |
| + SkScalar getSize() const { return fSize; } |
| + SkScalar getScaleX() const { return fScaleX; } |
| + SkScalar getSkewX() const { return fSkewX; } |
| + uint32_t getFlags() const { return fFlags; } |
| + MaskType getMaskType() const { return (MaskType)fMaskType; } |
| + |
| + int textToGlyphs(const void* text, size_t byteLength, SkTextEncoding, |
| + uint16_t glyphs[], int maxGlyphCount) const; |
| + |
| + SkScalar measureText(const void* text, size_t byteLength, SkTextEncoding) const; |
| + |
| + static SkFont* Testing_CreateFromPaint(const SkPaint&); |
| + |
| +private: |
| + enum { |
| + kAllFlags = 0xFF, |
| + }; |
| + |
| + SkFont(SkTypeface*, SkScalar size, SkScalar scaleX, SkScalar skewX, MaskType, uint32_t flags); |
| + virtual ~SkFont(); |
| + |
| + SkTypeface* fTypeface; |
| + SkScalar fSize; |
| + SkScalar fScaleX; |
| + SkScalar fSkewX; |
| + uint16_t fFlags; |
| + uint8_t fMaskType; |
| + uint8_t fPad; |
| +}; |
| + |