19f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio/*
29f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio * Copyright 2011, The Android Open Source Project
39f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio * Copyright 2011, Google Inc. All rights reserved.
49f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio *
59f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio * Redistribution and use in source and binary forms, with or without
69f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio * modification, are permitted provided that the following conditions
79f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio * are met:
89f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio *  * Redistributions of source code must retain the above copyright
99f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio *    notice, this list of conditions and the following disclaimer.
109f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio *  * Redistributions in binary form must reproduce the above copyright
119f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio *    notice, this list of conditions and the following disclaimer in the
129f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio *    documentation and/or other materials provided with the distribution.
139f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio *
149f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
159f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
169f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
179f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
189f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
199f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
209f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
219f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
229f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
239f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
249f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
259f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio */
269f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio
27ed6b9dff563c5e22f040ff37e12c0d771e0478aeAndreas Gampe#ifndef _ANDROID_GRAPHICS_HARF_BUZZ_NG_FACE_SKIA_H_
28ed6b9dff563c5e22f040ff37e12c0d771e0478aeAndreas Gampe#define _ANDROID_GRAPHICS_HARF_BUZZ_NG_FACE_SKIA_H_
299f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio
30aaedde51b76901ff05f2a2348eb41f0f5323d954Raph Levien#include <SkScalar.h>
31aaedde51b76901ff05f2a2348eb41f0f5323d954Raph Levien#include <SkPaint.h>
329f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio
33aaedde51b76901ff05f2a2348eb41f0f5323d954Raph Levien#include <hb.h>
349f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio
359f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglionamespace android {
36eee49c699c035ffba188417489f40d34f587d65cFabrice Di Meglio
37aaedde51b76901ff05f2a2348eb41f0f5323d954Raph Levienstatic inline float
38aaedde51b76901ff05f2a2348eb41f0f5323d954Raph LevienHBFixedToFloat (hb_position_t v)
39aaedde51b76901ff05f2a2348eb41f0f5323d954Raph Levien{
4077b74d4f937a9ef959dbee494888ea7860a6a6d0Raph Levien    return scalbnf (v, -8);
41aaedde51b76901ff05f2a2348eb41f0f5323d954Raph Levien}
42aaedde51b76901ff05f2a2348eb41f0f5323d954Raph Levien
43aaedde51b76901ff05f2a2348eb41f0f5323d954Raph Levienstatic inline hb_position_t
44aaedde51b76901ff05f2a2348eb41f0f5323d954Raph LevienHBFloatToFixed (float v)
45aaedde51b76901ff05f2a2348eb41f0f5323d954Raph Levien{
4677b74d4f937a9ef959dbee494888ea7860a6a6d0Raph Levien    return scalbnf (v, +8);
47eee49c699c035ffba188417489f40d34f587d65cFabrice Di Meglio}
48eee49c699c035ffba188417489f40d34f587d65cFabrice Di Meglio
49aaedde51b76901ff05f2a2348eb41f0f5323d954Raph Levienstatic inline hb_position_t SkScalarToHBFixed(SkScalar value) {
50aaedde51b76901ff05f2a2348eb41f0f5323d954Raph Levien    return HBFloatToFixed(SkScalarToFloat(value));
51eee49c699c035ffba188417489f40d34f587d65cFabrice Di Meglio}
52eee49c699c035ffba188417489f40d34f587d65cFabrice Di Meglio
53aaedde51b76901ff05f2a2348eb41f0f5323d954Raph Levienhb_blob_t* harfbuzzSkiaReferenceTable(hb_face_t* face, hb_tag_t tag, void* userData);
54aaedde51b76901ff05f2a2348eb41f0f5323d954Raph Levien
55aaedde51b76901ff05f2a2348eb41f0f5323d954Raph Levienhb_font_t* createFont(hb_face_t* face, SkPaint* paint, float sizeX, float sizeY);
56eee49c699c035ffba188417489f40d34f587d65cFabrice Di Meglio
579f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio}  // namespace android
589f82b580d744ce4baf057b061994394dcf239eedFabrice Di Meglio
59ed6b9dff563c5e22f040ff37e12c0d771e0478aeAndreas Gampe#endif  // _ANDROID_GRAPHICS_HARF_BUZZ_NG_FACE_SKIA_H_
60