xref: /OK3568_Linux_fs/external/xserver/render/mitri.c (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1 /*
2  *
3  * Copyright © 2002 Keith Packard, member of The XFree86 Project, Inc.
4  *
5  * Permission to use, copy, modify, distribute, and sell this software and its
6  * documentation for any purpose is hereby granted without fee, provided that
7  * the above copyright notice appear in all copies and that both that
8  * copyright notice and this permission notice appear in supporting
9  * documentation, and that the name of Keith Packard not be used in
10  * advertising or publicity pertaining to distribution of the software without
11  * specific, written prior permission.  Keith Packard makes no
12  * representations about the suitability of this software for any purpose.  It
13  * is provided "as is" without express or implied warranty.
14  *
15  * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
16  * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
17  * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
18  * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
19  * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
20  * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
21  * PERFORMANCE OF THIS SOFTWARE.
22  */
23 
24 #ifdef HAVE_DIX_CONFIG_H
25 #include <dix-config.h>
26 #endif
27 
28 #include "scrnintstr.h"
29 #include "gcstruct.h"
30 #include "pixmapstr.h"
31 #include "windowstr.h"
32 #include "mi.h"
33 #include "picturestr.h"
34 #include "mipict.h"
35 
36 void
miPointFixedBounds(int npoint,xPointFixed * points,BoxPtr bounds)37 miPointFixedBounds(int npoint, xPointFixed * points, BoxPtr bounds)
38 {
39     bounds->x1 = xFixedToInt(points->x);
40     bounds->x2 = xFixedToInt(xFixedCeil(points->x));
41     bounds->y1 = xFixedToInt(points->y);
42     bounds->y2 = xFixedToInt(xFixedCeil(points->y));
43     points++;
44     npoint--;
45     while (npoint-- > 0) {
46         INT16 x1 = xFixedToInt(points->x);
47         INT16 x2 = xFixedToInt(xFixedCeil(points->x));
48         INT16 y1 = xFixedToInt(points->y);
49         INT16 y2 = xFixedToInt(xFixedCeil(points->y));
50 
51         if (x1 < bounds->x1)
52             bounds->x1 = x1;
53         else if (x2 > bounds->x2)
54             bounds->x2 = x2;
55         if (y1 < bounds->y1)
56             bounds->y1 = y1;
57         else if (y2 > bounds->y2)
58             bounds->y2 = y2;
59         points++;
60     }
61 }
62 
63 void
miTriangleBounds(int ntri,xTriangle * tris,BoxPtr bounds)64 miTriangleBounds(int ntri, xTriangle * tris, BoxPtr bounds)
65 {
66     miPointFixedBounds(ntri * 3, (xPointFixed *) tris, bounds);
67 }
68