]> git.saurik.com Git - wxWidgets.git/commitdiff
adding measuring contexts, streamlining printing code
authorStefan Csomor <csomor@advancedconcepts.ch>
Sat, 4 Nov 2006 07:50:06 +0000 (07:50 +0000)
committerStefan Csomor <csomor@advancedconcepts.ch>
Sat, 4 Nov 2006 07:50:06 +0000 (07:50 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@43012 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/graphics.h
include/wx/mac/carbon/dcprint.h
src/common/dcgraph.cpp
src/common/graphcmn.cpp
src/mac/carbon/dcclient.cpp
src/mac/carbon/dcmemory.cpp
src/mac/carbon/dcprint.cpp
src/mac/carbon/graphics.cpp
src/mac/carbon/overlay.cpp

index 68eb3ca4766ac1babb087cdc69e08f7d91089c81..41cd7f95fcfcbe1afb0eea503277fdbb44bd44a2 100755 (executable)
@@ -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;
index d2527e599129f8186b2183d49536e1dbc684cb42..79f8d3b2f750a8356ded45ca66977f9b2e033a22 100644 (file)
@@ -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 ;
index e607c81b10bc27616065c987da96048962580cd8..d5da1bb58bb9ee5f952a1b0e080ff3e5a6f5fb2f 100644 (file)
@@ -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()
index a64c562fb35e9bc6300d7d8fc7b7a8ff951e6f76..ec0987225e349af970d305269d9030ab02928827 100644 (file)
@@ -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
 //-----------------------------------------------------------------------------
index 1cfe5dcb3023c21fb39813e3438e6d6fcd6a328d..9fcd763bb8548e9ee2f607705d9328fa28b777d7 100644 (file)
@@ -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 ;
index f2519aef95d1f6ed5725203395de2fd30a45ad8e..f30ed64d0f845427894cd111799bff616a0c64bf 100644 (file)
@@ -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) ;
 
index 34af3cc1cbb61dab5181b05aa314be9883bb0254..456feb2e300fc30c741634f07bd2d7554a755605 100644 (file)
@@ -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") ) ;
index e0609ab62d79e42a9e7567cfcb415513da157abb..3778c0d47c876a06aebd48c77abcda425c77c56e 100755 (executable)
@@ -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()
index 7bd29570725d534d72927f859bc8f537bde004df..eda88f97390e39919a512f69814be04500041d79 100644 (file)
@@ -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 ) ;
 }