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 float GetHorizontalAdvance(uint32_t glyph_id, 46bcc3dc5a2591a95a57e379e27cbad69c18e91e67Raph Levien const MinikinPaint &paint) const; 47bcc3dc5a2591a95a57e379e27cbad69c18e91e67Raph Levien 48d133eab2a1a59ce4a5b1b3db04ec00dc0dbdf349Raph Levien void GetBounds(MinikinRect* bounds, uint32_t glyph_id, 49d133eab2a1a59ce4a5b1b3db04ec00dc0dbdf349Raph Levien const MinikinPaint& paint) const; 50d133eab2a1a59ce4a5b1b3db04ec00dc0dbdf349Raph Levien 51aaa4e3470270496e6eb80704eadecb2cb7c56bf0Raph Levien const void* GetTable(uint32_t tag, size_t* size, MinikinDestroyFunc* destroy); 52aaa4e3470270496e6eb80704eadecb2cb7c56bf0Raph Levien 53aaa4e3470270496e6eb80704eadecb2cb7c56bf0Raph Levien // TODO: provide access to raw data, as an optimization. 54bcc3dc5a2591a95a57e379e27cbad69c18e91e67Raph Levien 55bcc3dc5a2591a95a57e379e27cbad69c18e91e67Raph Levien // Not a virtual method, as the protocol to access rendered 56bcc3dc5a2591a95a57e379e27cbad69c18e91e67Raph Levien // glyph bitmaps is probably different depending on the 57bcc3dc5a2591a95a57e379e27cbad69c18e91e67Raph Levien // backend. 58bcc3dc5a2591a95a57e379e27cbad69c18e91e67Raph Levien bool Render(uint32_t glyph_id, 59bcc3dc5a2591a95a57e379e27cbad69c18e91e67Raph Levien const MinikinPaint &paint, GlyphBitmap *result); 60bcc3dc5a2591a95a57e379e27cbad69c18e91e67Raph Levien 61bcc3dc5a2591a95a57e379e27cbad69c18e91e67Raph Levien MinikinFontFreeType* GetFreeType(); 62bcc3dc5a2591a95a57e379e27cbad69c18e91e67Raph Levien 63bcc3dc5a2591a95a57e379e27cbad69c18e91e67Raph Levienprivate: 64bcc3dc5a2591a95a57e379e27cbad69c18e91e67Raph Levien FT_Face mTypeface; 65bcc3dc5a2591a95a57e379e27cbad69c18e91e67Raph Levien static int32_t sIdCounter; 66bcc3dc5a2591a95a57e379e27cbad69c18e91e67Raph Levien}; 67bcc3dc5a2591a95a57e379e27cbad69c18e91e67Raph Levien 68bcc3dc5a2591a95a57e379e27cbad69c18e91e67Raph Levien} // namespace android 69bcc3dc5a2591a95a57e379e27cbad69c18e91e67Raph Levien 70bcc3dc5a2591a95a57e379e27cbad69c18e91e67Raph Levien#endif // MINIKIN_FONT_FREETYPE_H 71