summaryrefslogtreecommitdiff
path: root/FL
diff options
context:
space:
mode:
authorManolo Gouy <Manolo>2016-02-26 12:51:47 +0000
committerManolo Gouy <Manolo>2016-02-26 12:51:47 +0000
commit682f95079691dd9c9b0677cb66e727397f910e0d (patch)
tree9be00996ebe41d8d87fb1965ceff4f6f69b41310 /FL
parente1f5f5f7ec75ed203fb14571e6bcbf6b0bd30771 (diff)
Create class Fl_Widget_Surface that supports draw(Fl_Widget *, int, int).
This simplifies the implementation of Fl_Copy_Surface and Fl_Image_Surface which now are made to derive from Fl_Widget_Surface. git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3-porting@11220 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
Diffstat (limited to 'FL')
-rw-r--r--FL/Fl_Copy_Surface.H40
-rw-r--r--FL/Fl_Image_Surface.H23
-rw-r--r--FL/Fl_Paged_Device.H29
-rw-r--r--FL/Fl_Printer.H2
-rw-r--r--FL/Fl_Widget_Surface.H61
-rw-r--r--FL/Fl_Window.H5
6 files changed, 81 insertions, 79 deletions
diff --git a/FL/Fl_Copy_Surface.H b/FL/Fl_Copy_Surface.H
index 7bd26ee01..292d04577 100644
--- a/FL/Fl_Copy_Surface.H
+++ b/FL/Fl_Copy_Surface.H
@@ -48,11 +48,10 @@
Applications to which the clipboard content is pasted can use the flavor that suits them best.
\li X11: the graphical data are copied to the clipboard as an image in BMP format.
*/
-class FL_EXPORT Fl_Copy_Surface : public Fl_Surface_Device {
+class FL_EXPORT Fl_Copy_Surface : public Fl_Widget_Surface {
private:
int width;
int height;
- Fl_Paged_Device *helper;
#ifdef __APPLE__ // PORTME: Fl_Surface_Driver - platform surface driver
CFMutableDataRef pdfdata;
CGContextRef oldgc;
@@ -72,12 +71,13 @@ private:
Window oldwindow;
Fl_Surface_Device *_ss;
#endif
+protected:
+ void translate(int x, int y);
+ void untranslate();
public:
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);
- void draw_decorated_window(Fl_Window* win, int delta_x = 0, int delta_y = 0);
/** Returns the pixel width of the copy surface */
int w() { return width; }
/** Returns the pixel height of the copy surface */
@@ -86,47 +86,15 @@ public:
#if defined(__APPLE__) // PORTME: Fl_Surface_Driver - platform surface driver
-/* Mac class to reimplement Fl_Paged_Device::printable_rect() */
-class FL_EXPORT Fl_Quartz_Surface_ : public Fl_System_Printer {
-protected:
- int width;
- int height;
-public:
- 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_EXPORT Fl_GDI_Surface_ : public Fl_Paged_Device {
- int width;
- int height;
- unsigned depth;
- POINT origins[10];
-public:
- Fl_GDI_Surface_();
- virtual void translate(int x, int y);
- virtual void untranslate();
- virtual ~Fl_GDI_Surface_();
-};
-
#elif defined(FL_PORTING)
# pragma message "FL_PORTING: define a drawing surface for your platform"
#elif !defined(FL_DOXYGEN)
-/* Xlib class to implement translate()/untranslate() */
-class FL_EXPORT Fl_Xlib_Surface_ : public Fl_Paged_Device {
-public:
- Fl_Xlib_Surface_();
- virtual void translate(int x, int y);
- virtual void untranslate();
- virtual ~Fl_Xlib_Surface_();
-};
-
#endif
#endif // Fl_Copy_Surface_H
diff --git a/FL/Fl_Image_Surface.H b/FL/Fl_Image_Surface.H
index 878dffe22..b335b79a5 100644
--- a/FL/Fl_Image_Surface.H
+++ b/FL/Fl_Image_Surface.H
@@ -44,12 +44,11 @@
Fl_Display_Device::display_device()->set_current(); // direct graphics requests back to the display
\endcode
*/
-class FL_EXPORT Fl_Image_Surface : public Fl_Surface_Device {
+class FL_EXPORT Fl_Image_Surface : public Fl_Widget_Surface {
private:
Fl_Offscreen offscreen;
int width;
int height;
- Fl_Paged_Device *helper;
#ifdef __APPLE__ // PORTME: Fl_Surface_Driver - platform image surface driver
#elif defined(WIN32)
HDC _sgc;
@@ -62,31 +61,17 @@ private:
Fl_Surface_Device *previous;
Window pre_window;
#endif
+protected:
+ void translate(int x, int y);
+ void untranslate();
public:
Fl_Image_Surface(int w, int h, int highres = 0);
~Fl_Image_Surface();
void set_current();
- void draw(Fl_Widget*, int delta_x = 0, int delta_y = 0);
Fl_RGB_Image *image();
- void draw_decorated_window(Fl_Window* win, int delta_x = 0, int delta_y = 0);
Fl_Shared_Image *highres_image();
};
-#ifdef __APPLE__ // PORTME: Fl_Surface_Driver - platform surface driver
-/* Mac class to implement translate()/untranslate() for a flipped bitmap graphics context */
-class FL_EXPORT Fl_Quartz_Flipped_Surface_ : public Fl_Quartz_Surface_ {
-public:
- Fl_Quartz_Flipped_Surface_(int w, int h);
- void translate(int x, int y);
- void untranslate();
- virtual ~Fl_Quartz_Flipped_Surface_() {};
-};
-#elif defined(WIN32)
-#elif defined(FL_PORTING)
-# pragma message "FL_PORTING: define a helper class for Fl_Image_Surface if needed"
-#else
-#endif
-
#endif // Fl_Image_Surface_H
//
diff --git a/FL/Fl_Paged_Device.H b/FL/Fl_Paged_Device.H
index 8d55558a6..c2775ac73 100644
--- a/FL/Fl_Paged_Device.H
+++ b/FL/Fl_Paged_Device.H
@@ -23,8 +23,8 @@
#ifndef Fl_Paged_Device_H
#define Fl_Paged_Device_H
-#include <FL/Fl_Device.H>
-#include <FL/Fl_Window.H>
+#include <FL/Fl_Widget_Surface.H>
+
/** \brief Number of elements in enum Page_Format */
#define NO_PAGE_FORMATS 30 /* MSVC6 compilation fix */
@@ -35,10 +35,7 @@
This class has no public constructor: don't instantiate it; use Fl_Printer
or Fl_PostScript_File_Device instead.
*/
-class FL_EXPORT Fl_Paged_Device : public Fl_Surface_Device {
- friend class Fl_Copy_Surface;
- friend class Fl_Image_Surface;
- void draw_decorated_window(Fl_Window *win, int x_offset, int y_offset);
+class FL_EXPORT Fl_Paged_Device : public Fl_Widget_Surface {
public:
/**
\brief Possible page formats.
@@ -101,29 +98,18 @@ public:
/** \brief width, height and name of all elements of the enum \ref Page_Format.
*/
static const page_format page_formats[NO_PAGE_FORMATS];
-private:
- void traverse(Fl_Widget *widget); // finds subwindows of widget and prints them
protected:
- /** \brief horizontal offset to the origin of graphics coordinates */
- int x_offset;
- /** \brief vertical offset to the origin of graphics coordinates */
- int y_offset;
/** \brief The constructor */
- Fl_Paged_Device() : Fl_Surface_Device(NULL), x_offset(0), y_offset(0) {};
+ Fl_Paged_Device() : Fl_Widget_Surface(NULL) {};
public:
/** \brief The destructor */
virtual ~Fl_Paged_Device() {};
virtual int start_job(int pagecount, int *frompage = NULL, int *topage = NULL);
virtual int start_page(void);
- virtual int printable_rect(int *w, int *h);
virtual void margins(int *left, int *top, int *right, int *bottom);
- virtual void origin(int x, int y);
- virtual void origin(int *x, int *y);
virtual void scale(float scale_x, float scale_y = 0.);
virtual void rotate(float angle);
- virtual void translate(int x, int y);
- virtual void untranslate(void);
- virtual void print_widget(Fl_Widget* widget, int delta_x = 0, int delta_y = 0);
+ virtual void print_widget(Fl_Widget* widget, int delta_x = 0, int delta_y = 0) {draw(widget, delta_x, delta_y);}
/** Prints a window with its title bar and frame if any.
\p x_offset and \p y_offset are optional coordinates of where to position the window top left.
@@ -131,8 +117,9 @@ public:
Use Fl_Window::decorated_w() and Fl_Window::decorated_h() to get the size of the
printed window.
*/
- void print_window(Fl_Window *win, int x_offset = 0, int y_offset = 0);
- virtual void print_window_part(Fl_Window *win, int x, int y, int w, int h, int delta_x = 0, int delta_y = 0);
+ void print_window(Fl_Window *win, int x_offset = 0, int y_offset = 0) {
+ draw_decorated_window(win, x_offset, y_offset);
+ }
virtual int end_page (void);
virtual void end_job (void);
};
diff --git a/FL/Fl_Printer.H b/FL/Fl_Printer.H
index 918f20ed0..052a102bf 100644
--- a/FL/Fl_Printer.H
+++ b/FL/Fl_Printer.H
@@ -84,6 +84,7 @@ public:
int end_page (void);
void end_job (void);
#ifdef __APPLE__ // PORTME: Fl_Surface_Driver ? - platform printer driver
+ void draw_decorated_window(Fl_Window *win, int x_offset, int y_offset);
void print_window_part(Fl_Window *win, int x, int y, int w, int h, int delta_x, int delta_y);
#endif
/** \brief The destructor */
@@ -196,6 +197,7 @@ public:
void end_job (void);
void print_widget(Fl_Widget* widget, int delta_x=0, int delta_y=0);
void print_window_part(Fl_Window *win, int x, int y, int w, int h, int delta_x=0, int delta_y=0);
+ void draw_decorated_window(Fl_Window *win, int x_offset, int y_offset);
void set_current(void);
Fl_Graphics_Driver* driver(void);
diff --git a/FL/Fl_Widget_Surface.H b/FL/Fl_Widget_Surface.H
new file mode 100644
index 000000000..c123db560
--- /dev/null
+++ b/FL/Fl_Widget_Surface.H
@@ -0,0 +1,61 @@
+//
+// "$Id: Fl_Widget_Surface.H 11217 2016-02-25 17:56:48Z manolo $"
+//
+// Drivers code for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2016 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_Widget_Surface_h
+#define Fl_Widget_Surface_h
+
+#include <FL/Fl_Device.H>
+#include <FL/Fl_Window.H>
+
+/** A surface on which any FLTK widget can be drawn.
+ */
+class FL_EXPORT Fl_Widget_Surface : public Fl_Surface_Device {
+private:
+ void traverse(Fl_Widget *widget); // finds subwindows of widget and prints them
+protected:
+ /** \brief horizontal offset to the origin of graphics coordinates */
+ int x_offset;
+ /** \brief vertical offset to the origin of graphics coordinates */
+ int y_offset;
+public:
+ Fl_Widget_Surface(Fl_Graphics_Driver *d);
+ /**
+ Translates the current graphics origin accounting for the current rotation.
+
+ This function is only useful after a rotate() call.
+ Each translate() call must be matched by an untranslate() call.
+ Successive translate() calls add up their effects.
+ */
+ virtual void translate(int x, int y) {}
+ /**
+ Undoes the effect of a previous translate() call.
+ */
+ virtual void untranslate(void) {}
+ virtual void draw(Fl_Widget* widget, int delta_x = 0, int delta_y = 0);
+ virtual void draw_decorated_window(Fl_Window *win, int x_offset = 0, int y_offset = 0);
+ virtual void print_window_part(Fl_Window *win, int x, int y, int w, int h, int delta_x = 0, int delta_y = 0);
+ virtual int printable_rect(int *w, int *h);
+ virtual void origin(int x, int y);
+ virtual void origin(int *x, int *y);
+};
+
+#endif /* Fl_Widget_Surface_h */
+
+//
+// End of "$Id: Fl_Widget_Surface.H 11217 2016-02-25 17:56:48Z manolo $".
+//
diff --git a/FL/Fl_Window.H b/FL/Fl_Window.H
index d6ffa6853..88b3a0737 100644
--- a/FL/Fl_Window.H
+++ b/FL/Fl_Window.H
@@ -71,7 +71,6 @@ class FL_EXPORT Fl_Window : public Fl_Group {
friend class Fl_X;
friend class Fl_Window_Driver;
- friend class Fl_Paged_Device;
Fl_Window_Driver *i; // points at the system-specific stuff
struct icon_data {
@@ -99,8 +98,6 @@ class FL_EXPORT Fl_Window : public Fl_Group {
uchar size_range_set;
// cursor stuff
Fl_Cursor cursor_default;
- // Captures the titlebar and borders of the window, if they exist.
- void capture_titlebar_and_borders(Fl_Shared_Image*& top, Fl_Shared_Image*& left, Fl_Shared_Image*& bottom, Fl_Shared_Image*& right);
protected:
/** Data supporting a non-rectangular window shape */
@@ -636,6 +633,8 @@ public:
*/
int decorated_h();
+ // Captures the titlebar and borders of the window, if they exist.
+ void capture_titlebar_and_borders(Fl_Shared_Image*& top, Fl_Shared_Image*& left, Fl_Shared_Image*& bottom, Fl_Shared_Image*& right);
Fl_Window_Driver *driver() { return i; }
};