diff options
| author | Matthias Melcher <fltk@matthiasm.com> | 2018-03-15 21:17:16 +0000 |
|---|---|---|
| committer | Matthias Melcher <fltk@matthiasm.com> | 2018-03-15 21:17:16 +0000 |
| commit | 6a145ed63aa48944b8dced0d5a6fbcaffda507e7 (patch) | |
| tree | 1f0fd0c2b40f7441d4f8f38f53e7cf8abf5524f5 /src/drivers/Android/Fl_Android_Graphics_Driver.H | |
| parent | 726cb77717e00de9cd6d9accad0a69f4ae7a6859 (diff) | |
Android: window clipping working fl_rectf.
This code is not very beautiful, but the resulting class should be
easy to use. A range-based loop can be used to find all relevant
clipping rectangles for a drawing call.
git-svn-id: file:///fltk/svn/fltk/branches/branch-1.4@12754 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
Diffstat (limited to 'src/drivers/Android/Fl_Android_Graphics_Driver.H')
| -rw-r--r-- | src/drivers/Android/Fl_Android_Graphics_Driver.H | 56 |
1 files changed, 45 insertions, 11 deletions
diff --git a/src/drivers/Android/Fl_Android_Graphics_Driver.H b/src/drivers/Android/Fl_Android_Graphics_Driver.H index af106785d..e20f02a19 100644 --- a/src/drivers/Android/Fl_Android_Graphics_Driver.H +++ b/src/drivers/Android/Fl_Android_Graphics_Driver.H @@ -80,6 +80,7 @@ private: Fl_Rect_Region& operator = (const Fl_Rect_Region& other); }; + /** * The Fl_Complex_Region represents a clipping region of any shape. * @@ -98,32 +99,65 @@ private: */ 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, 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 set(int x, int y, int w, int h); -// virtual void set(Fl_Rect_Region*); -// void subtract(Fl_Rect_Region*); -// void intersect(Fl_Rect_Region*); -// void clone(Fl_Complex_Region*); - char is_simple() const { return pSubregion==0; } - char is_complex() const { return pSubregion!=0; } + virtual void print(const char*) const override; - Fl_Complex_Region *subregion() const { return pSubregion; } - Fl_Complex_Region *next() const { return pNext; } + Iterator begin(); + Iterator end(); - Fl_Complex_Region *add_subregion(); + Overlapping overlapping(Fl_Rect_Region &r); - virtual void print(const char*) const override; 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; |
