Fix problem with clipping region in wxqt.

QPainter cannot set the clipping region when it is not active.

Thanks @seandepagnier


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@78385 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Mariano Reingart
2015-01-19 03:01:18 +00:00
parent e67fbf1579
commit 0476cf3791

View File

@@ -64,6 +64,20 @@ void wxQtDCImpl::QtPreparePainter( )
m_qtPainter->setPen( wxPen().GetHandle() ); m_qtPainter->setPen( wxPen().GetHandle() );
m_qtPainter->setBrush( wxBrush().GetHandle() ); m_qtPainter->setBrush( wxBrush().GetHandle() );
m_qtPainter->setFont( wxFont().GetHandle() ); m_qtPainter->setFont( wxFont().GetHandle() );
if (m_clipping)
{
wxRegionIterator ri(*m_clippingRegion);
bool append = false;
while (ri.HaveRects())
{
wxRect r = ri.GetRect();
m_qtPainter->setClipRect( r.x, r.y, r.width, r.height,
append ? Qt::IntersectClip : Qt::ReplaceClip );
append = true;
ri++;
}
}
} }
else else
{ {
@@ -346,10 +360,13 @@ void wxQtDCImpl::DoSetClippingRegion(wxCoord x, wxCoord y,
DestroyClippingRegion(); DestroyClippingRegion();
} }
else else
{
if (m_qtPainter->isActive())
{ {
// Set QPainter clipping (intersection if not the first one) // Set QPainter clipping (intersection if not the first one)
m_qtPainter->setClipRect( x, y, width, height, m_qtPainter->setClipRect( x, y, width, height,
m_clipping ? Qt::IntersectClip : Qt::ReplaceClip ); m_clipping ? Qt::IntersectClip : Qt::ReplaceClip );
}
// Set internal state for getters // Set internal state for getters
/* Note: Qt states that QPainter::clipRegion() may be slow, so we /* Note: Qt states that QPainter::clipRegion() may be slow, so we
@@ -414,6 +431,8 @@ void wxQtDCImpl::DestroyClippingRegion()
{ {
ResetClipping(); ResetClipping();
m_clippingRegion->Clear(); m_clippingRegion->Clear();
if (m_qtPainter->isActive())
m_qtPainter->setClipping( false ); m_qtPainter->setClipping( false );
} }