implemented wxRegion::Offset() for MSW and documented it
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@13936 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
parent
aa21a09f91
commit
0fb067bbe6
@ -24,7 +24,7 @@ reference counting, so copying and assignment operations are fast.
|
|||||||
|
|
||||||
Default constructor.
|
Default constructor.
|
||||||
|
|
||||||
\func{}{wxRegion}{\param{long}{ x}, \param{long}{ y}, \param{long}{ width}, \param{long}{ height}}
|
\func{}{wxRegion}{\param{wxCoord}{ x}, \param{wxCoord}{ y}, \param{wxCoord}{ width}, \param{wxCoord}{ height}}
|
||||||
|
|
||||||
Constructs a rectangular region with the given position and size.
|
Constructs a rectangular region with the given position and size.
|
||||||
|
|
||||||
@ -97,7 +97,7 @@ Returns the outer bounds of the region.
|
|||||||
|
|
||||||
\membersection{wxRegion::Intersect}\label{wxregionintersect}
|
\membersection{wxRegion::Intersect}\label{wxregionintersect}
|
||||||
|
|
||||||
\func{bool}{Intersect}{\param{long}{ x}, \param{long}{ y}, \param{long}{ width}, \param{long}{ height}}
|
\func{bool}{Intersect}{\param{wxCoord}{ x}, \param{wxCoord}{ y}, \param{wxCoord}{ width}, \param{wxCoord}{ height}}
|
||||||
|
|
||||||
Finds the intersection of this region and another, rectangular region, specified using position and size.
|
Finds the intersection of this region and another, rectangular region, specified using position and size.
|
||||||
|
|
||||||
@ -111,7 +111,7 @@ Finds the intersection of this region and another region.
|
|||||||
|
|
||||||
\wxheading{Return value}
|
\wxheading{Return value}
|
||||||
|
|
||||||
TRUE if successful, FALSE otherwise.
|
{\tt TRUE} if successful, {\tt FALSE} otherwise.
|
||||||
|
|
||||||
\wxheading{Remarks}
|
\wxheading{Remarks}
|
||||||
|
|
||||||
@ -122,7 +122,7 @@ is stored in this region.
|
|||||||
|
|
||||||
\constfunc{bool}{IsEmpty}{\void}
|
\constfunc{bool}{IsEmpty}{\void}
|
||||||
|
|
||||||
Returns TRUE if the region is empty, FALSE otherwise.
|
Returns {\tt TRUE} if the region is empty, {\tt FALSE} otherwise.
|
||||||
|
|
||||||
\membersection{wxRegion::Subtract}\label{wxregionsubstract}
|
\membersection{wxRegion::Subtract}\label{wxregionsubstract}
|
||||||
|
|
||||||
@ -136,16 +136,27 @@ Subtracts a region from this region.
|
|||||||
|
|
||||||
\wxheading{Return value}
|
\wxheading{Return value}
|
||||||
|
|
||||||
TRUE if successful, FALSE otherwise.
|
{\tt TRUE} if successful, {\tt FALSE} otherwise.
|
||||||
|
|
||||||
\wxheading{Remarks}
|
\wxheading{Remarks}
|
||||||
|
|
||||||
This operation combines the parts of 'this' region that are not part of the second region.
|
This operation combines the parts of 'this' region that are not part of the second region.
|
||||||
The result is stored in this region.
|
The result is stored in this region.
|
||||||
|
|
||||||
|
\membersection{wxRegion::Offset}\label{wxregionoffset}
|
||||||
|
|
||||||
|
\func{bool}{Offset}{\param{wxCoord}{ x}, \param{wxCoord}{ y}}
|
||||||
|
|
||||||
|
Moves the region by the specified offsets in horizontal and vertical
|
||||||
|
directions.
|
||||||
|
|
||||||
|
\wxheading{Return value}
|
||||||
|
|
||||||
|
{\tt TRUE} if successful, {\tt FALSE} otherwise (the region is unchanged then).
|
||||||
|
|
||||||
\membersection{wxRegion::Union}\label{wxregionunion}
|
\membersection{wxRegion::Union}\label{wxregionunion}
|
||||||
|
|
||||||
\func{bool}{Union}{\param{long}{ x}, \param{long}{ y}, \param{long}{ width}, \param{long}{ height}}
|
\func{bool}{Union}{\param{wxCoord}{ x}, \param{wxCoord}{ y}, \param{wxCoord}{ width}, \param{wxCoord}{ height}}
|
||||||
|
|
||||||
Finds the union of this region and another, rectangular region, specified using position and size.
|
Finds the union of this region and another, rectangular region, specified using position and size.
|
||||||
|
|
||||||
@ -159,7 +170,7 @@ Finds the union of this region and another region.
|
|||||||
|
|
||||||
\wxheading{Return value}
|
\wxheading{Return value}
|
||||||
|
|
||||||
TRUE if successful, FALSE otherwise.
|
{\tt TRUE} if successful, {\tt FALSE} otherwise.
|
||||||
|
|
||||||
\wxheading{Remarks}
|
\wxheading{Remarks}
|
||||||
|
|
||||||
@ -168,7 +179,7 @@ The result is stored in this region.
|
|||||||
|
|
||||||
\membersection{wxRegion::Xor}\label{wxregionxor}
|
\membersection{wxRegion::Xor}\label{wxregionxor}
|
||||||
|
|
||||||
\func{bool}{Xor}{\param{long}{ x}, \param{long}{ y}, \param{long}{ width}, \param{long}{ height}}
|
\func{bool}{Xor}{\param{wxCoord}{ x}, \param{wxCoord}{ y}, \param{wxCoord}{ width}, \param{wxCoord}{ height}}
|
||||||
|
|
||||||
Finds the Xor of this region and another, rectangular region, specified using position and size.
|
Finds the Xor of this region and another, rectangular region, specified using position and size.
|
||||||
|
|
||||||
@ -182,7 +193,7 @@ Finds the Xor of this region and another region.
|
|||||||
|
|
||||||
\wxheading{Return value}
|
\wxheading{Return value}
|
||||||
|
|
||||||
TRUE if successful, FALSE otherwise.
|
{\tt TRUE} if successful, {\tt FALSE} otherwise.
|
||||||
|
|
||||||
\wxheading{Remarks}
|
\wxheading{Remarks}
|
||||||
|
|
||||||
@ -231,37 +242,37 @@ Creates an iterator object given a region.
|
|||||||
|
|
||||||
\membersection{wxRegionIterator::GetX}
|
\membersection{wxRegionIterator::GetX}
|
||||||
|
|
||||||
\constfunc{long}{GetX}{\void}
|
\constfunc{wxCoord}{GetX}{\void}
|
||||||
|
|
||||||
Returns the x value for the current region.
|
Returns the x value for the current region.
|
||||||
|
|
||||||
\membersection{wxRegionIterator::GetY}
|
\membersection{wxRegionIterator::GetY}
|
||||||
|
|
||||||
\constfunc{long}{GetY}{\void}
|
\constfunc{wxCoord}{GetY}{\void}
|
||||||
|
|
||||||
Returns the y value for the current region.
|
Returns the y value for the current region.
|
||||||
|
|
||||||
\membersection{wxRegionIterator::GetW}
|
\membersection{wxRegionIterator::GetW}
|
||||||
|
|
||||||
\constfunc{long}{GetW}{\void}
|
\constfunc{wxCoord}{GetW}{\void}
|
||||||
|
|
||||||
An alias for GetWidth.
|
An alias for GetWidth.
|
||||||
|
|
||||||
\membersection{wxRegionIterator::GetWidth}
|
\membersection{wxRegionIterator::GetWidth}
|
||||||
|
|
||||||
\constfunc{long}{GetWidth}{\void}
|
\constfunc{wxCoord}{GetWidth}{\void}
|
||||||
|
|
||||||
Returns the width value for the current region.
|
Returns the width value for the current region.
|
||||||
|
|
||||||
\membersection{wxRegionIterator::GetH}
|
\membersection{wxRegionIterator::GetH}
|
||||||
|
|
||||||
\constfunc{long}{GetH}{\void}
|
\constfunc{wxCoord}{GetH}{\void}
|
||||||
|
|
||||||
An alias for GetHeight.
|
An alias for GetHeight.
|
||||||
|
|
||||||
\membersection{wxRegionIterator::GetHeight}
|
\membersection{wxRegionIterator::GetHeight}
|
||||||
|
|
||||||
\constfunc{long}{GetWidth}{\void}
|
\constfunc{wxCoord}{GetWidth}{\void}
|
||||||
|
|
||||||
Returns the width value for the current region.
|
Returns the width value for the current region.
|
||||||
|
|
||||||
@ -275,7 +286,7 @@ Returns the current rectangle.
|
|||||||
|
|
||||||
\constfunc{bool}{HaveRects}{\void}
|
\constfunc{bool}{HaveRects}{\void}
|
||||||
|
|
||||||
Returns TRUE if there are still some rectangles; otherwise returns FALSE.
|
Returns {\tt TRUE} if there are still some rectangles; otherwise returns {\tt FALSE}.
|
||||||
|
|
||||||
\membersection{wxRegionIterator::Reset}
|
\membersection{wxRegionIterator::Reset}
|
||||||
|
|
||||||
@ -299,7 +310,7 @@ Increment operator. Increments the iterator to the next region.
|
|||||||
|
|
||||||
\constfunc{}{operator bool}{\void}
|
\constfunc{}{operator bool}{\void}
|
||||||
|
|
||||||
Returns TRUE if there are still some rectangles; otherwise returns FALSE.
|
Returns {\tt TRUE} if there are still some rectangles; otherwise returns {\tt FALSE}.
|
||||||
|
|
||||||
You can use this to test the iterator object as if it were of type bool.
|
You can use this to test the iterator object as if it were of type bool.
|
||||||
|
|
||||||
|
@ -59,31 +59,38 @@ public:
|
|||||||
{ Ref(r); return (*this); }
|
{ Ref(r); return (*this); }
|
||||||
|
|
||||||
// Modify region
|
// Modify region
|
||||||
|
// -------------
|
||||||
|
|
||||||
// Clear current region
|
// Clear current region
|
||||||
void Clear(void);
|
void Clear();
|
||||||
|
|
||||||
|
// Move the region
|
||||||
|
bool Offset(wxCoord x, wxCoord y);
|
||||||
|
|
||||||
// Union rectangle or region with this.
|
// Union rectangle or region with this.
|
||||||
inline bool Union(wxCoord x, wxCoord y, wxCoord width, wxCoord height) { return Combine(x, y, width, height, wxRGN_OR); }
|
bool Union(wxCoord x, wxCoord y, wxCoord width, wxCoord height) { return Combine(x, y, width, height, wxRGN_OR); }
|
||||||
inline bool Union(const wxRect& rect) { return Combine(rect, wxRGN_OR); }
|
bool Union(const wxRect& rect) { return Combine(rect, wxRGN_OR); }
|
||||||
inline bool Union(const wxRegion& region) { return Combine(region, wxRGN_OR); }
|
bool Union(const wxRegion& region) { return Combine(region, wxRGN_OR); }
|
||||||
|
|
||||||
// Intersect rectangle or region with this.
|
// Intersect rectangle or region with this.
|
||||||
inline bool Intersect(wxCoord x, wxCoord y, wxCoord width, wxCoord height) { return Combine(x, y, width, height, wxRGN_AND); }
|
bool Intersect(wxCoord x, wxCoord y, wxCoord width, wxCoord height) { return Combine(x, y, width, height, wxRGN_AND); }
|
||||||
inline bool Intersect(const wxRect& rect) { return Combine(rect, wxRGN_AND); }
|
bool Intersect(const wxRect& rect) { return Combine(rect, wxRGN_AND); }
|
||||||
inline bool Intersect(const wxRegion& region) { return Combine(region, wxRGN_AND); }
|
bool Intersect(const wxRegion& region) { return Combine(region, wxRGN_AND); }
|
||||||
|
|
||||||
// Subtract rectangle or region from this:
|
// Subtract rectangle or region from this:
|
||||||
// Combines the parts of 'this' that are not part of the second region.
|
// Combines the parts of 'this' that are not part of the second region.
|
||||||
inline bool Subtract(wxCoord x, wxCoord y, wxCoord width, wxCoord height) { return Combine(x, y, width, height, wxRGN_DIFF); }
|
bool Subtract(wxCoord x, wxCoord y, wxCoord width, wxCoord height) { return Combine(x, y, width, height, wxRGN_DIFF); }
|
||||||
inline bool Subtract(const wxRect& rect) { return Combine(rect, wxRGN_DIFF); }
|
bool Subtract(const wxRect& rect) { return Combine(rect, wxRGN_DIFF); }
|
||||||
inline bool Subtract(const wxRegion& region) { return Combine(region, wxRGN_DIFF); }
|
bool Subtract(const wxRegion& region) { return Combine(region, wxRGN_DIFF); }
|
||||||
|
|
||||||
// XOR: the union of two combined regions except for any overlapping areas.
|
// XOR: the union of two combined regions except for any overlapping areas.
|
||||||
inline bool Xor(wxCoord x, wxCoord y, wxCoord width, wxCoord height) { return Combine(x, y, width, height, wxRGN_XOR); }
|
bool Xor(wxCoord x, wxCoord y, wxCoord width, wxCoord height) { return Combine(x, y, width, height, wxRGN_XOR); }
|
||||||
inline bool Xor(const wxRect& rect) { return Combine(rect, wxRGN_XOR); }
|
bool Xor(const wxRect& rect) { return Combine(rect, wxRGN_XOR); }
|
||||||
inline bool Xor(const wxRegion& region) { return Combine(region, wxRGN_XOR); }
|
bool Xor(const wxRegion& region) { return Combine(region, wxRGN_XOR); }
|
||||||
|
|
||||||
// Information on region
|
// Information on region
|
||||||
|
// ---------------------
|
||||||
|
|
||||||
// Outer bounds of region
|
// Outer bounds of region
|
||||||
void GetBox(wxCoord& x, wxCoord& y, wxCoord&w, wxCoord &h) const;
|
void GetBox(wxCoord& x, wxCoord& y, wxCoord&w, wxCoord &h) const;
|
||||||
wxRect GetBox(void) const ;
|
wxRect GetBox(void) const ;
|
||||||
@ -110,8 +117,13 @@ public:
|
|||||||
// Get internal region handle
|
// Get internal region handle
|
||||||
WXHRGN GetHRGN() const;
|
WXHRGN GetHRGN() const;
|
||||||
|
|
||||||
DECLARE_DYNAMIC_CLASS(wxRegion);
|
protected:
|
||||||
|
virtual wxObjectRefData *CreateData() const;
|
||||||
|
virtual wxObjectRefData *CloneData(wxObjectRefData *data) const;
|
||||||
|
|
||||||
friend class WXDLLEXPORT wxRegionIterator;
|
friend class WXDLLEXPORT wxRegionIterator;
|
||||||
|
|
||||||
|
DECLARE_DYNAMIC_CLASS(wxRegion)
|
||||||
};
|
};
|
||||||
|
|
||||||
class WXDLLEXPORT wxRegionIterator : public wxObject
|
class WXDLLEXPORT wxRegionIterator : public wxObject
|
||||||
|
@ -127,6 +127,16 @@ wxRegion::~wxRegion()
|
|||||||
// m_refData unrefed in ~wxObject
|
// m_refData unrefed in ~wxObject
|
||||||
}
|
}
|
||||||
|
|
||||||
|
wxObjectRefData *wxRegion::CreateData() const
|
||||||
|
{
|
||||||
|
return new wxRegionRefData;
|
||||||
|
}
|
||||||
|
|
||||||
|
wxObjectRefData *wxRegion::CloneData(wxObjectRefData *data) const
|
||||||
|
{
|
||||||
|
return new wxRegionRefData(*(wxRegionRefData *)data);
|
||||||
|
}
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Modify region
|
// Modify region
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
@ -137,18 +147,30 @@ void wxRegion::Clear()
|
|||||||
UnRef();
|
UnRef();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool wxRegion::Offset(wxCoord x, wxCoord y)
|
||||||
|
{
|
||||||
|
if ( !x && !y )
|
||||||
|
{
|
||||||
|
// nothing to do
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
AllocExclusive();
|
||||||
|
|
||||||
|
if ( ::OffsetRgn(GetHrgn(), x, y) == ERROR )
|
||||||
|
{
|
||||||
|
wxLogLastError(_T("OffsetRgn"));
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
// Combine rectangle (x, y, w, h) with this.
|
// Combine rectangle (x, y, w, h) with this.
|
||||||
bool wxRegion::Combine(wxCoord x, wxCoord y, wxCoord width, wxCoord height, wxRegionOp op)
|
bool wxRegion::Combine(wxCoord x, wxCoord y, wxCoord width, wxCoord height, wxRegionOp op)
|
||||||
{
|
{
|
||||||
// Don't change shared data
|
AllocExclusive();
|
||||||
if (!m_refData) {
|
|
||||||
m_refData = new wxRegionRefData();
|
|
||||||
} else if (m_refData->GetRefCount() > 1) {
|
|
||||||
wxRegionRefData* ref = (wxRegionRefData*)m_refData;
|
|
||||||
UnRef();
|
|
||||||
m_refData = new wxRegionRefData(*ref);
|
|
||||||
}
|
|
||||||
// If ref count is 1, that means it's 'ours' anyway so no action.
|
|
||||||
|
|
||||||
HRGN rectRegion = ::CreateRectRgn(x, y, x + width, y + height);
|
HRGN rectRegion = ::CreateRectRgn(x, y, x + width, y + height);
|
||||||
|
|
||||||
@ -164,7 +186,11 @@ bool wxRegion::Combine(wxCoord x, wxCoord y, wxCoord width, wxCoord height, wxRe
|
|||||||
mode = RGN_COPY; break ;
|
mode = RGN_COPY; break ;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool success = (ERROR != ::CombineRgn(M_REGION, M_REGION, rectRegion, mode));
|
bool success = ::CombineRgn(M_REGION, M_REGION, rectRegion, mode) != ERROR;
|
||||||
|
if ( !success )
|
||||||
|
{
|
||||||
|
wxLogLastError(_T("CombineRgn"));
|
||||||
|
}
|
||||||
|
|
||||||
::DeleteObject(rectRegion);
|
::DeleteObject(rectRegion);
|
||||||
|
|
||||||
@ -177,14 +203,7 @@ bool wxRegion::Combine(const wxRegion& region, wxRegionOp op)
|
|||||||
if (region.Empty())
|
if (region.Empty())
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
// Don't change shared data
|
AllocExclusive();
|
||||||
if (!m_refData) {
|
|
||||||
m_refData = new wxRegionRefData();
|
|
||||||
} else if (m_refData->GetRefCount() > 1) {
|
|
||||||
wxRegionRefData* ref = (wxRegionRefData*)m_refData;
|
|
||||||
UnRef();
|
|
||||||
m_refData = new wxRegionRefData(*ref);
|
|
||||||
}
|
|
||||||
|
|
||||||
int mode = 0;
|
int mode = 0;
|
||||||
switch (op)
|
switch (op)
|
||||||
|
Loading…
Reference in New Issue
Block a user