1a033630e805c407080221e20b236b6054f324670Raph Levien/* 2a033630e805c407080221e20b236b6054f324670Raph Levien * Copyright (C) 2013 The Android Open Source Project 3a033630e805c407080221e20b236b6054f324670Raph Levien * 4a033630e805c407080221e20b236b6054f324670Raph Levien * Licensed under the Apache License, Version 2.0 (the "License"); 5a033630e805c407080221e20b236b6054f324670Raph Levien * you may not use this file except in compliance with the License. 6a033630e805c407080221e20b236b6054f324670Raph Levien * You may obtain a copy of the License at 7a033630e805c407080221e20b236b6054f324670Raph Levien * 8a033630e805c407080221e20b236b6054f324670Raph Levien * http://www.apache.org/licenses/LICENSE-2.0 9a033630e805c407080221e20b236b6054f324670Raph Levien * 10a033630e805c407080221e20b236b6054f324670Raph Levien * Unless required by applicable law or agreed to in writing, software 11a033630e805c407080221e20b236b6054f324670Raph Levien * distributed under the License is distributed on an "AS IS" BASIS, 12a033630e805c407080221e20b236b6054f324670Raph Levien * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13a033630e805c407080221e20b236b6054f324670Raph Levien * See the License for the specific language governing permissions and 14a033630e805c407080221e20b236b6054f324670Raph Levien * limitations under the License. 15a033630e805c407080221e20b236b6054f324670Raph Levien */ 16a033630e805c407080221e20b236b6054f324670Raph Levien 17ed6b9dff563c5e22f040ff37e12c0d771e0478aeAndreas Gampe#ifndef _ANDROID_GRAPHICS_MINIKIN_SKIA_H_ 18ed6b9dff563c5e22f040ff37e12c0d771e0478aeAndreas Gampe#define _ANDROID_GRAPHICS_MINIKIN_SKIA_H_ 19e21e2a2d1d85d422230c1115abba824338763a88Behdad Esfahbod 20dccca44ffda4836b56a21da95a046c9708ffd49csergeyv#include <cutils/compiler.h> 21e21e2a2d1d85d422230c1115abba824338763a88Behdad Esfahbod#include <minikin/MinikinFont.h> 22e21e2a2d1d85d422230c1115abba824338763a88Behdad Esfahbod 23dccca44ffda4836b56a21da95a046c9708ffd49csergeyvclass SkPaint; 24dccca44ffda4836b56a21da95a046c9708ffd49csergeyvclass SkTypeface; 25dccca44ffda4836b56a21da95a046c9708ffd49csergeyv 26a033630e805c407080221e20b236b6054f324670Raph Leviennamespace android { 27a033630e805c407080221e20b236b6054f324670Raph Levien 28dccca44ffda4836b56a21da95a046c9708ffd49csergeyvclass ANDROID_API MinikinFontSkia : public MinikinFont { 29a033630e805c407080221e20b236b6054f324670Raph Levienpublic: 30d573794d83a049fe59e289944f0cd77406dd776aRaph Levien // Note: this takes ownership of the reference (will unref on dtor) 31296bf8c55aaba0025f3e5b904fda3b6e15686753Raph Levien explicit MinikinFontSkia(SkTypeface *typeface, const void* fontData, size_t fontSize, 32296bf8c55aaba0025f3e5b904fda3b6e15686753Raph Levien int ttcIndex); 33a033630e805c407080221e20b236b6054f324670Raph Levien 34a033630e805c407080221e20b236b6054f324670Raph Levien ~MinikinFontSkia(); 35a033630e805c407080221e20b236b6054f324670Raph Levien 36a033630e805c407080221e20b236b6054f324670Raph Levien float GetHorizontalAdvance(uint32_t glyph_id, 37a033630e805c407080221e20b236b6054f324670Raph Levien const MinikinPaint &paint) const; 38a033630e805c407080221e20b236b6054f324670Raph Levien 391a73f732f91e97c9c66b808c245ddda36a10e987Raph Levien void GetBounds(MinikinRect* bounds, uint32_t glyph_id, 401a73f732f91e97c9c66b808c245ddda36a10e987Raph Levien const MinikinPaint &paint) const; 411a73f732f91e97c9c66b808c245ddda36a10e987Raph Levien 42296bf8c55aaba0025f3e5b904fda3b6e15686753Raph Levien const void* GetTable(uint32_t tag, size_t* size, MinikinDestroyFunc* destroy); 43a033630e805c407080221e20b236b6054f324670Raph Levien 441fc0fa87d42ce9268ece76b85b9edc834593e53aRaph Levien SkTypeface* GetSkTypeface() const; 45a033630e805c407080221e20b236b6054f324670Raph Levien 46296bf8c55aaba0025f3e5b904fda3b6e15686753Raph Levien // Access to underlying raw font bytes 47296bf8c55aaba0025f3e5b904fda3b6e15686753Raph Levien const void* GetFontData() const; 48296bf8c55aaba0025f3e5b904fda3b6e15686753Raph Levien size_t GetFontSize() const; 49296bf8c55aaba0025f3e5b904fda3b6e15686753Raph Levien int GetFontIndex() const; 50296bf8c55aaba0025f3e5b904fda3b6e15686753Raph Levien 51e95b5850ac2e56330abf68362451e7614b3dfe16Raph Levien static uint32_t packPaintFlags(const SkPaint* paint); 52e95b5850ac2e56330abf68362451e7614b3dfe16Raph Levien static void unpackPaintFlags(SkPaint* paint, uint32_t paintFlags); 531fc0fa87d42ce9268ece76b85b9edc834593e53aRaph Levien 541fc0fa87d42ce9268ece76b85b9edc834593e53aRaph Levien // set typeface and fake bold/italic parameters 551fc0fa87d42ce9268ece76b85b9edc834593e53aRaph Levien static void populateSkPaint(SkPaint* paint, const MinikinFont* font, FontFakery fakery); 56a033630e805c407080221e20b236b6054f324670Raph Levienprivate: 57296bf8c55aaba0025f3e5b904fda3b6e15686753Raph Levien SkTypeface* mTypeface; 58296bf8c55aaba0025f3e5b904fda3b6e15686753Raph Levien 59296bf8c55aaba0025f3e5b904fda3b6e15686753Raph Levien // A raw pointer to the font data - it should be owned by some other object with 60296bf8c55aaba0025f3e5b904fda3b6e15686753Raph Levien // lifetime at least as long as this object. 61296bf8c55aaba0025f3e5b904fda3b6e15686753Raph Levien const void* mFontData; 62296bf8c55aaba0025f3e5b904fda3b6e15686753Raph Levien size_t mFontSize; 63296bf8c55aaba0025f3e5b904fda3b6e15686753Raph Levien int mTtcIndex; 64a033630e805c407080221e20b236b6054f324670Raph Levien}; 65a033630e805c407080221e20b236b6054f324670Raph Levien 66e21e2a2d1d85d422230c1115abba824338763a88Behdad Esfahbod} // namespace android 67e21e2a2d1d85d422230c1115abba824338763a88Behdad Esfahbod 682d047808039b4848550159720bfb64e7b55e6e5aSeigo Nonaka#endif // _ANDROID_GRAPHICS_MINIKIN_SKIA_H_ 69