diff options
| author | Michael R Sweet <michael.r.sweet@gmail.com> | 1998-10-06 19:14:55 +0000 |
|---|---|---|
| committer | Michael R Sweet <michael.r.sweet@gmail.com> | 1998-10-06 19:14:55 +0000 |
| commit | 725a11bce75ffff56ed081c26240510d3bfacd78 (patch) | |
| tree | b4003cedb1bf859b98b250ea335305b2fb06e4ad /src/fl_rect.cxx | |
| parent | e7d805a88ca71a0e6499fe72830e58fe594ef05b (diff) | |
Applied patches from Bill Spitzak.
Fixed all source files with MS-DOS/Windows line termination (CR+LF) instead
of standard line termination (LF only).
git-svn-id: file:///fltk/svn/fltk/trunk@8 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
Diffstat (limited to 'src/fl_rect.cxx')
| -rw-r--r-- | src/fl_rect.cxx | 702 |
1 files changed, 351 insertions, 351 deletions
diff --git a/src/fl_rect.cxx b/src/fl_rect.cxx index 1ea826c6f..f047bb824 100644 --- a/src/fl_rect.cxx +++ b/src/fl_rect.cxx @@ -1,351 +1,351 @@ -// fl_rect.C
-
-// These routines from fl_draw.H are used by the standard boxtypes
-// and thus are always linked into an fltk program.
-
-// Also all fl_clip routines, since they are always linked in so
-// that minimal update works.
-
-#include <FL/Fl_Widget.H>
-#include <FL/fl_draw.H>
-#include <FL/x.H>
-
-void fl_rect(int x, int y, int w, int h) {
- if (w<=0 || h<=0) return;
-#ifdef WIN32
- MoveToEx(fl_gc, x, y, 0L);
- LineTo(fl_gc, x+w-1, y);
- LineTo(fl_gc, x+w-1, y+h-1);
- LineTo(fl_gc, x, y+h-1);
- LineTo(fl_gc, x, y);
-#else
- XDrawRectangle(fl_display, fl_window, fl_gc, x, y, w-1, h-1);
-#endif
-}
-
-void fl_rectf(int x, int y, int w, int h) {
- if (w<=0 || h<=0) return;
-#ifdef WIN32
- RECT rect;
- rect.left = x; rect.top = y;
- rect.right = x + w; rect.bottom = y + h;
- FillRect(fl_gc, &rect, fl_brush());
-#else
- if (w && h) XFillRectangle(fl_display, fl_window, fl_gc, x, y, w, h);
-#endif
-}
-
-void fl_xyline(int x, int y, int x1) {
-#ifdef WIN32
- MoveToEx(fl_gc, x, y, 0L); LineTo(fl_gc, x1+1, y);
-#else
- XDrawLine(fl_display, fl_window, fl_gc, x, y, x1, y);
-#endif
-}
-
-void fl_xyline(int x, int y, int x1, int y2) {
-#ifdef WIN32
- if (y2 < y) y2--;
- MoveToEx(fl_gc, x, y, 0L);
- LineTo(fl_gc, x1, y);
- LineTo(fl_gc, x1, y2);
-#else
- XPoint p[3];
- p[0].x = x; p[0].y = p[1].y = y;
- p[1].x = p[2].x = x1; p[2].y = y2;
- XDrawLines(fl_display, fl_window, fl_gc, p, 3, 0);
-#endif
-}
-
-void fl_xyline(int x, int y, int x1, int y2, int x3) {
-#ifdef WIN32
- MoveToEx(fl_gc, x, y, 0L);
- LineTo(fl_gc, x1, y);
- LineTo(fl_gc, x1, y2);
- LineTo(fl_gc, x3, y2);
-#else
- XPoint p[4];
- p[0].x = x; p[0].y = p[1].y = y;
- p[1].x = p[2].x = x1; p[2].y = p[3].y = y2;
- p[3].x = x3;
- XDrawLines(fl_display, fl_window, fl_gc, p, 4, 0);
-#endif
-}
-
-void fl_yxline(int x, int y, int y1) {
-#ifdef WIN32
- if (y1 < y) y1--;
- MoveToEx(fl_gc, x, y, 0L); LineTo(fl_gc, x, y1);
-#else
- XDrawLine(fl_display, fl_window, fl_gc, x, y, x, y1);
-#endif
-}
-
-void fl_yxline(int x, int y, int y1, int x2) {
-#ifdef WIN32
- if (x2 > x) x2++;
- MoveToEx(fl_gc, x, y, 0L);
- LineTo(fl_gc, x, y1);
- LineTo(fl_gc, x2, y1);
-#else
- XPoint p[3];
- p[0].x = p[1].x = x; p[0].y = y;
- p[1].y = p[2].y = y1; p[2].x = x2;
- XDrawLines(fl_display, fl_window, fl_gc, p, 3, 0);
-#endif
-}
-
-void fl_yxline(int x, int y, int y1, int x2, int y3) {
-#ifdef WIN32
- MoveToEx(fl_gc, x, y, 0L);
- LineTo(fl_gc, x, y1);
- LineTo(fl_gc, x2, y1);
- LineTo(fl_gc, x2, y3);
-#else
- XPoint p[4];
- p[0].x = p[1].x = x; p[0].y = y;
- p[1].y = p[2].y = y1; p[2].x = p[3].x = x2;
- p[3].y = y3;
- XDrawLines(fl_display, fl_window, fl_gc, p, 4, 0);
-#endif
-}
-
-void fl_line(int x, int y, int x1, int y1) {
-#ifdef WIN32
- MoveToEx(fl_gc, x, y, 0L);
- LineTo(fl_gc, x1, y1);
-#else
- XDrawLine(fl_display, fl_window, fl_gc, x, y, x1, y1);
-#endif
-}
-
-void fl_line(int x, int y, int x1, int y1, int x2, int y2) {
-#ifdef WIN32
- MoveToEx(fl_gc, x, y, 0L);
- LineTo(fl_gc, x1, y1);
- LineTo(fl_gc, x2, y2);
-#else
- XPoint p[3];
- p[0].x = x; p[0].y = y;
- p[1].x = x1; p[1].y = y1;
- p[2].x = x2; p[2].y = y2;
- XDrawLines(fl_display, fl_window, fl_gc, p, 3, 0);
-#endif
-}
-
-void fl_loop(int x, int y, int x1, int y1, int x2, int y2) {
-#ifdef WIN32
- MoveToEx(fl_gc, x, y, 0L);
- LineTo(fl_gc, x1, y1);
- LineTo(fl_gc, x2, y2);
- LineTo(fl_gc, x, y);
-#else
- XPoint p[4];
- p[0].x = x; p[0].y = y;
- p[1].x = x1; p[1].y = y1;
- p[2].x = x2; p[2].y = y2;
- p[3].x = x; p[3].y = y;
- XDrawLines(fl_display, fl_window, fl_gc, p, 4, 0);
-#endif
-}
-
-void fl_loop(int x, int y, int x1, int y1, int x2, int y2, int x3, int y3) {
-#ifdef WIN32
- MoveToEx(fl_gc, x, y, 0L);
- LineTo(fl_gc, x1, y1);
- LineTo(fl_gc, x2, y2);
- LineTo(fl_gc, x3, y3);
- LineTo(fl_gc, x, y);
-#else
- XPoint p[5];
- p[0].x = x; p[0].y = y;
- p[1].x = x1; p[1].y = y1;
- p[2].x = x2; p[2].y = y2;
- p[3].x = x3; p[3].y = y3;
- p[4].x = x; p[4].y = y;
- XDrawLines(fl_display, fl_window, fl_gc, p, 5, 0);
-#endif
-}
-
-void fl_polygon(int x, int y, int x1, int y1, int x2, int y2) {
- XPoint p[4];
- p[0].x = x; p[0].y = y;
- p[1].x = x1; p[1].y = y1;
- p[2].x = x2; p[2].y = y2;
-#ifdef WIN32
- SelectObject(fl_gc, fl_brush());
- Polygon(fl_gc, p, 3);
-#else
- p[3].x = x; p[3].y = y;
- XFillPolygon(fl_display, fl_window, fl_gc, p, 3, Convex, 0);
- XDrawLines(fl_display, fl_window, fl_gc, p, 4, 0);
-#endif
-}
-
-void fl_polygon(int x, int y, int x1, int y1, int x2, int y2, int x3, int y3) {
- XPoint p[5];
- p[0].x = x; p[0].y = y;
- p[1].x = x1; p[1].y = y1;
- p[2].x = x2; p[2].y = y2;
- p[3].x = x3; p[3].y = y3;
-#ifdef WIN32
- SelectObject(fl_gc, fl_brush());
- Polygon(fl_gc, p, 4);
-#else
- p[4].x = x; p[4].y = y;
- XFillPolygon(fl_display, fl_window, fl_gc, p, 4, Convex, 0);
- XDrawLines(fl_display, fl_window, fl_gc, p, 5, 0);
-#endif
-}
-
-void fl_point(int x, int y) {
-#ifdef WIN32
- SetPixel(fl_gc, x, y, fl_RGB());
-#else
- XDrawPoint(fl_display, fl_window, fl_gc, x, y);
-#endif
-}
-
-////////////////////////////////////////////////////////////////
-
-static Region rstack[10];
-static int rstackptr;
-int fl_clip_state_number=0; // used by gl_begin.C to update GL clip
-
-#ifndef WIN32
-// Missing X call: (is this the fastest way to init a 1-rectangle region?)
-// MSWindows equivalent exists, implemented inline in win32.H
-Region XRectangleRegion(int x, int y, int w, int h) {
- XRectangle R;
- R.x = x; R.y = y; R.width = w; R.height = h;
- Region r = XCreateRegion();
- XUnionRectWithRegion(&R, r, r);
- return r;
-}
-#endif
-
-// undo any clobbering of clip done by your program:
-void fl_restore_clip() {
- fl_clip_state_number++;
- Region r = rstack[rstackptr];
-#ifdef WIN32
- SelectClipRgn(fl_gc, r); //if r is NULL, clip is automatically cleared
-#else
- if (r) XSetRegion(fl_display, fl_gc, r);
- else XSetClipMask(fl_display, fl_gc, 0);
-#endif
-}
-
-// Replace the top of the clip stack:
-void fl_clip_region(Region r) {
- Region oldr = rstack[rstackptr];
- if (oldr) XDestroyRegion(oldr);
- rstack[rstackptr] = r;
- fl_restore_clip();
-}
-
-// Intersect & push a new clip rectangle:
-void fl_clip(int x, int y, int w, int h) {
- Region r;
- if (w > 0 && h > 0) {
- r = XRectangleRegion(x,y,w,h);
- Region current = rstack[rstackptr];
- if (current) {
-#ifndef WIN32
- Region temp = XCreateRegion();
- XIntersectRegion(current, r, temp);
- XDestroyRegion(r);
- r = temp;
-#else
- CombineRgn(r,r,current,RGN_AND);
-#endif
- }
- } else { // make empty clip region:
-#ifndef WIN32
- r = XCreateRegion();
-#else
- r = 0; //whatever, for win32 this is the same as having 0 for HRGN
-#endif
- }
- rstack[++rstackptr] = r;
- fl_restore_clip();
-}
-
-// make there be no clip (used by fl_begin_offscreen() only!)
-void fl_push_no_clip() {
- rstack[++rstackptr] = 0;
- fl_restore_clip();
-}
-
-// pop back to previous clip:
-void fl_pop_clip() {
- Region oldr = rstack[rstackptr--];
- if (oldr) XDestroyRegion(oldr);
- fl_restore_clip();
-}
-
-// does this rectangle intersect current clip?
-int fl_not_clipped(int x, int y, int w, int h) {
- Region r = rstack[rstackptr];
-#ifndef WIN32
- return r ? XRectInRegion(r, x, y, w, h) : 1;
-#else
- if (!r) return 1;
- RECT rect;
- rect.left = x; rect.top = y; rect.right = x+w; rect.bottom = y+h;
- return RectInRegion(r,&rect);
-#endif
-}
-
-// return rectangle surrounding intersection of this rectangle and clip:
-int fl_clip_box(int x, int y, int w, int h, int& X, int& Y, int& W, int& H){
- X = x; Y = y; W = w; H = h;
- Region r = rstack[rstackptr];
- if (!r) return 0;
-#ifndef WIN32
- switch (XRectInRegion(r, x, y, w, h)) {
- case 0: // completely outside
- W = H = 0;
- return 2;
- case 1: // completely inside:
- return 0;
- default: // partial:
- break;
- }
-#else
-// The win32 API makes no distinction between partial and complete
-// intersection, so we have to check for partial intersection ourselves.
- RECT rect;
- rect.left = x; rect.top = y; rect.right = x+w; rect.bottom = y+h;
- if (!RectInRegion(r,&rect)) {
- W = H = 0;
- return 2;
- } else {
- if (PtInRegion(r, rect.left, rect.top) &&
- PtInRegion(r, rect.left, rect.top) &&
- PtInRegion(r, rect.right, rect.bottom) &&
- PtInRegion(r, rect.right, rect.bottom))
- return 0;
- }
-#endif
-
-#ifndef WIN32
- Region rr = XRectangleRegion(x,y,w,h);
- Region temp = XCreateRegion();
- XIntersectRegion(r, rr, temp);
- XRectangle rect;
- XClipBox(temp, &rect);
- X = rect.x; Y = rect.y; W = rect.width; H = rect.height;
- XDestroyRegion(temp);
- XDestroyRegion(rr);
-#else
- Region rr = XRectangleRegion(x,y,w,h);
- CombineRgn(rr, rr, r,RGN_AND);
- GetRgnBox(rr, &rect);
- X = rect.left; Y = rect.top; W = rect.right - X; H = rect.bottom - Y;
- DeleteObject(rr);
-#endif
- return 1;
-}
-
-// end of fl_rect.C
+// fl_rect.C + +// These routines from fl_draw.H are used by the standard boxtypes +// and thus are always linked into an fltk program. + +// Also all fl_clip routines, since they are always linked in so +// that minimal update works. + +#include <FL/Fl_Widget.H> +#include <FL/fl_draw.H> +#include <FL/x.H> + +void fl_rect(int x, int y, int w, int h) { + if (w<=0 || h<=0) return; +#ifdef WIN32 + MoveToEx(fl_gc, x, y, 0L); + LineTo(fl_gc, x+w-1, y); + LineTo(fl_gc, x+w-1, y+h-1); + LineTo(fl_gc, x, y+h-1); + LineTo(fl_gc, x, y); +#else + XDrawRectangle(fl_display, fl_window, fl_gc, x, y, w-1, h-1); +#endif +} + +void fl_rectf(int x, int y, int w, int h) { + if (w<=0 || h<=0) return; +#ifdef WIN32 + RECT rect; + rect.left = x; rect.top = y; + rect.right = x + w; rect.bottom = y + h; + FillRect(fl_gc, &rect, fl_brush()); +#else + if (w && h) XFillRectangle(fl_display, fl_window, fl_gc, x, y, w, h); +#endif +} + +void fl_xyline(int x, int y, int x1) { +#ifdef WIN32 + MoveToEx(fl_gc, x, y, 0L); LineTo(fl_gc, x1+1, y); +#else + XDrawLine(fl_display, fl_window, fl_gc, x, y, x1, y); +#endif +} + +void fl_xyline(int x, int y, int x1, int y2) { +#ifdef WIN32 + if (y2 < y) y2--; + MoveToEx(fl_gc, x, y, 0L); + LineTo(fl_gc, x1, y); + LineTo(fl_gc, x1, y2); +#else + XPoint p[3]; + p[0].x = x; p[0].y = p[1].y = y; + p[1].x = p[2].x = x1; p[2].y = y2; + XDrawLines(fl_display, fl_window, fl_gc, p, 3, 0); +#endif +} + +void fl_xyline(int x, int y, int x1, int y2, int x3) { +#ifdef WIN32 + MoveToEx(fl_gc, x, y, 0L); + LineTo(fl_gc, x1, y); + LineTo(fl_gc, x1, y2); + LineTo(fl_gc, x3, y2); +#else + XPoint p[4]; + p[0].x = x; p[0].y = p[1].y = y; + p[1].x = p[2].x = x1; p[2].y = p[3].y = y2; + p[3].x = x3; + XDrawLines(fl_display, fl_window, fl_gc, p, 4, 0); +#endif +} + +void fl_yxline(int x, int y, int y1) { +#ifdef WIN32 + if (y1 < y) y1--; + MoveToEx(fl_gc, x, y, 0L); LineTo(fl_gc, x, y1); +#else + XDrawLine(fl_display, fl_window, fl_gc, x, y, x, y1); +#endif +} + +void fl_yxline(int x, int y, int y1, int x2) { +#ifdef WIN32 + if (x2 > x) x2++; + MoveToEx(fl_gc, x, y, 0L); + LineTo(fl_gc, x, y1); + LineTo(fl_gc, x2, y1); +#else + XPoint p[3]; + p[0].x = p[1].x = x; p[0].y = y; + p[1].y = p[2].y = y1; p[2].x = x2; + XDrawLines(fl_display, fl_window, fl_gc, p, 3, 0); +#endif +} + +void fl_yxline(int x, int y, int y1, int x2, int y3) { +#ifdef WIN32 + MoveToEx(fl_gc, x, y, 0L); + LineTo(fl_gc, x, y1); + LineTo(fl_gc, x2, y1); + LineTo(fl_gc, x2, y3); +#else + XPoint p[4]; + p[0].x = p[1].x = x; p[0].y = y; + p[1].y = p[2].y = y1; p[2].x = p[3].x = x2; + p[3].y = y3; + XDrawLines(fl_display, fl_window, fl_gc, p, 4, 0); +#endif +} + +void fl_line(int x, int y, int x1, int y1) { +#ifdef WIN32 + MoveToEx(fl_gc, x, y, 0L); + LineTo(fl_gc, x1, y1); +#else + XDrawLine(fl_display, fl_window, fl_gc, x, y, x1, y1); +#endif +} + +void fl_line(int x, int y, int x1, int y1, int x2, int y2) { +#ifdef WIN32 + MoveToEx(fl_gc, x, y, 0L); + LineTo(fl_gc, x1, y1); + LineTo(fl_gc, x2, y2); +#else + XPoint p[3]; + p[0].x = x; p[0].y = y; + p[1].x = x1; p[1].y = y1; + p[2].x = x2; p[2].y = y2; + XDrawLines(fl_display, fl_window, fl_gc, p, 3, 0); +#endif +} + +void fl_loop(int x, int y, int x1, int y1, int x2, int y2) { +#ifdef WIN32 + MoveToEx(fl_gc, x, y, 0L); + LineTo(fl_gc, x1, y1); + LineTo(fl_gc, x2, y2); + LineTo(fl_gc, x, y); +#else + XPoint p[4]; + p[0].x = x; p[0].y = y; + p[1].x = x1; p[1].y = y1; + p[2].x = x2; p[2].y = y2; + p[3].x = x; p[3].y = y; + XDrawLines(fl_display, fl_window, fl_gc, p, 4, 0); +#endif +} + +void fl_loop(int x, int y, int x1, int y1, int x2, int y2, int x3, int y3) { +#ifdef WIN32 + MoveToEx(fl_gc, x, y, 0L); + LineTo(fl_gc, x1, y1); + LineTo(fl_gc, x2, y2); + LineTo(fl_gc, x3, y3); + LineTo(fl_gc, x, y); +#else + XPoint p[5]; + p[0].x = x; p[0].y = y; + p[1].x = x1; p[1].y = y1; + p[2].x = x2; p[2].y = y2; + p[3].x = x3; p[3].y = y3; + p[4].x = x; p[4].y = y; + XDrawLines(fl_display, fl_window, fl_gc, p, 5, 0); +#endif +} + +void fl_polygon(int x, int y, int x1, int y1, int x2, int y2) { + XPoint p[4]; + p[0].x = x; p[0].y = y; + p[1].x = x1; p[1].y = y1; + p[2].x = x2; p[2].y = y2; +#ifdef WIN32 + SelectObject(fl_gc, fl_brush()); + Polygon(fl_gc, p, 3); +#else + p[3].x = x; p[3].y = y; + XFillPolygon(fl_display, fl_window, fl_gc, p, 3, Convex, 0); + XDrawLines(fl_display, fl_window, fl_gc, p, 4, 0); +#endif +} + +void fl_polygon(int x, int y, int x1, int y1, int x2, int y2, int x3, int y3) { + XPoint p[5]; + p[0].x = x; p[0].y = y; + p[1].x = x1; p[1].y = y1; + p[2].x = x2; p[2].y = y2; + p[3].x = x3; p[3].y = y3; +#ifdef WIN32 + SelectObject(fl_gc, fl_brush()); + Polygon(fl_gc, p, 4); +#else + p[4].x = x; p[4].y = y; + XFillPolygon(fl_display, fl_window, fl_gc, p, 4, Convex, 0); + XDrawLines(fl_display, fl_window, fl_gc, p, 5, 0); +#endif +} + +void fl_point(int x, int y) { +#ifdef WIN32 + SetPixel(fl_gc, x, y, fl_RGB()); +#else + XDrawPoint(fl_display, fl_window, fl_gc, x, y); +#endif +} + +//////////////////////////////////////////////////////////////// + +static Region rstack[10]; +static int rstackptr; +int fl_clip_state_number=0; // used by gl_begin.C to update GL clip + +#ifndef WIN32 +// Missing X call: (is this the fastest way to init a 1-rectangle region?) +// MSWindows equivalent exists, implemented inline in win32.H +Region XRectangleRegion(int x, int y, int w, int h) { + XRectangle R; + R.x = x; R.y = y; R.width = w; R.height = h; + Region r = XCreateRegion(); + XUnionRectWithRegion(&R, r, r); + return r; +} +#endif + +// undo any clobbering of clip done by your program: +void fl_restore_clip() { + fl_clip_state_number++; + Region r = rstack[rstackptr]; +#ifdef WIN32 + SelectClipRgn(fl_gc, r); //if r is NULL, clip is automatically cleared +#else + if (r) XSetRegion(fl_display, fl_gc, r); + else XSetClipMask(fl_display, fl_gc, 0); +#endif +} + +// Replace the top of the clip stack: +void fl_clip_region(Region r) { + Region oldr = rstack[rstackptr]; + if (oldr) XDestroyRegion(oldr); + rstack[rstackptr] = r; + fl_restore_clip(); +} + +// Intersect & push a new clip rectangle: +void fl_clip(int x, int y, int w, int h) { + Region r; + if (w > 0 && h > 0) { + r = XRectangleRegion(x,y,w,h); + Region current = rstack[rstackptr]; + if (current) { +#ifndef WIN32 + Region temp = XCreateRegion(); + XIntersectRegion(current, r, temp); + XDestroyRegion(r); + r = temp; +#else + CombineRgn(r,r,current,RGN_AND); +#endif + } + } else { // make empty clip region: +#ifndef WIN32 + r = XCreateRegion(); +#else + r = 0; //whatever, for win32 this is the same as having 0 for HRGN +#endif + } + rstack[++rstackptr] = r; + fl_restore_clip(); +} + +// make there be no clip (used by fl_begin_offscreen() only!) +void fl_push_no_clip() { + rstack[++rstackptr] = 0; + fl_restore_clip(); +} + +// pop back to previous clip: +void fl_pop_clip() { + Region oldr = rstack[rstackptr--]; + if (oldr) XDestroyRegion(oldr); + fl_restore_clip(); +} + +// does this rectangle intersect current clip? +int fl_not_clipped(int x, int y, int w, int h) { + Region r = rstack[rstackptr]; +#ifndef WIN32 + return r ? XRectInRegion(r, x, y, w, h) : 1; +#else + if (!r) return 1; + RECT rect; + rect.left = x; rect.top = y; rect.right = x+w; rect.bottom = y+h; + return RectInRegion(r,&rect); +#endif +} + +// return rectangle surrounding intersection of this rectangle and clip: +int fl_clip_box(int x, int y, int w, int h, int& X, int& Y, int& W, int& H){ + X = x; Y = y; W = w; H = h; + Region r = rstack[rstackptr]; + if (!r) return 0; +#ifndef WIN32 + switch (XRectInRegion(r, x, y, w, h)) { + case 0: // completely outside + W = H = 0; + return 2; + case 1: // completely inside: + return 0; + default: // partial: + break; + } +#else +// The win32 API makes no distinction between partial and complete +// intersection, so we have to check for partial intersection ourselves. + RECT rect; + rect.left = x; rect.top = y; rect.right = x+w; rect.bottom = y+h; + if (!RectInRegion(r,&rect)) { + W = H = 0; + return 2; + } else { + if (PtInRegion(r, rect.left, rect.top) && + PtInRegion(r, rect.left, rect.top) && + PtInRegion(r, rect.right, rect.bottom) && + PtInRegion(r, rect.right, rect.bottom)) + return 0; + } +#endif + +#ifndef WIN32 + Region rr = XRectangleRegion(x,y,w,h); + Region temp = XCreateRegion(); + XIntersectRegion(r, rr, temp); + XRectangle rect; + XClipBox(temp, &rect); + X = rect.x; Y = rect.y; W = rect.width; H = rect.height; + XDestroyRegion(temp); + XDestroyRegion(rr); +#else + Region rr = XRectangleRegion(x,y,w,h); + CombineRgn(rr, rr, r,RGN_AND); + GetRgnBox(rr, &rect); + X = rect.left; Y = rect.top; W = rect.right - X; H = rect.bottom - Y; + DeleteObject(rr); +#endif + return 1; +} + +// end of fl_rect.C |
