From cdf85352c42dd2f3b43703897148e8fa513c9cdc Mon Sep 17 00:00:00 2001 From: Matthias Melcher Date: Sun, 17 Apr 2016 15:36:23 +0000 Subject: virtualized some Region calls. There is a deeper issue here: regions should be handled by the graphics driver that is associated with the Fl_Window of this widget... . git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3-porting@11643 ea41ed52-d2ee-0310-a9c1-e6b18d33e121 --- src/drivers/Quartz/Fl_Quartz_Graphics_Driver.H | 3 +++ src/drivers/Quartz/Fl_Quartz_Graphics_Driver.cxx | 6 +++--- src/drivers/Quartz/Fl_Quartz_Graphics_Driver_rect.cxx | 6 +++--- 3 files changed, 9 insertions(+), 6 deletions(-) (limited to 'src/drivers/Quartz') diff --git a/src/drivers/Quartz/Fl_Quartz_Graphics_Driver.H b/src/drivers/Quartz/Fl_Quartz_Graphics_Driver.H index 30cb8d984..d022ff1df 100644 --- a/src/drivers/Quartz/Fl_Quartz_Graphics_Driver.H +++ b/src/drivers/Quartz/Fl_Quartz_Graphics_Driver.H @@ -64,6 +64,9 @@ public: void copy_offscreen(int x, int y, int w, int h, Fl_Offscreen pixmap, int srcx, int srcy); void draw_CGImage(CGImageRef cgimg, int x, int y, int w, int h, int srcx, int srcy, int sw, int sh); static CGRect fl_cgrectmake_cocoa(int x, int y, int w, int h); + void add_rectangle_to_region(Fl_Region r, int x, int y, int w, int h); + Fl_Region XRectangleRegion(int x, int y, int w, int h); + void XDestroyRegion(Fl_Region r); protected: void transformed_vertex0(float x, float y); void fixloop(); diff --git a/src/drivers/Quartz/Fl_Quartz_Graphics_Driver.cxx b/src/drivers/Quartz/Fl_Quartz_Graphics_Driver.cxx index 90b4d5a8c..8d5cff37b 100644 --- a/src/drivers/Quartz/Fl_Quartz_Graphics_Driver.cxx +++ b/src/drivers/Quartz/Fl_Quartz_Graphics_Driver.cxx @@ -76,7 +76,7 @@ CGRect Fl_Quartz_Graphics_Driver::fl_cgrectmake_cocoa(int x, int y, int w, int h return CGRectMake(x - 0.5, y - 0.5, w, h); } -void Fl_Graphics_Driver::add_rectangle_to_region(Fl_Region r, int X, int Y, int W, int H) { +void Fl_Quartz_Graphics_Driver::add_rectangle_to_region(Fl_Region r, int X, int Y, int W, int H) { CGRect arg = Fl_Quartz_Graphics_Driver::fl_cgrectmake_cocoa(X, Y, W, H); int j; // don't add a rectangle totally inside the Fl_Region for(j = 0; j < r->count; j++) { @@ -88,7 +88,7 @@ void Fl_Graphics_Driver::add_rectangle_to_region(Fl_Region r, int X, int Y, int } } -Fl_Region Fl_Graphics_Driver::XRectangleRegion(int x, int y, int w, int h) { +Fl_Region Fl_Quartz_Graphics_Driver::XRectangleRegion(int x, int y, int w, int h) { Fl_Region R = (Fl_Region)malloc(sizeof(*R)); R->count = 1; R->rects = (CGRect *)malloc(sizeof(CGRect)); @@ -96,7 +96,7 @@ Fl_Region Fl_Graphics_Driver::XRectangleRegion(int x, int y, int w, int h) { return R; } -void Fl_Graphics_Driver::XDestroyRegion(Fl_Region r) { +void Fl_Quartz_Graphics_Driver::XDestroyRegion(Fl_Region r) { if(r) { free(r->rects); free(r); diff --git a/src/drivers/Quartz/Fl_Quartz_Graphics_Driver_rect.cxx b/src/drivers/Quartz/Fl_Quartz_Graphics_Driver_rect.cxx index be31149f9..d61c7ad7e 100644 --- a/src/drivers/Quartz/Fl_Quartz_Graphics_Driver_rect.cxx +++ b/src/drivers/Quartz/Fl_Quartz_Graphics_Driver_rect.cxx @@ -202,7 +202,7 @@ void Fl_Quartz_Graphics_Driver::polygon(int x, int y, int x1, int y1, int x2, in // 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); + if (current == NULL) return Fl_Graphics_Driver::default_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; @@ -217,8 +217,8 @@ static Fl_Region intersect_region_and_rect(Fl_Region current, int x,int y,int w, 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); + Fl_Graphics_Driver::default_driver().XDestroyRegion(outr); + outr = Fl_Graphics_Driver::default_driver().XRectangleRegion(0,0,0,0); } return outr; } -- cgit v1.2.3