FLTK - FLTK1.4.1 - demo - arc
文章目录
- FLTK - FLTK1.4.1 - demo - arc
- 概述
- 笔记
- END
FLTK - FLTK1.4.1 - demo - arc
概述
// FLTK - FLTK1.4.1 - demo - arc
// 功能 : 通过滑杆来控制 圆形的移动,旋转,改变角度
// 新增知识点
// 控件自画要从Fl_Widget继承一个子类出来,覆盖虚函数draw(), 构造函数调用父类的构造函数
// 自画时,要保存和恢复剪裁区
// 自画时,要保存和恢复转换矩阵
// 设置颜色 (画东西之前)
// 设置平移因子 (画东西之前)
// 画填充的多边形
// 在画完一个填充的多边形后,需要开始新路径,才能画另外的填充多边形
// 画非填充的多边形
// 滑杆的建立和回调设置
笔记
// FLTK - FLTK1.4.1 - demo - arc
// 功能 : 通过滑杆来控制 圆形的移动,旋转,改变角度
// 新增知识点
// 控件自画要从Fl_Widget继承一个子类出来,覆盖虚函数draw(), 构造函数调用父类的构造函数
// 自画时,要保存和恢复剪裁区
// 自画时,要保存和恢复转换矩阵
// 设置颜色 (画东西之前)
// 设置平移因子 (画东西之前)
// 画填充的多边形
// 在画完一个填充的多边形后,需要开始新路径,才能画另外的填充多边形
// 画非填充的多边形
// 滑杆的建立和回调设置
#include "fltk_test.h"
// 如果要将fl demo的实现搬过来测试,就注释掉下面的宏
// #define DONT_USE_FL_DEMO
#ifdef DONT_USE_FL_DEMO
int fl_demo_main(int argc, char** argv)
{
return 0;
}
#else
#endif // TEST_FL_DEMO
//
// Arc drawing test program for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2015 by Bill Spitzak and others.
//
// This library is free software. Distribution and use rights are outlined in
// the file "COPYING" which should have been included with this file. If this
// file is missing or damaged, see the license at:
//
// https://www.fltk.org/COPYING.php
//
// Please see the following page on how to report bugs and issues:
//
// https://www.fltk.org/bugs.php
//
#include <FL/Fl.H>
#include <FL/Fl_Double_Window.H>
#include <FL/Fl_Hor_Value_Slider.H>
#include <FL/fl_draw.H>
double args[6] = { 140, 140, 50, 0, 360, 0 };
const char* name[6] = { "X", "Y", "R", "start", "end", "rotate" };
// 控件自画要从Fl_Widget继承一个子类出来,覆盖虚函数draw(), 构造函数调用父类的构造函数
class Drawing : public Fl_Widget {
void draw() FL_OVERRIDE {
// 自画时,要保存和恢复剪裁区
fl_push_clip(x(), y(), w(), h());
fl_color(FL_DARK3); // 设置背景色
fl_rectf(x(), y(), w(), h());
// 自画时,要保存和恢复转换矩阵
fl_push_matrix();
if (args[5]) {
fl_translate(x() + w() / 2.0, y() + h() / 2.0);
fl_rotate(args[5]);
fl_translate(-(x() + w() / 2.0), -(y() + h() / 2.0));
}
fl_color(FL_WHITE); // 设置颜色 (画东西之前)
fl_translate(x(), y()); // 设置平移因子 (画东西之前)
fl_begin_complex_polygon(); // 画填充的多边形
fl_arc(args[0], args[1], args[2], args[3], args[4]);
fl_gap(); // 在画完一个多边形后,开始新路径
fl_arc(140, 140, 20, 0, -360);
fl_end_complex_polygon();
fl_color(FL_RED);
fl_begin_line(); // 画非填充的多边形
fl_arc(args[0], args[1], args[2], args[3], args[4]);
fl_end_line();
fl_pop_matrix();
fl_pop_clip();
}
public:
Drawing(int X, int Y, int W, int H) : Fl_Widget(X, Y, W, H) {}
};
Drawing* d;
void slider_cb(Fl_Widget* o, void* v) {
Fl_Slider* s = (Fl_Slider*)o;
args[fl_intptr_t(v)] = s->value();
d->redraw();
}
int fl_demo_main(int argc, char** argv) {
Fl_Double_Window window(300, 500);
Drawing drawing(10, 10, 280, 280);
d = &drawing;
int y = 300;
for (int n = 0; n < 6; n++) {
Fl_Slider* s = new Fl_Hor_Value_Slider(50, y, 240, 25, name[n]); y += 25;
if (n < 3) { s->minimum(0); s->maximum(300); }
else if (n == 5) { s->minimum(0); s->maximum(360); }
else { s->minimum(-360); s->maximum(360); }
s->step(1);
s->value(args[n]);
s->align(FL_ALIGN_LEFT);
s->callback(slider_cb, (void*)(fl_intptr_t)n);
}
window.end();
window.show(argc, argv);
return Fl::run();
}