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 int rotated; 125 } TextLayout; 126 127 typedef struct { 128 XColor *color; 129 int offset; 130 } Shadow; 131 132 /* 133 * ---------------------------------------------------------------------- 134 * 135 * TextStyle -- 136 * 137 * Represents a convenient structure to hold text attributes 138 * which determine how a text string is to be displayed on the 139 * window, or drawn with PostScript commands. The alternative 140 * is to pass lots of parameters to the drawing and printing 141 * routines. This seems like a more efficient and less cumbersome 142 * way of passing parameters. 143 * 144 * ---------------------------------------------------------------------- 145 */ 146 typedef struct { 147 unsigned int state; /* If non-zero, indicates to draw text 148 * in the active color */ 149 short int width, height; /* Extents of text */ 150 151 XColor *color; /* Normal color */ 152 XColor *activeColor; /* Active color */ 153 Tk_Font font; /* Font to use to draw text */ 154 Tk_3DBorder border; /* Background color of text. This is also 155 * used for drawing disabled text. */ 156 Shadow shadow; /* Drop shadow color and offset */ 157 Tk_Justify justify; /* Justification of the text string. This 158 * only matters if the text is composed 159 * of multiple lines. */ 160 GC gc; /* GC used to draw the text */ 161 double theta; /* Rotation of text in degrees. */ 162 Tk_Anchor anchor; /* Indicates how the text is anchored around 163 * its x and y coordinates. */ 164 Blt_Pad padX, padY; /* # pixels padding of around text region */ 165 short int leader; /* # pixels spacing between lines of text */ 166 int underline; /* Character to underline. */ 167 168 } TextStyle; 169 170 171 typedef struct { 172 XColor *color; 173 XColor *color2; 174 int width; 175 XColor **grads; /* Generated list of colors. */ 176 XColor *origColor; /* Saved copy to detect if changed.*/ 177 XColor *origColor2; 178 int origWidth; 179 } Gradient; 180 181 182 extern TextLayout *Blt_GetTextLayout _ANSI_ARGS_((char *string, 183 TextStyle *stylePtr)); 184 extern TextLayout *Blt_GetTextLayoutStr _ANSI_ARGS_((char *string, 185 TextStyle *stylePtr)); 186 187 extern void Blt_GetTextExtents _ANSI_ARGS_((TextStyle *stylePtr, 188 char *text, int *widthPtr, int *heightPtr)); 189 190 extern void Blt_InitTextStyle _ANSI_ARGS_((TextStyle *stylePtr)); 191 192 extern void Blt_ResetTextStyle _ANSI_ARGS_((Tk_Window tkwin, 193 TextStyle *stylePtr)); 194 195 extern void Blt_FreeTextStyle _ANSI_ARGS_((Display *display, 196 TextStyle *stylePtr)); 197 198 extern void Blt_SetDrawTextStyle _ANSI_ARGS_((TextStyle *stylePtr, 199 Tk_Font font, GC gc, XColor *normalColor, XColor *activeColor, 200 XColor *shadowColor, double theta, Tk_Anchor anchor, Tk_Justify justify, 201 int leader, int shadowOffset)); 202 203 extern void Blt_SetPrintTextStyle _ANSI_ARGS_((TextStyle *stylePtr, 204 Tk_Font font, XColor *fgColor, XColor *bgColor, XColor *shadowColor, 205 double theta, Tk_Anchor anchor, Tk_Justify justify, int leader, 206 int shadowOffset)); 207 208 extern void Blt_DrawText _ANSI_ARGS_((Tk_Window tkwin, Drawable drawable, 209 char *string, TextStyle *stylePtr, int x, int y)); 210 211 extern void Blt_DrawTextLayout _ANSI_ARGS_((Tk_Window tkwin, 212 Drawable drawable, TextLayout *textPtr, TextStyle *stylePtr, 213 int x, int y)); 214 215 extern int Blt_TextLayoutValue _ANSI_ARGS_(( TextLayout *textPtr, Tcl_DString *dStr)); 216 217 extern void Blt_DrawText2 _ANSI_ARGS_((Tk_Window tkwin, Drawable drawable, 218 char *string, TextStyle *stylePtr, int x, int y, 219 Dim2D * dimPtr)); 220 221 extern Pixmap Blt_CreateTextBitmap _ANSI_ARGS_((Tk_Window tkwin, 222 TextLayout *textPtr, TextStyle *stylePtr, int *widthPtr, 223 int *heightPtr)); 224 225 extern int Blt_DrawRotatedText _ANSI_ARGS_((Display *display, 226 Drawable drawable, int x, int y, double theta, 227 TextStyle *stylePtr, TextLayout *textPtr)); 228 229 extern void Blt_DeleteAxisLabelsGC _ANSI_ARGS_((Tk_Window tkwin)); 230 231 extern int Blt_GetGradient(Tcl_Interp *interp, Tk_Window tkwin, Gradient *gradPtr); 232 233 extern int Blt_FreeGradient(Gradient *gradPtr); 234 235 236 #endif /* _BLT_TEXT_H */ 237