tkWinRegion.c
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:4k
- /*
- * 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.
- *
- * RCS: @(#) $Id: tkWinRegion.c,v 1.3 2002/06/14 13:35:49 dkf Exp $
- */
- #include "tkWinInt.h"
- /*
- *----------------------------------------------------------------------
- *
- * TkCreateRegion --
- *
- * Construct an empty region.
- *
- * Results:
- * Returns a new region handle.
- *
- * Side effects:
- * None.
- *
- *----------------------------------------------------------------------
- */
- TkRegion
- TkCreateRegion()
- {
- RECT rect;
- memset(&rect, 0, sizeof(RECT));
- return (TkRegion) CreateRectRgnIndirect(&rect);
- }
- /*
- *----------------------------------------------------------------------
- *
- * TkDestroyRegion --
- *
- * Destroy the specified region.
- *
- * Results:
- * None.
- *
- * Side effects:
- * Frees the storage associated with the specified region.
- *
- *----------------------------------------------------------------------
- */
- void
- TkDestroyRegion(r)
- TkRegion r;
- {
- DeleteObject((HRGN) r);
- }
- /*
- *----------------------------------------------------------------------
- *
- * TkClipBox --
- *
- * Computes the bounding box of a region.
- *
- * Results:
- * Sets rect_return to the bounding box of the region.
- *
- * Side effects:
- * None.
- *
- *----------------------------------------------------------------------
- */
- void
- TkClipBox(r, rect_return)
- TkRegion r;
- XRectangle* rect_return;
- {
- RECT rect;
- GetRgnBox((HRGN)r, &rect);
- rect_return->x = (short) rect.left;
- rect_return->y = (short) rect.top;
- rect_return->width = (short) (rect.right - rect.left);
- rect_return->height = (short) (rect.bottom - rect.top);
- }
- /*
- *----------------------------------------------------------------------
- *
- * TkIntersectRegion --
- *
- * Compute the intersection of two regions.
- *
- * Results:
- * Returns the result in the dr_return region.
- *
- * Side effects:
- * None.
- *
- *----------------------------------------------------------------------
- */
- void
- TkIntersectRegion(sra, srb, dr_return)
- TkRegion sra;
- TkRegion srb;
- TkRegion dr_return;
- {
- CombineRgn((HRGN) dr_return, (HRGN) sra, (HRGN) srb, RGN_AND);
- }
- /*
- *----------------------------------------------------------------------
- *
- * TkUnionRectWithRegion --
- *
- * Create the union of a source region and a rectangle.
- *
- * Results:
- * Returns the result in the dr_return region.
- *
- * Side effects:
- * None.
- *
- *----------------------------------------------------------------------
- */
- void
- TkUnionRectWithRegion(rectangle, src_region, dest_region_return)
- 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);
- }
- /*
- *----------------------------------------------------------------------
- *
- * TkRectInRegion --
- *
- * 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.
- *
- * Side effects:
- * None.
- *
- *----------------------------------------------------------------------
- */
- int
- TkRectInRegion(r, x, y, width, height)
- TkRegion r;
- int x;
- int y;
- unsigned int width;
- unsigned int height;
- {
- RECT rect;
- rect.top = y;
- rect.left = x;
- rect.bottom = y+height;
- rect.right = x+width;
- return RectInRegion((HRGN)r, &rect) ? RectanglePart : RectangleOut;
- }
- /*
- *----------------------------------------------------------------------
- *
- * TkSubtractRegion --
- *
- * Compute the set-difference of two regions.
- *
- * Results:
- * Returns the result in the dr_return region.
- *
- * Side effects:
- * None.
- *
- *----------------------------------------------------------------------
- */
- void
- TkSubtractRegion(sra, srb, dr_return)
- TkRegion sra;
- TkRegion srb;
- TkRegion dr_return;
- {
- CombineRgn((HRGN) dr_return, (HRGN) sra, (HRGN) srb, RGN_DIFF);
- }