157 lines
5.1 KiB
C
157 lines
5.1 KiB
C
/**
|
|
* Copyright © 2014 Thincast Technologies GmbH
|
|
* Copyright © 2014 Hardening <contact@hardening-consulting.com>
|
|
*
|
|
* Permission to use, copy, modify, distribute, and sell this software and
|
|
* its documentation for any purpose is hereby granted without fee, provided
|
|
* that the above copyright notice appear in all copies and that both that
|
|
* copyright notice and this permission notice appear in supporting
|
|
* documentation, and that the name of the copyright holders not be used in
|
|
* advertising or publicity pertaining to distribution of the software
|
|
* without specific, written prior permission. The copyright holders make
|
|
* no representations about the suitability of this software for any
|
|
* purpose. It is provided "as is" without express or implied warranty.
|
|
*
|
|
* THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
|
|
* SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
|
* FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
|
* SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
|
|
* RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
|
|
* CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
|
|
* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
*/
|
|
|
|
#ifndef __REGION_H___
|
|
#define __REGION_H___
|
|
|
|
#include <freerdp/api.h>
|
|
#include <freerdp/types.h>
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
struct _REGION16_DATA;
|
|
typedef struct _REGION16_DATA REGION16_DATA;
|
|
|
|
/**
|
|
* @brief
|
|
*/
|
|
struct _REGION16
|
|
{
|
|
RECTANGLE_16 extents;
|
|
REGION16_DATA* data;
|
|
};
|
|
typedef struct _REGION16 REGION16;
|
|
|
|
/** computes if two rectangles are equal
|
|
* @param r1 first rectangle
|
|
* @param r2 second rectangle
|
|
* @return if the two rectangles are equal
|
|
*/
|
|
FREERDP_API BOOL rectangles_equal(const RECTANGLE_16* r1,
|
|
const RECTANGLE_16* r2);
|
|
|
|
/** computes if two rectangles intersect
|
|
* @param r1 first rectangle
|
|
* @param r2 second rectangle
|
|
* @return if the two rectangles intersect
|
|
*/
|
|
FREERDP_API BOOL rectangles_intersects(const RECTANGLE_16* r1,
|
|
const RECTANGLE_16* r2);
|
|
|
|
/** computes the intersection of two rectangles
|
|
* @param r1 first rectangle
|
|
* @param r2 second rectangle
|
|
* @param dst resulting intersection
|
|
* @return if the two rectangles intersect
|
|
*/
|
|
FREERDP_API BOOL rectangles_intersection(const RECTANGLE_16* r1,
|
|
const RECTANGLE_16* r2, RECTANGLE_16* dst);
|
|
|
|
/** initialize a region16
|
|
* @param region the region to initialise
|
|
*/
|
|
FREERDP_API void region16_init(REGION16* region);
|
|
|
|
/** @return the number of rectangles of this region16 */
|
|
FREERDP_API int region16_n_rects(const REGION16* region);
|
|
|
|
/** returns a pointer to rectangles and the number of rectangles in this region.
|
|
* nbRects can be set to NULL if not interested in the number of rectangles.
|
|
* @param region the input region
|
|
* @param nbRects if non-NULL returns the number of rectangles
|
|
* @return a pointer on the rectangles
|
|
*/
|
|
FREERDP_API const RECTANGLE_16* region16_rects(const REGION16* region,
|
|
UINT32* nbRects);
|
|
|
|
/** @return the extents rectangle of this region */
|
|
FREERDP_API const RECTANGLE_16* region16_extents(const REGION16* region);
|
|
|
|
/** returns if the rectangle is empty
|
|
* @param rect
|
|
* @return if the rectangle is empty
|
|
*/
|
|
FREERDP_API BOOL rectangle_is_empty(const RECTANGLE_16* rect);
|
|
|
|
/** returns if the region is empty
|
|
* @param region
|
|
* @return if the region is empty
|
|
*/
|
|
FREERDP_API BOOL region16_is_empty(const REGION16* region);
|
|
|
|
/** clears the region, the region is resetted to a (0,0,0,0) region
|
|
* @param region
|
|
*/
|
|
FREERDP_API void region16_clear(REGION16* region);
|
|
|
|
/** dumps the region on stderr
|
|
* @param region the region to dump
|
|
*/
|
|
FREERDP_API void region16_print(const REGION16* region);
|
|
|
|
/** copies the region to another region
|
|
* @param dst destination region
|
|
* @param src source region
|
|
* @return if the operation was successful (false meaning out-of-memory)
|
|
*/
|
|
FREERDP_API BOOL region16_copy(REGION16* dst, const REGION16* src);
|
|
|
|
/** adds a rectangle in src and stores the resulting region in dst
|
|
* @param dst destination region
|
|
* @param src source region
|
|
* @param rect the rectangle to add
|
|
* @return if the operation was successful (false meaning out-of-memory)
|
|
*/
|
|
FREERDP_API BOOL region16_union_rect(REGION16* dst, const REGION16* src,
|
|
const RECTANGLE_16* rect);
|
|
|
|
/** returns if a rectangle intersects the region
|
|
* @param src the region
|
|
* @param arg2 the rectangle
|
|
* @return if region and rectangle intersect
|
|
*/
|
|
FREERDP_API BOOL region16_intersects_rect(const REGION16* src,
|
|
const RECTANGLE_16* arg2);
|
|
|
|
/** computes the intersection between a region and a rectangle
|
|
* @param dst destination region
|
|
* @param src the source region
|
|
* @param arg2 the rectangle that intersects
|
|
* @return if the operation was successful (false meaning out-of-memory)
|
|
*/
|
|
FREERDP_API BOOL region16_intersect_rect(REGION16* dst, const REGION16* src,
|
|
const RECTANGLE_16* arg2);
|
|
|
|
/** release internal data associated with this region
|
|
* @param region the region to release
|
|
*/
|
|
FREERDP_API void region16_uninit(REGION16* region);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* __REGION_H___ */
|