summaryrefslogtreecommitdiff
path: root/src/Fl_Image.cxx
diff options
context:
space:
mode:
authorMichael R Sweet <michael.r.sweet@gmail.com>1998-10-06 18:21:25 +0000
committerMichael R Sweet <michael.r.sweet@gmail.com>1998-10-06 18:21:25 +0000
commitf9039b2ae21988783feae9b362818e7923e82d14 (patch)
tree6d6fe3679d73448758f9794e7d4d4f6b22a4adad /src/Fl_Image.cxx
parent67e89232f9ba067825a158734a09e0fa21aacbe3 (diff)
Initial revision
git-svn-id: file:///fltk/svn/fltk/trunk@2 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
Diffstat (limited to 'src/Fl_Image.cxx')
-rw-r--r--src/Fl_Image.cxx62
1 files changed, 62 insertions, 0 deletions
diff --git a/src/Fl_Image.cxx b/src/Fl_Image.cxx
new file mode 100644
index 000000000..1aac860d4
--- /dev/null
+++ b/src/Fl_Image.cxx
@@ -0,0 +1,62 @@
+// Fl_Image.C
+
+// Draw a image in a box.
+
+#include <FL/Fl.H>
+#include <FL/fl_draw.H>
+#include <FL/x.H>
+#include <FL/Fl_Widget.H>
+#include <FL/Fl_Menu_Item.H>
+#include <FL/Fl_Image.H>
+
+void Fl_Image::draw(int X, int Y, int W, int H, int cx,int cy) {
+ // clip the box down to the size of image, quit if empty:
+ if (cx < 0) {W += cx; X -= cx; cx = 0;}
+ if (cx+W > w) W = w-cx;
+ if (W <= 0) return;
+ if (cy < 0) {H += cy; Y -= cy; cy = 0;}
+ if (cy+H > h) H = h-cy;
+ if (H <= 0) return;
+ if (!id) {
+ id = (ulong)fl_create_offscreen(w, h);
+ fl_begin_offscreen((Fl_Offscreen)id);
+ fl_draw_image(array, 0, 0, w, h, d, ld);
+ fl_end_offscreen();
+ }
+ fl_copy_offscreen(X, Y, W, H, (Fl_Offscreen)id, cx, cy);
+}
+
+Fl_Image::~Fl_Image() {
+ if (id) fl_delete_offscreen((Fl_Offscreen)id);
+}
+
+static void image_labeltype(
+ const Fl_Label* o, int x, int y, int w, int h, Fl_Align a)
+{
+ Fl_Image* b = (Fl_Image*)(o->value);
+ int cx;
+ if (a & FL_ALIGN_LEFT) cx = 0;
+ else if (a & FL_ALIGN_RIGHT) cx = b->w-w;
+ else cx = (b->w-w)/2;
+ int cy;
+ if (a & FL_ALIGN_TOP) cy = 0;
+ else if (a & FL_ALIGN_BOTTOM) cy = b->h-h;
+ else cy = (b->h-h)/2;
+ b->draw(x,y,w,h,cx,cy);
+}
+
+static void image_measure(const Fl_Label* o, int& w, int& h) {
+ Fl_Image* b = (Fl_Image*)(o->value);
+ w = b->w;
+ h = b->h;
+}
+
+void Fl_Image::label(Fl_Widget* o) {
+ Fl::set_labeltype(_FL_IMAGE_LABEL, image_labeltype, image_measure);
+ o->label(_FL_IMAGE_LABEL, (const char*)this);
+}
+
+void Fl_Image::label(Fl_Menu_Item* o) {
+ Fl::set_labeltype(_FL_IMAGE_LABEL, image_labeltype, image_measure);
+ o->label(_FL_IMAGE_LABEL, (const char*)this);
+}