]> git.saurik.com Git - wxWidgets.git/blobdiff - src/osx/carbon/dcscreen.cpp
Forgot header with OSX prefix
[wxWidgets.git] / src / osx / carbon / dcscreen.cpp
index e544aa4ae4654e750d330a98162d4d7ca1600bd5..3f0d549ce3888f93a7086b5f118841175f8afa5c 100644 (file)
@@ -16,6 +16,7 @@
 
 #include "wx/osx/private.h"
 #include "wx/graphics.h"
 
 #include "wx/osx/private.h"
 #include "wx/graphics.h"
+#include "wx/osx/private/glgrab.h"
 
 IMPLEMENT_ABSTRACT_CLASS(wxScreenDCImpl, wxWindowDCImpl)
 
 
 IMPLEMENT_ABSTRACT_CLASS(wxScreenDCImpl, wxWindowDCImpl)
 
@@ -57,3 +58,37 @@ wxScreenDCImpl::~wxScreenDCImpl()
     DisposeWindow((WindowRef) m_overlayWindow );
 #endif
 }
     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;
+}