LCOV - code coverage report
Current view: top level - fontforgeexe - simplifydlg.c (source / functions) Hit Total Coverage
Test: FontForge coverage report 2017-08-04 01:21:11+02:00 (commit d35f7e4107a9e1db65cce47c468fcc914cecb8fd) Lines: 0 347 0.0 %
Date: 2017-08-04 Functions: 0 4 0.0 %

          Line data    Source code
       1             : /* Copyright (C) 2002-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 "ustring.h"
      29             : 
      30             : #define CID_Extrema     1000
      31             : #define CID_Slopes      1001
      32             : #define CID_Error       1002
      33             : #define CID_Smooth      1003
      34             : #define CID_SmoothTan   1004
      35             : #define CID_SmoothHV    1005
      36             : #define CID_FlattenBumps        1006
      37             : #define CID_FlattenBound        1007
      38             : #define CID_LineLenMax          1008
      39             : #define CID_Start               1009
      40             : #define CID_SetAsDefault        1010
      41             : 
      42             : static double olderr_rat = 1/1000., oldsmooth_tan=.2,
      43             :         oldlinefixup_rat = 10./1000., oldlinelenmax_rat = 1/100.;
      44             : static int set_as_default = true;
      45             : 
      46             : static int oldextrema = false;
      47             : static int oldslopes = false;
      48             : static int oldsmooth = true;
      49             : static int oldsmoothhv = true;
      50             : static int oldlinefix = false;
      51             : static int oldstart = false;
      52             : 
      53             : typedef struct simplifydlg {
      54             :     int flags;
      55             :     double err;
      56             :     double tan_bounds;
      57             :     double linefixup;
      58             :     double linelenmax;
      59             :     int done;
      60             :     int cancelled;
      61             :     int em_size;
      62             :     int set_as_default;
      63             : } Simple;
      64             : 
      65           0 : static int Sim_OK(GGadget *g, GEvent *e) {
      66           0 :     if ( e->type==et_controlevent && e->u.control.subtype == et_buttonactivate ) {
      67           0 :         Simple *sim = GDrawGetUserData(GGadgetGetWindow(g));
      68           0 :         int badparse=false;
      69           0 :         sim->flags = 0;
      70           0 :         if ( GGadgetIsChecked(GWidgetGetControl(GGadgetGetWindow(g),CID_Extrema)) )
      71           0 :             sim->flags = sf_ignoreextremum;
      72           0 :         if ( GGadgetIsChecked(GWidgetGetControl(GGadgetGetWindow(g),CID_Slopes)) )
      73           0 :             sim->flags |= sf_ignoreslopes;
      74           0 :         if ( GGadgetIsChecked(GWidgetGetControl(GGadgetGetWindow(g),CID_Smooth)) )
      75           0 :             sim->flags |= sf_smoothcurves;
      76           0 :         if ( GGadgetIsChecked(GWidgetGetControl(GGadgetGetWindow(g),CID_SmoothHV)) )
      77           0 :             sim->flags |= sf_choosehv;
      78           0 :         if ( GGadgetIsChecked(GWidgetGetControl(GGadgetGetWindow(g),CID_FlattenBumps)) )
      79           0 :             sim->flags |= sf_forcelines;
      80           0 :         if ( GGadgetIsChecked(GWidgetGetControl(GGadgetGetWindow(g),CID_Start)) )
      81           0 :             sim->flags |= sf_setstart2extremum;
      82           0 :         sim->err = GetReal8(GGadgetGetWindow(g),CID_Error,_("_Error Limit:"),&badparse);
      83           0 :         if ( sim->flags&sf_smoothcurves )
      84           0 :             sim->tan_bounds= GetReal8(GGadgetGetWindow(g),CID_SmoothTan,_("_Tangent"),&badparse);
      85           0 :         if ( sim->flags&sf_forcelines )
      86           0 :             sim->linefixup= GetReal8(GGadgetGetWindow(g),CID_FlattenBound,_("Bump Size"),&badparse);
      87           0 :         sim->linelenmax = GetReal8(GGadgetGetWindow(g),CID_LineLenMax,_("Line length max"),&badparse);
      88           0 :         if ( badparse )
      89           0 : return( true );
      90           0 :         olderr_rat = sim->err/sim->em_size;
      91           0 :         oldextrema = (sim->flags&sf_ignoreextremum);
      92           0 :         oldslopes = (sim->flags&sf_ignoreslopes);
      93           0 :         oldsmooth = (sim->flags&sf_smoothcurves);
      94           0 :         oldlinefix = (sim->flags&sf_forcelines);
      95           0 :         oldstart = (sim->flags&sf_setstart2extremum);
      96           0 :         if ( oldsmooth ) {
      97           0 :             oldsmooth_tan = sim->tan_bounds;
      98           0 :             oldsmoothhv = (sim->flags&sf_choosehv);
      99             :         }
     100           0 :         if ( oldlinefix )
     101           0 :             oldlinefixup_rat = sim->linefixup/sim->em_size;
     102           0 :         oldlinelenmax_rat = sim->linelenmax/sim->em_size;
     103           0 :         sim->set_as_default = GGadgetIsChecked(GWidgetGetControl(GGadgetGetWindow(g),CID_SetAsDefault) );
     104             : 
     105           0 :         sim->done = true;
     106             :     }
     107           0 : return( true );
     108             : }
     109             : 
     110           0 : static int Sim_Cancel(GGadget *g, GEvent *e) {
     111           0 :     if ( e->type==et_controlevent && e->u.control.subtype == et_buttonactivate ) {
     112           0 :         Simple *sim = GDrawGetUserData(GGadgetGetWindow(g));
     113           0 :         sim->done = sim->cancelled = true;
     114             :     }
     115           0 : return( true );
     116             : }
     117             : 
     118           0 : static int sim_e_h(GWindow gw, GEvent *event) {
     119           0 :     if ( event->type==et_close ) {
     120           0 :         Simple *sim = GDrawGetUserData(gw);
     121           0 :         sim->done = sim->cancelled = true;
     122           0 :     } else if ( event->type == et_char ) {
     123           0 : return( false );
     124           0 :     } else if ( event->type == et_map ) {
     125             :         /* Above palettes */
     126           0 :         GDrawRaise(gw);
     127             :     }
     128           0 : return( true );
     129             : }
     130             : 
     131           0 : int SimplifyDlg(SplineFont *sf, struct simplifyinfo *smpl) {
     132             :     GRect pos;
     133             :     GWindow gw;
     134             :     GWindowAttrs wattrs;
     135             :     GGadgetCreateData gcd[24], boxes[7], *harray1[6], *harray2[6], *harray3[6],
     136             :             *harray4[4][6], *barray[9], *varray[18][2];
     137             :     GTextInfo label[24];
     138             :     Simple sim;
     139             :     char buffer[12], buffer2[12], buffer3[12], buffer4[12];
     140             :     int k,l;
     141             : 
     142           0 :     memset(&sim,0,sizeof(sim));
     143           0 :     sim.em_size = sf->ascent+sf->descent;
     144             : 
     145           0 :     memset(&wattrs,0,sizeof(wattrs));
     146           0 :     wattrs.mask = wam_events|wam_cursor|wam_utf8_wtitle|wam_undercursor|wam_isdlg|wam_restrict;
     147           0 :     wattrs.event_masks = ~(1<<et_charup);
     148           0 :     wattrs.restrict_input_to_me = 1;
     149           0 :     wattrs.undercursor = 1;
     150           0 :     wattrs.cursor = ct_pointer;
     151           0 :     wattrs.utf8_window_title = _("Simplify");
     152           0 :     wattrs.is_dlg = true;
     153           0 :     pos.x = pos.y = 0;
     154           0 :     pos.width = GGadgetScale(GDrawPointsToPixels(NULL,180));
     155           0 :     pos.height = GDrawPointsToPixels(NULL,275);
     156           0 :     gw = GDrawCreateTopWindow(NULL,&pos,sim_e_h,&sim,&wattrs);
     157             : 
     158           0 :     memset(&label,0,sizeof(label));
     159           0 :     memset(&gcd,0,sizeof(gcd));
     160           0 :     memset(&boxes,0,sizeof(boxes));
     161             : 
     162           0 :     k=l=0;
     163           0 :     label[k].text = (unichar_t *) _("_Error Limit:");
     164           0 :     label[k].text_is_1byte = true;
     165           0 :     label[k].text_in_resource = true;
     166           0 :     gcd[k].gd.label = &label[k];
     167           0 :     gcd[k].gd.pos.x = 10; gcd[k].gd.pos.y = 12;
     168           0 :     gcd[k].gd.flags = gg_enabled|gg_visible;
     169           0 :     gcd[k++].creator = GLabelCreate;
     170           0 :     harray1[0] = &gcd[k-1];
     171             : 
     172           0 :     sprintf( buffer, "%.3g", olderr_rat*sim.em_size );
     173           0 :     label[k].text = (unichar_t *) buffer;
     174           0 :     label[k].text_is_1byte = true;
     175           0 :     gcd[k].gd.label = &label[k];
     176           0 :     gcd[k].gd.pos.x = 70; gcd[k].gd.pos.y = gcd[k-1].gd.pos.y-6;
     177           0 :     gcd[k].gd.pos.width = 40;
     178           0 :     gcd[k].gd.flags = gg_enabled|gg_visible;
     179           0 :     gcd[k].gd.cid = CID_Error;
     180           0 :     gcd[k++].creator = GTextFieldCreate;
     181           0 :     harray1[1] = &gcd[k-1];
     182             : 
     183           0 :     gcd[k].gd.pos.x = gcd[k-1].gd.pos.x+gcd[k-1].gd.pos.width+3;
     184           0 :     gcd[k].gd.pos.y = gcd[k-2].gd.pos.y;
     185           0 :     gcd[k].gd.flags = gg_visible | gg_enabled ;
     186           0 :     label[k].text = (unichar_t *) _("em-units");
     187           0 :     label[k].text_is_1byte = true;
     188           0 :     gcd[k].gd.label = &label[k];
     189           0 :     gcd[k++].creator = GLabelCreate;
     190           0 :     harray1[2] = &gcd[k-1]; harray1[3] = GCD_Glue; harray1[4] = NULL;
     191             : 
     192           0 :     boxes[2].gd.flags = gg_enabled|gg_visible;
     193           0 :     boxes[2].gd.u.boxelements = harray1;
     194           0 :     boxes[2].creator = GHBoxCreate;
     195           0 :     varray[l][0] = &boxes[2]; varray[l++][1] = NULL;
     196             : 
     197           0 :     label[k].text = (unichar_t *) _("Allow _removal of extrema");
     198           0 :     label[k].text_is_1byte = true;
     199           0 :     label[k].text_in_resource = true;
     200           0 :     gcd[k].gd.label = &label[k];
     201           0 :     gcd[k].gd.pos.x = 8; gcd[k].gd.pos.y = gcd[k-2].gd.pos.y+24;
     202           0 :     gcd[k].gd.flags = gg_enabled|gg_visible|gg_utf8_popup;
     203           0 :     if ( oldextrema )
     204           0 :         gcd[k].gd.flags |= gg_cb_on;
     205           0 :     gcd[k].gd.popup_msg = (unichar_t *) _("Normally simplify will not remove points at the extrema of curves\n(both PostScript and TrueType suggest you retain these points)");
     206           0 :     gcd[k].gd.cid = CID_Extrema;
     207           0 :     gcd[k++].creator = GCheckBoxCreate;
     208           0 :     varray[l][0] = &gcd[k-1]; varray[l++][1] = NULL;
     209             : 
     210           0 :     label[k].text = (unichar_t *) _("Allow _slopes to change");
     211           0 :     label[k].text_is_1byte = true;
     212           0 :     label[k].text_in_resource = true;
     213           0 :     gcd[k].gd.label = &label[k];
     214           0 :     gcd[k].gd.pos.x = 8; gcd[k].gd.pos.y = gcd[k-1].gd.pos.y+14;
     215           0 :     gcd[k].gd.flags = gg_enabled|gg_visible|gg_utf8_popup;
     216           0 :     if ( oldslopes )
     217           0 :         gcd[k].gd.flags |= gg_cb_on;
     218           0 :     gcd[k].gd.cid = CID_Slopes;
     219           0 :     gcd[k].gd.popup_msg = (unichar_t *) _("Normally simplify will not change the slope of the contour at the points.");
     220           0 :     gcd[k++].creator = GCheckBoxCreate;
     221           0 :     varray[l][0] = &gcd[k-1]; varray[l++][1] = NULL;
     222             : 
     223           0 :     label[k].text = (unichar_t *) _("Start contours at e_xtrema");
     224           0 :     label[k].text_is_1byte = true;
     225           0 :     label[k].text_in_resource = true;
     226           0 :     gcd[k].gd.label = &label[k];
     227           0 :     gcd[k].gd.pos.x = 8; gcd[k].gd.pos.y = gcd[k-1].gd.pos.y+14;
     228           0 :     gcd[k].gd.flags = gg_enabled|gg_visible|gg_utf8_popup;
     229           0 :     if ( oldstart )
     230           0 :         gcd[k].gd.flags |= gg_cb_on;
     231           0 :     gcd[k].gd.cid = CID_Start;
     232           0 :     gcd[k].gd.popup_msg = (unichar_t *) _("If the start point of a contour is not an extremum, find a new start point (on the contour) which is.");
     233           0 :     gcd[k++].creator = GCheckBoxCreate;
     234           0 :     varray[l][0] = &gcd[k-1]; varray[l++][1] = NULL;
     235             : 
     236           0 :     gcd[k].gd.pos.x = 15; gcd[k].gd.pos.y = gcd[k-1].gd.pos.y + 20;
     237           0 :     gcd[k].gd.pos.width = 150;
     238           0 :     gcd[k].gd.flags = gg_enabled|gg_visible;
     239           0 :     gcd[k++].creator = GLineCreate;
     240           0 :     varray[l][0] = &gcd[k-1]; varray[l++][1] = NULL;
     241             : 
     242           0 :     label[k].text = (unichar_t *) _("Allow _curve smoothing");
     243           0 :     label[k].text_is_1byte = true;
     244           0 :     label[k].text_in_resource = true;
     245           0 :     gcd[k].gd.label = &label[k];
     246           0 :     gcd[k].gd.pos.x = 8; gcd[k].gd.pos.y = gcd[k-1].gd.pos.y+4;
     247           0 :     if ( sf->layers[ly_fore].order2 )
     248           0 :         gcd[k].gd.flags = gg_visible|gg_utf8_popup;
     249             :     else {
     250           0 :         gcd[k].gd.flags = gg_enabled|gg_visible|gg_utf8_popup;
     251           0 :         if ( oldsmooth )
     252           0 :             gcd[k].gd.flags |= gg_cb_on;
     253             :     }
     254           0 :     gcd[k].gd.popup_msg = (unichar_t *) _("Simplify will examine corner points whose control points are almost\ncolinear and smooth them into curve points");
     255           0 :     gcd[k].gd.cid = CID_Smooth;
     256           0 :     gcd[k++].creator = GCheckBoxCreate;
     257           0 :     varray[l][0] = &gcd[k-1]; varray[l++][1] = NULL;
     258             : 
     259             : /* GT: here "tan" means trigonometric tangent */
     260           0 :     label[k].text = (unichar_t *) _("if tan less than");
     261           0 :     label[k].text_is_1byte = true;
     262           0 :     gcd[k].gd.label = &label[k];
     263           0 :     gcd[k].gd.pos.x = 20; gcd[k].gd.pos.y = gcd[k-1].gd.pos.y+24;
     264           0 :     gcd[k].gd.flags = gg_enabled|gg_visible;
     265           0 :     if ( sf->layers[ly_fore].order2 ) gcd[k].gd.flags = gg_visible;
     266           0 :     gcd[k++].creator = GLabelCreate;
     267           0 :     harray2[0] = GCD_HPad10; harray2[1] = &gcd[k-1];
     268             : 
     269           0 :     sprintf( buffer2, "%.3g", oldsmooth_tan );
     270           0 :     label[k].text = (unichar_t *) buffer2;
     271           0 :     label[k].text_is_1byte = true;
     272           0 :     gcd[k].gd.label = &label[k];
     273           0 :     gcd[k].gd.pos.x = 94; gcd[k].gd.pos.y = gcd[k-1].gd.pos.y-6;
     274           0 :     gcd[k].gd.pos.width = 40;
     275           0 :     gcd[k].gd.flags = gg_enabled|gg_visible;
     276           0 :     if ( sf->layers[ly_fore].order2 ) gcd[k].gd.flags = gg_visible;
     277           0 :     gcd[k].gd.cid = CID_SmoothTan;
     278           0 :     gcd[k++].creator = GTextFieldCreate;
     279           0 :     harray2[2] = &gcd[k-1]; harray2[3] = GCD_Glue; harray2[4] = NULL;
     280             : 
     281           0 :     boxes[3].gd.flags = gg_enabled|gg_visible;
     282           0 :     boxes[3].gd.u.boxelements = harray2;
     283           0 :     boxes[3].creator = GHBoxCreate;
     284           0 :     varray[l][0] = &boxes[3]; varray[l++][1] = NULL;
     285             : 
     286           0 :     label[k].text = (unichar_t *) _("S_nap to horizontal/vertical");
     287           0 :     label[k].text_is_1byte = true;
     288           0 :     label[k].text_in_resource = true;
     289           0 :     gcd[k].gd.label = &label[k];
     290           0 :     gcd[k].gd.pos.x = 17; gcd[k].gd.pos.y = gcd[k-1].gd.pos.y+24; 
     291           0 :     if ( sf->layers[ly_fore].order2 )
     292           0 :         gcd[k].gd.flags = gg_visible;
     293             :     else {
     294           0 :         gcd[k].gd.flags = gg_enabled|gg_visible|gg_utf8_popup;
     295           0 :         if ( oldsmoothhv )
     296           0 :             gcd[k].gd.flags |= gg_cb_on|gg_utf8_popup;
     297             :     }
     298           0 :     gcd[k].gd.popup_msg = (unichar_t *) _("If the slope of an adjusted point is near horizontal or vertical\nsnap to that");
     299           0 :     gcd[k].gd.cid = CID_SmoothHV;
     300           0 :     gcd[k++].creator = GCheckBoxCreate;
     301           0 :     harray3[0] = GCD_HPad10; harray3[1] = &gcd[k-1]; harray3[2] = GCD_Glue; harray3[3] = NULL;
     302             : 
     303           0 :     boxes[4].gd.flags = gg_enabled|gg_visible;
     304           0 :     boxes[4].gd.u.boxelements = harray3;
     305           0 :     boxes[4].creator = GHBoxCreate;
     306           0 :     varray[l][0] = &boxes[4]; varray[l++][1] = NULL;
     307             : 
     308           0 :     label[k].text = (unichar_t *) _("_Flatten bumps on lines");
     309           0 :     label[k].text_is_1byte = true;
     310           0 :     label[k].text_in_resource = true;
     311           0 :     gcd[k].gd.label = &label[k];
     312           0 :     gcd[k].gd.pos.x = 8; gcd[k].gd.pos.y = gcd[k-1].gd.pos.y+14; 
     313           0 :     if ( sf->layers[ly_fore].order2 )
     314           0 :         gcd[k].gd.flags = gg_visible|gg_utf8_popup;
     315             :     else {
     316           0 :         gcd[k].gd.flags = gg_enabled|gg_visible|gg_utf8_popup;
     317           0 :         if ( oldlinefix )
     318           0 :             gcd[k].gd.flags |= gg_cb_on;
     319             :     }
     320           0 :     gcd[k].gd.popup_msg = (unichar_t *) _("If a line has a bump on it then flatten out that bump");
     321           0 :     gcd[k].gd.cid = CID_FlattenBumps;
     322           0 :     gcd[k++].creator = GCheckBoxCreate;
     323           0 :     varray[l][0] = &gcd[k-1]; varray[l++][1] = NULL;
     324             : 
     325           0 :     label[k].text = (unichar_t *) _("if smaller than");
     326           0 :     label[k].text_is_1byte = true;
     327           0 :     gcd[k].gd.label = &label[k];
     328           0 :     gcd[k].gd.pos.x = 20; gcd[k].gd.pos.y = gcd[k-1].gd.pos.y+24;
     329           0 :     gcd[k].gd.flags = gg_enabled|gg_visible;
     330           0 :     if ( sf->layers[ly_fore].order2 ) gcd[k].gd.flags = gg_visible;
     331           0 :     gcd[k++].creator = GLabelCreate;
     332           0 :     harray4[0][0] = GCD_HPad10; harray4[0][1] = &gcd[k-1];
     333             : 
     334           0 :     sprintf( buffer3, "%.3g", oldlinefixup_rat*sim.em_size );
     335           0 :     label[k].text = (unichar_t *) buffer3;
     336           0 :     label[k].text_is_1byte = true;
     337           0 :     gcd[k].gd.label = &label[k];
     338           0 :     gcd[k].gd.pos.x = 90; gcd[k].gd.pos.y = gcd[k-1].gd.pos.y-6;
     339           0 :     gcd[k].gd.pos.width = 40;
     340           0 :     gcd[k].gd.flags = gg_enabled|gg_visible;
     341           0 :     if ( sf->layers[ly_fore].order2 ) gcd[k].gd.flags = gg_visible;
     342           0 :     gcd[k].gd.cid = CID_FlattenBound;
     343           0 :     gcd[k++].creator = GTextFieldCreate;
     344           0 :     harray4[0][2] = &gcd[k-1];
     345             : 
     346           0 :     gcd[k].gd.pos.x = gcd[k-1].gd.pos.x+gcd[k-1].gd.pos.width+3;
     347           0 :     gcd[k].gd.pos.y = gcd[k-2].gd.pos.y;
     348           0 :     gcd[k].gd.flags = gg_visible | gg_enabled ;
     349           0 :     if ( sf->layers[ly_fore].order2 ) gcd[k].gd.flags = gg_visible;
     350           0 :     label[k].text = (unichar_t *) _("em-units");
     351           0 :     label[k].text_is_1byte = true;
     352           0 :     gcd[k].gd.label = &label[k];
     353           0 :     gcd[k++].creator = GLabelCreate;
     354           0 :     harray4[0][3] = &gcd[k-1]; harray4[0][4] = GCD_Glue; harray4[0][5] = NULL;
     355             : 
     356             : 
     357           0 :     label[k].text = (unichar_t *) _("Don't smooth lines");
     358           0 :     label[k].text_is_1byte = true;
     359           0 :     gcd[k].gd.label = &label[k];
     360           0 :     gcd[k].gd.pos.x = 8; gcd[k].gd.pos.y = gcd[k-1].gd.pos.y+14; 
     361           0 :     gcd[k].gd.flags = gg_enabled|gg_visible;
     362           0 :     gcd[k++].creator = GLabelCreate;
     363           0 :     harray4[1][0] = &gcd[k-1]; harray4[1][1] = harray4[1][2] = harray4[1][3] = GCD_ColSpan;
     364           0 :     harray4[1][4] = GCD_Glue; harray4[1][5] = NULL;
     365             : 
     366           0 :     label[k].text = (unichar_t *) _("longer than");
     367           0 :     label[k].text_is_1byte = true;
     368           0 :     gcd[k].gd.label = &label[k];
     369           0 :     gcd[k].gd.pos.x = 20; gcd[k].gd.pos.y = gcd[k-1].gd.pos.y+24;
     370           0 :     gcd[k].gd.flags = gg_enabled|gg_visible;
     371           0 :     gcd[k++].creator = GLabelCreate;
     372           0 :     harray4[2][0] = GCD_HPad10; harray4[2][1] = &gcd[k-1];
     373             : 
     374           0 :     sprintf( buffer4, "%.3g", oldlinelenmax_rat*sim.em_size );
     375           0 :     label[k].text = (unichar_t *) buffer4;
     376           0 :     label[k].text_is_1byte = true;
     377           0 :     gcd[k].gd.label = &label[k];
     378           0 :     gcd[k].gd.pos.x = 90; gcd[k].gd.pos.y = gcd[k-1].gd.pos.y-6;
     379           0 :     gcd[k].gd.pos.width = 40;
     380           0 :     gcd[k].gd.flags = gg_enabled|gg_visible;
     381           0 :     gcd[k].gd.cid = CID_LineLenMax;
     382           0 :     gcd[k++].creator = GTextFieldCreate;
     383           0 :     harray4[2][2] = &gcd[k-1];
     384             : 
     385           0 :     gcd[k].gd.pos.x = gcd[k-1].gd.pos.x+gcd[k-1].gd.pos.width+3;
     386           0 :     gcd[k].gd.pos.y = gcd[k-2].gd.pos.y;
     387           0 :     gcd[k].gd.flags = gg_visible | gg_enabled ;
     388           0 :     label[k].text = (unichar_t *) _("em-units");
     389           0 :     label[k].text_is_1byte = true;
     390           0 :     gcd[k].gd.label = &label[k];
     391           0 :     gcd[k++].creator = GLabelCreate;
     392           0 :     harray4[2][3] = &gcd[k-1]; harray4[2][4] = GCD_Glue; harray4[2][5] = NULL;
     393           0 :     harray4[3][0] = NULL;
     394             : 
     395           0 :     boxes[5].gd.flags = gg_enabled|gg_visible;
     396           0 :     boxes[5].gd.u.boxelements = harray4[0];
     397           0 :     boxes[5].creator = GHVBoxCreate;
     398           0 :     varray[l][0] = &boxes[5]; varray[l++][1] = NULL;
     399             : 
     400           0 :     gcd[k].gd.pos.x = 10; gcd[k].gd.pos.y = gcd[k-1].gd.pos.y+20;
     401           0 :     gcd[k].gd.flags = gg_visible | gg_enabled | (set_as_default ? gg_cb_on : 0);
     402           0 :     label[k].text = (unichar_t *) _("Set as Default");
     403           0 :     label[k].text_is_1byte = true;
     404           0 :     gcd[k].gd.label = &label[k];
     405           0 :     gcd[k].gd.cid = CID_SetAsDefault;
     406           0 :     gcd[k++].creator = GCheckBoxCreate;
     407           0 :     varray[l][0] = &gcd[k-1]; varray[l++][1] = NULL;
     408             : 
     409           0 :     gcd[k].gd.pos.x = 15; gcd[k].gd.pos.y = gcd[k-1].gd.pos.y + 20;
     410           0 :     gcd[k].gd.pos.width = 150;
     411           0 :     gcd[k].gd.flags = gg_enabled|gg_visible;
     412           0 :     gcd[k++].creator = GLineCreate;
     413           0 :     varray[l][0] = &gcd[k-1]; varray[l++][1] = NULL;
     414             : 
     415           0 :     gcd[k].gd.pos.x = 20-3; gcd[k].gd.pos.y = gcd[k-1].gd.pos.y+30;
     416           0 :     gcd[k].gd.pos.width = -1; gcd[k].gd.pos.height = 0;
     417           0 :     gcd[k].gd.flags = gg_visible | gg_enabled | gg_but_default;
     418           0 :     label[k].text = (unichar_t *) _("_OK");
     419           0 :     label[k].text_is_1byte = true;
     420           0 :     label[k].text_in_resource = true;
     421           0 :     gcd[k].gd.mnemonic = 'O';
     422           0 :     gcd[k].gd.label = &label[k];
     423           0 :     gcd[k].gd.handle_controlevent = Sim_OK;
     424           0 :     gcd[k++].creator = GButtonCreate;
     425           0 :     barray[0] = GCD_Glue; barray[1] = &gcd[k-1]; barray[2] = GCD_Glue;
     426             : 
     427           0 :     gcd[k].gd.pos.x = -20; gcd[k].gd.pos.y = gcd[k-1].gd.pos.y+3;
     428           0 :     gcd[k].gd.pos.width = -1; gcd[k].gd.pos.height = 0;
     429           0 :     gcd[k].gd.flags = gg_visible | gg_enabled | gg_but_cancel;
     430           0 :     label[k].text = (unichar_t *) _("_Cancel");
     431           0 :     label[k].text_is_1byte = true;
     432           0 :     label[k].text_in_resource = true;
     433           0 :     gcd[k].gd.label = &label[k];
     434           0 :     gcd[k].gd.mnemonic = 'C';
     435           0 :     gcd[k].gd.handle_controlevent = Sim_Cancel;
     436           0 :     gcd[k++].creator = GButtonCreate;
     437           0 :     barray[3] = GCD_Glue; barray[4] = &gcd[k-1]; barray[5] = GCD_Glue; barray[6] = NULL;
     438             : 
     439           0 :     boxes[6].gd.flags = gg_enabled|gg_visible;
     440           0 :     boxes[6].gd.u.boxelements = barray;
     441           0 :     boxes[6].creator = GHBoxCreate;
     442           0 :     varray[l][0] = &boxes[6]; varray[l++][1] = NULL;
     443           0 :     varray[l][0] = NULL;
     444             : 
     445           0 :     boxes[0].gd.pos.x = boxes[0].gd.pos.y = 2;
     446           0 :     boxes[0].gd.flags = gg_enabled|gg_visible;
     447           0 :     boxes[0].gd.u.boxelements = varray[0];
     448           0 :     boxes[0].creator = GHVGroupCreate;
     449             : 
     450           0 :     GGadgetsCreate(gw,boxes);
     451           0 :     GWidgetIndicateFocusGadget(GWidgetGetControl(gw,CID_Error));
     452           0 :     GTextFieldSelect(GWidgetGetControl(gw,CID_Error),0,-1);
     453           0 :     GHVBoxSetExpandableCol(boxes[2].ret,gb_expandglue);
     454           0 :     GHVBoxSetExpandableCol(boxes[3].ret,gb_expandglue);
     455           0 :     GHVBoxSetExpandableCol(boxes[4].ret,gb_expandglue);
     456           0 :     GHVBoxSetExpandableCol(boxes[5].ret,gb_expandglue);
     457           0 :     GHVBoxSetExpandableCol(boxes[6].ret,gb_expandgluesame);
     458           0 :     GHVBoxFitWindow(boxes[0].ret);
     459             : 
     460           0 :     GWidgetHidePalettes();
     461           0 :     GDrawSetVisible(gw,true);
     462           0 :     while ( !sim.done )
     463           0 :         GDrawProcessOneEvent(NULL);
     464           0 :     GDrawDestroyWindow(gw);
     465           0 :     if ( sim.cancelled )
     466           0 : return( false );
     467             : 
     468           0 :     smpl->flags = sim.flags;
     469           0 :     smpl->err = sim.err;
     470           0 :     smpl->tan_bounds = sim.tan_bounds;
     471           0 :     smpl->linefixup = sim.linefixup;
     472           0 :     smpl->linelenmax = sim.linelenmax;
     473           0 :     smpl->set_as_default = sim.set_as_default;
     474           0 :     set_as_default = sim.set_as_default;
     475           0 : return( true );
     476             : }

Generated by: LCOV version 1.10