diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/minikin/FontCollection.h | 23 | ||||
-rw-r--r-- | include/minikin/FontFamily.h | 21 | ||||
-rw-r--r-- | include/minikin/Layout.h | 5 | ||||
-rw-r--r-- | include/minikin/MinikinFont.h | 2 |
4 files changed, 30 insertions, 21 deletions
diff --git a/include/minikin/FontCollection.h b/include/minikin/FontCollection.h index 508a129..12700c6 100644 --- a/include/minikin/FontCollection.h +++ b/include/minikin/FontCollection.h @@ -32,24 +32,8 @@ public: ~FontCollection(); - class Run { - public: - // Do copy constructor, assignment, destructor so it can be used in vectors - Run() : font(NULL) { } - Run(const Run& other): font(other.font), start(other.start), end(other.end) { - if (font) font->RefLocked(); - } - Run& operator=(const Run& other) { - if (other.font) other.font->RefLocked(); - if (font) font->UnrefLocked(); - font = other.font; - start = other.start; - end = other.end; - return *this; - } - ~Run() { if (font) font->UnrefLocked(); } - - MinikinFont* font; + struct Run { + FakedFont fakedFont; int start; int end; }; @@ -60,6 +44,9 @@ public: // Get the base font for the given style, useful for font-wide metrics. MinikinFont* baseFont(FontStyle style); + // Get base font with fakery information (fake bold could affect metrics) + FakedFont baseFontFaked(FontStyle style); + uint32_t getId() const; private: static const int kLogCharsPerPage = 8; diff --git a/include/minikin/FontFamily.h b/include/minikin/FontFamily.h index 6bdf5d6..060d167 100644 --- a/include/minikin/FontFamily.h +++ b/include/minikin/FontFamily.h @@ -94,6 +94,25 @@ inline hash_t hash_type(const FontStyle &style) { return style.hash(); } +// attributes representing transforms (fake bold, fake italic) to match styles +class FontFakery { +public: + FontFakery() : mFakeBold(false), mFakeItalic(false) { } + FontFakery(bool fakeBold, bool fakeItalic) : mFakeBold(fakeBold), mFakeItalic(fakeItalic) { } + // TODO: want to support graded fake bolding + bool isFakeBold() { return mFakeBold; } + bool isFakeItalic() { return mFakeItalic; } +private: + bool mFakeBold; + bool mFakeItalic; +}; + +struct FakedFont { + // ownership is the enclosing FontCollection + MinikinFont* font; + FontFakery fakery; +}; + class FontFamily : public MinikinRefCounted { public: FontFamily() { } @@ -107,7 +126,7 @@ public: bool addFont(MinikinFont* typeface); void addFont(MinikinFont* typeface, FontStyle style); - MinikinFont* getClosestMatch(FontStyle style) const; + FakedFont getClosestMatch(FontStyle style) const; FontLanguage lang() const { return mLang; } int variant() const { return mVariant; } diff --git a/include/minikin/Layout.h b/include/minikin/Layout.h index 91b8ef6..1b91ad8 100644 --- a/include/minikin/Layout.h +++ b/include/minikin/Layout.h @@ -87,6 +87,7 @@ public: size_t nGlyphs() const; // Does not bump reference; ownership is still layout MinikinFont *getFont(int i) const; + FontFakery getFakery(int i) const; unsigned int getGlyphId(int i) const; float getX(int i) const; float getY(int i) const; @@ -101,7 +102,7 @@ public: private: // Find a face in the mFaces vector, or create a new entry - int findFace(MinikinFont* face, LayoutContext* ctx); + int findFace(FakedFont face, LayoutContext* ctx); // Lay out a single bidi run void doLayoutRunCached(const uint16_t* buf, size_t start, size_t count, size_t bufSize, @@ -125,7 +126,7 @@ private: std::vector<float> mAdvances; const FontCollection* mCollection; - std::vector<MinikinFont *> mFaces; + std::vector<FakedFont> mFaces; float mAdvance; MinikinRect mBounds; }; diff --git a/include/minikin/MinikinFont.h b/include/minikin/MinikinFont.h index 9ff08a9..7915ef2 100644 --- a/include/minikin/MinikinFont.h +++ b/include/minikin/MinikinFont.h @@ -18,6 +18,7 @@ #define MINIKIN_FONT_H #include <minikin/MinikinRefCounted.h> +#include <minikin/FontFamily.h> // An abstraction for platform fonts, allowing Minikin to be used with // multiple actual implementations of fonts. @@ -34,6 +35,7 @@ struct MinikinPaint { float scaleX; float skewX; uint32_t paintFlags; + FontFakery fakery; }; struct MinikinRect { |