fltkhs-0.1.0.0: c-examples/doublebuffer.c
#include <Fl_C.h>
#include <Fl_WindowC.h>
#include <Fl_Single_WindowC.h>
#include <Fl_Double_WindowC.h>
#include <Fl_BoxC.h>
#include <Fl_DrawC.h>
#include <stdlib.h>
#include <FL/math.h>
#include <stdio.h>
#include <Fl_SliderC.h>
void star(int w, int h, int n) {
flc_push_matrix();
flc_translate(w/2, h/2);
flc_scale_with_y(w/2, h/2);
int i = 0;
for (; i < n; i++) {
int j = i + 1;
for (; j < n; j++){
flc_begin_line();
flc_vertex(cos(2*M_PI*i/n+.1), sin(2*M_PI*i/n+.1));
flc_vertex(cos(2*M_PI*j/n+.1), sin(2*M_PI*j/n+.1));
flc_end_line();
}
}
flc_pop_matrix();
}
int sides[2] = {20,20};
void slider_cb(fl_Widget o, void* v) {
fl_Slider s = (fl_Slider)o;
sides[(long)v] = (int)Fl_Slider_value(s);
Fl_Slider_redraw(Fl_Slider_parent(s));
}
void bad_draw(int w,int h,int which) {
flc_set_color(FL_BLACK); flc_rectf(0,0,w,h);
flc_set_color(FL_WHITE); star(w,h,sides[which]);
}
void draw_single(fl_Widget w) {
fl_Single_Window win = (fl_Single_Window)w;
bad_draw(Fl_Single_Window_w(win),Fl_Single_Window_h(win),0);
Fl_Single_Window_draw_child(win, Fl_Single_Window_child(win,0));
}
void draw_double(fl_Widget w) {
fl_Double_Window win = (fl_Double_Window)w;
bad_draw(Fl_Double_Window_w(win),Fl_Double_Window_h(win),0);
Fl_Double_Window_draw_child(win, Fl_Double_Window_child(win,0));
}
int main (int argc ,char** argv){
if (!Fl_visual(FL_DOUBLE))
printf("Xdbe not supported, faking double buffer with pixmaps.\n");
fl_Window w01 = Fl_Window_New_WithLabel(420,420,"Fl_Single_Window");
Fl_Window_set_box(w01,FL_FLAT_BOX);
fl_Single_Window_Virtual_Funcs* single_funcs = Fl_Single_Window_default_virtual_funcs();
single_funcs->draw = &draw_single;
fl_Single_Window w1 = Fl_OverriddenSingle_Window_NewXY_WithLabel(10,10,400,400,"Fl_Single_Window",single_funcs);
Fl_Single_Window_set_box(w1,FL_FLAT_BOX);
Fl_Single_Window_set_color(w1,FL_BLACK); //w1.position(100,200);
fl_Hor_Slider slider0 = Fl_Hor_Slider_New(20,370,360,25);
Fl_Slider_range(slider0,2,30);
Fl_Slider_set_step(slider0,1);
Fl_Slider_set_value(slider0,sides[0]);
Fl_Slider_set_callback(slider0,slider_cb);
Fl_Single_Window_end(w1);
Fl_Window_end(w01);
fl_Window w02 = Fl_Window_New_WithLabel(420,420,"Fl_Double_Window");
Fl_Window_set_box(w02,FL_FLAT_BOX);
fl_Double_Window_Virtual_Funcs* double_funcs = Fl_Double_Window_default_virtual_funcs();
double_funcs->draw = &draw_double;
fl_Double_Window w2 = Fl_OverriddenDouble_Window_NewXY_WithLabel(10,10,400,400,"Fl_Double_Window",double_funcs);
Fl_Double_Window_set_box(w2,FL_FLAT_BOX);
Fl_Double_Window_set_color(w2,FL_BLACK); //w2.position(100,200);
fl_Hor_Slider slider1 = Fl_Hor_Slider_New(20,370,360,25);
Fl_Slider_range(slider1,2,30);
Fl_Slider_set_step(slider1,1);
Fl_Slider_set_value(slider1,sides[0]);
Fl_Slider_set_callback(slider1,slider_cb);
Fl_Double_Window_end(w2);
Fl_Window_end(w02);
Fl_Window_show_with_args(w01,argc, argv);
Fl_Single_Window_show(w1);
Fl_Window_show(w02);
Fl_Double_Window_show(w2);
return Fl_run();
}