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