author | prr |
Wed, 02 Oct 2013 11:22:07 -0700 | |
changeset 20419 | be660188e0b4 |
child 22584 | eed64ee05369 |
permissions | -rw-r--r-- |
20419
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
1 |
/* |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
2 |
* Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
3 |
|
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
4 |
|
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
5 |
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
6 |
* |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
7 |
* This code is free software; you can redistribute it and/or modify it |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
8 |
* under the terms of the GNU General Public License version 2 only, as |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
9 |
* published by the Free Software Foundation. Oracle designates this |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
10 |
* particular file as subject to the "Classpath" exception as provided |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
11 |
* by Oracle in the LICENSE file that accompanied this code. |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
12 |
* |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
13 |
* This code is distributed in the hope that it will be useful, but WITHOUT |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
14 |
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
15 |
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
16 |
* version 2 for more details (a copy is included in the LICENSE file that |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
17 |
* accompanied this code). |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
18 |
* |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
19 |
* You should have received a copy of the GNU General Public License version |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
20 |
* 2 along with this work; if not, write to the Free Software Foundation, |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
21 |
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
22 |
* |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
23 |
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
24 |
* or visit www.oracle.com if you need additional information or have any |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
25 |
* questions. |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
26 |
*/ |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
27 |
|
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
28 |
/** |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
29 |
* Bresenham line-drawing implementation decomposing line segments |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
30 |
* into a series of rectangles. |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
31 |
* This is required, because xrender doesn't support line primitives directly. |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
32 |
* The code here is an almost 1:1 port of the existing C-source contained in |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
33 |
* sun/java2d/loop/DrawLine.c and sun/java2d/loop/LoopMacros.h |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
34 |
*/ |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
35 |
package sun.java2d.xr; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
36 |
|
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
37 |
public class XRDrawLine { |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
38 |
static final int BIG_MAX = ((1 << 29) - 1); |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
39 |
static final int BIG_MIN = (-(1 << 29)); |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
40 |
|
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
41 |
static final int OUTCODE_TOP = 1; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
42 |
static final int OUTCODE_BOTTOM = 2; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
43 |
static final int OUTCODE_LEFT = 4; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
44 |
static final int OUTCODE_RIGHT = 8; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
45 |
|
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
46 |
int x1, y1, x2, y2; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
47 |
int ucX1, ucY1, ucX2, ucY2; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
48 |
|
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
49 |
DirtyRegion region = new DirtyRegion(); |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
50 |
|
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
51 |
protected void rasterizeLine(GrowableRectArray rectBuffer, int _x1, |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
52 |
int _y1, int _x2, int _y2, int cxmin, int cymin, int cxmax, |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
53 |
int cymax, boolean clip, boolean overflowCheck) { |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
54 |
float diagF; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
55 |
int error; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
56 |
int steps; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
57 |
int errminor, errmajor; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
58 |
boolean xmajor; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
59 |
int dx, dy, ax, ay; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
60 |
|
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
61 |
initCoordinates(_x1, _y1, _x2, _y2, overflowCheck); |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
62 |
|
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
63 |
dx = x2 - x1; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
64 |
dy = y2 - y1; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
65 |
ax = Math.abs(dx); |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
66 |
ay = Math.abs(dy); |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
67 |
xmajor = (ax >= ay); |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
68 |
diagF = ((float) ax) / ay; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
69 |
|
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
70 |
if (clip |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
71 |
&& !clipCoordinates(cxmin, cymin, cxmax, cymax, xmajor, dx, dy, |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
72 |
ax, ay)) { |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
73 |
// whole line was clipped away |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
74 |
return; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
75 |
} |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
76 |
|
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
77 |
region.setDirtyLineRegion(x1, y1, x2, y2); |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
78 |
int xDiff = region.x2 - region.x; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
79 |
int yDiff = region.y2 - region.y; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
80 |
|
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
81 |
if (xDiff == 0 || yDiff == 0) { |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
82 |
// horizontal / diagonal lines can be represented by a single |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
83 |
// rectangle |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
84 |
rectBuffer.pushRectValues(region.x, region.y, region.x2 - region.x |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
85 |
+ 1, region.y2 - region.y + 1); |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
86 |
return; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
87 |
} |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
88 |
|
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
89 |
// Setup bresenham |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
90 |
if (xmajor) { |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
91 |
errmajor = ay * 2; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
92 |
errminor = ax * 2; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
93 |
ax = -ax; /* For clipping adjustment below */ |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
94 |
steps = x2 - x1; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
95 |
} else { |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
96 |
errmajor = ax * 2; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
97 |
errminor = ay * 2; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
98 |
ay = -ay; /* For clipping adjustment below */ |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
99 |
steps = y2 - y1; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
100 |
} |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
101 |
|
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
102 |
if ((steps = (Math.abs(steps) + 1)) == 0) { |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
103 |
return; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
104 |
} |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
105 |
|
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
106 |
error = -(errminor / 2); |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
107 |
|
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
108 |
if (y1 != ucY1) { |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
109 |
int ysteps = y1 - ucY1; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
110 |
if (ysteps < 0) { |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
111 |
ysteps = -ysteps; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
112 |
} |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
113 |
error += ysteps * ax * 2; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
114 |
} |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
115 |
|
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
116 |
if (x1 != ucX1) { |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
117 |
int xsteps = x1 - ucX1; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
118 |
if (xsteps < 0) { |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
119 |
xsteps = -xsteps; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
120 |
} |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
121 |
error += xsteps * ay * 2; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
122 |
} |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
123 |
error += errmajor; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
124 |
errminor -= errmajor; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
125 |
|
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
126 |
int xStep = (dx > 0 ? 1 : -1); |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
127 |
int yStep = (dy > 0 ? 1 : -1); |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
128 |
int orthogonalXStep = xmajor ? xStep : 0; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
129 |
int orthogonalYStep = !xmajor ? yStep : 0; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
130 |
|
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
131 |
/* |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
132 |
* For lines which proceed in one direction faster, we try to generate |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
133 |
* rectangles instead of points. Otherwise we try to avoid the extra |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
134 |
* work... |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
135 |
*/ |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
136 |
if (diagF <= 0.9 || diagF >= 1.1) { |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
137 |
lineToRects(rectBuffer, steps, error, errmajor, errminor, xStep, |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
138 |
yStep, orthogonalXStep, orthogonalYStep); |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
139 |
} else { |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
140 |
lineToPoints(rectBuffer, steps, error, errmajor, errminor, xStep, |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
141 |
yStep, orthogonalXStep, orthogonalYStep); |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
142 |
} |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
143 |
} |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
144 |
|
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
145 |
private void lineToPoints(GrowableRectArray rectBuffer, int steps, |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
146 |
int error, int errmajor, int errminor, int xStep, int yStep, |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
147 |
int orthogonalXStep, int orthogonalYStep) { |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
148 |
int x = x1, y = y1; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
149 |
|
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
150 |
do { |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
151 |
rectBuffer.pushRectValues(x, y, 1, 1); |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
152 |
|
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
153 |
// "Traditional" Bresenham line drawing |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
154 |
if (error < 0) { |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
155 |
error += errmajor; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
156 |
x += orthogonalXStep; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
157 |
y += orthogonalYStep; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
158 |
} else { |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
159 |
error -= errminor; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
160 |
x += xStep; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
161 |
y += yStep; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
162 |
} |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
163 |
} while (--steps > 0); |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
164 |
} |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
165 |
|
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
166 |
private void lineToRects(GrowableRectArray rectBuffer, int steps, |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
167 |
int error, int errmajor, int errminor, int xStep, int yStep, |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
168 |
int orthogonalXStep, int orthogonalYStep) { |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
169 |
int x = x1, y = y1; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
170 |
int rectX = Integer.MIN_VALUE, rectY = 0; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
171 |
int rectW = 0, rectH = 0; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
172 |
|
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
173 |
do { |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
174 |
// Combine the resulting rectangles |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
175 |
// for steps performed in a single direction. |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
176 |
if (y == rectY) { |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
177 |
if (x == (rectX + rectW)) { |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
178 |
rectW++; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
179 |
} else if (x == (rectX - 1)) { |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
180 |
rectX--; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
181 |
rectW++; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
182 |
} |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
183 |
} else if (x == rectX) { |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
184 |
if (y == (rectY + rectH)) { |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
185 |
rectH++; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
186 |
} else if (y == (rectY - 1)) { |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
187 |
rectY--; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
188 |
rectH++; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
189 |
} |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
190 |
} else { |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
191 |
// Diagonal step: add the previous rectangle to the list, |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
192 |
// iff it was "real" (= not initialized before the first |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
193 |
// iteration) |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
194 |
if (rectX != Integer.MIN_VALUE) { |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
195 |
rectBuffer.pushRectValues(rectX, rectY, rectW, rectH); |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
196 |
} |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
197 |
rectX = x; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
198 |
rectY = y; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
199 |
rectW = rectH = 1; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
200 |
} |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
201 |
|
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
202 |
// "Traditional" Bresenham line drawing |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
203 |
if (error < 0) { |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
204 |
error += errmajor; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
205 |
x += orthogonalXStep; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
206 |
y += orthogonalYStep; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
207 |
} else { |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
208 |
error -= errminor; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
209 |
x += xStep; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
210 |
y += yStep; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
211 |
} |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
212 |
} while (--steps > 0); |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
213 |
|
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
214 |
// Add last rectangle which isn't handled by the combination-code |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
215 |
// anymore |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
216 |
rectBuffer.pushRectValues(rectX, rectY, rectW, rectH); |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
217 |
} |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
218 |
|
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
219 |
private boolean clipCoordinates(int cxmin, int cymin, int cxmax, int cymax, |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
220 |
boolean xmajor, int dx, int dy, int ax, int ay) { |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
221 |
int outcode1, outcode2; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
222 |
|
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
223 |
outcode1 = outcode(x1, y1, cxmin, cymin, cxmax, cymax); |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
224 |
outcode2 = outcode(x2, y2, cxmin, cymin, cxmax, cymax); |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
225 |
|
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
226 |
while ((outcode1 | outcode2) != 0) { |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
227 |
int xsteps = 0, ysteps = 0; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
228 |
|
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
229 |
if ((outcode1 & outcode2) != 0) { |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
230 |
return false; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
231 |
} |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
232 |
|
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
233 |
if (outcode1 != 0) { |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
234 |
if ((outcode1 & (OUTCODE_TOP | OUTCODE_BOTTOM)) != 0) { |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
235 |
if ((outcode1 & OUTCODE_TOP) != 0) { |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
236 |
y1 = cymin; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
237 |
} else { |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
238 |
y1 = cymax; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
239 |
} |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
240 |
ysteps = y1 - ucY1; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
241 |
if (ysteps < 0) { |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
242 |
ysteps = -ysteps; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
243 |
} |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
244 |
xsteps = 2 * ysteps * ax + ay; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
245 |
if (xmajor) { |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
246 |
xsteps += ay - ax - 1; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
247 |
} |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
248 |
xsteps = xsteps / (2 * ay); |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
249 |
if (dx < 0) { |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
250 |
xsteps = -xsteps; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
251 |
} |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
252 |
x1 = ucX1 + (int) xsteps; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
253 |
} else if ((outcode1 & (OUTCODE_LEFT | OUTCODE_RIGHT)) != 0) { |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
254 |
if ((outcode1 & OUTCODE_LEFT) != 0) { |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
255 |
x1 = cxmin; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
256 |
} else { |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
257 |
x1 = cxmax; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
258 |
} |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
259 |
xsteps = x1 - ucX1; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
260 |
if (xsteps < 0) { |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
261 |
xsteps = -xsteps; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
262 |
} |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
263 |
ysteps = 2 * xsteps * ay + ax; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
264 |
if (!xmajor) { |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
265 |
ysteps += ax - ay - 1; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
266 |
} |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
267 |
ysteps = ysteps / (2 * ax); |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
268 |
if (dy < 0) { |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
269 |
ysteps = -ysteps; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
270 |
} |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
271 |
y1 = ucY1 + (int) ysteps; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
272 |
} |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
273 |
outcode1 = outcode(x1, y1, cxmin, cymin, cxmax, cymax); |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
274 |
} else { |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
275 |
if ((outcode2 & (OUTCODE_TOP | OUTCODE_BOTTOM)) != 0) { |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
276 |
if ((outcode2 & OUTCODE_TOP) != 0) { |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
277 |
y2 = cymin; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
278 |
} else { |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
279 |
y2 = cymax; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
280 |
} |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
281 |
ysteps = y2 - ucY2; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
282 |
if (ysteps < 0) { |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
283 |
ysteps = -ysteps; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
284 |
} |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
285 |
xsteps = 2 * ysteps * ax + ay; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
286 |
if (xmajor) { |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
287 |
xsteps += ay - ax; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
288 |
} else { |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
289 |
xsteps -= 1; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
290 |
} |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
291 |
xsteps = xsteps / (2 * ay); |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
292 |
if (dx > 0) { |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
293 |
xsteps = -xsteps; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
294 |
} |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
295 |
x2 = ucX2 + (int) xsteps; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
296 |
} else if ((outcode2 & (OUTCODE_LEFT | OUTCODE_RIGHT)) != 0) { |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
297 |
if ((outcode2 & OUTCODE_LEFT) != 0) { |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
298 |
x2 = cxmin; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
299 |
} else { |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
300 |
x2 = cxmax; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
301 |
} |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
302 |
xsteps = x2 - ucX2; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
303 |
if (xsteps < 0) { |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
304 |
xsteps = -xsteps; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
305 |
} |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
306 |
ysteps = 2 * xsteps * ay + ax; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
307 |
if (xmajor) { |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
308 |
ysteps -= 1; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
309 |
} else { |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
310 |
ysteps += ax - ay; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
311 |
} |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
312 |
ysteps = ysteps / (2 * ax); |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
313 |
if (dy > 0) { |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
314 |
ysteps = -ysteps; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
315 |
} |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
316 |
y2 = ucY2 + (int) ysteps; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
317 |
} |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
318 |
outcode2 = outcode(x2, y2, cxmin, cymin, cxmax, cymax); |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
319 |
} |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
320 |
} |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
321 |
|
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
322 |
return true; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
323 |
} |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
324 |
|
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
325 |
private void initCoordinates(int x1, int y1, int x2, int y2, |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
326 |
boolean checkOverflow) { |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
327 |
/* |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
328 |
* Part of calculating the Bresenham parameters for line stepping |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
329 |
* involves being able to store numbers that are twice the magnitude of |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
330 |
* the biggest absolute difference in coordinates. Since we want the |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
331 |
* stepping parameters to be stored in jints, we then need to avoid any |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
332 |
* absolute differences more than 30 bits. Thus, we need to preprocess |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
333 |
* the coordinates to reduce their range to 30 bits regardless of |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
334 |
* clipping. We need to cut their range back before we do the clipping |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
335 |
* because the Bresenham stepping values need to be calculated based on |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
336 |
* the "unclipped" coordinates. |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
337 |
* |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
338 |
* Thus, first we perform a "pre-clipping" stage to bring the |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
339 |
* coordinates within the 30-bit range and then we proceed to the |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
340 |
* regular clipping procedure, pretending that these were the original |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
341 |
* coordinates all along. Since this operation occurs based on a |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
342 |
* constant "pre-clip" rectangle of +/- 30 bits without any |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
343 |
* consideration for the final clip, the rounding errors that occur here |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
344 |
* will depend only on the line coordinates and be invariant with |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
345 |
* respect to the particular device/user clip rectangles in effect at |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
346 |
* the time. Thus, rendering a given large-range line will be consistent |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
347 |
* under a variety of clipping conditions. |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
348 |
*/ |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
349 |
if (checkOverflow |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
350 |
&& (OverflowsBig(x1) || OverflowsBig(y1) || OverflowsBig(x2) || OverflowsBig(y2))) { |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
351 |
/* |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
352 |
* Use doubles to get us into range for "Big" arithmetic. |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
353 |
* |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
354 |
* The math of adjusting an endpoint for clipping can involve an |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
355 |
* intermediate result with twice the number of bits as the original |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
356 |
* coordinate range. Since we want to maintain as much as 30 bits of |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
357 |
* precision in the resulting coordinates, we will get roundoff here |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
358 |
* even using IEEE double-precision arithmetic which cannot carry 60 |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
359 |
* bits of mantissa. Since the rounding errors will be consistent |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
360 |
* for a given set of input coordinates the potential roundoff error |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
361 |
* should not affect the consistency of our rendering. |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
362 |
*/ |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
363 |
double x1d = x1; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
364 |
double y1d = y1; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
365 |
double x2d = x2; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
366 |
double y2d = y2; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
367 |
double dxd = x2d - x1d; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
368 |
double dyd = y2d - y1d; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
369 |
|
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
370 |
if (x1 < BIG_MIN) { |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
371 |
y1d = y1 + (BIG_MIN - x1) * dyd / dxd; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
372 |
x1d = BIG_MIN; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
373 |
} else if (x1 > BIG_MAX) { |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
374 |
y1d = y1 - (x1 - BIG_MAX) * dyd / dxd; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
375 |
x1d = BIG_MAX; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
376 |
} |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
377 |
/* Use Y1d instead of _y1 for testing now as we may have modified it */ |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
378 |
if (y1d < BIG_MIN) { |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
379 |
x1d = x1 + (BIG_MIN - y1) * dxd / dyd; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
380 |
y1d = BIG_MIN; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
381 |
} else if (y1d > BIG_MAX) { |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
382 |
x1d = x1 - (y1 - BIG_MAX) * dxd / dyd; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
383 |
y1d = BIG_MAX; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
384 |
} |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
385 |
if (x2 < BIG_MIN) { |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
386 |
y2d = y2 + (BIG_MIN - x2) * dyd / dxd; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
387 |
x2d = BIG_MIN; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
388 |
} else if (x2 > BIG_MAX) { |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
389 |
y2d = y2 - (x2 - BIG_MAX) * dyd / dxd; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
390 |
x2d = BIG_MAX; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
391 |
} |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
392 |
/* Use Y2d instead of _y2 for testing now as we may have modified it */ |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
393 |
if (y2d < BIG_MIN) { |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
394 |
x2d = x2 + (BIG_MIN - y2) * dxd / dyd; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
395 |
y2d = BIG_MIN; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
396 |
} else if (y2d > BIG_MAX) { |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
397 |
x2d = x2 - (y2 - BIG_MAX) * dxd / dyd; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
398 |
y2d = BIG_MAX; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
399 |
} |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
400 |
|
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
401 |
x1 = (int) x1d; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
402 |
y1 = (int) y1d; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
403 |
x2 = (int) x2d; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
404 |
y2 = (int) y2d; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
405 |
} |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
406 |
|
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
407 |
this.x1 = ucX1 = x1; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
408 |
this.y1 = ucY1 = y1; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
409 |
this.x2 = ucX2 = x2; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
410 |
this.y2 = ucY2 = y2; |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
411 |
} |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
412 |
|
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
413 |
private boolean OverflowsBig(int v) { |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
414 |
return ((v) != (((v) << 2) >> 2)); |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
415 |
} |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
416 |
|
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
417 |
private int out(int v, int vmin, int vmax, int cmin, int cmax) { |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
418 |
return ((v < vmin) ? cmin : ((v > vmax) ? cmax : 0)); |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
419 |
} |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
420 |
|
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
421 |
private int outcode(int x, int y, int xmin, int ymin, int xmax, int ymax) { |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
422 |
return out(y, ymin, ymax, OUTCODE_TOP, OUTCODE_BOTTOM) |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
423 |
| out(x, xmin, xmax, OUTCODE_LEFT, OUTCODE_RIGHT); |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
424 |
} |
be660188e0b4
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36
prr
parents:
diff
changeset
|
425 |
} |