jdk/src/share/native/sun/font/fontscalerdefs.h
changeset 2 90ce3da70b43
child 5506 202f599c92aa
child 5579 1a5e995a710b
equal deleted inserted replaced
0:fd16c54261b3 2:90ce3da70b43
       
     1 /*
       
     2  * Copyright 2003-2007 Sun Microsystems, Inc.  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.  Sun designates this
       
     8  * particular file as subject to the "Classpath" exception as provided
       
     9  * by Sun 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
       
    22  * CA 95054 USA or visit www.sun.com if you need additional information or
       
    23  * have any questions.
       
    24  */
       
    25 
       
    26 #ifndef FontScalerDefsIncludesDefined
       
    27 #define FontScalerDefsIncludesDefined
       
    28 
       
    29 #include "AccelGlyphCache.h"
       
    30 
       
    31 #ifdef  __cplusplus
       
    32 extern "C" {
       
    33 #endif
       
    34 
       
    35 #define kPosInfinity16          (32767)
       
    36 #define kNegInfinity16          (-32768)
       
    37 
       
    38 #define kPosInfinity32          (0x7fffffff)
       
    39 #define kNegInfinity32          (0x80000000)
       
    40 
       
    41 
       
    42 #ifdef _LP64
       
    43 typedef unsigned int            UInt32;
       
    44 typedef int                     Int32;
       
    45 #else
       
    46 typedef unsigned long           UInt32;
       
    47 typedef long                    Int32;
       
    48 #endif
       
    49 typedef unsigned short          UInt16;
       
    50 typedef short                   Int16;
       
    51 typedef unsigned char           UInt8;
       
    52 
       
    53 typedef UInt8                   Byte;
       
    54 typedef Int32                   hsFixed;
       
    55 typedef Int32                   hsFract;
       
    56 typedef UInt32                  Bool32;
       
    57 
       
    58 #ifndef false
       
    59         #define false           0
       
    60 #endif
       
    61 
       
    62 #ifndef true
       
    63         #define true            1
       
    64 #endif
       
    65 
       
    66 #define kPosInfinity32          (0x7fffffff)
       
    67 #define kNegInfinity32          (0x80000000)
       
    68 
       
    69 #define F26Dot6ToFixed(n)  ((n) << 10)
       
    70 #define F26Dot6ToScalar(n) (((t2kScalar)(n)) / (t2kScalar)64)
       
    71 
       
    72   /* t2kFixed is the same as F16Dot16 format although T2K also uses 26.6 */
       
    73 typedef Int32 t2kFixed;
       
    74 typedef float t2kScalar;
       
    75 
       
    76 #define t2kIntToFixed(x) ((t2kFixed)(x) << 16)
       
    77 #define t2kFixedToInt(x) ((x) >> 16)
       
    78 
       
    79 #define t2kFixedRound(x) (((x) + 0x8000) >> 16)
       
    80 #define t2kFixed1 t2kIntToFixed(1)
       
    81 
       
    82 #define t2kFloatToFixed(f) (t2kFixed)((f) * (float)(t2kFixed1))
       
    83 #define t2kFixedToFloat(x) ((x) / (float)(65536))
       
    84 
       
    85 #define t2kScalarAverage(a, b) (((a) + (b)) / (t2kScalar)(2))
       
    86 
       
    87 typedef struct GlyphInfo {
       
    88     float        advanceX;
       
    89     float        advanceY;
       
    90     UInt16       width;
       
    91     UInt16       height;
       
    92     UInt16       rowBytes;
       
    93     float        topLeftX;
       
    94     float        topLeftY;
       
    95     struct _CacheCellInfo *cellInfo;
       
    96     UInt8        *image;
       
    97 } GlyphInfo;
       
    98 
       
    99   /* We use fffe and ffff as meaning invisible glyphs which have no
       
   100    * image, or advance and an empty outline.
       
   101    * Since there are no valid glyphs with this great a value (watch out for
       
   102    * large fonts in the future!) we can safely use check for >= this value
       
   103    */
       
   104 #define INVISIBLE_GLYPHS 0xfffe
       
   105 
       
   106 #define GSUB_TAG 0x47535542 /* 'GSUB' */
       
   107 #define GPOS_TAG 0x47504F53 /* 'GPOS' */
       
   108 #define GDEF_TAG 0x47444546 /* 'GDEF' */
       
   109 #define MORT_TAG 0x6D6F7274 /* 'mort' */
       
   110 #define KERN_TAG 0x6B65726E /* 'kern' */
       
   111 
       
   112 typedef struct TTLayoutTableCache {
       
   113     void* gsub;
       
   114     void* gpos;
       
   115     void* gdef;
       
   116     void* mort;
       
   117     void* kern;
       
   118     void* kernPairs;
       
   119     int gsub_len;
       
   120     int gpos_len;
       
   121     int gdef_len;
       
   122     int mort_len;
       
   123     int kern_len;
       
   124 } TTLayoutTableCache;
       
   125 
       
   126 #include "sunfontids.h"
       
   127 
       
   128 JNIEXPORT extern TTLayoutTableCache* newLayoutTableCache();
       
   129 JNIEXPORT extern void freeLayoutTableCache(TTLayoutTableCache* ltc);
       
   130 
       
   131 /* If font is malformed then scaler context created by particular scaler
       
   132  * will be replaced by null scaler context.
       
   133  * Note that this context is not compatible with structure of the context
       
   134  * object used by particular scaler. Therefore, before using context
       
   135  * scaler has to check if it is NullContext.
       
   136  *
       
   137  * Note that in theory request with NullContext should not even reach native
       
   138  * scaler.
       
   139  *
       
   140  * It seems that the only reason to support NullContext is to simplify
       
   141  * FileFontStrike logic - presence of context is used as marker to
       
   142  * free the memory.
       
   143 */
       
   144 JNIEXPORT int isNullScalerContext(void *context);
       
   145 
       
   146 #ifdef  __cplusplus
       
   147 }
       
   148 #endif
       
   149 
       
   150 #endif