| 1 | /* | 
|---|
| 2 | * bltText.h -- | 
|---|
| 3 | * | 
|---|
| 4 | * Copyright 1993-1998 Lucent Technologies, Inc. | 
|---|
| 5 | * | 
|---|
| 6 | * Permission to use, copy, modify, and distribute this software and | 
|---|
| 7 | * its documentation for any purpose and without fee is hereby | 
|---|
| 8 | * granted, provided that the above copyright notice appear in all | 
|---|
| 9 | * copies and that both that the copyright notice and warranty | 
|---|
| 10 | * disclaimer appear in supporting documentation, and that the names | 
|---|
| 11 | * of Lucent Technologies any of their entities not be used in | 
|---|
| 12 | * advertising or publicity pertaining to distribution of the software | 
|---|
| 13 | * without specific, written prior permission. | 
|---|
| 14 | * | 
|---|
| 15 | * Lucent Technologies disclaims all warranties with regard to this | 
|---|
| 16 | * software, including all implied warranties of merchantability and | 
|---|
| 17 | * fitness.  In no event shall Lucent Technologies be liable for any | 
|---|
| 18 | * special, indirect or consequential damages or any damages | 
|---|
| 19 | * whatsoever resulting from loss of use, data or profits, whether in | 
|---|
| 20 | * an action of contract, negligence or other tortuous action, arising | 
|---|
| 21 | * out of or in connection with the use or performance of this | 
|---|
| 22 | * software. | 
|---|
| 23 | */ | 
|---|
| 24 |  | 
|---|
| 25 | #ifndef _BLT_TEXT_H | 
|---|
| 26 | #define _BLT_TEXT_H | 
|---|
| 27 |  | 
|---|
| 28 | #if (TK_MAJOR_VERSION == 4) | 
|---|
| 29 |  | 
|---|
| 30 | /* | 
|---|
| 31 | * The following structure is used by Tk_GetFontMetrics() to return | 
|---|
| 32 | * information about the properties of a Tk_Font. | 
|---|
| 33 | */ | 
|---|
| 34 | typedef struct { | 
|---|
| 35 | int ascent;                 /* The amount in pixels that the tallest | 
|---|
| 36 | * letter sticks up above the baseline, plus | 
|---|
| 37 | * any extra blank space added by the designer | 
|---|
| 38 | * of the font. */ | 
|---|
| 39 | int descent;                /* The largest amount in pixels that any | 
|---|
| 40 | * letter sticks below the baseline, plus any | 
|---|
| 41 | * extra blank space added by the designer of | 
|---|
| 42 | * the font. */ | 
|---|
| 43 | int linespace;              /* The sum of the ascent and descent.  How | 
|---|
| 44 | * far apart two lines of text in the same | 
|---|
| 45 | * font should be placed so that none of the | 
|---|
| 46 | * characters in one line overlap any of the | 
|---|
| 47 | * characters in the other line. */ | 
|---|
| 48 | } Tk_FontMetrics; | 
|---|
| 49 |  | 
|---|
| 50 | typedef XFontStruct *Tk_Font; | 
|---|
| 51 |  | 
|---|
| 52 | #define Tk_FontId(font)                 ((font)->fid) | 
|---|
| 53 | #define Tk_TextWidth(font, str, len)    (XTextWidth((font),(str),(len))) | 
|---|
| 54 | #define Tk_GetFontMetrics(font, fmPtr)  \ | 
|---|
| 55 | ((fmPtr)->ascent = (font)->ascent, \ | 
|---|
| 56 | (fmPtr)->descent = (font)->descent, \ | 
|---|
| 57 | (fmPtr)->linespace = (font)->ascent + (font)->descent) | 
|---|
| 58 |  | 
|---|
| 59 | #define Tk_NameOfFont(font) (Tk_NameOfFontStruct(font)) | 
|---|
| 60 | #define Tk_DrawChars(dpy, draw, gc, font, str, len, x, y) \ | 
|---|
| 61 | TkDisplayChars((dpy),(draw),(gc),(font),(str),(len),(x),(y), 0, DEF_TEXT_FLAGS) | 
|---|
| 62 |  | 
|---|
| 63 | #define Tk_MeasureChars(font, text, len, maxPixels, flags, lenPtr) \ | 
|---|
| 64 | TkMeasureChars((font),(text), (len), 0, maxPixels, 0,(flags), (lenPtr)) | 
|---|
| 65 |  | 
|---|
| 66 | extern int TkMeasureChars _ANSI_ARGS_((Tk_Font font, char *source, | 
|---|
| 67 | int maxChars, int startX, int maxX, int tabOrigin, int flags, | 
|---|
| 68 | int *nextXPtr)); | 
|---|
| 69 | extern void TkDisplayChars _ANSI_ARGS_((Display *display, Drawable drawable, | 
|---|
| 70 | GC gc, Tk_Font font, char *string, int length, int x, int y, | 
|---|
| 71 | int tabOrigin, int flags)); | 
|---|
| 72 | /* | 
|---|
| 73 | * FLAGS passed to TkMeasureChars: | 
|---|
| 74 | */ | 
|---|
| 75 | #define TK_WHOLE_WORDS                  (1<<0) | 
|---|
| 76 | #define TK_AT_LEAST_ONE                 (1<<1) | 
|---|
| 77 | #define TK_PARTIAL_OK                   (1<<2) | 
|---|
| 78 | #define TK_IGNORE_NEWLINES              (1<<3) | 
|---|
| 79 | #define TK_IGNORE_TABS                  (1<<4) | 
|---|
| 80 | #define NO_FLAGS                        0 | 
|---|
| 81 |  | 
|---|
| 82 | #endif /* TK_MAJOR_VERSION == 4 */ | 
|---|
| 83 |  | 
|---|
| 84 | #define DEF_TEXT_FLAGS (TK_PARTIAL_OK | TK_IGNORE_NEWLINES) | 
|---|
| 85 |  | 
|---|
| 86 |  | 
|---|
| 87 |  | 
|---|
| 88 | /* | 
|---|
| 89 | * ---------------------------------------------------------------------- | 
|---|
| 90 | * | 
|---|
| 91 | * TextFragment -- | 
|---|
| 92 | * | 
|---|
| 93 | * ---------------------------------------------------------------------- | 
|---|
| 94 | */ | 
|---|
| 95 | typedef struct { | 
|---|
| 96 | char *text;                 /* Text to be displayed */ | 
|---|
| 97 |  | 
|---|
| 98 | short int x, y;             /* X-Y offset of the baseline from the | 
|---|
| 99 | * upper-left corner of the bbox. */ | 
|---|
| 100 |  | 
|---|
| 101 | short int sx, sy;           /* See bltWinUtil.c */ | 
|---|
| 102 |  | 
|---|
| 103 | short int count;            /* Number of bytes in text. The actual | 
|---|
| 104 | * character count may differ because of | 
|---|
| 105 | * multi-byte UTF encodings. */ | 
|---|
| 106 |  | 
|---|
| 107 | short int width;            /* Width of segment in pixels. This | 
|---|
| 108 | * information is used to draw | 
|---|
| 109 | * PostScript strings the same width | 
|---|
| 110 | * as X. */ | 
|---|
| 111 | } TextFragment; | 
|---|
| 112 |  | 
|---|
| 113 | /* | 
|---|
| 114 | * ---------------------------------------------------------------------- | 
|---|
| 115 | * | 
|---|
| 116 | * TextLayout -- | 
|---|
| 117 | * | 
|---|
| 118 | * ---------------------------------------------------------------------- | 
|---|
| 119 | */ | 
|---|
| 120 | typedef struct { | 
|---|
| 121 | int nFrags;                 /* # fragments of text */ | 
|---|
| 122 | short int width, height;    /* Dimensions of text bounding box */ | 
|---|
| 123 | TextFragment fragArr[1];    /* Information about each fragment of text */ | 
|---|
| 124 | } TextLayout; | 
|---|
| 125 |  | 
|---|
| 126 | typedef struct { | 
|---|
| 127 | XColor *color; | 
|---|
| 128 | int offset; | 
|---|
| 129 | } Shadow; | 
|---|
| 130 |  | 
|---|
| 131 | /* | 
|---|
| 132 | * ---------------------------------------------------------------------- | 
|---|
| 133 | * | 
|---|
| 134 | * TextStyle -- | 
|---|
| 135 | * | 
|---|
| 136 | *      Represents a convenient structure to hold text attributes | 
|---|
| 137 | *      which determine how a text string is to be displayed on the | 
|---|
| 138 | *      window, or drawn with PostScript commands.  The alternative | 
|---|
| 139 | *      is to pass lots of parameters to the drawing and printing | 
|---|
| 140 | *      routines. This seems like a more efficient and less cumbersome | 
|---|
| 141 | *      way of passing parameters. | 
|---|
| 142 | * | 
|---|
| 143 | * ---------------------------------------------------------------------- | 
|---|
| 144 | */ | 
|---|
| 145 | typedef struct { | 
|---|
| 146 | unsigned int state;         /* If non-zero, indicates to draw text | 
|---|
| 147 | * in the active color */ | 
|---|
| 148 | short int width, height;    /* Extents of text */ | 
|---|
| 149 |  | 
|---|
| 150 | XColor *color;              /* Normal color */ | 
|---|
| 151 | XColor *activeColor;        /* Active color */ | 
|---|
| 152 | Tk_Font font;               /* Font to use to draw text */ | 
|---|
| 153 | Tk_3DBorder border;         /* Background color of text.  This is also | 
|---|
| 154 | * used for drawing disabled text. */ | 
|---|
| 155 | Shadow shadow;              /* Drop shadow color and offset */ | 
|---|
| 156 | Tk_Justify justify;         /* Justification of the text string. This | 
|---|
| 157 | * only matters if the text is composed | 
|---|
| 158 | * of multiple lines. */ | 
|---|
| 159 | GC gc;                      /* GC used to draw the text */ | 
|---|
| 160 | double theta;               /* Rotation of text in degrees. */ | 
|---|
| 161 | Tk_Anchor anchor;           /* Indicates how the text is anchored around | 
|---|
| 162 | * its x and y coordinates. */ | 
|---|
| 163 | Blt_Pad padX, padY;         /* # pixels padding of around text region */ | 
|---|
| 164 | short int leader;           /* # pixels spacing between lines of text */ | 
|---|
| 165 |  | 
|---|
| 166 | } TextStyle; | 
|---|
| 167 |  | 
|---|
| 168 |  | 
|---|
| 169 | extern TextLayout *Blt_GetTextLayout _ANSI_ARGS_((char *string, | 
|---|
| 170 | TextStyle *stylePtr)); | 
|---|
| 171 |  | 
|---|
| 172 | extern void Blt_GetTextExtents _ANSI_ARGS_((TextStyle *stylePtr, | 
|---|
| 173 | char *text, int *widthPtr, int *heightPtr)); | 
|---|
| 174 |  | 
|---|
| 175 | extern void Blt_InitTextStyle _ANSI_ARGS_((TextStyle *stylePtr)); | 
|---|
| 176 |  | 
|---|
| 177 | extern void Blt_ResetTextStyle _ANSI_ARGS_((Tk_Window tkwin, | 
|---|
| 178 | TextStyle *stylePtr)); | 
|---|
| 179 |  | 
|---|
| 180 | extern void Blt_FreeTextStyle _ANSI_ARGS_((Display *display, | 
|---|
| 181 | TextStyle *stylePtr)); | 
|---|
| 182 |  | 
|---|
| 183 | extern void Blt_SetDrawTextStyle _ANSI_ARGS_((TextStyle *stylePtr, | 
|---|
| 184 | Tk_Font font, GC gc, XColor *normalColor, XColor *activeColor, | 
|---|
| 185 | XColor *shadowColor, double theta, Tk_Anchor anchor, Tk_Justify justify, | 
|---|
| 186 | int leader, int shadowOffset)); | 
|---|
| 187 |  | 
|---|
| 188 | extern void Blt_SetPrintTextStyle _ANSI_ARGS_((TextStyle *stylePtr, | 
|---|
| 189 | Tk_Font font, XColor *fgColor, XColor *bgColor, XColor *shadowColor, | 
|---|
| 190 | double theta, Tk_Anchor anchor, Tk_Justify justify, int leader, | 
|---|
| 191 | int shadowOffset)); | 
|---|
| 192 |  | 
|---|
| 193 | extern void Blt_DrawText _ANSI_ARGS_((Tk_Window tkwin, Drawable drawable, | 
|---|
| 194 | char *string, TextStyle *stylePtr, int x, int y)); | 
|---|
| 195 |  | 
|---|
| 196 | extern void Blt_DrawTextLayout _ANSI_ARGS_((Tk_Window tkwin, | 
|---|
| 197 | Drawable drawable, TextLayout *textPtr, TextStyle *stylePtr, | 
|---|
| 198 | int x, int y)); | 
|---|
| 199 |  | 
|---|
| 200 | extern void Blt_DrawText2 _ANSI_ARGS_((Tk_Window tkwin, Drawable drawable, | 
|---|
| 201 | char *string, TextStyle *stylePtr, int x, int y, | 
|---|
| 202 | Dim2D * dimPtr)); | 
|---|
| 203 |  | 
|---|
| 204 | extern Pixmap Blt_CreateTextBitmap _ANSI_ARGS_((Tk_Window tkwin, | 
|---|
| 205 | TextLayout *textPtr, TextStyle *stylePtr, int *widthPtr, | 
|---|
| 206 | int *heightPtr)); | 
|---|
| 207 |  | 
|---|
| 208 | extern int Blt_DrawRotatedText _ANSI_ARGS_((Display *display, | 
|---|
| 209 | Drawable drawable, int x, int y, double theta, | 
|---|
| 210 | TextStyle *stylePtr, TextLayout *textPtr)); | 
|---|
| 211 |  | 
|---|
| 212 | #endif /* _BLT_TEXT_H */ | 
|---|