home *** CD-ROM | disk | FTP | other *** search
- /* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
- *
- * The contents of this file are subject to the Netscape Public License
- * Version 1.0 (the "NPL"); you may not use this file except in
- * compliance with the NPL. You may obtain a copy of the NPL at
- * http://www.mozilla.org/NPL/
- *
- * Software distributed under the NPL is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
- * for the specific language governing rights and limitations under the
- * NPL.
- *
- * The Initial Developer of this code under the NPL is Netscape
- * Communications Corporation. Portions created by Netscape are
- * Copyright (C) 1998 Netscape Communications Corporation. All Rights
- * Reserved.
- */
-
-
- /* Region-related definitions and prototypes */
-
- #ifndef _FE_RGN_H_
- #define _FE_RGN_H_
-
- #ifdef LAYERS
-
- #include "xp_core.h"
- #include "xp_rect.h"
- /******************Definitions and Types************/
-
- /* For Windows only: Should we use the MFC CRgn class for region stuff? */
- #ifdef XP_WIN
- #undef FE_RGN_USE_MFC
- #endif /* XP_WIN */
-
- #ifdef XP_WIN
-
- #ifdef FE_RGN_USE_MFC
- #define FE_GetMDRegion(rgn) ((CRgn *)rgn)
- #else
- /*
- * Note that the resultant CRgn * does not have to be
- * explicitly deleted. It is considered a temporary object
- * by the MFC and is deleted the next time we have idle
- * time in the event loop.
- */
- #define FE_GetMDRegion(rgn) ((HRGN)rgn)
- #endif /* FE_RGN_USE_MFC */
-
- #elif defined(XP_UNIX)
- #define FE_GetMDRegion(rgn) ((Region)rgn)
- #elif defined(XP_MAC)
- #define FE_GetMDRegion(rgn) ((RgnHandle)rgn)
- #else
- #define FE_GetMDRegion(rgn) (rgn)
- #endif /* XP_WIN */
-
- #ifdef XP_WIN
- #define FE_MAX_REGION_COORDINATE 0x7FFFFFFF
- #else
- #define FE_MAX_REGION_COORDINATE 0x7FFF
- #endif
-
- /* Setting the clip region to this effectively unsets the clip */
- #define FE_NULL_REGION NULL
-
- #define FE_CLEAR_REGION(region) \
- do {FE_SubtractRegion((region), (region), (region)); } while (0)
-
- /* Function called by FE_ForEachRectInRegion */
- typedef void (*FE_RectInRegionFunc)(void *closure, XP_Rect *rect);
-
- /*******************Prototypes**********************/
-
- XP_BEGIN_PROTOS
-
- extern FE_Region FE_CreateRegion(void);
-
- /* Creates a region from a rectangle. Returns */
- /* NULL if region can't be created. */
- extern FE_Region FE_CreateRectRegion(XP_Rect *rect);
-
- /* Destroys region. */
- extern void FE_DestroyRegion(FE_Region region);
-
- /* Makes a copy of a region. If dst is NULL, creates a new region */
- extern FE_Region FE_CopyRegion(FE_Region src, FE_Region dst);
-
- /* Set an existing region to a rectangle */
- extern FE_Region FE_SetRectRegion(FE_Region region, XP_Rect *rect);
-
- /* dst = src1 intersect sr2 */
- /* dst can be one of src1 or src2 */
- extern void FE_IntersectRegion(FE_Region src1, FE_Region src2, FE_Region dst);
-
- /* dst = src1 union src2 */
- /* dst can be one of src1 or src2 */
- extern void FE_UnionRegion(FE_Region src1, FE_Region src2, FE_Region dst);
-
- /* dst = src1 - src2 */
- /* dst can be one of src1 or src2 */
- extern void FE_SubtractRegion(FE_Region src1, FE_Region src2, FE_Region dst);
-
- /* Returns TRUE if the region contains no pixels */
- extern XP_Bool FE_IsEmptyRegion(FE_Region region);
-
- /* Returns the bounding rectangle of the region */
- extern void FE_GetRegionBoundingBox(FE_Region region, XP_Rect *bbox);
-
- /* TRUE if rgn1 == rgn2 */
- extern XP_Bool FE_IsEqualRegion(FE_Region rgn1, FE_Region rgn2);
-
- /* Moves a region by the specified offsets */
- extern void FE_OffsetRegion(FE_Region region, int32 xOffset, int32 yOffset);
-
- /* Is any part of the rectangle in the specified region */
- extern XP_Bool FE_RectInRegion(FE_Region region, XP_Rect *rect);
-
- /* For each rectangle that makes up this region, call the func */
- extern void FE_ForEachRectInRegion(FE_Region region,
- FE_RectInRegionFunc func,
- void * closure);
-
- #ifdef DEBUG
- extern void FE_HighlightRect(void *context, XP_Rect *rect, int how_much);
- extern void FE_HighlightRegion(void *context, FE_Region region, int how_much);
- #endif /* DEBUG */
-
- XP_END_PROTOS
-
- #endif /* LAYERS */
-
- #endif /* _FE_RGN_H_ */
-