19f5dab3fc228fa11c32b483e6101ec086895a32bRomain Guy/*
29f5dab3fc228fa11c32b483e6101ec086895a32bRomain Guy * Copyright (C) 2012 The Android Open Source Project
39f5dab3fc228fa11c32b483e6101ec086895a32bRomain Guy *
49f5dab3fc228fa11c32b483e6101ec086895a32bRomain Guy * Licensed under the Apache License, Version 2.0 (the "License");
59f5dab3fc228fa11c32b483e6101ec086895a32bRomain Guy * you may not use this file except in compliance with the License.
69f5dab3fc228fa11c32b483e6101ec086895a32bRomain Guy * You may obtain a copy of the License at
79f5dab3fc228fa11c32b483e6101ec086895a32bRomain Guy *
89f5dab3fc228fa11c32b483e6101ec086895a32bRomain Guy *      http://www.apache.org/licenses/LICENSE-2.0
99f5dab3fc228fa11c32b483e6101ec086895a32bRomain Guy *
109f5dab3fc228fa11c32b483e6101ec086895a32bRomain Guy * Unless required by applicable law or agreed to in writing, software
119f5dab3fc228fa11c32b483e6101ec086895a32bRomain Guy * distributed under the License is distributed on an "AS IS" BASIS,
129f5dab3fc228fa11c32b483e6101ec086895a32bRomain Guy * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
139f5dab3fc228fa11c32b483e6101ec086895a32bRomain Guy * See the License for the specific language governing permissions and
149f5dab3fc228fa11c32b483e6101ec086895a32bRomain Guy * limitations under the License.
159f5dab3fc228fa11c32b483e6101ec086895a32bRomain Guy */
169f5dab3fc228fa11c32b483e6101ec086895a32bRomain Guy
179f5dab3fc228fa11c32b483e6101ec086895a32bRomain Guy#ifndef ANDROID_HWUI_FONT_UTIL_H
189f5dab3fc228fa11c32b483e6101ec086895a32bRomain Guy#define ANDROID_HWUI_FONT_UTIL_H
199f5dab3fc228fa11c32b483e6101ec086895a32bRomain Guy
209f5dab3fc228fa11c32b483e6101ec086895a32bRomain Guy#include <SkUtils.h>
219f5dab3fc228fa11c32b483e6101ec086895a32bRomain Guy
229f5dab3fc228fa11c32b483e6101ec086895a32bRomain Guy#include "Properties.h"
239f5dab3fc228fa11c32b483e6101ec086895a32bRomain Guy
249f5dab3fc228fa11c32b483e6101ec086895a32bRomain Guy///////////////////////////////////////////////////////////////////////////////
259f5dab3fc228fa11c32b483e6101ec086895a32bRomain Guy// Defines
269f5dab3fc228fa11c32b483e6101ec086895a32bRomain Guy///////////////////////////////////////////////////////////////////////////////
279f5dab3fc228fa11c32b483e6101ec086895a32bRomain Guy
289f5dab3fc228fa11c32b483e6101ec086895a32bRomain Guy#define DEFAULT_TEXT_SMALL_CACHE_WIDTH 1024
299f5dab3fc228fa11c32b483e6101ec086895a32bRomain Guy#define DEFAULT_TEXT_SMALL_CACHE_HEIGHT 256
309f5dab3fc228fa11c32b483e6101ec086895a32bRomain Guy#define DEFAULT_TEXT_LARGE_CACHE_WIDTH 2048
319f5dab3fc228fa11c32b483e6101ec086895a32bRomain Guy#define DEFAULT_TEXT_LARGE_CACHE_HEIGHT 512
329f5dab3fc228fa11c32b483e6101ec086895a32bRomain Guy
339f5dab3fc228fa11c32b483e6101ec086895a32bRomain Guy#define TEXTURE_BORDER_SIZE 1
349f5dab3fc228fa11c32b483e6101ec086895a32bRomain Guy
359f5dab3fc228fa11c32b483e6101ec086895a32bRomain Guy#define CACHE_BLOCK_ROUNDING_SIZE 4
369f5dab3fc228fa11c32b483e6101ec086895a32bRomain Guy
379f5dab3fc228fa11c32b483e6101ec086895a32bRomain Guy#if RENDER_TEXT_AS_GLYPHS
389f5dab3fc228fa11c32b483e6101ec086895a32bRomain Guy    typedef uint16_t glyph_t;
399f5dab3fc228fa11c32b483e6101ec086895a32bRomain Guy    #define TO_GLYPH(g) g
409f5dab3fc228fa11c32b483e6101ec086895a32bRomain Guy    #define GET_METRICS(paint, glyph) paint->getGlyphMetrics(glyph)
419f5dab3fc228fa11c32b483e6101ec086895a32bRomain Guy    #define GET_GLYPH(text) nextGlyph((const uint16_t**) &text)
429f5dab3fc228fa11c32b483e6101ec086895a32bRomain Guy    #define IS_END_OF_STRING(glyph) false
439f5dab3fc228fa11c32b483e6101ec086895a32bRomain Guy
449f5dab3fc228fa11c32b483e6101ec086895a32bRomain Guy    static glyph_t nextGlyph(const uint16_t** srcPtr) {
459f5dab3fc228fa11c32b483e6101ec086895a32bRomain Guy        const uint16_t* src = *srcPtr;
469f5dab3fc228fa11c32b483e6101ec086895a32bRomain Guy        glyph_t g = *src++;
479f5dab3fc228fa11c32b483e6101ec086895a32bRomain Guy        *srcPtr = src;
489f5dab3fc228fa11c32b483e6101ec086895a32bRomain Guy        return g;
499f5dab3fc228fa11c32b483e6101ec086895a32bRomain Guy    }
509f5dab3fc228fa11c32b483e6101ec086895a32bRomain Guy#else
519f5dab3fc228fa11c32b483e6101ec086895a32bRomain Guy    typedef SkUnichar glyph_t;
529f5dab3fc228fa11c32b483e6101ec086895a32bRomain Guy    #define TO_GLYPH(g) ((SkUnichar) g)
539f5dab3fc228fa11c32b483e6101ec086895a32bRomain Guy    #define GET_METRICS(paint, glyph) paint->getUnicharMetrics(glyph)
549f5dab3fc228fa11c32b483e6101ec086895a32bRomain Guy    #define GET_GLYPH(text) SkUTF16_NextUnichar((const uint16_t**) &text)
559f5dab3fc228fa11c32b483e6101ec086895a32bRomain Guy    #define IS_END_OF_STRING(glyph) glyph < 0
569f5dab3fc228fa11c32b483e6101ec086895a32bRomain Guy#endif
579f5dab3fc228fa11c32b483e6101ec086895a32bRomain Guy
589f5dab3fc228fa11c32b483e6101ec086895a32bRomain Guy#define AUTO_KERN(prev, next) (((next) - (prev) + 32) >> 6 << 16)
599f5dab3fc228fa11c32b483e6101ec086895a32bRomain Guy
609f5dab3fc228fa11c32b483e6101ec086895a32bRomain Guy#endif // ANDROID_HWUI_FONT_UTIL_H
61