diff options
| author | Manolo Gouy <Manolo> | 2017-12-19 14:14:42 +0000 |
|---|---|---|
| committer | Manolo Gouy <Manolo> | 2017-12-19 14:14:42 +0000 |
| commit | c44382e973ebb54396687892c43b92ac0655bbce (patch) | |
| tree | 6b9d90a122e7b21b530ba2c0086dc2bcbac230e4 /src | |
| parent | d8911c5603f1fcc6e3803ae3ad49b704d75cb49f (diff) | |
Scaling capability under MacOS platform: fix capture of scaled window.
git-svn-id: file:///fltk/svn/fltk/branches/branch-1.4@12602 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
Diffstat (limited to 'src')
| -rw-r--r-- | src/Fl_cocoa.mm | 9 | ||||
| -rw-r--r-- | src/drivers/OpenGL/Fl_OpenGL_Display_Device.cxx | 2 |
2 files changed, 6 insertions, 5 deletions
diff --git a/src/Fl_cocoa.mm b/src/Fl_cocoa.mm index 1649f0b53..b36ca5ae8 100644 --- a/src/Fl_cocoa.mm +++ b/src/Fl_cocoa.mm @@ -4177,15 +4177,16 @@ static NSBitmapImageRep* rect_to_NSBitmapImageRep(Fl_Window *win, int x, int y, { NSBitmapImageRep *bitmap = nil; NSRect rect; + float s = Fl_Graphics_Driver::default_driver().scale(); if (win->as_gl_window() && y >= 0) { bitmap = GL_rect_to_nsbitmap(win, x, y, w, h); } else { NSView *winview = nil; if ( through_Fl_X_flush && Fl_Window::current() == win ) { - rect = NSMakeRect(x - 0.5, y - 0.5, w, h); + rect = NSMakeRect(s*x - 0.5, s*y - 0.5, s*w, s*h); } else { - rect = NSMakeRect(x, win->h()-(y+h), w, h); + rect = NSMakeRect(x*s, win->h()*s-(y+h)*s, w*s, h*s); // lock focus to win's view winview = [fl_xid(win) contentView]; #if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4 @@ -4220,8 +4221,8 @@ static NSBitmapImageRep* rect_to_NSBitmapImageRep(Fl_Window *win, int x, int y, if (childbitmap) { // if bitmap is high res and childbitmap is not, childbitmap must be rescaled if ([bitmap pixelsWide] > w && [childbitmap pixelsWide] == clip.size.width) childbitmap = scale_nsbitmapimagerep(childbitmap, 2); - write_bitmap_inside(bitmap, w, childbitmap, - clip.origin.x - x, win->h() - clip.origin.y - clip.size.height - y ); + write_bitmap_inside(bitmap, w*s, childbitmap, + (clip.origin.x - x)*s, (win->h() - clip.origin.y - clip.size.height - y)*s ); } [childbitmap release]; } diff --git a/src/drivers/OpenGL/Fl_OpenGL_Display_Device.cxx b/src/drivers/OpenGL/Fl_OpenGL_Display_Device.cxx index c65c6a3a1..5b1f8b1f8 100644 --- a/src/drivers/OpenGL/Fl_OpenGL_Display_Device.cxx +++ b/src/drivers/OpenGL/Fl_OpenGL_Display_Device.cxx @@ -64,7 +64,7 @@ static uchar *convert_BGRA_to_RGB(uchar *baseAddress, int w, int h, int mByteWid Fl_RGB_Image* Fl_OpenGL_Display_Device::capture_gl_rectangle(Fl_Gl_Window* glw, int x, int y, int w, int h) { float factor = glw->pixels_per_unit(); - if (factor > 1) { + if (factor != 1) { w *= factor; h *= factor; x *= factor; y *= factor; } glw->flush(); // forces a GL redraw, necessary for the glpuzzle demo |
