made GetClippingBox() work even for clipping region (pre)set by Windows and not only for clipping regions set using our own SetClippingXXX() functions
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@27106 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -118,6 +118,13 @@ public:
|
|||||||
{
|
{
|
||||||
m_hDC = dc;
|
m_hDC = dc;
|
||||||
m_bOwnsDC = bOwnsDC;
|
m_bOwnsDC = bOwnsDC;
|
||||||
|
|
||||||
|
// we might have a pre existing clipping region, make sure that we
|
||||||
|
// return it if asked -- but avoid calling ::GetClipBox() right now as
|
||||||
|
// it could be unnecessary wasteful
|
||||||
|
m_clipping = true;
|
||||||
|
m_clipX1 =
|
||||||
|
m_clipX2 = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
const wxBitmap& GetSelectedBitmap() const { return m_selectedBitmap; }
|
const wxBitmap& GetSelectedBitmap() const { return m_selectedBitmap; }
|
||||||
@@ -182,6 +189,8 @@ protected:
|
|||||||
{
|
{
|
||||||
GetClippingBox(x, y, width, height);
|
GetClippingBox(x, y, width, height);
|
||||||
}
|
}
|
||||||
|
virtual void DoGetClippingBox(wxCoord *x, wxCoord *y,
|
||||||
|
wxCoord *w, wxCoord *h) const;
|
||||||
|
|
||||||
virtual void DoGetSize(int *width, int *height) const;
|
virtual void DoGetSize(int *width, int *height) const;
|
||||||
virtual void DoGetSizeMM(int* width, int* height) const;
|
virtual void DoGetSizeMM(int* width, int* height) const;
|
||||||
|
@@ -383,6 +383,23 @@ void wxDC::UpdateClipBox()
|
|||||||
m_clipY2 = (wxCoord) YDEV2LOG(rect.bottom);
|
m_clipY2 = (wxCoord) YDEV2LOG(rect.bottom);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
wxDC::DoGetClippingBox(wxCoord *x, wxCoord *y, wxCoord *w, wxCoord *h) const
|
||||||
|
{
|
||||||
|
// check if we should try to retrieve the clipping region possibly not set
|
||||||
|
// by our SetClippingRegion() but preset by Windows:this can only happen
|
||||||
|
// when we're associated with an existing HDC usign SetHDC(), see there
|
||||||
|
if ( m_clipping && !m_clipX1 && !m_clipX2 )
|
||||||
|
{
|
||||||
|
UpdateClipBox();
|
||||||
|
|
||||||
|
if ( !m_clipX1 && !m_clipX2 )
|
||||||
|
m_clipping = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return wxDCBase::DoGetClippingBox(x, y, w, h);
|
||||||
|
}
|
||||||
|
|
||||||
// common part of DoSetClippingRegion() and DoSetClippingRegionAsRegion()
|
// common part of DoSetClippingRegion() and DoSetClippingRegionAsRegion()
|
||||||
void wxDC::SetClippingHrgn(WXHRGN hrgn)
|
void wxDC::SetClippingHrgn(WXHRGN hrgn)
|
||||||
{
|
{
|
||||||
@@ -465,7 +482,7 @@ void wxDC::DestroyClippingRegion()
|
|||||||
::DeleteObject(rgn);
|
::DeleteObject(rgn);
|
||||||
}
|
}
|
||||||
|
|
||||||
m_clipping = false;
|
wxDCBase::DestroyClippingRegion();
|
||||||
}
|
}
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
|
Reference in New Issue
Block a user