Warning: Attempt to read property "date" on null in /usr/local/www/websvn.planix.org/blame.php on line 247

Warning: Attempt to read property "msg" on null in /usr/local/www/websvn.planix.org/blame.php on line 247
WebSVN – planix.SVN – Blame – /os/branches/planix-v0/sys/src/cmd/gs/src/gsrect.h – Rev 2

Subversion Repositories planix.SVN

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 1
/* Copyright (C) 1997, 1998, 1999 Aladdin Enterprises.  All rights reserved.
2
 
3
  This software is provided AS-IS with no warranty, either express or
4
  implied.
5
 
6
  This software is distributed under license and may not be copied,
7
  modified or distributed except as expressly authorized under the terms
8
  of the license contained in the file LICENSE in this distribution.
9
 
10
  For more information about licensing, please refer to
11
  http://www.ghostscript.com/licensing/. For information on
12
  commercial licensing, go to http://www.artifex.com/licensing/ or
13
  contact Artifex Software, Inc., 101 Lucas Valley Road #110,
14
  San Rafael, CA  94903, U.S.A., +1(415)492-9861.
15
*/
16
 
17
/* $Id: gsrect.h,v 1.5 2002/06/16 08:45:42 lpd Exp $ */
18
/* Rectangle utilities */
19
 
20
#ifndef gsrect_INCLUDED
21
#  define gsrect_INCLUDED
22
 
23
#include "gxfixed.h"
24
 
25
/* Check whether one rectangle is included entirely within another. */
26
#define rect_within(inner, outer)\
27
  ((inner).q.y <= (outer).q.y && (inner).q.x <= (outer).q.x &&\
28
   (inner).p.y >= (outer).p.y && (inner).p.x >= (outer).p.x)
29
 
30
/*
31
 * Intersect two rectangles, replacing the first.  The result may be
32
 * anomalous (q < p) if the intersection is empty.
33
 */
34
#define rect_intersect(to, from)\
35
  BEGIN\
36
    if ((from).p.x > (to).p.x) (to).p.x = (from).p.x;\
37
    if ((from).q.x < (to).q.x) (to).q.x = (from).q.x;\
38
    if ((from).p.y > (to).p.y) (to).p.y = (from).p.y;\
39
    if ((from).q.y < (to).q.y) (to).q.y = (from).q.y;\
40
  END
41
 
42
/*
43
 * Merge two rectangles, replacing the first.  The result may be
44
 * anomalous (q < p) if the first rectangle was anomalous.
45
 */
46
#define rect_merge(to, from)\
47
  BEGIN\
48
    if ((from).p.x < (to).p.x) (to).p.x = (from).p.x;\
49
    if ((from).q.x > (to).q.x) (to).q.x = (from).q.x;\
50
    if ((from).p.y < (to).p.y) (to).p.y = (from).p.y;\
51
    if ((from).q.y > (to).q.y) (to).q.y = (from).q.y;\
52
  END
53
 
54
/*
55
 * Calculate the difference of two rectangles, a list of up to 4 rectangles.
56
 * Return the number of rectangles in the list, and set the first rectangle
57
 * to the intersection.  The resulting first rectangle is guaranteed not to
58
 * be anomalous (q < p) iff it was not anomalous originally.
59
 *
60
 * Note that unlike the macros above, we need different versions of this
61
 * depending on the data type of the individual values: we'll only implement
62
 * the variations that we need.
63
 */
64
int int_rect_difference(gs_int_rect * outer, const gs_int_rect * inner,
65
			gs_int_rect * diffs /*[4] */ );
66
 
67
/*
68
 * Check whether a parallelogram is a rectangle.
69
 */
70
#define PARALLELOGRAM_IS_RECT(ax, ay, bx, by)\
71
  ( ((ax) | (by)) == 0 || ((bx) | (ay)) == 0 )
72
 
73
/*
74
 * Convert a rectangular parallelogram to a rectangle, carefully following
75
 * the center-of-pixel rule in all cases.
76
 */
77
#define INT_RECT_FROM_PARALLELOGRAM(prect, px, py, ax, ay, bx, by)\
78
  BEGIN\
79
    int px_ = fixed2int_pixround(px);\
80
    int py_ = fixed2int_pixround(py);\
81
    int qx_ = fixed2int_pixround((px) + (ax) + (bx));  /* only one is non-zero */\
82
    int qy_ = fixed2int_pixround((py) + (ay) + (by));  /* ditto */\
83
\
84
    if (qx_ < px_)\
85
      (prect)->p.x = qx_, (prect)->q.x = px_;\
86
    else\
87
      (prect)->p.x = px_, (prect)->q.x = qx_;\
88
    if (qy_ < py_)\
89
      (prect)->p.y = qy_, (prect)->q.y = py_;\
90
    else\
91
      (prect)->p.y = py_, (prect)->q.y = qy_;\
92
  END
93
 
94
#endif /* gsrect_INCLUDED */