]> git.saurik.com Git - wxWidgets.git/blobdiff - src/osx/carbon/dcscreen.cpp
wrong override params
[wxWidgets.git] / src / osx / carbon / dcscreen.cpp
index 6cd9b891fe8f46eb31a27629eb47a03dc51a8700..5622d557a76672760f73106f9aaacd4e072d4e47 100644 (file)
@@ -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,9 @@
 
 #include "wx/osx/private.h"
 #include "wx/graphics.h"
+#if wxOSX_USE_COCOA_OR_CARBON
+#include "wx/osx/private/glgrab.h"
+#endif
 
 IMPLEMENT_ABSTRACT_CLASS(wxScreenDCImpl, wxWindowDCImpl)
 
@@ -28,8 +31,8 @@ wxScreenDCImpl::wxScreenDCImpl( wxDC *owner ) :
    wxWindowDCImpl( owner )
 {
 #if wxOSX_USE_COCOA_OR_IPHONE
-    m_graphicContext = NULL;
-    m_ok = false ;
+    SetGraphicsContext( wxGraphicsContext::Create() );
+    m_ok = true ;
 #else
     CGRect cgbounds ;
     cgbounds = CGDisplayBounds(CGMainDisplayID());
@@ -57,3 +60,39 @@ wxScreenDCImpl::~wxScreenDCImpl()
     DisposeWindow((WindowRef) m_overlayWindow );
 #endif
 }
+
+// TODO Switch to CGWindowListCreateImage for 10.5 and above
+
+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);
+#if wxOSX_USE_IPHONE
+#else
+    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);
+#endif
+    return bmp;
+}