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