|
|
1.1 root 1: /*******************************************************************
2: Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts,
3: and the Massachusetts Institute of Technology, Cambridge, Massachusetts.
4:
5: All Rights Reserved
6:
7: Permission to use, copy, modify, and distribute this software and its
8: documentation for any purpose and without fee is hereby granted,
9: provided that the above copyright notice appear in all copies and that
10: both that copyright notice and this permission notice appear in
11: supporting documentation, and that the names of Digital or MIT not be
12: used in advertising or publicity pertaining to distribution of the
13: software without specific, written prior permission.
14:
15: DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
16: ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
17: DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
18: ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
19: WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
20: ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
21: SOFTWARE.
22:
23: ************************************************************************/
24: /* $Header: mipolytext.c,v 1.11 87/09/11 07:20:25 toddb Exp $ */
25: /*
26: * mipolytext.c - text routines
27: *
28: * Author: haynes
29: * Digital Equipment Corporation
30: * Western Software Laboratory
31: * Date: Thu Feb 5 1987
32: */
33:
34: #include "X.h"
35: #include "Xmd.h"
36: #include "Xproto.h"
37: #include "fontstruct.h"
38: #include "dixfontstr.h"
39: #include "gcstruct.h"
40:
41: static unsigned int
42: miWidth(n, charinfo)
43: CharInfoPtr charinfo[];
44: unsigned int n;
45: {
46: unsigned int i;
47: unsigned int w = 0;
48:
49: for (i=0; i < n; i++) w += charinfo[i]->metrics.characterWidth;
50:
51: return w;
52: }
53:
54:
55: static int
56: miPolyText(pDraw, pGC, x, y, count, chars, fontEncoding)
57: DrawablePtr pDraw;
58: GCPtr pGC;
59: int x, y;
60: int count;
61: char *chars;
62: FontEncoding fontEncoding;
63: {
64: CharInfoPtr *charinfo;
65: unsigned int n, w;
66:
67: if(!(charinfo = (CharInfoPtr *)ALLOCATE_LOCAL(count*sizeof(CharInfoPtr ))))
68: return x ;
69: GetGlyphs(pGC->font, count, chars, fontEncoding, &n, charinfo);
70: w = miWidth(n, charinfo);
71: if (n != 0)
72: (*pGC->PolyGlyphBlt)(
73: pDraw, pGC, x, y, n, charinfo, pGC->font->pGlyphs);
74:
75: DEALLOCATE_LOCAL(charinfo);
76: return x+w;
77: }
78:
79:
80: int
81: miPolyText8(pDraw, pGC, x, y, count, chars)
82: DrawablePtr pDraw;
83: GCPtr pGC;
84: int x, y;
85: int count;
86: char *chars;
87: {
88: return miPolyText(pDraw, pGC, x, y, count, chars, Linear8Bit);
89: }
90:
91:
92: int
93: miPolyText16(pDraw, pGC, x, y, count, chars)
94: DrawablePtr pDraw;
95: GCPtr pGC;
96: int x, y;
97: int count;
98: unsigned short *chars;
99: {
100: if (pGC->font->pFI->lastRow == 0)
101: return miPolyText(pDraw, pGC, x, y, count, (char *)chars, Linear16Bit);
102: else
103: return miPolyText(pDraw, pGC, x, y, count, (char *)chars, TwoD16Bit);
104: }
105:
106:
107: static int
108: miImageText(pDraw, pGC, x, y, count, chars, fontEncoding)
109: DrawablePtr pDraw;
110: GCPtr pGC;
111: int x, y;
112: int count;
113: char *chars;
114: FontEncoding fontEncoding;
115: {
116: CharInfoPtr *charinfo;
117: unsigned int n;
118: FontPtr font = pGC->font;
119: unsigned int w;
120:
121: if(!(charinfo = (CharInfoPtr *)ALLOCATE_LOCAL(count*sizeof(CharInfoPtr))))
122: return x;
123: GetGlyphs(font, count, chars, fontEncoding, &n, charinfo);
124: w = miWidth(n, charinfo);
125: if (n !=0 )
126: (*pGC->ImageGlyphBlt)(pDraw, pGC, x, y, n, charinfo, font->pGlyphs);
127: DEALLOCATE_LOCAL(charinfo);
128: return x+w;
129: }
130:
131:
132: void
133: miImageText8(pDraw, pGC, x, y, count, chars)
134: DrawablePtr pDraw;
135: GCPtr pGC;
136: int x, y;
137: int count;
138: char *chars;
139: {
140: miImageText(pDraw, pGC, x, y, count, chars, Linear8Bit);
141: }
142:
143:
144: void
145: miImageText16(pDraw, pGC, x, y, count, chars)
146: DrawablePtr pDraw;
147: GCPtr pGC;
148: int x, y;
149: int count;
150: unsigned short *chars;
151: {
152: if (pGC->font->pFI->lastRow == 0)
153: miImageText(pDraw, pGC, x, y, count, (char *)chars, Linear16Bit);
154: else
155: miImageText(pDraw, pGC, x, y, count, (char *)chars, TwoD16Bit);
156: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.