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 17e21e2a2d1d85d422230c1115abba824338763a88Behdad Esfahbod#ifndef ANDROID_MINIKIN_SKIA_H 18e21e2a2d1d85d422230c1115abba824338763a88Behdad Esfahbod#define ANDROID_MINIKIN_SKIA_H 19e21e2a2d1d85d422230c1115abba824338763a88Behdad Esfahbod 20e21e2a2d1d85d422230c1115abba824338763a88Behdad Esfahbod#include <minikin/MinikinFont.h> 21e21e2a2d1d85d422230c1115abba824338763a88Behdad Esfahbod 22a033630e805c407080221e20b236b6054f324670Raph Leviennamespace android { 23a033630e805c407080221e20b236b6054f324670Raph Levien 24a033630e805c407080221e20b236b6054f324670Raph Levienclass MinikinFontSkia : public MinikinFont { 25a033630e805c407080221e20b236b6054f324670Raph Levienpublic: 26d573794d83a049fe59e289944f0cd77406dd776aRaph Levien // Note: this takes ownership of the reference (will unref on dtor) 27a033630e805c407080221e20b236b6054f324670Raph Levien explicit MinikinFontSkia(SkTypeface *typeface); 28a033630e805c407080221e20b236b6054f324670Raph Levien 29a033630e805c407080221e20b236b6054f324670Raph Levien ~MinikinFontSkia(); 30a033630e805c407080221e20b236b6054f324670Raph Levien 31a033630e805c407080221e20b236b6054f324670Raph Levien bool GetGlyph(uint32_t codepoint, uint32_t *glyph) const; 32a033630e805c407080221e20b236b6054f324670Raph Levien 33a033630e805c407080221e20b236b6054f324670Raph Levien float GetHorizontalAdvance(uint32_t glyph_id, 34a033630e805c407080221e20b236b6054f324670Raph Levien const MinikinPaint &paint) const; 35a033630e805c407080221e20b236b6054f324670Raph Levien 361a73f732f91e97c9c66b808c245ddda36a10e987Raph Levien void GetBounds(MinikinRect* bounds, uint32_t glyph_id, 371a73f732f91e97c9c66b808c245ddda36a10e987Raph Levien const MinikinPaint &paint) const; 381a73f732f91e97c9c66b808c245ddda36a10e987Raph Levien 39a033630e805c407080221e20b236b6054f324670Raph Levien // If buf is NULL, just update size 40a033630e805c407080221e20b236b6054f324670Raph Levien bool GetTable(uint32_t tag, uint8_t *buf, size_t *size); 41a033630e805c407080221e20b236b6054f324670Raph Levien 42a033630e805c407080221e20b236b6054f324670Raph Levien int32_t GetUniqueId() const; 43a033630e805c407080221e20b236b6054f324670Raph Levien 441fc0fa87d42ce9268ece76b85b9edc834593e53aRaph Levien SkTypeface* GetSkTypeface() const; 45a033630e805c407080221e20b236b6054f324670Raph Levien 46e95b5850ac2e56330abf68362451e7614b3dfe16Raph Levien static uint32_t packPaintFlags(const SkPaint* paint); 47e95b5850ac2e56330abf68362451e7614b3dfe16Raph Levien static void unpackPaintFlags(SkPaint* paint, uint32_t paintFlags); 481fc0fa87d42ce9268ece76b85b9edc834593e53aRaph Levien 491fc0fa87d42ce9268ece76b85b9edc834593e53aRaph Levien // set typeface and fake bold/italic parameters 501fc0fa87d42ce9268ece76b85b9edc834593e53aRaph Levien static void populateSkPaint(SkPaint* paint, const MinikinFont* font, FontFakery fakery); 51a033630e805c407080221e20b236b6054f324670Raph Levienprivate: 52a033630e805c407080221e20b236b6054f324670Raph Levien SkTypeface *mTypeface; 53a033630e805c407080221e20b236b6054f324670Raph Levien}; 54a033630e805c407080221e20b236b6054f324670Raph Levien 55e21e2a2d1d85d422230c1115abba824338763a88Behdad Esfahbod} // namespace android 56e21e2a2d1d85d422230c1115abba824338763a88Behdad Esfahbod 57e21e2a2d1d85d422230c1115abba824338763a88Behdad Esfahbod#endif // ANDROID_MINIKIN_SKIA_H