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