X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/b2680ced12cbbed16990007c5fa3ea7730700122..33f4afdbc08a2a8b8438420aa9d16aadee0bacc2:/src/osx/carbon/dcscreen.cpp diff --git a/src/osx/carbon/dcscreen.cpp b/src/osx/carbon/dcscreen.cpp index 6cd9b891fe..3f0d549ce3 100644 --- a/src/osx/carbon/dcscreen.cpp +++ b/src/osx/carbon/dcscreen.cpp @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: src/mac/carbon/dcscreen.cpp +// Name: src/osx/carbon/dcscreen.cpp // Purpose: wxScreenDC class // Author: Stefan Csomor // Modified by: @@ -16,6 +16,7 @@ #include "wx/osx/private.h" #include "wx/graphics.h" +#include "wx/osx/private/glgrab.h" IMPLEMENT_ABSTRACT_CLASS(wxScreenDCImpl, wxWindowDCImpl) @@ -57,3 +58,37 @@ wxScreenDCImpl::~wxScreenDCImpl() DisposeWindow((WindowRef) m_overlayWindow ); #endif } + +wxBitmap wxScreenDCImpl::DoGetAsBitmap(const wxRect *subrect) const +{ + CGRect srcRect = CGRectMake(0, 0, m_width, m_height); + if (subrect) + { + srcRect.origin.x = subrect->GetX(); + srcRect.origin.y = subrect->GetY(); + srcRect.size.width = subrect->GetWidth(); + srcRect.size.height = subrect->GetHeight(); + } + + wxBitmap bmp = wxBitmap(srcRect.size.width, srcRect.size.height, 32); + + CGContextRef context = (CGContextRef)bmp.GetHBITMAP(); + + CGContextSaveGState(context); + + CGContextTranslateCTM( context, 0, m_height ); + CGContextScaleCTM( context, 1, -1 ); + + if ( subrect ) + srcRect = CGRectOffset( srcRect, -subrect->x, -subrect->y ) ; + + CGImageRef image = grabViaOpenGL(kCGNullDirectDisplay, srcRect); + + wxASSERT_MSG(image, wxT("wxScreenDC::GetAsBitmap - unable to get screenshot.")); + + CGContextDrawImage(context, srcRect, image); + + CGContextRestoreGState(context); + + return bmp; +}