+
+#if wxOSX_USE_IPHONE
+// Apple has allowed usage of this API as of 15th Dec 2009w
+extern CGImageRef UIGetScreenImage();
+#endif
+
+// TODO Switch to CGWindowListCreateImage for 10.5 and above
+
+wxBitmap wxScreenDCImpl::DoGetAsBitmap(const wxRect *subrect) const
+{
+ wxRect rect = subrect ? *subrect : wxRect(0, 0, m_width, m_height);
+
+ wxBitmap bmp(rect.GetSize(), 32);
+
+#if !wxOSX_USE_IPHONE
+ CGRect srcRect = CGRectMake(rect.x, rect.y, rect.width, rect.height);
+
+ 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 = NULL;
+
+#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6
+ if ( UMAGetSystemVersion() >= 10.6)
+ {
+ image = CGDisplayCreateImage(kCGDirectMainDisplay);
+ }
+ else
+#endif
+ {
+ image = grabViaOpenGL(kCGNullDirectDisplay, srcRect);
+ }
+
+ wxASSERT_MSG(image, wxT("wxScreenDC::GetAsBitmap - unable to get screenshot."));
+
+ CGContextDrawImage(context, srcRect, image);
+
+ CGImageRelease(image);
+
+ CGContextRestoreGState(context);
+#else
+ // TODO implement using UIGetScreenImage, CGImageCreateWithImageInRect, CGContextDrawImage
+#endif
+ return bmp;
+}