summaryrefslogtreecommitdiffstats
path: root/win/tkWinRegion.c
diff options
context:
space:
mode:
Diffstat (limited to 'win/tkWinRegion.c')
-rw-r--r--win/tkWinRegion.c107
1 files changed, 62 insertions, 45 deletions
diff --git a/win/tkWinRegion.c b/win/tkWinRegion.c
index c3914e2..7cbdb9d 100644
--- a/win/tkWinRegion.c
+++ b/win/tkWinRegion.c
@@ -1,14 +1,14 @@
-/*
+/*
* tkWinRegion.c --
*
* Tk Region emulation code.
*
* Copyright (c) 1995 Sun Microsystems, Inc.
*
- * See the file "license.terms" for information on usage and redistribution
- * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+ * See the file "license.terms" for information on usage and redistribution of
+ * this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * RCS: @(#) $Id: tkWinRegion.c,v 1.5 2004/10/26 14:07:57 patthoyts Exp $
+ * RCS: @(#) $Id: tkWinRegion.c,v 1.6 2005/12/02 00:19:04 dkf Exp $
*/
#include "tkWinInt.h"
@@ -31,7 +31,7 @@
*/
TkRegion
-TkCreateRegion()
+TkCreateRegion(void)
{
RECT rect;
memset(&rect, 0, sizeof(RECT));
@@ -55,8 +55,8 @@ TkCreateRegion()
*/
void
-TkDestroyRegion(r)
- TkRegion r;
+TkDestroyRegion(
+ TkRegion r)
{
DeleteObject((HRGN) r);
}
@@ -78,11 +78,12 @@ TkDestroyRegion(r)
*/
void
-TkClipBox(r, rect_return)
- TkRegion r;
- XRectangle* rect_return;
+TkClipBox(
+ TkRegion r,
+ XRectangle* rect_return)
{
RECT rect;
+
GetRgnBox((HRGN)r, &rect);
rect_return->x = (short) rect.left;
rect_return->y = (short) rect.top;
@@ -107,10 +108,10 @@ TkClipBox(r, rect_return)
*/
void
-TkIntersectRegion(sra, srb, dr_return)
- TkRegion sra;
- TkRegion srb;
- TkRegion dr_return;
+TkIntersectRegion(
+ TkRegion sra,
+ TkRegion srb,
+ TkRegion dr_return)
{
CombineRgn((HRGN) dr_return, (HRGN) sra, (HRGN) srb, RGN_AND);
}
@@ -132,13 +133,14 @@ TkIntersectRegion(sra, srb, dr_return)
*/
void
-TkUnionRectWithRegion(rectangle, src_region, dest_region_return)
- XRectangle* rectangle;
- TkRegion src_region;
- TkRegion dest_region_return;
+TkUnionRectWithRegion(
+ XRectangle *rectangle,
+ TkRegion src_region,
+ TkRegion dest_region_return)
{
HRGN rectRgn = CreateRectRgn(rectangle->x, rectangle->y,
rectangle->x + rectangle->width, rectangle->y + rectangle->height);
+
CombineRgn((HRGN) dest_region_return, (HRGN) src_region,
(HRGN) rectRgn, RGN_OR);
DeleteObject(rectRgn);
@@ -149,8 +151,8 @@ TkUnionRectWithRegion(rectangle, src_region, dest_region_return)
*
* TkpBuildRegionFromAlphaData --
*
- * Set up a rectangle of the given region based on the supplied
- * alpha data.
+ * Set up a rectangle of the given region based on the supplied alpha
+ * data.
*
* Results:
* None
@@ -162,16 +164,17 @@ TkUnionRectWithRegion(rectangle, src_region, dest_region_return)
*/
void
-TkpBuildRegionFromAlphaData(region, x, y, width, height, dataPtr,
- pixelStride, lineStride)
- TkRegion region;
- unsigned int x, y; /* Where in region to update. */
- unsigned int width, height; /* Size of rectangle to update. */
- unsigned char *dataPtr; /* Data to read from. */
- unsigned int pixelStride; /* num bytes from one piece of alpha
- * data to the next in the line. */
- unsigned int lineStride; /* num bytes from one line of alpha
- * data to the next line. */
+TkpBuildRegionFromAlphaData(
+ TkRegion region,
+ unsigned int x, unsigned int y,
+ /* Where in region to update. */
+ unsigned int width, unsigned int height,
+ /* Size of rectangle to update. */
+ unsigned char *dataPtr, /* Data to read from. */
+ unsigned int pixelStride, /* Num bytes from one piece of alpha data to
+ * the next in the line. */
+ unsigned int lineStride) /* Num bytes from one line of alpha data to
+ * the next line. */
{
unsigned char *lineDataPtr;
unsigned int x1, y1, end;
@@ -180,13 +183,20 @@ TkpBuildRegionFromAlphaData(region, x, y, width, height, dataPtr,
for (y1 = 0; y1 < height; y1++) {
lineDataPtr = dataPtr;
for (x1 = 0; x1 < width; x1 = end) {
- /* search for first non-transparent pixel */
+ /*
+ * Search for first non-transparent pixel.
+ */
+
while ((x1 < width) && !*lineDataPtr) {
x1++;
lineDataPtr += pixelStride;
}
end = x1;
- /* search for first transparent pixel */
+
+ /*
+ * Search for first transparent pixel.
+ */
+
while ((end < width) && *lineDataPtr) {
end++;
lineDataPtr += pixelStride;
@@ -195,6 +205,7 @@ TkpBuildRegionFromAlphaData(region, x, y, width, height, dataPtr,
/*
* Manipulate Win32 regions directly; it's more efficient.
*/
+
SetRectRgn(rectRgn, x+x1, y+y1, x+end, y+y1+1);
CombineRgn((HRGN) region, (HRGN) region, rectRgn, RGN_OR);
}
@@ -213,9 +224,8 @@ TkpBuildRegionFromAlphaData(region, x, y, width, height, dataPtr,
* Test whether a given rectangle overlaps with a region.
*
* Results:
- * Returns RectanglePart or RectangleOut. Note that this is
- * not a complete implementation since it doesn't test for
- * RectangleIn.
+ * Returns RectanglePart or RectangleOut. Note that this is not a
+ * complete implementation since it doesn't test for RectangleIn.
*
* Side effects:
* None.
@@ -224,12 +234,11 @@ TkpBuildRegionFromAlphaData(region, x, y, width, height, dataPtr,
*/
int
-TkRectInRegion(r, x, y, width, height)
- TkRegion r;
- int x;
- int y;
- unsigned int width;
- unsigned int height;
+TkRectInRegion(
+ TkRegion r, /* Region to inspect */
+ int x, int y, /* Top-left of rectangle */
+ unsigned int width, /* Width of rectangle */
+ unsigned int height) /* Height of rectangle */
{
RECT rect;
rect.top = y;
@@ -256,10 +265,18 @@ TkRectInRegion(r, x, y, width, height)
*/
void
-TkSubtractRegion(sra, srb, dr_return)
- TkRegion sra;
- TkRegion srb;
- TkRegion dr_return;
+TkSubtractRegion(
+ TkRegion sra,
+ TkRegion srb,
+ TkRegion dr_return)
{
CombineRgn((HRGN) dr_return, (HRGN) sra, (HRGN) srb, RGN_DIFF);
}
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 4
+ * fill-column: 78
+ * End:
+ */