summaryrefslogtreecommitdiff
path: root/FL/Fl_Copy_Surface.H
diff options
context:
space:
mode:
authorManolo Gouy <Manolo>2014-05-23 16:47:21 +0000
committerManolo Gouy <Manolo>2014-05-23 16:47:21 +0000
commit07dd8ba328117a2599cb39dbaa9f17d4f279f923 (patch)
tree6e4976f79f015d70a9e540b6e66262219fd300a2 /FL/Fl_Copy_Surface.H
parent85af2efe09d6ac88bfc18f8a991ea59af9a5b24b (diff)
Added copy/paste from/to FLTK applications of graphical data.
Added Fl_Image_Surface class to draw into an Fl_Image object. git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3@10159 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
Diffstat (limited to 'FL/Fl_Copy_Surface.H')
-rw-r--r--FL/Fl_Copy_Surface.H135
1 files changed, 135 insertions, 0 deletions
diff --git a/FL/Fl_Copy_Surface.H b/FL/Fl_Copy_Surface.H
new file mode 100644
index 000000000..fc116f3b5
--- /dev/null
+++ b/FL/Fl_Copy_Surface.H
@@ -0,0 +1,135 @@
+//
+// "$Id: Fl_Copy_Surface.H 9869 2013-04-09 20:11:28Z greg.ercolano $"
+//
+// Copy-to-clipboard code for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2014 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:
+//
+// http://www.fltk.org/COPYING.php
+//
+// Please report all bugs and problems on the following page:
+//
+// http://www.fltk.org/str.php
+//
+
+#ifndef Fl_Copy_Surface_H
+#define Fl_Copy_Surface_H
+
+#include <FL/Fl_Paged_Device.H>
+#include <FL/Fl_Printer.H>
+
+#if defined(__APPLE__)
+#include <ApplicationServices/ApplicationServices.h>
+#endif
+
+/** Supports copying of graphical data to the clipboard.
+
+ <br> After creation of an Fl_Copy_Surface object, call set_current() on it, and all subsequent graphics requests
+ will be recorded in the clipboard. It's possible to draw widgets (using Fl_Copy_Surface::draw()
+ ) or to use any of the \ref fl_drawings or the \ref fl_attributes.
+ Finally, delete the Fl_Copy_Surface object to load the clipboard with the graphical data.
+ <br> Fl_GL_Window 's can be copied to the clipboard as well.
+ <br> Usage example:
+ \code
+ Fl_Widget *g = ...; // a widget you want to copy to the clipboard
+ Fl_Copy_Surface *copy_surf = new Fl_Copy_Surface(g->w(), g->h()); // create an Fl_Copy_Surface object
+ copy_surf->set_current(); // direct graphics requests to the clipboard
+ fl_color(FL_WHITE); fl_rectf(0, 0, g->w(), g->h()); // draw a white background
+ copy_surf->draw(g); // draw the g widget in the clipboard
+ delete copy_surf; // after this, the clipboard is loaded
+ Fl_Display_Device::display_device()->set_current(); // direct graphics requests back to the display
+ \endcode
+ Platform details:
+ \li MSWindows: Transparent RGB images copy without transparency.
+ The graphical data is copied to the clipboard as an 'enhanced metafile'.
+ \li Mac OS: The graphical data is copied to the clipboard (a.k.a. pasteboard) in 2 'flavors':
+ 1) in vectorial form as PDF data; 2) in bitmap form as a TIFF image (or PICT for Mac OS 10.3).
+ Applications to which the clipboard content is pasted can use the flavor that suits them best.
+ \li X11: the graphical data is copied to the clipboard as an image in BMP format.
+*/
+class Fl_Copy_Surface : public Fl_Surface_Device {
+private:
+ int width;
+ int height;
+ Fl_Paged_Device *helper;
+#ifdef __APPLE__
+ CFMutableDataRef pdfdata;
+ CGContextRef oldgc;
+ CGContextRef gc;
+ void prepare_copy_pdf_and_tiff(int w, int h);
+ void complete_copy_pdf_and_tiff();
+ void init_PDF_context(int w, int h);
+ static size_t MyPutBytes(void* info, const void* buffer, size_t count);
+#elif defined(WIN32)
+ HDC oldgc;
+ HDC gc;
+#else // Xlib
+ Fl_Offscreen xid;
+ Window oldwindow;
+ Fl_Surface_Device *_ss;
+#endif
+public:
+ static const char *class_id;
+ const char *class_name() {return class_id;};
+ Fl_Copy_Surface(int w, int h);
+ ~Fl_Copy_Surface();
+ void set_current();
+ void draw(Fl_Widget* widget, int delta_x = 0, int delta_y = 0);
+};
+
+#if defined(__APPLE__)
+
+/* Mac class to reimplement Fl_Paged_Device::printable_rect() */
+class Fl_Quartz_Surface_ : public Fl_System_Printer {
+protected:
+ int width;
+ int height;
+public:
+ static const char *class_id;
+ const char *class_name() {return class_id;};
+ Fl_Quartz_Surface_(int w, int h);
+ virtual int printable_rect(int *w, int *h);
+ virtual ~Fl_Quartz_Surface_() {};
+};
+
+#elif defined(WIN32)
+
+/* Win class to implement translate()/untranslate() */
+class Fl_GDI_Surface_ : public Fl_Paged_Device {
+ int width;
+ int height;
+ int depth;
+ POINT origins[10];
+public:
+ static const char *class_id;
+ const char *class_name() {return class_id;};
+ Fl_GDI_Surface_();
+ virtual void translate(int x, int y);
+ virtual void untranslate();
+ virtual ~Fl_GDI_Surface_();
+};
+
+#elif !defined(FL_DOXYGEN)
+
+/* Xlib class to implement translate()/untranslate() */
+class Fl_Xlib_Surface_ : public Fl_Paged_Device {
+public:
+ static const char *class_id;
+ const char *class_name() {return class_id;};
+ Fl_Xlib_Surface_();
+ virtual void translate(int x, int y);
+ virtual void untranslate();
+ virtual ~Fl_Xlib_Surface_();
+};
+
+#endif
+
+#endif // Fl_Copy_Surface_H
+
+//
+// End of "$Id: $".
+//