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 /test/image.cxx | |
| parent | 67e89232f9ba067825a158734a09e0fa21aacbe3 (diff) | |
Initial revision
git-svn-id: file:///fltk/svn/fltk/trunk@2 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
Diffstat (limited to 'test/image.cxx')
| -rw-r--r-- | test/image.cxx | 108 |
1 files changed, 108 insertions, 0 deletions
diff --git a/test/image.cxx b/test/image.cxx new file mode 100644 index 000000000..3a2e79c44 --- /dev/null +++ b/test/image.cxx @@ -0,0 +1,108 @@ +// Test of class Fl_Image +// +// Notice that Fl_Image is for a static, multiple-reuse image, such +// as an icon or postage stamp. Use fl_draw_image to go directly +// from an buffered image that changes often. + +#include <FL/Fl.H> +#include <FL/Fl_Window.H> +#include <FL/Fl_Button.H> +#include <FL/Fl_Image.H> +#include <stdio.h> +#include <stdlib.h> + +int width = 75; +int height = 75; +uchar *image; + +void make_image() { + image = new uchar[3*width*height]; + uchar *p = image; + for (int y = 0; y < height; y++) { + double Y = double(y)/(height-1); + for (int x = 0; x < width; x++) { + double X = double(x)/(width-1); + *p++ = uchar(255*((1-X)*(1-Y))); // red in upper-left + *p++ = uchar(255*((1-X)*Y)); // green in lower-left + *p++ = uchar(255*(X*Y)); // blue in lower-right + } + } +} + +#include <FL/Fl_Toggle_Button.H> + +Fl_Toggle_Button *leftb,*rightb,*topb,*bottomb,*insideb; +Fl_Button *b; +Fl_Window *w; + +void button_cb(Fl_Widget *,void *) { + int i = 0; + if (leftb->value()) i |= FL_ALIGN_LEFT; + if (rightb->value()) i |= FL_ALIGN_RIGHT; + if (topb->value()) i |= FL_ALIGN_TOP; + if (bottomb->value()) i |= FL_ALIGN_BOTTOM; + if (insideb->value()) i |= FL_ALIGN_INSIDE; + b->align(i); + w->redraw(); +} + +#include <FL/x.H> +#include "list_visuals.C" + +int visid = -1; +int arg(int argc, char **argv, int &i) { + if (argv[i][1] == 'v') { + if (i+1 >= argc) return 0; + visid = atoi(argv[i+1]); + i += 2; + return 2; + } + return 0; +} + +int main(int argc, char **argv) { + +#ifndef WIN32 + int i = 1; + if (Fl::args(argc,argv,i,arg) < argc) { + fprintf(stderr," -v # : use visual\n%s\n",Fl::help); + exit(1); + } + + if (visid >= 0) { + fl_open_display(); + XVisualInfo templt; int num; + templt.visualid = visid; + fl_visual = XGetVisualInfo(fl_display, VisualIDMask, &templt, &num); + if (!fl_visual) { + fprintf(stderr, "No visual with id %d, use one of:\n",visid); + list_visuals(); + exit(1); + } + fl_colormap = XCreateColormap(fl_display, RootWindow(fl_display,fl_screen), + fl_visual->visual, AllocNone); + fl_xpixel(FL_BLACK); // make sure black is allocated in overlay visuals + } else { + Fl::visual(FL_RGB); + } +#endif + + Fl_Window window(400,400); ::w = &window; + Fl_Button b(140,160,120,120,0); ::b = &b; + make_image(); + (new Fl_Image(image, width, height))->label(&b); + leftb = new Fl_Toggle_Button(50,75,50,25,"left"); + leftb->callback(button_cb); + rightb = new Fl_Toggle_Button(100,75,50,25,"right"); + rightb->callback(button_cb); + topb = new Fl_Toggle_Button(150,75,50,25,"top"); + topb->callback(button_cb); + bottomb = new Fl_Toggle_Button(200,75,50,25,"bottom"); + bottomb->callback(button_cb); + insideb = new Fl_Toggle_Button(250,75,50,25,"inside"); + insideb->callback(button_cb); + window.resizable(window); + window.end(); + window.show(argc, argv); + return Fl::run(); +} |
