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