diff options
| author | Michael R Sweet <michael.r.sweet@gmail.com> | 1998-10-06 18:21:25 +0000 |
|---|---|---|
| committer | Michael R Sweet <michael.r.sweet@gmail.com> | 1998-10-06 18:21:25 +0000 |
| commit | f9039b2ae21988783feae9b362818e7923e82d14 (patch) | |
| tree | 6d6fe3679d73448758f9794e7d4d4f6b22a4adad /src/fl_rounded_box.cxx | |
| parent | 67e89232f9ba067825a158734a09e0fa21aacbe3 (diff) | |
Initial revision
git-svn-id: file:///fltk/svn/fltk/trunk@2 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
Diffstat (limited to 'src/fl_rounded_box.cxx')
| -rw-r--r-- | src/fl_rounded_box.cxx | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/src/fl_rounded_box.cxx b/src/fl_rounded_box.cxx new file mode 100644 index 000000000..f670726c1 --- /dev/null +++ b/src/fl_rounded_box.cxx @@ -0,0 +1,75 @@ +/* fl_rounded_box.C + + Less-used box types are in seperate files so they are not linked + in if not used. + +*/ + +#include <FL/Fl.H> +#include <FL/fl_draw.H> + +#define RN 5 +#define RS 15 +#define BW 3 + +static double offset[RN] = { 0.0, 0.07612, 0.29289, 0.61732, 1.0}; + +static void rbox(int fill, int x, int y, int w, int h) { + int i; + int rsx ,rsy, rs; + rsx = w*2/5; rsy = h*2/5; + if (rsx > rsy) rs = rsy; else rs = rsx; + if (rs > RS) rs = RS; + rsx = rs; rsy = rs; + + if (fill) fl_begin_polygon(); else fl_begin_loop(); + for (i=0; i<RN; i++) + fl_vertex(x + offset[RN-i-1]*rsx, y + offset[i] * rsy); + for (i=0; i<RN; i++) + fl_vertex(x + offset[i]*rsx, y + h-1 - offset[RN-i-1] * rsy); + for (i=0; i<RN; i++) + fl_vertex(x + w-1 - offset[RN-i-1]*rsx, y + h-1 - offset[i] * rsy); + for (i=0; i<RN; i++) + fl_vertex(x + w-1 - offset[i]*rsx, y + offset[RN-i-1] * rsy); + if (fill) fl_end_polygon(); else fl_end_loop(); +} + +static void fl_rflat_box(int x, int y, int w, int h, Fl_Color c) { + fl_color(c); rbox(1, x, y, w, h); rbox(0, x, y, w, h); +} + +static void fl_rounded_frame(int x, int y, int w, int h, Fl_Color c) { + fl_color(c); rbox(0, x, y, w, h); +} + +static void fl_rounded_box(int x, int y, int w, int h, Fl_Color c) { + fl_color(c); rbox(1, x, y, w, h); + fl_color(FL_BLACK); rbox(0, x, y, w, h); +} + +static void fl_rshadow_box(int x, int y, int w, int h, Fl_Color c) { + // draw shadow: + fl_color(FL_DARK3); + rbox(1, x+BW, y+BW, w, h); + rbox(0, x+BW, y+BW, w, h); + // draw the box: + fl_rounded_box(x, y, w, h, c); +} + +extern void fl_internal_boxtype(Fl_Boxtype, Fl_Box_Draw_F*); + +Fl_Boxtype define_FL_ROUNDED_BOX() { + fl_internal_boxtype(_FL_ROUNDED_FRAME, fl_rounded_frame); + fl_internal_boxtype(_FL_ROUNDED_BOX, fl_rounded_box); + return _FL_ROUNDED_BOX; +} + +Fl_Boxtype define_FL_RFLAT_BOX() { + fl_internal_boxtype(_FL_RFLAT_BOX, fl_rflat_box); + return _FL_RFLAT_BOX; +} + +Fl_Boxtype define_FL_RSHADOW_BOX() { + fl_internal_boxtype(_FL_RSHADOW_BOX, fl_rshadow_box); + return _FL_RSHADOW_BOX; +} |
