diff options
| author | Manolo Gouy <Manolo> | 2016-04-02 06:42:34 +0000 |
|---|---|---|
| committer | Manolo Gouy <Manolo> | 2016-04-02 06:42:34 +0000 |
| commit | 7b37960d9520861bb53fdfcaa310bb509d346368 (patch) | |
| tree | 6ef12d46fed59d3b66b6a3a875b02c0c86598e45 | |
| parent | d756822c2b4ae18fff37dc6f7d364b917694bfee (diff) | |
Move intersect_region_and_rect() to the Quartz driver code where it belongs.
git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3-porting@11500 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
| -rw-r--r-- | FL/mac.H | 1 | ||||
| -rw-r--r-- | src/Fl_cocoa.mm | 24 | ||||
| -rw-r--r-- | src/drivers/Quartz/Fl_Quartz_Graphics_Driver_rect.cxx | 27 |
3 files changed, 26 insertions, 26 deletions
@@ -167,7 +167,6 @@ public: int set_cursor(const Fl_RGB_Image*, int, int); static CGImageRef CGImage_from_window_rect(Fl_Window *win, int x, int y, int w, int h); static unsigned char *bitmap_from_window_rect(Fl_Window *win, int x, int y, int w, int h, int *bytesPerPixel); - static Fl_Region intersect_region_and_rect(Fl_Region current, int x,int y,int w, int h); static void *get_carbon_function(const char *name); static void screen_work_area(int &X, int &Y, int &W, int &H, int n); // compute work area of a given screen static int next_marked_length; // next length of marked text after current marked text will have been replaced diff --git a/src/Fl_cocoa.mm b/src/Fl_cocoa.mm index 4fa197e2f..baf4d9825 100644 --- a/src/Fl_cocoa.mm +++ b/src/Fl_cocoa.mm @@ -3549,30 +3549,6 @@ void Fl_Cocoa_Window_Driver::unmap() { } -// intersects current and x,y,w,h rectangle and returns result as a new Fl_Region -Fl_Region Fl_X::intersect_region_and_rect(Fl_Region current, int x,int y,int w, int h) -{ - if (current == NULL) return Fl_Graphics_Driver::XRectangleRegion(x,y,w,h); - CGRect r = Fl_Quartz_Graphics_Driver::fl_cgrectmake_cocoa(x, y, w, h); - Fl_Region outr = (Fl_Region)malloc(sizeof(*outr)); - outr->count = current->count; - outr->rects =(CGRect*)malloc(outr->count * sizeof(CGRect)); - int j = 0; - for(int i = 0; i < current->count; i++) { - CGRect test = CGRectIntersection(current->rects[i], r); - if (!CGRectIsEmpty(test)) outr->rects[j++] = test; - } - if (j) { - outr->count = j; - outr->rects = (CGRect*)realloc(outr->rects, outr->count * sizeof(CGRect)); - } - else { - Fl_Graphics_Driver::XDestroyRegion(outr); - outr = Fl_Graphics_Driver::XRectangleRegion(0,0,0,0); - } - return outr; -} - void Fl_Cocoa_Window_Driver::iconize() { [fl_xid(pWindow) miniaturize:nil]; } diff --git a/src/drivers/Quartz/Fl_Quartz_Graphics_Driver_rect.cxx b/src/drivers/Quartz/Fl_Quartz_Graphics_Driver_rect.cxx index 41c4c5cdd..be31149f9 100644 --- a/src/drivers/Quartz/Fl_Quartz_Graphics_Driver_rect.cxx +++ b/src/drivers/Quartz/Fl_Quartz_Graphics_Driver_rect.cxx @@ -199,6 +199,31 @@ void Fl_Quartz_Graphics_Driver::polygon(int x, int y, int x1, int y1, int x2, in // --- clipping +// intersects current and x,y,w,h rectangle and returns result as a new Fl_Region +static Fl_Region intersect_region_and_rect(Fl_Region current, int x,int y,int w, int h) +{ + if (current == NULL) return Fl_Graphics_Driver::XRectangleRegion(x,y,w,h); + CGRect r = Fl_Quartz_Graphics_Driver::fl_cgrectmake_cocoa(x, y, w, h); + Fl_Region outr = (Fl_Region)malloc(sizeof(*outr)); + outr->count = current->count; + outr->rects =(CGRect*)malloc(outr->count * sizeof(CGRect)); + int j = 0; + for(int i = 0; i < current->count; i++) { + CGRect test = CGRectIntersection(current->rects[i], r); + if (!CGRectIsEmpty(test)) outr->rects[j++] = test; + } + if (j) { + outr->count = j; + outr->rects = (CGRect*)realloc(outr->rects, outr->count * sizeof(CGRect)); + } + else { + Fl_Graphics_Driver::XDestroyRegion(outr); + outr = Fl_Graphics_Driver::XRectangleRegion(0,0,0,0); + } + return outr; +} + + void Fl_Quartz_Graphics_Driver::push_clip(int x, int y, int w, int h) { Fl_Region r; if (w > 0 && h > 0) { @@ -206,7 +231,7 @@ void Fl_Quartz_Graphics_Driver::push_clip(int x, int y, int w, int h) { Fl_Region current = rstack[rstackptr]; if (current) { XDestroyRegion(r); - r = Fl_X::intersect_region_and_rect(current, x,y,w,h); + r = intersect_region_and_rect(current, x,y,w,h); } } else { // make empty clip region: r = XRectangleRegion(0,0,0,0); |
