From bdb63b3f07cba389ce3fb584218389349561321c Mon Sep 17 00:00:00 2001 From: Matthias Melcher Date: Fri, 16 Mar 2018 12:48:29 +0000 Subject: Android: clipping regions code grew so big, they moved into their own header and source file. git-svn-id: file:///fltk/svn/fltk/branches/branch-1.4@12758 ea41ed52-d2ee-0310-a9c1-e6b18d33e121 --- src/drivers/Android/Fl_Android_Graphics_Driver.H | 133 +---------------------- 1 file changed, 1 insertion(+), 132 deletions(-) (limited to 'src/drivers/Android/Fl_Android_Graphics_Driver.H') diff --git a/src/drivers/Android/Fl_Android_Graphics_Driver.H b/src/drivers/Android/Fl_Android_Graphics_Driver.H index 53118dc15..db8984c4c 100644 --- a/src/drivers/Android/Fl_Android_Graphics_Driver.H +++ b/src/drivers/Android/Fl_Android_Graphics_Driver.H @@ -26,144 +26,13 @@ #define FL_ANDROID_GRAPHICS_DRIVER_H #include +#include "Fl_Android_Graphics_Clipping.H" #include class Fl_Android_Window_Driver; -/** - * The Fl_Rect_Region describes a rectangular clipping region. - * - * Contrary to common FLTK convention, rectangles are stored with coordinates - * instead of their width and height to accelerate calculations. The discreet - * constructor however uses the old convention for convenience. - */ -class Fl_Rect_Region -{ -public: - enum Type { - EMPTY = 0, SAME, LESS, MORE, INFINITE - }; - - Fl_Rect_Region(); - Fl_Rect_Region(int x, int y, int w, int h); - Fl_Rect_Region(const Fl_Rect_Region&); - Fl_Rect_Region(enum Type what); - virtual ~Fl_Rect_Region() { } - - int x() const { return pLeft; } - int y() const { return pTop; } - int w() const { return pRight - pLeft; } - int h() const { return pBottom - pTop; } - - int left() const { return pLeft; } - int top() const { return pTop; } - int right() const { return pRight; } - int bottom() const { return pBottom; } - - bool is_empty() const; - bool is_infinite() const; - - void set_empty(); - void set(int x, int y, int w, int h); - void set_ltrb(int l, int t, int r, int b); - virtual void set(const Fl_Rect_Region &r); - virtual int intersect_with(const Fl_Rect_Region &r); - - virtual void print(const char*) const; - -protected: - int pLeft, pTop, pRight, pBottom; - -private: - Fl_Rect_Region& operator = (const Fl_Rect_Region& other); -}; - - -/** - * The Fl_Complex_Region represents a clipping region of any shape. - * - * This class is organized in a tree-like structure. If the region is - * rectangular, is_simple() returns 1 and the rectangle can be used just - * as in Fl_Rect_Region. - * - * If a more complex representation is needed, the first list of - * subregions is organizen in horizontal strips. The root region rect - * will contain the outline of all subregions, and the subregions - * will either be simple rectangles, or they will contain a second - * level of subregions, subdividing the horizontal region into vertical - * columns. - * - * When reading, the tree can be easily walked using recursion. - */ -class Fl_Complex_Region : public Fl_Rect_Region -{ - class Iterator { - public: - Iterator(Fl_Complex_Region *r); - bool operator!= (const Iterator& other) const; - const Iterator& operator++ (); - Fl_Complex_Region *operator* () const; - Fl_Complex_Region *pRegion; - }; - - class Overlapping { - class OverlappingIterator { - public: - OverlappingIterator(Overlapping *ov); - bool operator!= (const OverlappingIterator& other) const; - const OverlappingIterator& operator++ (); - Overlapping *operator* () const; - Overlapping *pOv; - }; - public: - Overlapping(Fl_Complex_Region *rgn, const Fl_Rect_Region &rect); - OverlappingIterator begin(); - OverlappingIterator end(); - Fl_Rect_Region &clipped_rect(); - bool intersects(); - bool find_intersecting(); - bool find_next(); - Fl_Complex_Region *pRegion; - Fl_Rect_Region pOriginalRect; - Fl_Rect_Region pClippedRect; - }; - -public: - Fl_Complex_Region(); - Fl_Complex_Region(const Fl_Rect_Region&); - virtual ~Fl_Complex_Region() override; - - virtual void set(const Fl_Rect_Region &r) override; - void set(const Fl_Complex_Region &r); - Fl_Complex_Region *subregion() const { return pSubregion; } - Fl_Complex_Region *next() const { return pNext; } - Fl_Complex_Region *parent() const { return pParent; } - char is_simple() const { return pSubregion==0; } - char is_complex() const { return pSubregion!=0; } - - virtual int intersect_with(const Fl_Rect_Region &r) override; - int subtract(const Fl_Rect_Region &r); - - virtual void print(const char*) const override; - - Iterator begin(); - Iterator end(); - - Overlapping overlapping(const Fl_Rect_Region &r); - -protected: - void print_data(int indent) const; - int subtract_smaller_region(const Fl_Rect_Region &r); - Fl_Complex_Region *add_subregion(); - - Fl_Complex_Region *pSubregion = 0L; - Fl_Complex_Region *pParent = 0L; - Fl_Complex_Region *pNext = 0L; -}; - - /** \brief The Windows-specific graphics driver class. -- cgit v1.2.3