fltkhs-0.1.0.0: c-examples/arc.c
#include <stdio.h>
#include <Fl_C.h>
#include <Fl_Types.h>
#include <Fl_Double_WindowC.h>
#include <Fl_Value_SliderC.h>
#include <Fl_DrawC.h>
#include <Fl_WidgetC.h>
#include <Fl_SliderC.h>
double my_args[6] = {140, 140, 50, 0, 360, 0};
const char* name[6] = {"X", "Y", "R", "start", "end", "rotate"};
fl_Widget d;
void draw(fl_Widget widget){
flc_push_clip(Fl_Widget_x(widget),Fl_Widget_y(widget),Fl_Widget_w(widget),Fl_Widget_h(widget));
flc_set_color(FL_DARK3);
flc_rectf(Fl_Widget_x(widget),Fl_Widget_y(widget),Fl_Widget_w(widget),Fl_Widget_h(widget));
flc_push_matrix();
if (my_args[5]) {
flc_translate(Fl_Widget_x(widget)+Fl_Widget_w(widget)/2.0, Fl_Widget_y(widget)+Fl_Widget_h(widget)/2.0);
flc_rotate(my_args[5]);
flc_translate(-(Fl_Widget_x(widget)+Fl_Widget_w(widget)/2.0), -(Fl_Widget_y(widget)+Fl_Widget_h(widget)/2.0));
}
flc_set_color(FL_WHITE);
flc_translate(Fl_Widget_x(widget),Fl_Widget_y(widget));
flc_begin_complex_polygon();
flc_arc_by_radius(my_args[0],my_args[1],my_args[2],my_args[3],my_args[4]);
flc_gap();
flc_arc_by_radius(140,140,20,0,-360);
flc_end_complex_polygon();
flc_set_color(FL_RED);
flc_begin_line();
flc_arc_by_radius(my_args[0],my_args[1],my_args[2],my_args[3],my_args[4]);
flc_end_line();
flc_pop_matrix();
flc_pop_clip();
}
void slider_cb(fl_Widget o, void* v) {
fl_Slider s = (fl_Slider)o;
int idx = (fl_intptr_t)v;
my_args[idx] = Fl_Slider_value(s);
Fl_Widget_redraw(d);
}
int main(int argc, char** argv) {
fl_Widget_Virtual_Funcs* fs = Fl_Widget_default_virtual_funcs();
fs->draw = &draw;
fl_Double_Window window = (fl_Double_Window)Fl_Double_Window_New(300,500);
Fl_Double_Window_begin(window);
fl_Widget widget = (fl_Widget)Fl_OverriddenWidget_New(10,10,280,280,fs);
d = widget;
int y = 300;
int n = 0;
for (; n<6; n++) {
fl_Hor_Value_Slider s= (fl_Hor_Value_Slider)Fl_Hor_Value_Slider_New_WithLabel(50,y,240,25,name[n]);
y += 25;
if (n<3) {Fl_Value_Slider_set_minimum(s,0); Fl_Value_Slider_set_maximum(s,300);}
else if (n==5) {Fl_Value_Slider_set_minimum(s,0); Fl_Value_Slider_set_maximum(s,360);}
else {Fl_Value_Slider_set_minimum(s,-360); Fl_Value_Slider_set_maximum(s,360);}
Fl_Value_Slider_set_step(s,1);
Fl_Value_Slider_set_value(s,my_args[n]);
Fl_Value_Slider_set_align(s,FL_ALIGN_LEFT);
#ifdef __LP64__
Fl_Value_Slider_set_callback_with_user_data(s,slider_cb, (void*)(long long) n);
#else
Fl_Value_Slider_set_callback_with_user_data(s,slider_cb, (void*) n);
#endif
}
Fl_Double_Window_end(window);
Fl_Double_Window_show_with_args(window, argc, argv);
return (Fl_run());
}