1/* 2 * Copyright (c) 2003, 2008, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26#ifndef AccelGlyphCache_h_Included 27#define AccelGlyphCache_h_Included 28 29#ifdef __cplusplus 30extern "C" { 31#endif 32 33#include "jni.h" 34#include "fontscalerdefs.h" 35 36typedef void (FlushFunc)(); 37 38typedef struct _CacheCellInfo CacheCellInfo; 39 40typedef struct { 41 CacheCellInfo *head; 42 CacheCellInfo *tail; 43 unsigned int cacheID; 44 jint width; 45 jint height; 46 jint cellWidth; 47 jint cellHeight; 48 jboolean isFull; 49 FlushFunc *Flush; 50} GlyphCacheInfo; 51 52struct _CacheCellInfo { 53 GlyphCacheInfo *cacheInfo; 54 struct GlyphInfo *glyphInfo; 55 // next cell info in the cache's list 56 CacheCellInfo *next; 57 // REMIND: find better name? 58 // next cell info in the glyph's cell list (next Glyph Cache Info) 59 CacheCellInfo *nextGCI; 60 jint timesRendered; 61 jint x; 62 jint y; 63 // number of pixels from the left or right edge not considered touched 64 // by the glyph 65 jint leftOff; 66 jint rightOff; 67 jfloat tx1; 68 jfloat ty1; 69 jfloat tx2; 70 jfloat ty2; 71}; 72 73GlyphCacheInfo * 74AccelGlyphCache_Init(jint width, jint height, 75 jint cellWidth, jint cellHeight, 76 FlushFunc *func); 77CacheCellInfo * 78AccelGlyphCache_AddGlyph(GlyphCacheInfo *cache, struct GlyphInfo *glyph); 79void 80AccelGlyphCache_Invalidate(GlyphCacheInfo *cache); 81void 82AccelGlyphCache_AddCellInfo(struct GlyphInfo *glyph, CacheCellInfo *cellInfo); 83void 84AccelGlyphCache_RemoveCellInfo(struct GlyphInfo *glyph, CacheCellInfo *cellInfo); 85CacheCellInfo * 86AccelGlyphCache_GetCellInfoForCache(struct GlyphInfo *glyph, 87 GlyphCacheInfo *cache); 88JNIEXPORT void 89AccelGlyphCache_RemoveAllCellInfos(struct GlyphInfo *glyph); 90void 91AccelGlyphCache_Free(GlyphCacheInfo *cache); 92 93#ifdef __cplusplus 94}; 95#endif 96 97#endif /* AccelGlyphCache_h_Included */ 98