18b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* Copyright (C) 2007-2008 The Android Open Source Project 28b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project** 38b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project** This software is licensed under the terms of the GNU General Public 48b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project** License version 2, as published by the Free Software Foundation, and 58b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project** may be copied, distributed, and modified under those terms. 68b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project** 78b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project** This program is distributed in the hope that it will be useful, 88b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project** but WITHOUT ANY WARRANTY; without even the implied warranty of 98b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project** GNU General Public License for more details. 118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project*/ 128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifndef _ANDROID_SKIN_REGION_H 138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define _ANDROID_SKIN_REGION_H 148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include "android/skin/rect.h" 168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projecttypedef struct SkinRegion SkinRegion; 188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern void skin_region_init_empty( SkinRegion* r ); 208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern void skin_region_init( SkinRegion* r, int x1, int y1, int x2, int y2 ); 218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern void skin_region_init_rect( SkinRegion* r, SkinRect* rect ); 228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern void skin_region_init_box( SkinRegion* r, SkinBox* box ); 238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern void skin_region_init_copy( SkinRegion* r, SkinRegion* r2 ); 248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern void skin_region_reset( SkinRegion* r ); 258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* finalize region, then copy src into it */ 278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern void skin_region_copy( SkinRegion* r, SkinRegion* src ); 288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* compare two regions for equality */ 308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern int skin_region_equals( SkinRegion* r1, SkinRegion* r2 ); 318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* swap two regions */ 338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern void skin_region_swap( SkinRegion* r, SkinRegion* r2 ); 348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern int skin_region_is_empty( SkinRegion* r ); 368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern int skin_region_is_rect( SkinRegion* r ); 378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern int skin_region_is_complex( SkinRegion* r ); 388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern void skin_region_get_bounds( SkinRegion* r, SkinRect* bounds ); 398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern void skin_region_translate( SkinRegion* r, int dx, int dy ); 418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern SkinOverlap skin_region_contains( SkinRegion* r, int x, int y ); 438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern SkinOverlap skin_region_contains_rect( SkinRegion* r, 458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project SkinRect* rect ); 468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern SkinOverlap skin_region_contains_box( SkinRegion* r, SkinBox* b ); 488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* returns overlap mode for "is r2 inside r1" */ 508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern SkinOverlap skin_region_test_intersect( SkinRegion* r1, 518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project SkinRegion* r2 ); 528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* performs r = (intersect r r2), returns true if the resulting region 548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project is not empty */ 558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern int skin_region_intersect ( SkinRegion* r, SkinRegion* r2 ); 568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern int skin_region_intersect_rect( SkinRegion* r, SkinRect* rect ); 578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* performs r = (intersect r (region+_from_rect rect)), returns true iff 598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project the resulting region is not empty */ 608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* performs r = (union r r2) */ 628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern void skin_region_union ( SkinRegion* r, SkinRegion* r2 ); 638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern void skin_region_union_rect( SkinRegion* r, SkinRect* rect ); 648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* performs r = (difference r r2) */ 668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern void skin_region_substract ( SkinRegion* r, SkinRegion* r2 ); 678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern void skin_region_substract_rect( SkinRegion* r, SkinRect* rect ); 688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* performs r = (xor r r2) */ 708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern void skin_region_xor( SkinRegion* r, SkinRegion* r2 ); 718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projecttypedef struct SkinRegionIterator SkinRegionIterator; 738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* iterator */ 758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern void skin_region_iterator_init( SkinRegionIterator* iter, 768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project SkinRegion* r ); 778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern int skin_region_iterator_next( SkinRegionIterator* iter, 798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project SkinRect *rect ); 808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern int skin_rection_iterator_next_box( SkinRegionIterator* iter, 828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project SkinBox *box ); 838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* the following should be considered private definitions. they're only here 858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project to allow clients to allocate SkinRegion objects themselves... */ 868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projecttypedef signed short SkinRegionRun; 888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define SKIN_REGION_SENTINEL 0x7fff 898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstruct SkinRegion 918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project SkinRect bounds; 938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project SkinRegionRun* runs; 948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}; 958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstruct SkinRegionIterator 978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project SkinRegion* region; 998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project SkinRegionRun* band; 1008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project SkinRegionRun* span; 1018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}; 1028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 1038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif /* _ANDROID_SKIN_REGION_H */ 104