|
- /**************************************************************************\
- *
- * Copyright (c) 1998-2000, Microsoft Corp. All Rights Reserved.
- *
- * Module Name:
- *
- * GdiplusRegion.h
- *
- * Abstract:
- *
- * Region API related declarations
- *
- \**************************************************************************/
-
- #ifndef _GDIPLUSREGION_H
- #define _GDIPLUSREGION_H
-
- /**
- * Construct a new region object
- */
-
- inline
- Region::Region()
- {
- GpRegion *region = NULL;
-
- lastResult = DllExports::GdipCreateRegion(®ion);
-
- SetNativeRegion(region);
- }
-
- inline
- Region::Region(IN const RectF& rect)
- {
- GpRegion *region = NULL;
-
- lastResult = DllExports::GdipCreateRegionRect(&rect, ®ion);
-
- SetNativeRegion(region);
- }
-
- inline
- Region::Region(IN const Rect& rect)
- {
- GpRegion *region = NULL;
-
- lastResult = DllExports::GdipCreateRegionRectI(&rect, ®ion);
-
- SetNativeRegion(region);
- }
-
- inline
- Region::Region(IN const GraphicsPath* path)
- {
- GpRegion *region = NULL;
-
- lastResult = DllExports::GdipCreateRegionPath(path->nativePath, ®ion);
-
- SetNativeRegion(region);
- }
-
- inline
- Region::Region(IN const BYTE* regionData, IN INT size)
- {
- GpRegion *region = NULL;
-
- lastResult = DllExports::GdipCreateRegionRgnData(regionData, size, ®ion);
-
- SetNativeRegion(region);
- }
-
- inline
- Region::Region(IN HRGN hRgn)
- {
- GpRegion *region = NULL;
-
- lastResult = DllExports::GdipCreateRegionHrgn(hRgn, ®ion);
-
- SetNativeRegion(region);
- }
-
- inline
- Region* Region::FromHRGN(IN HRGN hRgn)
- {
- GpRegion *region = NULL;
-
- if (DllExports::GdipCreateRegionHrgn(hRgn, ®ion) == Ok)
- {
- Region* newRegion = new Region(region);
-
- if (newRegion == NULL)
- {
- DllExports::GdipDeleteRegion(region);
- }
-
- return newRegion;
- }
- else
- return NULL;
- }
-
- inline
- Region::~Region()
- {
- DllExports::GdipDeleteRegion(nativeRegion);
- }
-
- /**
- * Make a copy of the region object
- */
- inline Region*
- Region::Clone() const
- {
- GpRegion *region = NULL;
-
- SetStatus(DllExports::GdipCloneRegion(nativeRegion, ®ion));
-
- return new Region(region);
- }
-
- inline Status
- Region::MakeInfinite()
- {
- return SetStatus(DllExports::GdipSetInfinite(nativeRegion));
- }
-
- inline Status
- Region::MakeEmpty()
- {
- return SetStatus(DllExports::GdipSetEmpty(nativeRegion));
- }
-
- /**
- * Region operations
- */
- inline Status
- Region::Intersect(IN const RectF& rect)
- {
- return SetStatus(DllExports::GdipCombineRegionRect(nativeRegion, &rect, CombineModeIntersect));
- }
-
- inline Status
- Region::Intersect(IN const Rect& rect)
- {
- return SetStatus(DllExports::GdipCombineRegionRectI(nativeRegion, &rect, CombineModeIntersect));
- }
-
- inline Status
- Region::Intersect(IN const GraphicsPath* path)
- {
- return SetStatus(DllExports::GdipCombineRegionPath(nativeRegion, path->nativePath, CombineModeIntersect));
- }
-
- inline Status
- Region::Intersect(IN const Region* region)
- {
- return SetStatus(DllExports::GdipCombineRegionRegion(nativeRegion, region->nativeRegion, CombineModeIntersect));
- }
-
- inline Status
- Region::Union(IN const RectF& rect)
- {
- return SetStatus(DllExports::GdipCombineRegionRect(nativeRegion, &rect, CombineModeUnion));
- }
-
- inline Status
- Region::Union(IN const Rect& rect)
- {
- return SetStatus(DllExports::GdipCombineRegionRectI(nativeRegion, &rect, CombineModeUnion));
- }
-
- inline Status
- Region::Union(IN const GraphicsPath* path)
- {
- return SetStatus(DllExports::GdipCombineRegionPath(nativeRegion, path->nativePath, CombineModeUnion));
- }
-
- inline Status
- Region::Union(IN const Region* region)
- {
- return SetStatus(DllExports::GdipCombineRegionRegion(nativeRegion, region->nativeRegion, CombineModeUnion));
- }
-
- inline Status
- Region::Xor(IN const RectF& rect)
- {
- return SetStatus(DllExports::GdipCombineRegionRect(nativeRegion, &rect, CombineModeXor));
- }
-
- inline Status
- Region::Xor(IN const Rect& rect)
- {
- return SetStatus(DllExports::GdipCombineRegionRectI(nativeRegion, &rect, CombineModeXor));
- }
-
- inline Status
- Region::Xor(IN const GraphicsPath* path)
- {
- return SetStatus(DllExports::GdipCombineRegionPath(nativeRegion, path->nativePath, CombineModeXor));
- }
-
- inline Status
- Region::Xor(IN const Region* region)
- {
- return SetStatus(DllExports::GdipCombineRegionRegion(nativeRegion, region->nativeRegion, CombineModeXor));
- }
-
- inline Status
- Region::Exclude(IN const RectF& rect)
- {
- return SetStatus(DllExports::GdipCombineRegionRect(nativeRegion, &rect, CombineModeExclude));
- }
-
- inline Status
- Region::Exclude(IN const Rect& rect)
- {
- return SetStatus(DllExports::GdipCombineRegionRectI(nativeRegion, &rect, CombineModeExclude));
- }
-
- inline Status
- Region::Exclude(IN const GraphicsPath* path)
- {
- return SetStatus(DllExports::GdipCombineRegionPath(nativeRegion, path->nativePath, CombineModeExclude));
- }
-
- inline Status
- Region::Exclude(IN const Region* region)
- {
- return SetStatus(DllExports::GdipCombineRegionRegion(nativeRegion,
- region->nativeRegion, CombineModeExclude));
- }
-
- inline Status
- Region::Complement(IN const RectF& rect)
- {
- return SetStatus(DllExports::GdipCombineRegionRect(nativeRegion, &rect, CombineModeComplement));
- }
-
- inline Status
- Region::Complement(IN const Rect& rect)
- {
- return SetStatus(DllExports::GdipCombineRegionRectI(nativeRegion, &rect, CombineModeComplement));
- }
-
- inline Status
- Region::Complement(IN const GraphicsPath* path)
- {
- return SetStatus(DllExports::GdipCombineRegionPath(nativeRegion,
- path->nativePath, CombineModeComplement));
- }
-
- inline Status
- Region::Complement(IN const Region* region)
- {
- return SetStatus(DllExports::GdipCombineRegionRegion(nativeRegion,
- region->nativeRegion, CombineModeComplement));
- }
-
- /**
- * Transform operations
- */
- inline Status
- Region::Translate(IN REAL dx,
- IN REAL dy)
- {
- return SetStatus(DllExports::GdipTranslateRegion(nativeRegion, dx, dy));
- }
-
- inline Status
- Region::Translate(IN INT dx,
- IN INT dy)
- {
- return SetStatus(DllExports::GdipTranslateRegionI(nativeRegion, dx, dy));
- }
-
- inline Status
- Region::Transform(IN const Matrix* matrix)
- {
- return SetStatus(DllExports::GdipTransformRegion(nativeRegion, matrix->nativeMatrix));
- }
-
- /**
- * Get region attributes
- */
- inline Status
- Region::GetBounds(OUT RectF* rect,
- IN const Graphics* g) const
- {
- return SetStatus(DllExports::GdipGetRegionBounds(nativeRegion,
- g->nativeGraphics,
- rect));
- }
-
- inline Status
- Region::GetBounds(OUT Rect* rect,
- IN const Graphics* g) const
- {
- return SetStatus(DllExports::GdipGetRegionBoundsI(nativeRegion,
- g->nativeGraphics,
- rect));
- }
-
- inline HRGN
- Region::GetHRGN(IN const Graphics* g) const
- {
- HRGN hrgn;
-
- SetStatus(DllExports::GdipGetRegionHRgn(nativeRegion,
- g->nativeGraphics,
- &hrgn));
-
- return hrgn;
- }
-
- inline BOOL
- Region::IsEmpty(IN const Graphics *g) const
- {
- BOOL booln = FALSE;
-
- SetStatus(DllExports::GdipIsEmptyRegion(nativeRegion,
- g->nativeGraphics,
- &booln));
-
- return booln;
- }
-
- inline BOOL
- Region::IsInfinite(IN const Graphics *g) const
- {
- BOOL booln = FALSE;
-
- SetStatus(DllExports::GdipIsInfiniteRegion(nativeRegion,
- g->nativeGraphics,
- &booln));
-
- return booln;
- }
-
- inline BOOL
- Region::Equals(IN const Region* region,
- IN const Graphics* g) const
- {
- BOOL booln = FALSE;
-
- SetStatus(DllExports::GdipIsEqualRegion(nativeRegion,
- region->nativeRegion,
- g->nativeGraphics,
- &booln));
- return booln;
- }
-
- // Get the size of the buffer needed for the GetData method
- inline UINT
- Region::GetDataSize() const
- {
- UINT bufferSize = 0;
-
- SetStatus(DllExports::GdipGetRegionDataSize(nativeRegion, &bufferSize));
-
- return bufferSize;
- }
-
- // buffer - where to put the data
- // bufferSize - how big the buffer is (should be at least as big as GetDataSize())
- // sizeFilled - if not NULL, this is an OUT param that says how many bytes
- // of data were written to the buffer.
- inline Status
- Region::GetData(OUT BYTE* buffer,
- IN UINT bufferSize,
- OUT UINT* sizeFilled) const
- {
- return SetStatus(DllExports::GdipGetRegionData(nativeRegion, buffer, bufferSize, sizeFilled));
- }
-
- /**
- * Hit testing operations
- */
- inline BOOL
- Region::IsVisible(IN const PointF& point,
- IN const Graphics* g) const
- {
- BOOL booln = FALSE;
-
- SetStatus(DllExports::GdipIsVisibleRegionPoint(nativeRegion,
- point.X, point.Y,
- (g == NULL) ? NULL : g->nativeGraphics,
- &booln));
- return booln;
- }
-
- inline BOOL
- Region::IsVisible(IN const RectF& rect,
- IN const Graphics* g) const
- {
- BOOL booln = FALSE;
-
- SetStatus(DllExports::GdipIsVisibleRegionRect(nativeRegion, rect.X,
- rect.Y, rect.Width,
- rect.Height,
- (g == NULL) ? NULL : g->nativeGraphics,
- &booln));
- return booln;
- }
-
- inline BOOL
- Region::IsVisible(IN const Point& point,
- IN const Graphics* g) const
- {
- BOOL booln = FALSE;
-
-
- SetStatus(DllExports::GdipIsVisibleRegionPointI(nativeRegion,
- point.X,
- point.Y,
- (g == NULL) ? NULL : g->nativeGraphics,
- &booln));
- return booln;
- }
-
- inline BOOL
- Region::IsVisible(IN const Rect& rect,
- IN const Graphics* g) const
- {
- BOOL booln = FALSE;
-
- SetStatus(DllExports::GdipIsVisibleRegionRectI(nativeRegion,
- rect.X,
- rect.Y,
- rect.Width,
- rect.Height,
- (g == NULL) ? NULL : g->nativeGraphics,
- &booln));
- return booln;
- }
-
- inline UINT
- Region::GetRegionScansCount(IN const Matrix* matrix) const
- {
- UINT count = 0;
-
- SetStatus(DllExports::GdipGetRegionScansCount(nativeRegion,
- &count,
- matrix->nativeMatrix));
- return count;
- }
-
- inline Status
- Region::GetRegionScans(
- IN const Matrix* matrix,
- OUT RectF* rects,
- IN OUT INT* count) const
- {
- return SetStatus(DllExports::GdipGetRegionScans(nativeRegion,
- rects,
- count,
- matrix->nativeMatrix));
- }
-
- // If rects is NULL, return the count of rects in the region.
- // Otherwise, assume rects is big enough to hold all the region rects
- // and fill them in and return the number of rects filled in.
- // The rects are returned in the units specified by the matrix
- // (which is typically a world-to-device transform).
- // Note that the number of rects returned can vary, depending on the
- // matrix that is used.
- inline Status
- Region::GetRegionScans(
- IN const Matrix* matrix,
- OUT Rect* rects, // NULL to just get the count
- IN OUT INT* count) const
- {
- return SetStatus(DllExports::GdipGetRegionScansI(nativeRegion,
- rects,
- count,
- matrix->nativeMatrix));
- }
-
- // protected method
- inline Region::Region(GpRegion* nativeRegion)
- {
- SetNativeRegion(nativeRegion);
- }
-
- // protected method
- inline VOID Region::SetNativeRegion(GpRegion* nativeRegion)
- {
- this->nativeRegion = nativeRegion;
- }
-
- inline Status Region::GetLastStatus() const
- {
- Status lastStatus = lastResult;
- lastResult = Ok;
-
- return lastStatus;
- }
-
- #endif // !_GDIPLUSREGION_H
|