diff options
Diffstat (limited to 'dw/fltkviewbase.hh')
-rw-r--r-- | dw/fltkviewbase.hh | 54 |
1 files changed, 34 insertions, 20 deletions
diff --git a/dw/fltkviewbase.hh b/dw/fltkviewbase.hh index b5c3ab5e..64697736 100644 --- a/dw/fltkviewbase.hh +++ b/dw/fltkviewbase.hh @@ -4,45 +4,59 @@ #include <time.h> // for time_t #include <sys/time.h> // for time_t in FreeBSD -#include <fltk/Group.h> -#include <fltk/Image.h> -#include <fltk/Scrollbar.h> +#include <FL/Fl_Group.H> +#include <FL/x.H> +#include <FL/Fl_Scrollbar.H> #include "fltkcore.hh" namespace dw { namespace fltk { -class FltkViewBase: public FltkView, public ::fltk::Group +class FltkViewBase: public FltkView, public Fl_Group { private: + class BackBuffer { + private: + int w; + int h; + bool created; + + public: + Fl_Offscreen offscreen; + + BackBuffer (); + ~BackBuffer (); + void setSize(int w, int h); + }; + typedef enum { DRAW_PLAIN, DRAW_CLIPPED, DRAW_BUFFERED } DrawType; int bgColor; core::Region drawRegion; - ::fltk::Rectangle *exposeArea; - static ::fltk::Image *backBuffer; + core::Rectangle *exposeArea; + static BackBuffer *backBuffer; static bool backBufferInUse; void draw (const core::Rectangle *rect, DrawType type); void drawChildWidgets (); inline void clipPoint (int *x, int *y, int border) { if (exposeArea) { - if (*x < exposeArea->x () - border) - *x = exposeArea->x () - border; - if (*x > exposeArea->r () + border) - *x = exposeArea->r () + border; - if (*y < exposeArea->y () - border) - *y = exposeArea->y () - border; - if (*y > exposeArea->b () + border) - *y = exposeArea->b () + border; + if (*x < exposeArea->x - border) + *x = exposeArea->x - border; + if (*x > exposeArea->x + exposeArea->width + border) + *x = exposeArea->x + exposeArea->width + border; + if (*y < exposeArea->y - border) + *y = exposeArea->y - border; + if (*y > exposeArea->y + exposeArea->height + border) + *y = exposeArea->y + exposeArea->height + border; } } - protected: core::Layout *theLayout; int canvasWidth, canvasHeight; int mouse_x, mouse_y; + Fl_Widget *focused_child; virtual int translateViewXToCanvasX (int x) = 0; virtual int translateViewYToCanvasY (int y) = 0; @@ -85,7 +99,7 @@ public: int angle1, int angle2); void drawPolygon (core::style::Color *color, core::style::Color::Shading shading, - bool filled, int points[][2], int npoints); + bool filled, bool convex, int points[][2], int npoints); core::View *getClippingView (int x, int y, int width, int height); void mergeClippingView (core::View *clippingView); @@ -109,11 +123,11 @@ public: int x, int y, int width, int height); bool usesFltkWidgets (); - void addFltkWidget (::fltk::Widget *widget, core::Allocation *allocation); - void removeFltkWidget (::fltk::Widget *widget); - void allocateFltkWidget (::fltk::Widget *widget, + void addFltkWidget (Fl_Widget *widget, core::Allocation *allocation); + void removeFltkWidget (Fl_Widget *widget); + void allocateFltkWidget (Fl_Widget *widget, core::Allocation *allocation); - void drawFltkWidget (::fltk::Widget *widget, core::Rectangle *area); + void drawFltkWidget (Fl_Widget *widget, core::Rectangle *area); }; } // namespace fltk |