X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/c0e69d720d8b15f788fe0998806f18c46f7d5d8b..66f75561893ea7b4bf429d1882d9cc0407ba932d:/src/common/dcgraph.cpp?ds=sidebyside diff --git a/src/common/dcgraph.cpp b/src/common/dcgraph.cpp index ee399d4907..9206732e71 100644 --- a/src/common/dcgraph.cpp +++ b/src/common/dcgraph.cpp @@ -57,8 +57,10 @@ static bool TranslateRasterOp(wxRasterOperationMode function, wxCompositionMode { switch ( function ) { - case wxCOPY: // (default) src - *op = wxCOMPOSITION_SOURCE; // + case wxCOPY: // src + // since we are supporting alpha, _OVER is closer to the intention than _SOURCE + // since the latter would overwrite even when alpha is is not set to opaque + *op = wxCOMPOSITION_OVER; break; case wxOR: // src OR dst *op = wxCOMPOSITION_ADD; @@ -203,7 +205,7 @@ void wxGCDCImpl::Init() m_font = *wxNORMAL_FONT; m_brush = *wxWHITE_BRUSH; - m_graphicContext = NULL; + m_graphicContext = wxGraphicsContext::Create(); m_logicalFunctionSupported = true; } @@ -505,7 +507,7 @@ void wxGCDCImpl::SetLogicalFunction( wxRasterOperationMode function ) if (m_logicalFunctionSupported) m_logicalFunctionSupported = m_graphicContext->SetCompositionMode(mode); - if (mode == wxCOMPOSITION_XOR) + if ( function == wxXOR ) m_graphicContext->SetAntialiasMode(wxANTIALIAS_NONE); else m_graphicContext->SetAntialiasMode(wxANTIALIAS_DEFAULT); @@ -981,7 +983,7 @@ void wxGCDCImpl::DoGetTextExtent( const wxString &str, wxCoord *width, wxCoord * wxCoord *descent, wxCoord *externalLeading , const wxFont *theFont ) const { - wxCHECK_RET( IsOk(), wxT("wxGCDC(cg)::DoGetTextExtent - invalid DC") ); + wxCHECK_RET( m_graphicContext, wxT("wxGCDC(cg)::DoGetTextExtent - invalid DC") ); if ( theFont ) { @@ -1009,7 +1011,7 @@ void wxGCDCImpl::DoGetTextExtent( const wxString &str, wxCoord *width, wxCoord * bool wxGCDCImpl::DoGetPartialTextExtents(const wxString& text, wxArrayInt& widths) const { - wxCHECK_MSG( IsOk(), false, wxT("wxGCDC(cg)::DoGetPartialTextExtents - invalid DC") ); + wxCHECK_MSG( m_graphicContext, false, wxT("wxGCDC(cg)::DoGetPartialTextExtents - invalid DC") ); widths.Clear(); widths.Add(0,text.Length()); if ( text.IsEmpty() ) @@ -1047,7 +1049,10 @@ void wxGCDCImpl::Clear(void) m_graphicContext->SetBrush( m_backgroundBrush ); wxPen p = *wxTRANSPARENT_PEN; m_graphicContext->SetPen( p ); + wxCompositionMode formerMode = m_graphicContext->GetCompositionMode(); + m_graphicContext->SetCompositionMode(wxCOMPOSITION_SOURCE); DoDrawRectangle( 0, 0, 32000 , 32000 ); + m_graphicContext->SetCompositionMode(formerMode); m_graphicContext->SetPen( m_pen ); m_graphicContext->SetBrush( m_brush ); }