diff options
Diffstat (limited to 'src/drivers/Android/Fl_Android_Graphics_Clipping.H')
| -rw-r--r-- | src/drivers/Android/Fl_Android_Graphics_Clipping.H | 31 |
1 files changed, 24 insertions, 7 deletions
diff --git a/src/drivers/Android/Fl_Android_Graphics_Clipping.H b/src/drivers/Android/Fl_Android_Graphics_Clipping.H index 803548bab..7c88b54a5 100644 --- a/src/drivers/Android/Fl_Android_Graphics_Clipping.H +++ b/src/drivers/Android/Fl_Android_Graphics_Clipping.H @@ -69,6 +69,7 @@ public: 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); + void add_to_bbox(const Fl_Rect_Region &r); virtual void print(const char*) const; @@ -87,14 +88,29 @@ private: * 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. + * If a more complex representation is needed, subregions are created which are + * guaranteed to lie within the bounding box of the current region. Subregions + * themselves can again contain sub-subregions to describe the entire clipping + * region, effectively creating a tree where the leafs contain the rectangles + * that together describe the clipping area. + * + * To make life easier, Fl_Complex_Region provides two types of iterator to + * travers the entire tree. + * + * 1. Fl_Complex_Region itself is compatible to C++11 range-based loops and + * can bewalked simply by writing ``for (auto &&it: rgn) { ... }``. + * + * 2. Fl_Complex_Region provides an alternative iterator that loop only through + * leafs that intersects with a given rectangle. The returned object + * provides access to the readily clipped rectangle. + * + * @code + * Fl_Complex_Region rgn(something); + * for (auto &&it: rgn.iterate(Fl_Rect_Region(0, 0, 100, 100)) { + * draw_something(it->rect()); + * } + * @endcode * - * When reading, the tree can be easily walked using recursion. */ class Fl_Complex_Region : public Fl_Rect_Region { @@ -156,6 +172,7 @@ protected: void print_data(int indent) const; int subtract_smaller_region(const Fl_Rect_Region &r); Fl_Complex_Region *add_subregion(); + void compress(); Fl_Complex_Region *pSubregion = 0L; Fl_Complex_Region *pParent = 0L; |
