1 # include "drawMetaConfig.h"
2
3 # include <stddef.h>
4
5 # include "drawMetafileImpl.h"
6
7 # include <appDebugon.h>
8
9 # if 0
10 # define WMFDEB(x) (x)
11 # else
12 # define WMFDEB(x) /*nothing*/
13 # endif
14
15 # if 0
16 # define WMFLOG(x) (x)
17 # else
18 # define WMFLOG(x) /*nothing*/
19 # endif
20
appMetaSelectPenObjectImpl(DeviceContext * dc,void * through,LogicalPen * lp)21 int appMetaSelectPenObjectImpl( DeviceContext * dc,
22 void * through,
23 LogicalPen * lp )
24 {
25 /*PrintingState * ps= (PrintingState *)through;*/
26
27 WMFDEB(appDebug( "SelectObject() PEN Width= %d ", lp->lpWidth ));
28
29 WMFLOG(sioOutPrintf( sos, "%% SelectObject() PEN Width= %d ",
30 lp->lpWidth ));
31
32 switch( lp->lpStyle & 0xff )
33 {
34 case PS_SOLID:
35 WMFDEB(appDebug( "SOLID\n" ));
36 WMFLOG(sioOutPrintf( sos, "SOLID\n" ));
37 solid:
38 dc->dcDrawBorders= 1;
39 break;
40
41 case PS_INSIDEFRAME:
42 WMFDEB(appDebug( "INSIDEFRAME\n" ));
43 WMFLOG(sioOutPrintf( sos, "INSIDEFRAME\n" ));
44
45 dc->dcDrawBorders= 1;
46 break;
47
48 case PS_DASH:
49 WMFDEB(appDebug( "DASH\n" ));
50 WMFLOG(sioOutPrintf( sos, "DASH\n" ));
51
52 if ( lp->lpWidth > 1 )
53 { goto solid; }
54
55 dc->dcDrawBorders= 1;
56 break;
57
58 case PS_DOT:
59 WMFDEB(appDebug( "DOT\n" ));
60 WMFLOG(sioOutPrintf( sos, "DOT\n" ));
61
62 if ( lp->lpWidth > 1 )
63 { goto solid; }
64
65 dc->dcDrawBorders= 1;
66 break;
67
68 case PS_DASHDOT:
69 WMFDEB(appDebug( "DASHDOT\n" ));
70 WMFLOG(sioOutPrintf( sos, "DASHDOT\n" ));
71
72 if ( lp->lpWidth > 1 )
73 { goto solid; }
74
75 dc->dcDrawBorders= 1;
76 break;
77
78 case PS_DASHDOTDOT:
79 WMFDEB(appDebug( "DASHDOTDOT\n" ));
80 WMFLOG(sioOutPrintf( sos, "DASHDOTDOT\n" ));
81
82 if ( lp->lpWidth > 1 )
83 { goto solid; }
84
85 dc->dcDrawBorders= 1;
86 break;
87
88 case PS_NULL:
89 WMFDEB(appDebug( "NULL\n" ));
90 WMFLOG(sioOutPrintf( sos, "NULL\n" ));
91 dc->dcDrawBorders= 0;
92 break;
93
94 default:
95 WMFDEB(appDebug( "style= 0x%x\n", lp->lpStyle ));
96 WMFLOG(sioOutPrintf( sos, "style= 0x%x\n", lp->lpStyle ));
97 dc->dcDrawBorders= 0;
98 break;
99 }
100
101 dc->dcPen= *lp;
102
103 return 0;
104 }
105
appMetaSelectBrushObjectImpl(DeviceContext * dc,void * through,LogicalBrush * lb)106 int appMetaSelectBrushObjectImpl( DeviceContext * dc,
107 void * through,
108 LogicalBrush * lb )
109 {
110 WMFDEB(appDebug( "SelectObject() " ));
111 WMFDEB(appDebug( "BRUSH\n" ));
112
113 switch( lb->lbStyle )
114 {
115 case BS_SOLID:
116 dc->dcFillInsides= 1;
117 dc->dcFillHatched= 0;
118 dc->dcFillPattern= 0;
119 break;
120
121 case BS_HOLLOW:
122 dc->dcFillInsides= 0;
123 dc->dcFillHatched= 0;
124 dc->dcFillPattern= 0;
125 break;
126
127 case BS_HATCHED:
128 dc->dcFillInsides= 1;
129 dc->dcFillHatched= 1;
130 dc->dcFillPattern= 0;
131 break;
132
133 case BS_PATTERN:
134 default:
135 dc->dcFillInsides= 1;
136 dc->dcFillHatched= 0;
137 dc->dcFillPattern= 0;
138 LDEB(lb->lbStyle);
139 break;
140 }
141
142 dc->dcBrush= *lb;
143
144 return 0;
145 }
146
appMetaSelectFontObjectImpl(DeviceContext * dc,void * through,LogicalFont * lf)147 int appMetaSelectFontObjectImpl( DeviceContext * dc,
148 void * through,
149 LogicalFont * lf )
150 {
151 DocumentFontList * dfl= &(dc->dcFontList);
152 const MetafilePlayer * player= dc->dcPlayer;
153 const IndexSet * unicodesWanted;
154
155 dc->dcAfi= (*player->mpGetFontForAttribute)( &unicodesWanted,
156 &(lf->lfTextAttribute), dfl, player->mpPostScriptFontList );
157 if ( ! dc->dcAfi )
158 { XDEB(dc->dcAfi); return -1; }
159
160 return 0;
161 }
162
appMetaGetPenWidth(DeviceContext * dc,const LogicalPen * lp)163 int appMetaGetPenWidth( DeviceContext * dc,
164 const LogicalPen * lp )
165 {
166 int widthTwips= appWinMetaOutputSize( dc, lp->lpWidth );
167
168 if ( widthTwips < 10 )
169 { widthTwips = 10; }
170
171 switch( lp->lpStyle & 0xff )
172 {
173 case PS_SOLID:
174 break;
175
176 case PS_INSIDEFRAME:
177 break;
178
179 case PS_DASH:
180 if ( lp->lpWidth > 1 )
181 { break;; }
182
183 widthTwips= 10;
184 break;
185
186 case PS_DOT:
187 if ( lp->lpWidth > 1 )
188 { break; }
189
190 widthTwips= 10;
191 break;
192
193 case PS_DASHDOT:
194 if ( lp->lpWidth > 1 )
195 { break; }
196
197 widthTwips= 10;
198 break;
199
200 case PS_DASHDOTDOT:
201 if ( lp->lpWidth > 1 )
202 { break; }
203
204 widthTwips= 10;
205 break;
206
207 case PS_NULL:
208 widthTwips= 0;
209 break;
210
211 default:
212 WMFDEB(appDebug( "style= 0x%x\n", lp->lpStyle ));
213 break;
214 }
215
216 return widthTwips;
217 }
218
appMetaGetPenDots(DeviceContext * dc,unsigned char dots[6],const LogicalPen * lp)219 int appMetaGetPenDots( DeviceContext * dc,
220 unsigned char dots[6],
221 const LogicalPen * lp )
222 {
223 int outputWidth;
224 int dash;
225 int betdash;
226 int dot;
227 int betdot;
228 int dotCount= 0;
229
230 outputWidth= appWinMetaOutputSize( dc, lp->lpWidth );
231 dot= 2* outputWidth;
232 if ( dot < 20 )
233 { dot= 20; }
234 dash= 6* dot;
235 betdash= 4* dot;
236 betdot= 2* dot;
237
238 switch( lp->lpStyle & 0xff )
239 {
240 case PS_SOLID:
241 break;
242 case PS_INSIDEFRAME:
243 break;
244
245 case PS_DASH:
246 if ( lp->lpWidth > 1 )
247 { break; }
248
249 dots[dotCount++]= dash;
250 dots[dotCount++]= betdash;
251 break;
252
253 case PS_DOT:
254 if ( lp->lpWidth > 1 )
255 { break; }
256
257 dots[dotCount++]= dot;
258 dots[dotCount++]= betdot;
259 break;
260
261 case PS_DASHDOT:
262 if ( lp->lpWidth > 1 )
263 { break; }
264
265 dots[dotCount++]= dash;
266 dots[dotCount++]= betdot;
267 dots[dotCount++]= dot;
268 dots[dotCount++]= betdot;
269 break;
270
271 case PS_DASHDOTDOT:
272 if ( lp->lpWidth > 1 )
273 { break; }
274
275 dots[dotCount++]= dash;
276 dots[dotCount++]= betdot;
277 dots[dotCount++]= dot;
278 dots[dotCount++]= betdot;
279 dots[dotCount++]= dot;
280 dots[dotCount++]= betdot;
281 break;
282
283 case PS_NULL:
284 break;
285
286 default:
287 WMFDEB(appDebug( "style= 0x%x\n", lp->lpStyle ));
288 break;
289 }
290
291 return dotCount;
292 }
293
294