1a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#ifndef SRAREGION_H 2a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define SRAREGION_H 3a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 4a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat/* -=- SRA - Simple Region Algorithm 5a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * A simple rectangular region implementation. 6a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * Copyright (c) 2001 James "Wez" Weatherall, Johannes E. Schindelin 7a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat */ 8a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 9a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat/* -=- sraRect */ 10a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 11a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehattypedef struct _rect { 12a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat int x1; 13a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat int y1; 14a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat int x2; 15a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat int y2; 16a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat} sraRect; 17a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 18a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehattypedef struct sraRegion sraRegion; 19a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 20a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat/* -=- Region manipulation functions */ 21a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 22a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatextern sraRegion *sraRgnCreate(); 23a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatextern sraRegion *sraRgnCreateRect(int x1, int y1, int x2, int y2); 24a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatextern sraRegion *sraRgnCreateRgn(const sraRegion *src); 25a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 26a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatextern void sraRgnDestroy(sraRegion *rgn); 27a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatextern void sraRgnMakeEmpty(sraRegion *rgn); 28a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatextern rfbBool sraRgnAnd(sraRegion *dst, const sraRegion *src); 29a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatextern void sraRgnOr(sraRegion *dst, const sraRegion *src); 30a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatextern rfbBool sraRgnSubtract(sraRegion *dst, const sraRegion *src); 31a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 32a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatextern void sraRgnOffset(sraRegion *dst, int dx, int dy); 33a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 34a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatextern rfbBool sraRgnPopRect(sraRegion *region, sraRect *rect, 35a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat unsigned long flags); 36a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 37a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatextern unsigned long sraRgnCountRects(const sraRegion *rgn); 38a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatextern rfbBool sraRgnEmpty(const sraRegion *rgn); 39a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 40a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatextern sraRegion *sraRgnBBox(const sraRegion *src); 41a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 42a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat/* -=- rectangle iterator */ 43a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 44a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehattypedef struct sraRectangleIterator { 45a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat rfbBool reverseX,reverseY; 46a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat int ptrSize,ptrPos; 47a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat struct sraSpan** sPtrs; 48a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat} sraRectangleIterator; 49a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 50a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatextern sraRectangleIterator *sraRgnGetIterator(sraRegion *s); 51a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatextern sraRectangleIterator *sraRgnGetReverseIterator(sraRegion *s,rfbBool reverseX,rfbBool reverseY); 52a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatextern rfbBool sraRgnIteratorNext(sraRectangleIterator *i,sraRect *r); 53a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatextern void sraRgnReleaseIterator(sraRectangleIterator *i); 54a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 55a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatvoid sraRgnPrint(const sraRegion *s); 56a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 57a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat/* -=- Rectangle clipper (for speed) */ 58a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 59a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatextern rfbBool sraClipRect(int *x, int *y, int *w, int *h, 60a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat int cx, int cy, int cw, int ch); 61a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 62a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatextern rfbBool sraClipRect2(int *x, int *y, int *x2, int *y2, 63a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat int cx, int cy, int cx2, int cy2); 64a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 65a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 66