From 4280b8797f51e28f9c2b960e734f60f31a88325f Mon Sep 17 00:00:00 2001 From: Stefan Csomor Date: Sun, 3 Dec 2006 15:23:42 +0000 Subject: [PATCH] adding raster op hook to graphics context git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@43761 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/dcgraph.h | 1 + src/common/dcgraph.cpp | 51 +++++++++++++++-------------------------- src/common/graphcmn.cpp | 11 +++++++++ 3 files changed, 30 insertions(+), 33 deletions(-) diff --git a/include/wx/dcgraph.h b/include/wx/dcgraph.h index 091ebdfc32..9115ec0af4 100755 --- a/include/wx/dcgraph.h +++ b/include/wx/dcgraph.h @@ -171,6 +171,7 @@ protected: protected: // scaling variables + bool m_logicalFunctionSupported; double m_mm_to_pix_x, m_mm_to_pix_y; wxGraphicsMatrix m_matrixOriginal; wxGraphicsMatrix m_matrixCurrent; diff --git a/src/common/dcgraph.cpp b/src/common/dcgraph.cpp index fc1a6a89e7..a7d8e0781e 100644 --- a/src/common/dcgraph.cpp +++ b/src/common/dcgraph.cpp @@ -27,10 +27,6 @@ #include "wx/region.h" #endif -#ifndef wxMAC_USE_CORE_GRAPHICS_BLEND_MODES - #define wxMAC_USE_CORE_GRAPHICS_BLEND_MODES 0 -#endif - //----------------------------------------------------------------------------- // constants //----------------------------------------------------------------------------- @@ -103,6 +99,7 @@ void wxGCDC::Init() m_brush = *wxWHITE_BRUSH; m_graphicContext = NULL; + m_logicalFunctionSupported = true; } @@ -378,7 +375,7 @@ void wxGCDC::SetBrush( const wxBrush &brush ) m_graphicContext->SetBrush( m_brush ); } } - + void wxGCDC::SetBackground( const wxBrush &brush ) { if (m_backgroundBrush == brush) @@ -395,17 +392,10 @@ void wxGCDC::SetLogicalFunction( int function ) return; m_logicalFunction = function; -#if wxMAC_USE_CORE_GRAPHICS_BLEND_MODES - - CGContextRef cgContext = ((wxCairoContext*)(m_graphicContext))->GetNativeContext(); - if ( m_logicalFunction == wxCOPY ) - CGContextSetBlendMode( cgContext, kCGBlendModeNormal ); - else if ( m_logicalFunction == wxINVERT ) - CGContextSetBlendMode( cgContext, kCGBlendModeExclusion ); + if ( m_graphicContext->SetLogicalFunction( function ) ) + m_logicalFunctionSupported=true; else - CGContextSetBlendMode( cgContext, kCGBlendModeNormal ); -#endif - + m_logicalFunctionSupported=false; } bool wxGCDC::DoFloodFill(wxCoord WXUNUSED(x), wxCoord WXUNUSED(y), @@ -424,11 +414,8 @@ void wxGCDC::DoDrawLine( wxCoord x1, wxCoord y1, wxCoord x2, wxCoord y2 ) { wxCHECK_RET( Ok(), wxT("wxGCDC(cg)::DoDrawLine - invalid DC") ); -#if !wxMAC_USE_CORE_GRAPHICS_BLEND_MODES - - if ( m_logicalFunction != wxCOPY ) + if ( !m_logicalFunctionSupported ) return; -#endif m_graphicContext->StrokeLine(x1,y1,x2,y2); @@ -440,7 +427,7 @@ void wxGCDC::DoCrossHair( wxCoord x, wxCoord y ) { wxCHECK_RET( Ok(), wxT("wxGCDC(cg)::DoCrossHair - invalid DC") ); - if ( m_logicalFunction != wxCOPY ) + if ( !m_logicalFunctionSupported ) return; int w = 0, h = 0; @@ -460,7 +447,7 @@ void wxGCDC::DoDrawArc( wxCoord x1, wxCoord y1, { wxCHECK_RET( Ok(), wxT("wxGCDC(cg)::DoDrawArc - invalid DC") ); - if ( m_logicalFunction != wxCOPY ) + if ( !m_logicalFunctionSupported ) return; double dx = x1 - xc; @@ -505,7 +492,7 @@ void wxGCDC::DoDrawEllipticArc( wxCoord x, wxCoord y, wxCoord w, wxCoord h, { wxCHECK_RET( Ok(), wxT("wxGCDC(cg)::DoDrawEllipticArc - invalid DC") ); - if ( m_logicalFunction != wxCOPY ) + if ( !m_logicalFunctionSupported ) return; bool fill = m_brush.GetStyle() != wxTRANSPARENT; @@ -538,11 +525,8 @@ void wxGCDC::DoDrawLines(int n, wxPoint points[], { wxCHECK_RET( Ok(), wxT("wxGCDC(cg)::DoDrawLines - invalid DC") ); -#if !wxMAC_USE_CORE_GRAPHICS_BLEND_MODES - - if ( m_logicalFunction != wxCOPY ) + if ( !m_logicalFunctionSupported ) return; -#endif wxPoint2DDouble* pointsD = new wxPoint2DDouble[n]; for( int i = 0; i < n; ++i) @@ -560,7 +544,7 @@ void wxGCDC::DoDrawSpline(wxList *points) { wxCHECK_RET( Ok(), wxT("wxGCDC(cg)::DoDrawSpline - invalid DC") ); - if ( m_logicalFunction != wxCOPY ) + if ( !m_logicalFunctionSupported ) return; wxGraphicsPath path = m_graphicContext->CreatePath(); @@ -622,7 +606,7 @@ void wxGCDC::DoDrawPolygon( int n, wxPoint points[], if ( n <= 0 || (m_brush.GetStyle() == wxTRANSPARENT && m_pen.GetStyle() == wxTRANSPARENT ) ) return; - if ( m_logicalFunction != wxCOPY ) + if ( !m_logicalFunctionSupported ) return; bool closeIt = false; @@ -675,7 +659,7 @@ void wxGCDC::DoDrawRectangle(wxCoord x, wxCoord y, wxCoord w, wxCoord h) { wxCHECK_RET( Ok(), wxT("wxGCDC(cg)::DoDrawRectangle - invalid DC") ); - if ( m_logicalFunction != wxCOPY ) + if ( !m_logicalFunctionSupported ) return; // CMB: draw nothing if transformed w or h is 0 @@ -698,7 +682,7 @@ void wxGCDC::DoDrawRoundedRectangle(wxCoord x, wxCoord y, { wxCHECK_RET( Ok(), wxT("wxGCDC(cg)::DoDrawRoundedRectangle - invalid DC") ); - if ( m_logicalFunction != wxCOPY ) + if ( !m_logicalFunctionSupported ) return; if (radius < 0.0) @@ -715,7 +699,7 @@ void wxGCDC::DoDrawEllipse(wxCoord x, wxCoord y, wxCoord w, wxCoord h) { wxCHECK_RET( Ok(), wxT("wxGCDC(cg)::DoDrawEllipse - invalid DC") ); - if ( m_logicalFunction != wxCOPY ) + if ( !m_logicalFunctionSupported ) return; m_graphicContext->DrawEllipse(x,y,w,h); @@ -773,7 +757,7 @@ void wxGCDC::DoDrawRotatedText(const wxString& str, wxCoord x, wxCoord y, if ( str.length() == 0 ) return; - if ( m_logicalFunction != wxCOPY ) + if ( !m_logicalFunctionSupported ) return; if ( m_backgroundMode == wxTRANSPARENT ) @@ -788,7 +772,8 @@ void wxGCDC::DoDrawText(const wxString& str, wxCoord x, wxCoord y) if ( str.length() == 0 ) return; - if ( m_logicalFunction != wxCOPY ) + + if ( !m_logicalFunctionSupported ) return; if ( m_backgroundMode == wxTRANSPARENT ) diff --git a/src/common/graphcmn.cpp b/src/common/graphcmn.cpp index fe68a237c5..15057e108b 100644 --- a/src/common/graphcmn.cpp +++ b/src/common/graphcmn.cpp @@ -495,6 +495,7 @@ IMPLEMENT_ABSTRACT_CLASS(wxGraphicsContext, wxObject) wxGraphicsContext::wxGraphicsContext(wxGraphicsRenderer* renderer) : wxGraphicsObject(renderer) { + m_logicalFunction = wxCOPY; } wxGraphicsContext::~wxGraphicsContext() @@ -535,6 +536,16 @@ void wxGraphicsContext::SetFont( const wxGraphicsFont& font ) m_font = font; } +bool wxGraphicsContext::SetLogicalFunction( int function ) +{ + if ( function == wxCOPY ) + { + m_logicalFunction = function; + return true; + } + return false; +} + void wxGraphicsContext::SetFont( const wxFont& font, const wxColour& colour ) { if ( font.Ok() ) -- 2.45.2