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