X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/ac50e6949a01a9944c170f35f41bfb631ce8bbd1..53c43278a9d71e15f43cbe359abea50d3775d8ad:/src/osx/carbon/dcscreen.cpp diff --git a/src/osx/carbon/dcscreen.cpp b/src/osx/carbon/dcscreen.cpp index 306ea3e7f2..6bb57f78b3 100644 --- a/src/osx/carbon/dcscreen.cpp +++ b/src/osx/carbon/dcscreen.cpp @@ -30,12 +30,17 @@ IMPLEMENT_ABSTRACT_CLASS(wxScreenDCImpl, wxWindowDCImpl) wxScreenDCImpl::wxScreenDCImpl( wxDC *owner ) : wxWindowDCImpl( owner ) { -#if wxOSX_USE_COCOA_OR_IPHONE - m_graphicContext = NULL; - m_ok = false ; -#else +#if wxOSX_USE_COCOA_OR_CARBON CGRect cgbounds ; cgbounds = CGDisplayBounds(CGMainDisplayID()); + m_width = (wxCoord)cgbounds.size.width; + m_height = (wxCoord)cgbounds.size.height; +#else + wxDisplaySize( &m_width, &m_height ); +#endif +#if wxOSX_USE_COCOA_OR_IPHONE + SetGraphicsContext( wxGraphicsContext::Create() ); +#else Rect bounds; bounds.top = (short)cgbounds.origin.y; bounds.left = (short)cgbounds.origin.x; @@ -45,10 +50,8 @@ wxScreenDCImpl::wxScreenDCImpl( wxDC *owner ) : CreateNewWindow( kOverlayWindowClass, overlayAttributes, &bounds, (WindowRef*) &m_overlayWindow ); ShowWindow((WindowRef)m_overlayWindow); SetGraphicsContext( wxGraphicsContext::CreateFromNativeWindow( m_overlayWindow ) ); - m_width = (wxCoord)cgbounds.size.width; - m_height = (wxCoord)cgbounds.size.height; - m_ok = true ; #endif + m_ok = true ; } wxScreenDCImpl::~wxScreenDCImpl() @@ -61,35 +64,33 @@ wxScreenDCImpl::~wxScreenDCImpl() #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 + 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 = grabViaOpenGL(kCGNullDirectDisplay, srcRect); - + wxASSERT_MSG(image, wxT("wxScreenDC::GetAsBitmap - unable to get screenshot.")); - + CGContextDrawImage(context, srcRect, image); - + CGContextRestoreGState(context); #endif return bmp;