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