Fix referencing of cairo_t returned from wxDCImpl::GetCairoContext().
It was assumed that all callers were going to unref the cairo_t, but that is not true, so callers that are going to unref it should ref it themselves. See #15455 git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@74746 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
parent
ac3bf36958
commit
48829702f1
@ -1654,7 +1654,9 @@ wxCairoContext::wxCairoContext( wxGraphicsRenderer* renderer, const wxPrinterDC&
|
|||||||
|
|
||||||
#ifdef __WXGTK20__
|
#ifdef __WXGTK20__
|
||||||
const wxDCImpl *impl = dc.GetImpl();
|
const wxDCImpl *impl = dc.GetImpl();
|
||||||
Init( (cairo_t*) impl->GetCairoContext() );
|
cairo_t* cr = static_cast<cairo_t*>(impl->GetCairoContext());
|
||||||
|
if (cr)
|
||||||
|
Init(cairo_reference(cr));
|
||||||
#endif
|
#endif
|
||||||
wxSize sz = dc.GetSize();
|
wxSize sz = dc.GetSize();
|
||||||
m_width = sz.x;
|
m_width = sz.x;
|
||||||
@ -1700,7 +1702,7 @@ wxCairoContext::wxCairoContext( wxGraphicsRenderer* renderer, const wxWindowDC&
|
|||||||
#ifdef __WXGTK3__
|
#ifdef __WXGTK3__
|
||||||
cairo_t* cr = static_cast<cairo_t*>(dc.GetImpl()->GetCairoContext());
|
cairo_t* cr = static_cast<cairo_t*>(dc.GetImpl()->GetCairoContext());
|
||||||
if (cr)
|
if (cr)
|
||||||
Init(cr);
|
Init(cairo_reference(cr));
|
||||||
#elif defined __WXGTK20__
|
#elif defined __WXGTK20__
|
||||||
wxGTKDCImpl *impldc = (wxGTKDCImpl*) dc.GetImpl();
|
wxGTKDCImpl *impldc = (wxGTKDCImpl*) dc.GetImpl();
|
||||||
Init( gdk_cairo_create( impldc->GetGDKWindow() ) );
|
Init( gdk_cairo_create( impldc->GetGDKWindow() ) );
|
||||||
@ -1775,7 +1777,7 @@ wxCairoContext::wxCairoContext( wxGraphicsRenderer* renderer, const wxMemoryDC&
|
|||||||
#ifdef __WXGTK3__
|
#ifdef __WXGTK3__
|
||||||
cairo_t* cr = static_cast<cairo_t*>(dc.GetImpl()->GetCairoContext());
|
cairo_t* cr = static_cast<cairo_t*>(dc.GetImpl()->GetCairoContext());
|
||||||
if (cr)
|
if (cr)
|
||||||
Init(cr);
|
Init(cairo_reference(cr));
|
||||||
#elif defined __WXGTK20__
|
#elif defined __WXGTK20__
|
||||||
wxGTKDCImpl *impldc = (wxGTKDCImpl*) dc.GetImpl();
|
wxGTKDCImpl *impldc = (wxGTKDCImpl*) dc.GetImpl();
|
||||||
Init( gdk_cairo_create( impldc->GetGDKWindow() ) );
|
Init( gdk_cairo_create( impldc->GetGDKWindow() ) );
|
||||||
|
@ -181,8 +181,6 @@ void* wxGTKCairoDCImpl::GetCairoContext() const
|
|||||||
cairo_t* cr = NULL;
|
cairo_t* cr = NULL;
|
||||||
if (m_graphicContext)
|
if (m_graphicContext)
|
||||||
cr = static_cast<cairo_t*>(m_graphicContext->GetNativeContext());
|
cr = static_cast<cairo_t*>(m_graphicContext->GetNativeContext());
|
||||||
if (cr)
|
|
||||||
cairo_reference(cr);
|
|
||||||
return cr;
|
return cr;
|
||||||
}
|
}
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
@ -1209,7 +1209,7 @@ bool wxGtkPrinterDCImpl::IsOk() const
|
|||||||
|
|
||||||
void* wxGtkPrinterDCImpl::GetCairoContext() const
|
void* wxGtkPrinterDCImpl::GetCairoContext() const
|
||||||
{
|
{
|
||||||
return (void*) cairo_reference( m_cairo );
|
return m_cairo;
|
||||||
}
|
}
|
||||||
|
|
||||||
void* wxGtkPrinterDCImpl::GetHandle() const
|
void* wxGtkPrinterDCImpl::GetHandle() const
|
||||||
|
Loading…
Reference in New Issue
Block a user