jdk/src/solaris/classes/sun/java2d/xr/XRDrawLine.java
author prr
Wed, 02 Oct 2013 11:22:07 -0700
changeset 20419 be660188e0b4
child 22584 eed64ee05369
permissions -rw-r--r--
7179526: xrender : closed/sun/java2d/volatileImage/LineClipTest.java failed since jdk8b36 Reviewed-by: prr, jchen
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
}