Here is how I managed to change font and it's size:

static void set_textsize_styletable(EditorWindow *w, int fsize){
   w->editor->textsize(fsize);
   int nStyles = sizeof(styletable) / sizeof(styletable[0]);
   for(int i=0; i< nStyles; i++) styletable[i].size = fsize;
   w->editor->redraw();
}

void font_cb (Fl_Widget *, void *v) {
   EditorWindow *w = (EditorWindow *)v;
   int fn = fontobj->value();
   if (!fn) return;
   fn--;
   textobj->font = fn;
   sizeobj->clear();
   int n = numsizes[fn];
   int *s = sizes[fn];
   if (!n) {
     // no sizes
   } else if (s[0] == 0) {
     // many sizes;
     int j = 1;
     for (int i = 1; i<64 || i<s[n-1]; i++) {
       char buf[20];
       if (j < n && i==s[j]) {sprintf(buf,"@b%d",i); j++;}
       else sprintf(buf,"%d",i);
       sizeobj->add(buf);
     }
     sizeobj->value(pickedsize);
   } else {
     // some sizes
     int w = 0;
     for (int i = 0; i < n; i++) {
       if (s[i]<=pickedsize) w = i;
       char buf[20];
       sprintf(buf,"@b%d",s[i]);
       sizeobj->add(buf);
     }
     sizeobj->value(w+1);
   }
   w->editor->textfont((Fl_Font)fn);
   set_textsize_styletable(w, sizeobj->value());
}

void size_cb(Fl_Widget *, void *v) {
   EditorWindow *w = (EditorWindow *)v;
   int i = sizeobj->value();
   if (!i) return;
   const char *c = sizeobj->text(i);
   while (*c < '0' || *c > '9') c++;
   pickedsize = atoi(c);
   textobj->size = pickedsize;
   textobj->redraw();
   set_textsize_styletable(w, pickedsize);
}

char fontlabel[400];

void create_the_forms(void *v) {
   form = new Fl_Window(550, 370, " Font Settings");
   strcpy(fontlabel, "Hello, world!\n");
   int i = strlen(fontlabel);
   uchar c;
   for (c = ' '+1; c < 127; c++) {
     if (!(c&0x1f)) fontlabel[i++]='\n';
     if (c=='@') fontlabel[i++]=c;
     fontlabel[i++]=c;
   }
   fontlabel[i++] = '\n';
   for (c = 0xA1; c; c++) {if (!(c&0x1f)) fontlabel[i++]='\n';  
fontlabel[i++]=c;}
   fontlabel[i] = 0;
   textobj = new FontDisplay(FL_FRAME_BOX,10,10,530,170,fontlabel);
   textobj->align(FL_ALIGN_TOP|FL_ALIGN_LEFT|FL_ALIGN_INSIDE|FL_ALIGN_CLIP);
   textobj->color(9,47);
   fontobj = new Fl_Hold_Browser(10, 190, 390, 170);
   fontobj->box(FL_FRAME_BOX);
   fontobj->color(53,3);
   fontobj->callback(font_cb, v);
   form->resizable(fontobj);
   sizeobj = new Fl_Hold_Browser(410, 190, 130, 170);
   sizeobj->box(FL_FRAME_BOX);
   sizeobj->color(53,3);
   sizeobj->callback(size_cb, v);
   form->end();
}
_______________________________________________
fltk mailing list
[email protected]
http://lists.easysw.com/mailman/listinfo/fltk

Reply via email to