1bcc3dc5a2591a95a57e379e27cbad69c18e91e67Raph Levien/* 2bcc3dc5a2591a95a57e379e27cbad69c18e91e67Raph Levien * Copyright (C) 2013 The Android Open Source Project 3bcc3dc5a2591a95a57e379e27cbad69c18e91e67Raph Levien * 4bcc3dc5a2591a95a57e379e27cbad69c18e91e67Raph Levien * Licensed under the Apache License, Version 2.0 (the "License"); 5bcc3dc5a2591a95a57e379e27cbad69c18e91e67Raph Levien * you may not use this file except in compliance with the License. 6bcc3dc5a2591a95a57e379e27cbad69c18e91e67Raph Levien * You may obtain a copy of the License at 7bcc3dc5a2591a95a57e379e27cbad69c18e91e67Raph Levien * 8bcc3dc5a2591a95a57e379e27cbad69c18e91e67Raph Levien * http://www.apache.org/licenses/LICENSE-2.0 9bcc3dc5a2591a95a57e379e27cbad69c18e91e67Raph Levien * 10bcc3dc5a2591a95a57e379e27cbad69c18e91e67Raph Levien * Unless required by applicable law or agreed to in writing, software 11bcc3dc5a2591a95a57e379e27cbad69c18e91e67Raph Levien * distributed under the License is distributed on an "AS IS" BASIS, 12bcc3dc5a2591a95a57e379e27cbad69c18e91e67Raph Levien * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13bcc3dc5a2591a95a57e379e27cbad69c18e91e67Raph Levien * See the License for the specific language governing permissions and 14bcc3dc5a2591a95a57e379e27cbad69c18e91e67Raph Levien * limitations under the License. 15bcc3dc5a2591a95a57e379e27cbad69c18e91e67Raph Levien */ 16bcc3dc5a2591a95a57e379e27cbad69c18e91e67Raph Levien 17bcc3dc5a2591a95a57e379e27cbad69c18e91e67Raph Levien#ifndef MINIKIN_FONT_FREETYPE_H 18bcc3dc5a2591a95a57e379e27cbad69c18e91e67Raph Levien#define MINIKIN_FONT_FREETYPE_H 19bcc3dc5a2591a95a57e379e27cbad69c18e91e67Raph Levien 20bcc3dc5a2591a95a57e379e27cbad69c18e91e67Raph Levien#include <ft2build.h> 21bcc3dc5a2591a95a57e379e27cbad69c18e91e67Raph Levien#include FT_FREETYPE_H 22bcc3dc5a2591a95a57e379e27cbad69c18e91e67Raph Levien#include FT_TRUETYPE_TABLES_H 23bcc3dc5a2591a95a57e379e27cbad69c18e91e67Raph Levien 24bcc3dc5a2591a95a57e379e27cbad69c18e91e67Raph Levien#include <minikin/MinikinFont.h> 25bcc3dc5a2591a95a57e379e27cbad69c18e91e67Raph Levien 26bcc3dc5a2591a95a57e379e27cbad69c18e91e67Raph Levien// An abstraction for platform fonts, allowing Minikin to be used with 27bcc3dc5a2591a95a57e379e27cbad69c18e91e67Raph Levien// multiple actual implementations of fonts. 28bcc3dc5a2591a95a57e379e27cbad69c18e91e67Raph Levien 29bcc3dc5a2591a95a57e379e27cbad69c18e91e67Raph Leviennamespace android { 30bcc3dc5a2591a95a57e379e27cbad69c18e91e67Raph Levien 31bcc3dc5a2591a95a57e379e27cbad69c18e91e67Raph Levienstruct GlyphBitmap { 32bcc3dc5a2591a95a57e379e27cbad69c18e91e67Raph Levien uint8_t *buffer; 33bcc3dc5a2591a95a57e379e27cbad69c18e91e67Raph Levien int width; 34bcc3dc5a2591a95a57e379e27cbad69c18e91e67Raph Levien int height; 35bcc3dc5a2591a95a57e379e27cbad69c18e91e67Raph Levien int left; 36bcc3dc5a2591a95a57e379e27cbad69c18e91e67Raph Levien int top; 37bcc3dc5a2591a95a57e379e27cbad69c18e91e67Raph Levien}; 38bcc3dc5a2591a95a57e379e27cbad69c18e91e67Raph Levien 39bcc3dc5a2591a95a57e379e27cbad69c18e91e67Raph Levienclass MinikinFontFreeType : public MinikinFont { 40bcc3dc5a2591a95a57e379e27cbad69c18e91e67Raph Levienpublic: 41bcc3dc5a2591a95a57e379e27cbad69c18e91e67Raph Levien explicit MinikinFontFreeType(FT_Face typeface); 42bcc3dc5a2591a95a57e379e27cbad69c18e91e67Raph Levien 43bcc3dc5a2591a95a57e379e27cbad69c18e91e67Raph Levien ~MinikinFontFreeType(); 44bcc3dc5a2591a95a57e379e27cbad69c18e91e67Raph Levien 45bcc3dc5a2591a95a57e379e27cbad69c18e91e67Raph Levien bool GetGlyph(uint32_t codepoint, uint32_t *glyph) const; 46bcc3dc5a2591a95a57e379e27cbad69c18e91e67Raph Levien 47bcc3dc5a2591a95a57e379e27cbad69c18e91e67Raph Levien float GetHorizontalAdvance(uint32_t glyph_id, 48bcc3dc5a2591a95a57e379e27cbad69c18e91e67Raph Levien const MinikinPaint &paint) const; 49bcc3dc5a2591a95a57e379e27cbad69c18e91e67Raph Levien 50d133eab2a1a59ce4a5b1b3db04ec00dc0dbdf349Raph Levien void GetBounds(MinikinRect* bounds, uint32_t glyph_id, 51d133eab2a1a59ce4a5b1b3db04ec00dc0dbdf349Raph Levien const MinikinPaint& paint) const; 52d133eab2a1a59ce4a5b1b3db04ec00dc0dbdf349Raph Levien 53bcc3dc5a2591a95a57e379e27cbad69c18e91e67Raph Levien // If buf is NULL, just update size 54bcc3dc5a2591a95a57e379e27cbad69c18e91e67Raph Levien bool GetTable(uint32_t tag, uint8_t *buf, size_t *size); 55bcc3dc5a2591a95a57e379e27cbad69c18e91e67Raph Levien 56bcc3dc5a2591a95a57e379e27cbad69c18e91e67Raph Levien int32_t GetUniqueId() const; 57bcc3dc5a2591a95a57e379e27cbad69c18e91e67Raph Levien 58bcc3dc5a2591a95a57e379e27cbad69c18e91e67Raph Levien // Not a virtual method, as the protocol to access rendered 59bcc3dc5a2591a95a57e379e27cbad69c18e91e67Raph Levien // glyph bitmaps is probably different depending on the 60bcc3dc5a2591a95a57e379e27cbad69c18e91e67Raph Levien // backend. 61bcc3dc5a2591a95a57e379e27cbad69c18e91e67Raph Levien bool Render(uint32_t glyph_id, 62bcc3dc5a2591a95a57e379e27cbad69c18e91e67Raph Levien const MinikinPaint &paint, GlyphBitmap *result); 63bcc3dc5a2591a95a57e379e27cbad69c18e91e67Raph Levien 64bcc3dc5a2591a95a57e379e27cbad69c18e91e67Raph Levien MinikinFontFreeType* GetFreeType(); 65bcc3dc5a2591a95a57e379e27cbad69c18e91e67Raph Levien 66bcc3dc5a2591a95a57e379e27cbad69c18e91e67Raph Levienprivate: 67bcc3dc5a2591a95a57e379e27cbad69c18e91e67Raph Levien FT_Face mTypeface; 68bcc3dc5a2591a95a57e379e27cbad69c18e91e67Raph Levien int32_t mUniqueId; 69bcc3dc5a2591a95a57e379e27cbad69c18e91e67Raph Levien static int32_t sIdCounter; 70bcc3dc5a2591a95a57e379e27cbad69c18e91e67Raph Levien}; 71bcc3dc5a2591a95a57e379e27cbad69c18e91e67Raph Levien 72bcc3dc5a2591a95a57e379e27cbad69c18e91e67Raph Levien} // namespace android 73bcc3dc5a2591a95a57e379e27cbad69c18e91e67Raph Levien 74bcc3dc5a2591a95a57e379e27cbad69c18e91e67Raph Levien#endif // MINIKIN_FONT_FREETYPE_H 75