diff options
author | neonloop | 2021-10-20 14:54:27 +0000 |
---|---|---|
committer | neonloop | 2021-10-20 14:54:27 +0000 |
commit | ea1947ffcc606d757357398b24e74a3f4ecefa07 (patch) | |
tree | 2031b8d4fc4c61063c710a7148378f57e662efbd /modules/libvideo/g_regions.c | |
download | bennugd-ea1947ffcc606d757357398b24e74a3f4ecefa07.tar.gz bennugd-ea1947ffcc606d757357398b24e74a3f4ecefa07.tar.bz2 bennugd-ea1947ffcc606d757357398b24e74a3f4ecefa07.zip |
Initial commit from steward-fu releasemain
Diffstat (limited to 'modules/libvideo/g_regions.c')
-rw-r--r-- | modules/libvideo/g_regions.c | 211 |
1 files changed, 211 insertions, 0 deletions
diff --git a/modules/libvideo/g_regions.c b/modules/libvideo/g_regions.c new file mode 100644 index 0000000..1b9f496 --- /dev/null +++ b/modules/libvideo/g_regions.c @@ -0,0 +1,211 @@ +/* + * Copyright © 2006-2016 SplinterGU (Fenix/Bennugd) + * Copyright © 2002-2006 Fenix Team (Fenix) + * Copyright © 1999-2002 José Luis Cebrián Pagüe (Fenix) + * + * This file is part of Bennu - Game Development + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any damages + * arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * + * 2. Altered source versions must be plainly marked as such, and must not be + * misrepresented as being the original software. + * + * 3. This notice may not be removed or altered from any source + * distribution. + * + */ + +/* --------------------------------------------------------------------------- */ + +#include "libvideo.h" + +/* --------------------------------------------------------------------------- */ +/* Gestión de regiones */ + +REGION regions[ 32 ] ; + +/* --------------------------------------------------------------------------- */ +/* + * FUNCTION : region_define + * + * Sets one of the 32 regions visible from the fenix + * language to the values given + * + * The region 0 is always equal to the whole screen + * and cannot be changed + * + * PARAMS : + * n Number of region to set (1 to 31) + * x, y Top-Left coordinates + * width Width in pixels + * height Height in pixels + * + * RETURN VALUE : + * None + */ + +void region_define( int region, int x, int y, int width, int height ) +{ + if ( region < 1 || region > 31 ) return ; +#if 1 + regions[ region ].x = x; + regions[ region ].y = y ; + regions[ region ].x2 = ( x + width ) - 1 ; + regions[ region ].y2 = ( y + height ) - 1 ; +#else + regions[ region ].x = MAX( x, 0 ) ; + regions[ region ].y = MAX( y, 0 ) ; + regions[ region ].x2 = MIN( scr_width, x + width ) - 1 ; + regions[ region ].y2 = MIN( scr_height, y + height ) - 1 ; +#endif +} + +/* --------------------------------------------------------------------------- */ +/* + * FUNCTION : region_union + * + * Calculates a region as the intersection of another two + * + * PARAMS : + * dest First region, and the one to contain the result + * b Second region + * + * RETURN VALUE : + * None. The result will be stored in the first region + * used as parameter + * + */ + +void region_union( REGION * dest, REGION * b ) +{ + dest->x = MAX( dest->x, b->x ) ; + dest->y = MAX( dest->y, b->y ) ; + dest->y2 = MIN( dest->y2, b->y2 ) ; + dest->x2 = MIN( dest->x2, b->x2 ) ; +} + +/* --------------------------------------------------------------------------- */ +/* + * FUNCTION : region_is_empty + * + * Returns TRUE if the region contains no pixels + * + * PARAMS : + * region Region to check + * + * RETURN VALUE : + * 1 if the region is empty, 0 otherwise + * + */ + +int region_is_empty( REGION * a ) +{ + return ( a->x2 < a->x ) || ( a->y2 < a->y ) ; +} + +/* --------------------------------------------------------------------------- */ +/* + * FUNCTION : region_is_out + * + * Returns TRUE if two regions overlap + * + * PARAMS : + * a First region to check + * b Second region to check + * + * RETURN VALUE : + * 1 if there is at least one pixel in both regions, 0 otherwise + * + */ + +int region_is_out( REGION * a, REGION * b ) +{ + return ( b->x > a->x2 || b->y > a->y2 || b->x2 < a->x || b->y2 < a->y ); +} + +/* --------------------------------------------------------------------------- */ +/* + * FUNCTION : region_new + * + * Create a new region object. Only rectangular regions + * are supported in this library. + * + * PARAMS : + * x, y Coordinates of the top-left pixel + * width Width of the region in pixels + * height Height of the region in pixels + * + * RETURN VALUE : + * Returns a pointer to the new object + * + */ + +REGION * region_new( int x, int y, int width, int height ) +{ + REGION * region = malloc( sizeof( REGION ) ) ; +#if 1 + region->x = x ; + region->y = y ; + region->x2 = ( x + width ) - 1 ; + region->y2 = ( y + height ) - 1 ; +#else + region->x = MAX( x, 0 ) ; + region->y = MAX( y, 0 ) ; + region->x2 = MIN( scr_width, x + width ) - 1 ; + region->y2 = MIN( scr_height, y + height ) - 1 ; +#endif + return region ; +} + +/* --------------------------------------------------------------------------- */ +/* + * FUNCTION : region_get + * + * Returns one of the 32 default regions visible from the fenix language + * + * PARAMS : + * n Number of the region (0-31) + * + * RETURN VALUE : + * Returns the region object + * + */ + +REGION * region_get( int n ) +{ + if ( n < 0 || n > 31 ) return 0 ; + + return ®ions[ n ] ; +} + +/* --------------------------------------------------------------------------- */ +/* + * FUNCTION : region_destroy + * + * Free the memory allocated by a region + * + * PARAMS : + * region Pointer to the region object + * + * RETURN VALUE : + * None + * + */ + +void region_destroy( REGION * region ) +{ + free( region ); +} + +/* --------------------------------------------------------------------------- */ |