Line data Source code
1 : /* Copyright (C) 2000-2012 by George Williams */
2 : /*
3 : * Redistribution and use in source and binary forms, with or without
4 : * modification, are permitted provided that the following conditions are met:
5 :
6 : * Redistributions of source code must retain the above copyright notice, this
7 : * list of conditions and the following disclaimer.
8 :
9 : * Redistributions in binary form must reproduce the above copyright notice,
10 : * this list of conditions and the following disclaimer in the documentation
11 : * and/or other materials provided with the distribution.
12 :
13 : * The name of the author may not be used to endorse or promote products
14 : * derived from this software without specific prior written permission.
15 :
16 : * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
17 : * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
18 : * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
19 : * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
20 : * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
21 : * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
22 : * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
23 : * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
24 : * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
25 : * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 : */
27 : #include "fontforgeui.h"
28 : #include "gwidget.h"
29 : #include "splinefill.h"
30 : #include "ustring.h"
31 : #include <gkeysym.h>
32 : #include <math.h>
33 : #include "bitmapcontrol.h"
34 :
35 : typedef struct createbitmapdlg {
36 : CreateBitmapData bd;
37 : GWindow gw;
38 : } CreateBitmapDlg;
39 :
40 : static int oldusefreetype=1;
41 : int oldsystem=0 /* X11 */;
42 :
43 : static GTextInfo which[] = {
44 : { (unichar_t *) N_("All Glyphs"), NULL, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 1, 1, 0, '\0' },
45 : { (unichar_t *) N_("Selected Glyphs"), NULL, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 1, 1, 0, '\0' },
46 : { (unichar_t *) N_("Current Glyph"), NULL, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 1, 1, 0, '\0' },
47 : GTEXTINFO_EMPTY
48 : };
49 :
50 : #define CID_Which 1001
51 : #define CID_Pixel 1002
52 : #define CID_75 1003
53 : #define CID_100 1004
54 : #define CID_75Lab 1005
55 : #define CID_100Lab 1006
56 : #define CID_X 1007
57 : #define CID_Win 1008
58 : #define CID_Mac 1009
59 : #define CID_FreeType 1010
60 : #define CID_RasterizedStrikes 1011
61 :
62 0 : static int GetSystem(GWindow gw) {
63 0 : if ( GGadgetIsChecked(GWidgetGetControl(gw,CID_X)) )
64 0 : return( CID_X );
65 0 : if ( GGadgetIsChecked(GWidgetGetControl(gw,CID_Win)) )
66 0 : return( CID_Win );
67 :
68 0 : return( CID_Mac );
69 : }
70 :
71 0 : static int32 *ParseList(GWindow gw, int cid,int *err, int final) {
72 0 : const unichar_t *val = _GGadgetGetTitle(GWidgetGetControl(gw,cid)), *pt;
73 : unichar_t *end, *end2;
74 : int i;
75 : real *sizes;
76 : int32 *ret;
77 0 : int system = GetSystem(gw);
78 : int scale;
79 :
80 0 : *err = false;
81 0 : end2 = NULL;
82 0 : for ( i=1, pt = val; (end = u_strchr(pt,',')) || (end2=u_strchr(pt,' ')); ++i ) {
83 0 : if ( end!=NULL && end2!=NULL ) {
84 0 : if ( end2<end ) end = end2;
85 0 : } else if ( end2!=NULL )
86 0 : end = end2;
87 0 : pt = end+1;
88 0 : end2 = NULL;
89 : }
90 0 : sizes = malloc((i+1)*sizeof(real));
91 0 : ret = malloc((i+1)*sizeof(int32));
92 :
93 0 : for ( i=0, pt = val; *pt!='\0' ; ) {
94 0 : sizes[i]=u_strtod(pt,&end);
95 0 : if ( *end=='@' )
96 0 : ret[i] = (u_strtol(end+1,&end,10)<<16);
97 : else
98 0 : ret[i] = 0x10000;
99 0 : if ( sizes[i]>0 ) ++i;
100 0 : if ( *end!=' ' && *end!=',' && *end!='\0' ) {
101 0 : free(sizes); free(ret);
102 0 : if ( final )
103 0 : GGadgetProtest8(_("Pixel Sizes:"));
104 0 : *err = true;
105 0 : return( NULL );
106 : }
107 0 : while ( *end==' ' || *end==',' ) ++end;
108 0 : pt = end;
109 : }
110 0 : sizes[i] = 0; ret[i] = 0;
111 :
112 0 : if ( cid==CID_75 ) {
113 0 : scale = system==CID_X?75:system==CID_Win?96:72;
114 0 : for ( i=0; sizes[i]!=0; ++i )
115 0 : ret[i] |= (int) rint(sizes[i]*scale/72);
116 0 : } else if ( cid==CID_100 ) {
117 0 : scale = system==CID_X?100:system==CID_Win?120:100;
118 0 : for ( i=0; sizes[i]!=0; ++i )
119 0 : ret[i] |= (int) rint(sizes[i]*scale/72);
120 : } else
121 0 : for ( i=0; sizes[i]!=0; ++i )
122 0 : ret[i] |= (int) rint(sizes[i]);
123 0 : free(sizes);
124 0 : return( ret );
125 : }
126 :
127 0 : static int CB_OK(GGadget *g, GEvent *e) {
128 0 : if ( e->type==et_controlevent && e->u.control.subtype == et_buttonactivate ) {
129 : int err;
130 0 : GWindow gw = GGadgetGetWindow(g);
131 0 : CreateBitmapData *bd = GDrawGetUserData(gw);
132 0 : int32 *sizes = ParseList(gw, CID_Pixel,&err, true);
133 0 : if ( err )
134 0 : return( true );
135 0 : oldusefreetype = GGadgetIsChecked(GWidgetGetControl(gw,CID_FreeType));
136 0 : oldsystem = GetSystem(gw)-CID_X;
137 0 : bd->rasterize = true;
138 0 : if ( bd->isavail<true )
139 0 : bd->which = GGadgetGetFirstListSelectedItem(GWidgetGetControl(gw,CID_Which));
140 0 : if ( bd->isavail==1 )
141 0 : bd->rasterize = GGadgetIsChecked(GWidgetGetControl(gw,CID_RasterizedStrikes));
142 0 : BitmapsDoIt(bd,sizes,oldusefreetype);
143 0 : free(sizes);
144 0 : SavePrefs(true);
145 : }
146 0 : return( true );
147 : }
148 :
149 0 : static int CB_Cancel(GGadget *g, GEvent *e) {
150 0 : if ( e->type==et_controlevent && e->u.control.subtype == et_buttonactivate ) {
151 0 : CreateBitmapData *bd = GDrawGetUserData(GGadgetGetWindow(g));
152 0 : bd->done = true;
153 : }
154 0 : return( true );
155 : }
156 :
157 0 : static unichar_t *GenText(int32 *sizes,real scale) {
158 : int i;
159 : char *cret, *pt;
160 : unichar_t *uret;
161 :
162 0 : for ( i=0; sizes[i]!=0; ++i );
163 0 : pt = cret = malloc(i*10+1);
164 0 : for ( i=0; sizes[i]!=0; ++i ) {
165 0 : if ( pt!=cret ) *pt++ = ',';
166 0 : sprintf(pt,"%.1f",(double) ((sizes[i]&0xffff)*scale) );
167 0 : pt += strlen(pt);
168 0 : if ( pt[-1]=='0' && pt[-2]=='.' ) {
169 0 : pt -= 2;
170 0 : *pt = '\0';
171 : }
172 0 : if ( (sizes[i]>>16)!=1 ) {
173 0 : sprintf(pt,"@%d", (int) (sizes[i]>>16) );
174 0 : pt += strlen(pt);
175 : }
176 : }
177 0 : *pt = '\0';
178 0 : uret = uc_copy(cret);
179 0 : free(cret);
180 0 : return( uret );
181 : }
182 :
183 0 : static void _CB_TextChange(CreateBitmapData *bd, GGadget *g) {
184 0 : int cid = (int) GGadgetGetCid(g);
185 : unichar_t *val;
186 0 : int err=false;
187 0 : int32 *sizes = ParseList(((CreateBitmapDlg *) bd)->gw,cid,&err,false);
188 : int ncid;
189 0 : int system = GetSystem(((CreateBitmapDlg *) bd)->gw);
190 : int scale;
191 :
192 0 : if ( err )
193 0 : return;
194 0 : for ( ncid=CID_Pixel; ncid<=CID_100; ++ncid ) if ( ncid!=cid ) {
195 0 : if ( ncid==CID_Pixel )
196 0 : scale = 72;
197 0 : else if ( ncid==CID_75 )
198 0 : scale = system==CID_X?75: system==CID_Win?96 : 72;
199 : else
200 0 : scale = system==CID_X?100: system==CID_Win?120 : 100;
201 0 : val = GenText(sizes,72./scale);
202 0 : GGadgetSetTitle(GWidgetGetControl(((CreateBitmapDlg *) bd)->gw,ncid),val);
203 0 : free(val);
204 : }
205 0 : free(sizes);
206 0 : return;
207 : }
208 :
209 0 : static int CB_TextChange(GGadget *g, GEvent *e) {
210 0 : if ( e->type==et_controlevent && e->u.control.subtype == et_textchanged ) {
211 0 : CreateBitmapData *bd = GDrawGetUserData(GGadgetGetWindow(g));
212 0 : _CB_TextChange(bd,g);
213 : }
214 0 : return( true );
215 : }
216 :
217 0 : static void _CB_SystemChange(CreateBitmapData *bd) {
218 0 : GWindow gw = ((CreateBitmapDlg *) bd)->gw;
219 0 : int system = GetSystem(gw);
220 0 : GGadgetSetTitle8(GWidgetGetControl(gw,CID_75Lab),
221 : system==CID_X?_("Point sizes on a 75 dpi screen"):
222 : system==CID_Win?_("Point sizes on a 96 dpi screen"):
223 : _("Point sizes on a 72 dpi screen"));
224 0 : GGadgetSetTitle8(GWidgetGetControl(gw,CID_100Lab),
225 : system==CID_Win?_("Point sizes on a 120 dpi screen"):
226 : _("Point sizes on a 100 dpi screen"));
227 0 : GGadgetSetEnabled(GWidgetGetControl(gw,CID_100Lab),system!=CID_Mac);
228 0 : GGadgetSetEnabled(GWidgetGetControl(gw,CID_100),system!=CID_Mac);
229 0 : _CB_TextChange(bd,GWidgetGetControl(gw,CID_Pixel));
230 0 : }
231 :
232 0 : static int CB_SystemChange(GGadget *g, GEvent *e) {
233 0 : if ( e->type==et_controlevent && e->u.control.subtype == et_radiochanged ) {
234 0 : CreateBitmapData *bd = GDrawGetUserData(GGadgetGetWindow(g));
235 0 : _CB_SystemChange(bd);
236 : }
237 0 : return( true );
238 : }
239 :
240 0 : static int bd_e_h(GWindow gw, GEvent *event) {
241 0 : if ( event->type==et_close ) {
242 0 : CreateBitmapData *bd = GDrawGetUserData(gw);
243 0 : bd->done = true;
244 0 : } else if ( event->type == et_char ) {
245 0 : if ( event->u.chr.keysym == GK_F1 || event->u.chr.keysym == GK_Help ) {
246 0 : help("elementmenu.html#Bitmaps");
247 0 : return( true );
248 : }
249 0 : return( false );
250 0 : } else if ( event->type == et_map ) {
251 : /* Above palettes */
252 0 : GDrawRaise(gw);
253 : }
254 0 : return( true );
255 : }
256 :
257 0 : void BitmapDlg(FontView *fv,SplineChar *sc, int isavail) {
258 : GRect pos;
259 : GWindowAttrs wattrs;
260 : GGadgetCreateData gcd[18], boxes[8], *varray[32], *harray[6][7];
261 : GTextInfo label[18];
262 : CreateBitmapDlg bd;
263 : int i,j,k,y;
264 : int32 *sizes;
265 : BDFFont *bdf;
266 : static int done= false;
267 :
268 0 : if ( !done ) {
269 0 : for ( i=0; which[i].text!=NULL; ++i )
270 0 : which[i].text = (unichar_t *) _((char *) which[i].text);
271 0 : done = true;
272 : }
273 :
274 0 : bd.bd.fv = (FontViewBase *) fv;
275 0 : bd.bd.sc = sc;
276 0 : bd.bd.layer = fv!=NULL ? fv->b.active_layer : ly_fore;
277 0 : bd.bd.sf = fv->b.cidmaster ? fv->b.cidmaster : fv->b.sf;
278 0 : bd.bd.isavail = isavail;
279 0 : bd.bd.done = false;
280 :
281 0 : for ( bdf=bd.bd.sf->bitmaps, i=0; bdf!=NULL; bdf=bdf->next, ++i );
282 : /*
283 : if ( i==0 && isavail )
284 : i = 2;
285 : */
286 0 : sizes = malloc((i+1)*sizeof(int32));
287 0 : for ( bdf=bd.bd.sf->bitmaps, i=0; bdf!=NULL; bdf=bdf->next, ++i )
288 0 : sizes[i] = bdf->pixelsize | (BDFDepth(bdf)<<16);
289 : /*
290 : if ( i==0 && isavail ) {
291 : sizes[i++] = 12.5;
292 : sizes[i++] = 17;
293 : }
294 : */
295 0 : sizes[i] = 0;
296 :
297 0 : memset(&wattrs,0,sizeof(wattrs));
298 0 : wattrs.mask = wam_events|wam_cursor|wam_utf8_wtitle|wam_undercursor|wam_isdlg|wam_restrict;
299 0 : wattrs.event_masks = ~(1<<et_charup);
300 0 : wattrs.restrict_input_to_me = 1;
301 0 : wattrs.undercursor = 1;
302 0 : wattrs.cursor = ct_pointer;
303 0 : wattrs.utf8_window_title = isavail==1 ? _("Bitmap Strikes Available") :
304 : isavail==0 ? _("Regenerate Bitmap Glyphs") :
305 : _("Remove Bitmap Glyphs");
306 0 : wattrs.is_dlg = true;
307 0 : pos.x = pos.y = 0;
308 0 : pos.width = GGadgetScale(GDrawPointsToPixels(NULL,190));
309 0 : pos.height = GDrawPointsToPixels(NULL,252);
310 0 : bd.gw = GDrawCreateTopWindow(NULL,&pos,bd_e_h,&bd,&wattrs);
311 :
312 0 : memset(&label,0,sizeof(label));
313 0 : memset(&gcd,0,sizeof(gcd));
314 0 : memset(&boxes,0,sizeof(boxes));
315 :
316 0 : k=0;
317 0 : if ( isavail==1 ) {
318 0 : label[0].text = (unichar_t *) _("The list of current pixel bitmap sizes");
319 0 : label[0].text_is_1byte = true;
320 0 : gcd[0].gd.label = &label[0];
321 0 : gcd[0].gd.pos.x = 5; gcd[0].gd.pos.y = 5;
322 0 : gcd[0].gd.flags = gg_enabled|gg_visible|gg_cb_on;
323 0 : gcd[0].creator = GLabelCreate;
324 0 : varray[k++] = &gcd[0]; varray[k++] = NULL;
325 :
326 0 : label[1].text = (unichar_t *) _(" Removing a size will delete it.");
327 0 : label[1].text_is_1byte = true;
328 0 : gcd[1].gd.label = &label[1];
329 0 : gcd[1].gd.pos.x = 5; gcd[1].gd.pos.y = 5+13;
330 0 : gcd[1].gd.flags = gg_enabled|gg_visible;
331 0 : gcd[1].creator = GLabelCreate;
332 0 : varray[k++] = &gcd[1]; varray[k++] = NULL;
333 :
334 0 : if ( bd.bd.sf->onlybitmaps && bd.bd.sf->bitmaps!=NULL )
335 0 : label[2].text = (unichar_t *) _(" Adding a size will create it by scaling.");
336 : else
337 0 : label[2].text = (unichar_t *) _(" Adding a size will create it.");
338 0 : label[2].text_is_1byte = true;
339 0 : gcd[2].gd.label = &label[2];
340 0 : gcd[2].gd.pos.x = 5; gcd[2].gd.pos.y = 5+26;
341 0 : gcd[2].gd.flags = gg_enabled|gg_visible;
342 0 : gcd[2].creator = GLabelCreate;
343 0 : varray[k++] = &gcd[2]; varray[k++] = NULL;
344 0 : j = 3; y = 5+39+3;
345 : } else {
346 0 : if ( isavail==0 )
347 0 : label[0].text = (unichar_t *) _("Specify bitmap sizes to be regenerated");
348 : else
349 0 : label[0].text = (unichar_t *) _("Specify bitmap sizes to be removed");
350 0 : label[0].text_is_1byte = true;
351 0 : gcd[0].gd.label = &label[0];
352 0 : gcd[0].gd.pos.x = 5; gcd[0].gd.pos.y = 5;
353 0 : gcd[0].gd.flags = gg_enabled|gg_visible|gg_cb_on;
354 0 : gcd[0].creator = GLabelCreate;
355 0 : varray[k++] = &gcd[0]; varray[k++] = NULL;
356 :
357 0 : if ( bdfcontrol_lastwhich==bd_current && sc==NULL )
358 0 : bdfcontrol_lastwhich = bd_selected;
359 0 : gcd[1].gd.label = &which[bdfcontrol_lastwhich];
360 0 : gcd[1].gd.u.list = which;
361 0 : gcd[1].gd.pos.x = 5; gcd[1].gd.pos.y = 5+13;
362 0 : gcd[1].gd.flags = gg_enabled|gg_visible;
363 0 : gcd[1].gd.cid = CID_Which;
364 0 : gcd[1].creator = GListButtonCreate;
365 0 : which[bd_current].disabled = sc==NULL;
366 0 : which[bdfcontrol_lastwhich].selected = true;
367 0 : harray[0][0] = &gcd[1]; harray[0][1] = GCD_Glue; harray[0][2] = NULL;
368 :
369 0 : boxes[2].gd.flags = gg_enabled|gg_visible;
370 0 : boxes[2].gd.u.boxelements = harray[0];
371 0 : boxes[2].creator = GHBoxCreate;
372 0 : varray[k++] = &boxes[2]; varray[k++] = NULL;
373 :
374 0 : j=2; y = 5+13+28;
375 : }
376 :
377 0 : label[j].text = (unichar_t *) _("X");
378 0 : label[j].text_is_1byte = true;
379 0 : gcd[j].gd.label = &label[j];
380 0 : gcd[j].gd.pos.x = 10; gcd[j].gd.pos.y = y;
381 0 : gcd[j].gd.flags = gg_enabled|gg_visible;
382 0 : gcd[j].gd.cid = CID_X;
383 0 : gcd[j].gd.handle_controlevent = CB_SystemChange;
384 0 : gcd[j++].creator = GRadioCreate;
385 0 : harray[1][0] = &gcd[j-1];
386 :
387 0 : label[j].text = (unichar_t *) _("Win");
388 0 : label[j].text_is_1byte = true;
389 0 : gcd[j].gd.label = &label[j];
390 0 : gcd[j].gd.pos.x = 50; gcd[j].gd.pos.y = y;
391 0 : gcd[j].gd.flags = gg_enabled|gg_visible;
392 0 : gcd[j].gd.cid = CID_Win;
393 0 : gcd[j].gd.handle_controlevent = CB_SystemChange;
394 0 : gcd[j++].creator = GRadioCreate;
395 0 : harray[1][1] = &gcd[j-1];
396 :
397 0 : label[j].text = (unichar_t *) _("Mac");
398 0 : label[j].text_is_1byte = true;
399 0 : gcd[j].gd.label = &label[j];
400 0 : gcd[j].gd.pos.x = 90; gcd[j].gd.pos.y = y;
401 0 : gcd[j].gd.flags = gg_enabled|gg_visible;
402 0 : gcd[j].gd.cid = CID_Mac;
403 0 : gcd[j].gd.handle_controlevent = CB_SystemChange;
404 0 : gcd[j++].creator = GRadioCreate;
405 0 : y += 26;
406 0 : gcd[j-3+oldsystem].gd.flags |= gg_cb_on;
407 0 : harray[1][2] = &gcd[j-1]; harray[1][3] = GCD_Glue; harray[1][4] = NULL;
408 :
409 0 : boxes[3].gd.flags = gg_enabled|gg_visible;
410 0 : boxes[3].gd.u.boxelements = harray[1];
411 0 : boxes[3].creator = GHBoxCreate;
412 0 : varray[k++] = &boxes[3]; varray[k++] = NULL;
413 0 : varray[k++] = GCD_Glue; varray[k++] = NULL;
414 :
415 0 : label[j].text = (unichar_t *) _("Point sizes on a 75 dpi screen");
416 0 : label[j].text_is_1byte = true;
417 0 : gcd[j].gd.label = &label[j];
418 0 : gcd[j].gd.pos.x = 5; gcd[j].gd.pos.y = y;
419 0 : gcd[j].gd.flags = gg_enabled|gg_visible;
420 0 : gcd[j].gd.cid = CID_75Lab;
421 0 : gcd[j++].creator = GLabelCreate;
422 0 : varray[k++] = &gcd[j-1]; varray[k++] = NULL;
423 0 : y += 13;
424 :
425 0 : label[j].text = GenText(sizes,oldsystem==0?72./75.:oldsystem==1?72/96.:1.);
426 0 : gcd[j].gd.label = &label[j];
427 0 : gcd[j].gd.pos.x = 15; gcd[j].gd.pos.y = y;
428 0 : gcd[j].gd.pos.width = 170;
429 0 : gcd[j].gd.flags = gg_enabled|gg_visible;
430 0 : gcd[j].gd.cid = CID_75;
431 0 : gcd[j].gd.handle_controlevent = CB_TextChange;
432 0 : gcd[j++].creator = GTextFieldCreate;
433 0 : y += 26;
434 0 : harray[2][0] = GCD_HPad10; harray[2][1] = &gcd[j-1]; harray[2][2] = NULL;
435 :
436 0 : boxes[4].gd.flags = gg_enabled|gg_visible;
437 0 : boxes[4].gd.u.boxelements = harray[2];
438 0 : boxes[4].creator = GHBoxCreate;
439 0 : varray[k++] = &boxes[4]; varray[k++] = NULL;
440 :
441 0 : label[j].text = (unichar_t *) _("Point sizes on a 100 dpi screen");
442 0 : label[j].text_is_1byte = true;
443 0 : gcd[j].gd.label = &label[j];
444 0 : gcd[j].gd.pos.x = 5; gcd[j].gd.pos.y = y;
445 0 : gcd[j].gd.flags = gg_enabled|gg_visible;
446 0 : gcd[j].gd.cid = CID_100Lab;
447 0 : gcd[j++].creator = GLabelCreate;
448 0 : y += 13;
449 0 : varray[k++] = &gcd[j-1]; varray[k++] = NULL;
450 :
451 0 : label[j].text = GenText(sizes,oldsystem==1?72./120.:72/100.);
452 0 : gcd[j].gd.label = &label[j];
453 0 : gcd[j].gd.pos.x = 15; gcd[j].gd.pos.y = y;
454 0 : gcd[j].gd.pos.width = 170;
455 0 : gcd[j].gd.flags = gg_enabled|gg_visible;
456 0 : if ( oldsystem==2 )
457 0 : gcd[j].gd.flags = gg_visible;
458 0 : gcd[j].gd.cid = CID_100;
459 0 : gcd[j].gd.handle_controlevent = CB_TextChange;
460 0 : gcd[j++].creator = GTextFieldCreate;
461 0 : y += 26;
462 0 : harray[3][0] = GCD_HPad10; harray[3][1] = &gcd[j-1]; harray[3][2] = NULL;
463 :
464 0 : boxes[5].gd.flags = gg_enabled|gg_visible;
465 0 : boxes[5].gd.u.boxelements = harray[3];
466 0 : boxes[5].creator = GHBoxCreate;
467 0 : varray[k++] = &boxes[5]; varray[k++] = NULL;
468 :
469 0 : label[j].text = (unichar_t *) _("Pixel Sizes:");
470 0 : label[j].text_is_1byte = true;
471 0 : gcd[j].gd.label = &label[j];
472 0 : gcd[j].gd.pos.x = 5; gcd[j].gd.pos.y = y;
473 0 : gcd[j].gd.flags = gg_enabled|gg_visible;
474 0 : gcd[j++].creator = GLabelCreate;
475 0 : y += 13;
476 0 : varray[k++] = &gcd[j-1]; varray[k++] = NULL;
477 :
478 0 : label[j].text = GenText(sizes,1.);
479 0 : gcd[j].gd.label = &label[j];
480 0 : gcd[j].gd.pos.x = 15; gcd[j].gd.pos.y = y;
481 0 : gcd[j].gd.pos.width = 170;
482 0 : gcd[j].gd.flags = gg_enabled|gg_visible|gg_cb_on;
483 0 : gcd[j].gd.cid = CID_Pixel;
484 0 : gcd[j].gd.handle_controlevent = CB_TextChange;
485 0 : gcd[j++].creator = GTextFieldCreate;
486 0 : y += 26;
487 0 : harray[4][0] = GCD_HPad10; harray[4][1] = &gcd[j-1]; harray[4][2] = NULL;
488 :
489 0 : boxes[6].gd.flags = gg_enabled|gg_visible;
490 0 : boxes[6].gd.u.boxelements = harray[4];
491 0 : boxes[6].creator = GHBoxCreate;
492 0 : varray[k++] = &boxes[6]; varray[k++] = NULL;
493 :
494 0 : label[j].text = (unichar_t *) _("Use FreeType");
495 0 : label[j].text_is_1byte = true;
496 0 : gcd[j].gd.label = &label[j];
497 0 : gcd[j].gd.pos.x = 10; gcd[j].gd.pos.y = y;
498 0 : if ( !hasFreeType() || bd.bd.sf->onlybitmaps)
499 0 : gcd[j].gd.flags = gg_visible;
500 0 : else if ( oldusefreetype )
501 0 : gcd[j].gd.flags = gg_enabled|gg_visible|gg_cb_on;
502 : else
503 0 : gcd[j].gd.flags = gg_enabled|gg_visible;
504 0 : gcd[j].gd.cid = CID_FreeType;
505 0 : gcd[j].gd.handle_controlevent = CB_SystemChange;
506 0 : gcd[j++].creator = GCheckBoxCreate;
507 0 : y += 26;
508 0 : varray[k++] = &gcd[j-1]; varray[k++] = NULL;
509 :
510 0 : if ( isavail==1 ) {
511 0 : label[j].text = (unichar_t *) _("Create Rasterized Strikes (Not empty ones)");
512 0 : label[j].text_is_1byte = true;
513 0 : gcd[j].gd.label = &label[j];
514 0 : gcd[j].gd.pos.x = 10; gcd[j].gd.pos.y = y;
515 0 : gcd[j].gd.flags = gg_enabled|gg_visible|gg_cb_on;
516 0 : gcd[j].gd.cid = CID_RasterizedStrikes;
517 0 : gcd[j++].creator = GCheckBoxCreate;
518 0 : y += 26;
519 0 : varray[k++] = &gcd[j-1]; varray[k++] = NULL;
520 : }
521 0 : varray[k++] = GCD_Glue; varray[k++] = NULL;
522 :
523 0 : gcd[j].gd.pos.x = 20-3; gcd[j].gd.pos.y = 252-32-3;
524 0 : gcd[j].gd.pos.width = -1; gcd[j].gd.pos.height = 0;
525 0 : gcd[j].gd.flags = gg_visible | gg_enabled | gg_but_default;
526 0 : label[j].text = (unichar_t *) _("_OK");
527 0 : label[j].text_is_1byte = true;
528 0 : label[j].text_in_resource = true;
529 0 : gcd[j].gd.mnemonic = 'O';
530 0 : gcd[j].gd.label = &label[j];
531 0 : gcd[j].gd.handle_controlevent = CB_OK;
532 0 : gcd[j++].creator = GButtonCreate;
533 0 : harray[5][0] = GCD_Glue; harray[5][1] = &gcd[j-1]; harray[5][2] = GCD_Glue;
534 :
535 0 : gcd[j].gd.pos.x = -20; gcd[j].gd.pos.y = 252-32;
536 0 : gcd[j].gd.pos.width = -1; gcd[j].gd.pos.height = 0;
537 0 : gcd[j].gd.flags = gg_visible | gg_enabled | gg_but_cancel;
538 0 : label[j].text = (unichar_t *) _("_Cancel");
539 0 : label[j].text_is_1byte = true;
540 0 : label[j].text_in_resource = true;
541 0 : gcd[j].gd.label = &label[j];
542 0 : gcd[j].gd.mnemonic = 'C';
543 0 : gcd[j].gd.handle_controlevent = CB_Cancel;
544 0 : gcd[j++].creator = GButtonCreate;
545 0 : harray[5][3] = GCD_Glue; harray[5][4] = &gcd[j-1]; harray[5][5] = GCD_Glue;
546 0 : harray[5][6] = NULL;
547 :
548 0 : boxes[7].gd.flags = gg_enabled|gg_visible;
549 0 : boxes[7].gd.u.boxelements = harray[5];
550 0 : boxes[7].creator = GHBoxCreate;
551 0 : varray[k++] = &boxes[7]; varray[k++] = NULL;
552 0 : varray[k] = NULL;
553 :
554 0 : boxes[0].gd.pos.x = boxes[0].gd.pos.y = 2;
555 0 : boxes[0].gd.flags = gg_enabled|gg_visible;
556 0 : boxes[0].gd.u.boxelements = varray;
557 0 : boxes[0].creator = GHVGroupCreate;
558 :
559 0 : GGadgetsCreate(bd.gw,boxes);
560 0 : GHVBoxSetExpandableRow(boxes[0].ret,gb_expandglue);
561 0 : if ( isavail<true )
562 0 : GHVBoxSetExpandableCol(boxes[3].ret,gb_expandglue);
563 0 : GHVBoxSetExpandableCol(boxes[3].ret,gb_expandglue);
564 0 : GHVBoxSetExpandableCol(boxes[7].ret,gb_expandgluesame);
565 0 : GHVBoxFitWindow(boxes[0].ret);
566 0 : which[bdfcontrol_lastwhich].selected = false;
567 0 : _CB_SystemChange(&bd.bd);
568 :
569 0 : GWidgetHidePalettes();
570 0 : GDrawSetVisible(bd.gw,true);
571 0 : while ( !bd.bd.done )
572 0 : GDrawProcessOneEvent(NULL);
573 0 : GDrawDestroyWindow(bd.gw);
574 0 : }
|