From: Stefan Csomor Date: Sat, 4 Nov 2006 07:50:06 +0000 (+0000) Subject: adding measuring contexts, streamlining printing code X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/ad667945478cda0c0a33e154f1d4403402cffb9e adding measuring contexts, streamlining printing code git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@43012 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/include/wx/graphics.h b/include/wx/graphics.h index 68eb3ca476..41cd7f95fc 100755 --- a/include/wx/graphics.h +++ b/include/wx/graphics.h @@ -393,6 +393,9 @@ public: static wxGraphicsContext* Create( wxWindow* window ) ; + // create a context that can be used for measuring texts only, no drawing allowed + static wxGraphicsContext * Create(); + wxGraphicsPath CreatePath() const; virtual wxGraphicsPen CreatePen(const wxPen& pen) const; @@ -605,6 +608,9 @@ public : virtual wxGraphicsContext * CreateContext( wxWindow* window ) = 0; + // create a context that can be used for measuring texts only, no drawing allowed + virtual wxGraphicsContext * CreateMeasuringContext() = 0; + // Path virtual wxGraphicsPath CreatePath() = 0; diff --git a/include/wx/mac/carbon/dcprint.h b/include/wx/mac/carbon/dcprint.h index d2527e5991..79f8d3b2f7 100644 --- a/include/wx/mac/carbon/dcprint.h +++ b/include/wx/mac/carbon/dcprint.h @@ -36,9 +36,6 @@ class WXDLLEXPORT wxPrinterDC: public wxDC wxPrintData& GetPrintData() { return m_printData; } virtual wxSize GetPPI() const; -#if wxMAC_USE_CORE_GRAPHICS - void MacSetCGContext( void * cg ) ; -#endif protected: virtual void DoGetSize( int *width, int *height ) const; wxPrintData m_printData ; diff --git a/src/common/dcgraph.cpp b/src/common/dcgraph.cpp index e607c81b10..d5da1bb58b 100644 --- a/src/common/dcgraph.cpp +++ b/src/common/dcgraph.cpp @@ -71,6 +71,9 @@ void wxGCDC::SetGraphicsContext( wxGraphicsContext* ctx ) m_ok = true; // apply the stored transformations to the passed in context ComputeScaleAndOrigin(); + m_graphicContext->SetFont( m_font , m_textForegroundColour ); + m_graphicContext->SetPen( m_pen ); + m_graphicContext->SetBrush( m_brush); } } @@ -78,12 +81,6 @@ wxGCDC::wxGCDC(const wxWindowDC& dc) { Init(); SetGraphicsContext( wxGraphicsContext::Create(dc) ); - if ( dc.GetFont().Ok()) - m_graphicContext->SetFont( m_graphicContext->CreateFont(dc.GetFont(),dc.GetTextForeground())); - if ( dc.GetPen().Ok()) - m_graphicContext->SetPen( m_graphicContext->CreatePen(dc.GetPen())); - if ( dc.GetBrush().Ok()) - m_graphicContext->SetBrush( m_graphicContext->CreateBrush(dc.GetBrush())); } void wxGCDC::Init() diff --git a/src/common/graphcmn.cpp b/src/common/graphcmn.cpp index a64c562fb3..ec0987225e 100644 --- a/src/common/graphcmn.cpp +++ b/src/common/graphcmn.cpp @@ -509,7 +509,7 @@ void wxGraphicsContext::SetPen( const wxGraphicsPen& pen ) void wxGraphicsContext::SetPen( const wxPen& pen ) { - if ( pen.GetStyle() == wxTRANSPARENT ) + if ( !pen.Ok() || pen.GetStyle() == wxTRANSPARENT ) SetPen( wxNullGraphicsPen ); else SetPen( CreatePen( pen ) ); @@ -523,7 +523,7 @@ void wxGraphicsContext::SetBrush( const wxGraphicsBrush& brush ) void wxGraphicsContext::SetBrush( const wxBrush& brush ) { - if ( brush.GetStyle() == wxTRANSPARENT ) + if ( !brush.Ok() || brush.GetStyle() == wxTRANSPARENT ) SetBrush( wxNullGraphicsBrush ); else SetBrush( CreateBrush( brush ) ); @@ -682,6 +682,11 @@ wxGraphicsContext* wxGraphicsContext::Create( wxWindow* window ) return wxGraphicsRenderer::GetDefaultRenderer()->CreateContext(window); } +wxGraphicsContext* wxGraphicsContext::Create() +{ + return wxGraphicsRenderer::GetDefaultRenderer()->CreateMeasuringContext(); +} + //----------------------------------------------------------------------------- // wxGraphicsRenderer //----------------------------------------------------------------------------- diff --git a/src/mac/carbon/dcclient.cpp b/src/mac/carbon/dcclient.cpp index 1cfe5dcb30..9fcd763bb8 100644 --- a/src/mac/carbon/dcclient.cpp +++ b/src/mac/carbon/dcclient.cpp @@ -145,8 +145,6 @@ wxWindowDC::wxWindowDC(wxWindow *window) SetGraphicsContext( wxGraphicsContext::CreateFromNative( cg ) ); } - m_graphicContext->SetPen( m_pen ) ; - m_graphicContext->SetBrush( m_brush ) ; SetClippingRegion( 0 , 0 , m_width , m_height ) ; #else int x , y ; diff --git a/src/mac/carbon/dcmemory.cpp b/src/mac/carbon/dcmemory.cpp index f2519aef95..f30ed64d0f 100644 --- a/src/mac/carbon/dcmemory.cpp +++ b/src/mac/carbon/dcmemory.cpp @@ -100,9 +100,6 @@ void wxMemoryDC::DoSelect( const wxBitmap& bitmap ) CGContextScaleCTM( bmCtx , 1 , -1 ) ; SetGraphicsContext( wxGraphicsContext::CreateFromNative( bmCtx ) ); - m_graphicContext->SetPen( m_pen ) ; - m_graphicContext->SetBrush( m_brush ) ; - m_graphicContext->SetFont( m_font , m_textForegroundColour) ; } m_ok = (m_graphicContext != NULL) ; diff --git a/src/mac/carbon/dcprint.cpp b/src/mac/carbon/dcprint.cpp index 34af3cc1cb..456feb2e30 100644 --- a/src/mac/carbon/dcprint.cpp +++ b/src/mac/carbon/dcprint.cpp @@ -230,7 +230,7 @@ void wxMacCarbonPrinterDC::StartPage( wxPrinterDC* dc ) m_err = noErr ; } #if wxMAC_USE_CORE_GRAPHICS - dc->MacSetCGContext(pageContext) ; + dc->SetGraphicsContext( wxGraphicsContext::CreateFromNative( pageContext ) ); #endif } @@ -247,7 +247,8 @@ void wxMacCarbonPrinterDC::EndPage( wxPrinterDC* dc ) PMSessionEndDocument(native->m_macPrintSession); } #if wxMAC_USE_CORE_GRAPHICS - dc->MacSetCGContext(NULL) ; + // the cg context we got when starting the page isn't valid anymore, so replace it + dc->SetGraphicsContext( wxGraphicsContext::Create() ); #endif } @@ -291,10 +292,9 @@ wxPrinterDC::wxPrinterDC(const wxPrintData& printdata) m_mm_to_pix_y = mm2inches * sz.y; } #if wxMAC_USE_CORE_GRAPHICS -/* - // the cgContext will only be handed over page by page - m_graphicContext = new wxMacCGContext() ; - */ + // we need at least a measuring context because people start measuring before a page + // gets printed at all + SetGraphicsContext( wxGraphicsContext::Create() ); #endif } } @@ -306,23 +306,9 @@ wxSize wxPrinterDC::GetPPI() const wxPrinterDC::~wxPrinterDC(void) { -#if wxMAC_USE_CORE_GRAPHICS -/* - // this context was borrowed - ((wxMacCGContext*)(m_graphicContext))->SetNativeContext( NULL ) ; - */ -#endif delete m_nativePrinterDC ; } -#if wxMAC_USE_CORE_GRAPHICS -void wxPrinterDC::MacSetCGContext( void * cg ) -{ - SetGraphicsContext( wxGraphicsContext::CreateFromNative( cg ) ); - m_graphicContext->SetPen( m_pen ) ; - m_graphicContext->SetBrush( m_brush ) ; -} -#endif bool wxPrinterDC::StartDoc( const wxString& message ) { wxASSERT_MSG( Ok() , wxT("Called wxPrinterDC::StartDoc from an invalid object") ) ; diff --git a/src/mac/carbon/graphics.cpp b/src/mac/carbon/graphics.cpp index e0609ab62d..3778c0d47c 100755 --- a/src/mac/carbon/graphics.cpp +++ b/src/mac/carbon/graphics.cpp @@ -1869,6 +1869,8 @@ public : virtual wxGraphicsContext * CreateContextFromNativeWindow( void * window ); virtual wxGraphicsContext * CreateContext( wxWindow* window ); + + virtual wxGraphicsContext * CreateMeasuringContext(); // Path @@ -1934,6 +1936,11 @@ wxGraphicsContext * wxMacCoreGraphicsRenderer::CreateContext( wxWindow* window ) return new wxMacCoreGraphicsContext(this, window ); } +wxGraphicsContext * wxMacCoreGraphicsRenderer::CreateMeasuringContext() +{ + return new wxMacCoreGraphicsContext(this); +} + // Path wxGraphicsPath wxMacCoreGraphicsRenderer::CreatePath() diff --git a/src/mac/carbon/overlay.cpp b/src/mac/carbon/overlay.cpp index 7bd2957072..eda88f9739 100644 --- a/src/mac/carbon/overlay.cpp +++ b/src/mac/carbon/overlay.cpp @@ -134,10 +134,7 @@ void wxOverlayImpl::Init( wxWindowDC* dc, int x , int y , int width , int height void wxOverlayImpl::BeginDrawing( wxWindowDC* dc) { -// TODO CS dc->SetGraphicsContext( wxGraphicsContext::CreateFromNative( m_overlayContext ) ); - // triggers an application of the already set device origins to the native context - dc->SetUserScale(1,1); wxSize size = dc->GetSize() ; dc->SetClippingRegion( 0 , 0 , size.x , size.y ) ; }