jdk/test/javax/swing/JTree/8072676/TreeClipTest.java
author anashaty
Mon, 16 Feb 2015 19:10:05 +0300
changeset 29254 ef3c884cefec
child 32427 c22b7e41adf3
permissions -rw-r--r--
8072676: [macosx] Jtree icon painted over label when scrollbars present in window Reviewed-by: serb, alexsch
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
29254
ef3c884cefec 8072676: [macosx] Jtree icon painted over label when scrollbars present in window
anashaty
parents:
diff changeset
     1
/*
ef3c884cefec 8072676: [macosx] Jtree icon painted over label when scrollbars present in window
anashaty
parents:
diff changeset
     2
 * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
ef3c884cefec 8072676: [macosx] Jtree icon painted over label when scrollbars present in window
anashaty
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
ef3c884cefec 8072676: [macosx] Jtree icon painted over label when scrollbars present in window
anashaty
parents:
diff changeset
     4
 *
ef3c884cefec 8072676: [macosx] Jtree icon painted over label when scrollbars present in window
anashaty
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
ef3c884cefec 8072676: [macosx] Jtree icon painted over label when scrollbars present in window
anashaty
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
ef3c884cefec 8072676: [macosx] Jtree icon painted over label when scrollbars present in window
anashaty
parents:
diff changeset
     7
 * published by the Free Software Foundation.
ef3c884cefec 8072676: [macosx] Jtree icon painted over label when scrollbars present in window
anashaty
parents:
diff changeset
     8
 *
ef3c884cefec 8072676: [macosx] Jtree icon painted over label when scrollbars present in window
anashaty
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
ef3c884cefec 8072676: [macosx] Jtree icon painted over label when scrollbars present in window
anashaty
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
ef3c884cefec 8072676: [macosx] Jtree icon painted over label when scrollbars present in window
anashaty
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
ef3c884cefec 8072676: [macosx] Jtree icon painted over label when scrollbars present in window
anashaty
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
ef3c884cefec 8072676: [macosx] Jtree icon painted over label when scrollbars present in window
anashaty
parents:
diff changeset
    13
 * accompanied this code).
ef3c884cefec 8072676: [macosx] Jtree icon painted over label when scrollbars present in window
anashaty
parents:
diff changeset
    14
 *
ef3c884cefec 8072676: [macosx] Jtree icon painted over label when scrollbars present in window
anashaty
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
ef3c884cefec 8072676: [macosx] Jtree icon painted over label when scrollbars present in window
anashaty
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
ef3c884cefec 8072676: [macosx] Jtree icon painted over label when scrollbars present in window
anashaty
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
ef3c884cefec 8072676: [macosx] Jtree icon painted over label when scrollbars present in window
anashaty
parents:
diff changeset
    18
 *
ef3c884cefec 8072676: [macosx] Jtree icon painted over label when scrollbars present in window
anashaty
parents:
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
ef3c884cefec 8072676: [macosx] Jtree icon painted over label when scrollbars present in window
anashaty
parents:
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
ef3c884cefec 8072676: [macosx] Jtree icon painted over label when scrollbars present in window
anashaty
parents:
diff changeset
    21
 * questions.
ef3c884cefec 8072676: [macosx] Jtree icon painted over label when scrollbars present in window
anashaty
parents:
diff changeset
    22
 */
ef3c884cefec 8072676: [macosx] Jtree icon painted over label when scrollbars present in window
anashaty
parents:
diff changeset
    23
ef3c884cefec 8072676: [macosx] Jtree icon painted over label when scrollbars present in window
anashaty
parents:
diff changeset
    24
import java.awt.*;
ef3c884cefec 8072676: [macosx] Jtree icon painted over label when scrollbars present in window
anashaty
parents:
diff changeset
    25
import java.awt.image.BufferedImage;
ef3c884cefec 8072676: [macosx] Jtree icon painted over label when scrollbars present in window
anashaty
parents:
diff changeset
    26
import java.io.File;
ef3c884cefec 8072676: [macosx] Jtree icon painted over label when scrollbars present in window
anashaty
parents:
diff changeset
    27
import java.io.IOException;
ef3c884cefec 8072676: [macosx] Jtree icon painted over label when scrollbars present in window
anashaty
parents:
diff changeset
    28
import javax.imageio.ImageIO;
ef3c884cefec 8072676: [macosx] Jtree icon painted over label when scrollbars present in window
anashaty
parents:
diff changeset
    29
import javax.swing.*;
ef3c884cefec 8072676: [macosx] Jtree icon painted over label when scrollbars present in window
anashaty
parents:
diff changeset
    30
import javax.swing.tree.DefaultMutableTreeNode;
ef3c884cefec 8072676: [macosx] Jtree icon painted over label when scrollbars present in window
anashaty
parents:
diff changeset
    31
import javax.swing.tree.DefaultTreeModel;
ef3c884cefec 8072676: [macosx] Jtree icon painted over label when scrollbars present in window
anashaty
parents:
diff changeset
    32
ef3c884cefec 8072676: [macosx] Jtree icon painted over label when scrollbars present in window
anashaty
parents:
diff changeset
    33
/*
ef3c884cefec 8072676: [macosx] Jtree icon painted over label when scrollbars present in window
anashaty
parents:
diff changeset
    34
 * @test
ef3c884cefec 8072676: [macosx] Jtree icon painted over label when scrollbars present in window
anashaty
parents:
diff changeset
    35
 * @bug 8072676
ef3c884cefec 8072676: [macosx] Jtree icon painted over label when scrollbars present in window
anashaty
parents:
diff changeset
    36
 * @summary Checks if the tree painter doesn't expand existing clip
ef3c884cefec 8072676: [macosx] Jtree icon painted over label when scrollbars present in window
anashaty
parents:
diff changeset
    37
 * @author Anton Nashatyrev
ef3c884cefec 8072676: [macosx] Jtree icon painted over label when scrollbars present in window
anashaty
parents:
diff changeset
    38
 */
ef3c884cefec 8072676: [macosx] Jtree icon painted over label when scrollbars present in window
anashaty
parents:
diff changeset
    39
public class TreeClipTest {
ef3c884cefec 8072676: [macosx] Jtree icon painted over label when scrollbars present in window
anashaty
parents:
diff changeset
    40
ef3c884cefec 8072676: [macosx] Jtree icon painted over label when scrollbars present in window
anashaty
parents:
diff changeset
    41
    static boolean passed = true;
ef3c884cefec 8072676: [macosx] Jtree icon painted over label when scrollbars present in window
anashaty
parents:
diff changeset
    42
ef3c884cefec 8072676: [macosx] Jtree icon painted over label when scrollbars present in window
anashaty
parents:
diff changeset
    43
    static boolean checkImage(BufferedImage img, int clipY) {
ef3c884cefec 8072676: [macosx] Jtree icon painted over label when scrollbars present in window
anashaty
parents:
diff changeset
    44
        for (int y = clipY; y < img.getHeight(); y++) {
ef3c884cefec 8072676: [macosx] Jtree icon painted over label when scrollbars present in window
anashaty
parents:
diff changeset
    45
            for (int x = 0; x < img.getWidth(); x++) {
ef3c884cefec 8072676: [macosx] Jtree icon painted over label when scrollbars present in window
anashaty
parents:
diff changeset
    46
                if ((img.getRGB(x,y) & 0xFFFFFF) != 0xFFFFFF) {
ef3c884cefec 8072676: [macosx] Jtree icon painted over label when scrollbars present in window
anashaty
parents:
diff changeset
    47
                    return false;
ef3c884cefec 8072676: [macosx] Jtree icon painted over label when scrollbars present in window
anashaty
parents:
diff changeset
    48
                }
ef3c884cefec 8072676: [macosx] Jtree icon painted over label when scrollbars present in window
anashaty
parents:
diff changeset
    49
            }
ef3c884cefec 8072676: [macosx] Jtree icon painted over label when scrollbars present in window
anashaty
parents:
diff changeset
    50
        }
ef3c884cefec 8072676: [macosx] Jtree icon painted over label when scrollbars present in window
anashaty
parents:
diff changeset
    51
        return true;
ef3c884cefec 8072676: [macosx] Jtree icon painted over label when scrollbars present in window
anashaty
parents:
diff changeset
    52
    }
ef3c884cefec 8072676: [macosx] Jtree icon painted over label when scrollbars present in window
anashaty
parents:
diff changeset
    53
ef3c884cefec 8072676: [macosx] Jtree icon painted over label when scrollbars present in window
anashaty
parents:
diff changeset
    54
    public static void main(String[] args) throws Exception {
ef3c884cefec 8072676: [macosx] Jtree icon painted over label when scrollbars present in window
anashaty
parents:
diff changeset
    55
        SwingUtilities.invokeAndWait(new Runnable() {
ef3c884cefec 8072676: [macosx] Jtree icon painted over label when scrollbars present in window
anashaty
parents:
diff changeset
    56
            @Override
ef3c884cefec 8072676: [macosx] Jtree icon painted over label when scrollbars present in window
anashaty
parents:
diff changeset
    57
            public void run() {
ef3c884cefec 8072676: [macosx] Jtree icon painted over label when scrollbars present in window
anashaty
parents:
diff changeset
    58
                DefaultMutableTreeNode      root = new DefaultMutableTreeNode("JTree");
ef3c884cefec 8072676: [macosx] Jtree icon painted over label when scrollbars present in window
anashaty
parents:
diff changeset
    59
                DefaultMutableTreeNode      parent;
ef3c884cefec 8072676: [macosx] Jtree icon painted over label when scrollbars present in window
anashaty
parents:
diff changeset
    60
ef3c884cefec 8072676: [macosx] Jtree icon painted over label when scrollbars present in window
anashaty
parents:
diff changeset
    61
                parent = new DefaultMutableTreeNode("colors");
ef3c884cefec 8072676: [macosx] Jtree icon painted over label when scrollbars present in window
anashaty
parents:
diff changeset
    62
                root.add(parent);
ef3c884cefec 8072676: [macosx] Jtree icon painted over label when scrollbars present in window
anashaty
parents:
diff changeset
    63
                parent.add(new DefaultMutableTreeNode("blue"));
ef3c884cefec 8072676: [macosx] Jtree icon painted over label when scrollbars present in window
anashaty
parents:
diff changeset
    64
                DefaultTreeModel model = new DefaultTreeModel(root);
ef3c884cefec 8072676: [macosx] Jtree icon painted over label when scrollbars present in window
anashaty
parents:
diff changeset
    65
                JTree tree = new JTree(model);
ef3c884cefec 8072676: [macosx] Jtree icon painted over label when scrollbars present in window
anashaty
parents:
diff changeset
    66
ef3c884cefec 8072676: [macosx] Jtree icon painted over label when scrollbars present in window
anashaty
parents:
diff changeset
    67
                BufferedImage img = new BufferedImage(50, 50, BufferedImage.TYPE_INT_ARGB);
ef3c884cefec 8072676: [macosx] Jtree icon painted over label when scrollbars present in window
anashaty
parents:
diff changeset
    68
                for (int clipY = 1; clipY < 50; clipY++) {
ef3c884cefec 8072676: [macosx] Jtree icon painted over label when scrollbars present in window
anashaty
parents:
diff changeset
    69
                    Graphics2D ig = img.createGraphics();
ef3c884cefec 8072676: [macosx] Jtree icon painted over label when scrollbars present in window
anashaty
parents:
diff changeset
    70
                    ig.setColor(Color.WHITE);
ef3c884cefec 8072676: [macosx] Jtree icon painted over label when scrollbars present in window
anashaty
parents:
diff changeset
    71
                    ig.fillRect(0,0,1000, 1000);
ef3c884cefec 8072676: [macosx] Jtree icon painted over label when scrollbars present in window
anashaty
parents:
diff changeset
    72
                    tree.setSize(200,200);
ef3c884cefec 8072676: [macosx] Jtree icon painted over label when scrollbars present in window
anashaty
parents:
diff changeset
    73
                    ig.setClip(0,0,1000,clipY);
ef3c884cefec 8072676: [macosx] Jtree icon painted over label when scrollbars present in window
anashaty
parents:
diff changeset
    74
                    tree.paint(ig);
ef3c884cefec 8072676: [macosx] Jtree icon painted over label when scrollbars present in window
anashaty
parents:
diff changeset
    75
                    ig.dispose();
ef3c884cefec 8072676: [macosx] Jtree icon painted over label when scrollbars present in window
anashaty
parents:
diff changeset
    76
ef3c884cefec 8072676: [macosx] Jtree icon painted over label when scrollbars present in window
anashaty
parents:
diff changeset
    77
                    if (!checkImage(img, clipY)) {
ef3c884cefec 8072676: [macosx] Jtree icon painted over label when scrollbars present in window
anashaty
parents:
diff changeset
    78
                        System.err.println("Failed with clipY=" + clipY);
ef3c884cefec 8072676: [macosx] Jtree icon painted over label when scrollbars present in window
anashaty
parents:
diff changeset
    79
                        passed = false;
ef3c884cefec 8072676: [macosx] Jtree icon painted over label when scrollbars present in window
anashaty
parents:
diff changeset
    80
                        try {
ef3c884cefec 8072676: [macosx] Jtree icon painted over label when scrollbars present in window
anashaty
parents:
diff changeset
    81
                            ImageIO.write(img, "PNG", new File("failedResult.png"));
ef3c884cefec 8072676: [macosx] Jtree icon painted over label when scrollbars present in window
anashaty
parents:
diff changeset
    82
                        } catch (IOException e) {
ef3c884cefec 8072676: [macosx] Jtree icon painted over label when scrollbars present in window
anashaty
parents:
diff changeset
    83
                            e.printStackTrace();
ef3c884cefec 8072676: [macosx] Jtree icon painted over label when scrollbars present in window
anashaty
parents:
diff changeset
    84
                        }
ef3c884cefec 8072676: [macosx] Jtree icon painted over label when scrollbars present in window
anashaty
parents:
diff changeset
    85
                        return;
ef3c884cefec 8072676: [macosx] Jtree icon painted over label when scrollbars present in window
anashaty
parents:
diff changeset
    86
                    }
ef3c884cefec 8072676: [macosx] Jtree icon painted over label when scrollbars present in window
anashaty
parents:
diff changeset
    87
                }
ef3c884cefec 8072676: [macosx] Jtree icon painted over label when scrollbars present in window
anashaty
parents:
diff changeset
    88
            }
ef3c884cefec 8072676: [macosx] Jtree icon painted over label when scrollbars present in window
anashaty
parents:
diff changeset
    89
        });
ef3c884cefec 8072676: [macosx] Jtree icon painted over label when scrollbars present in window
anashaty
parents:
diff changeset
    90
ef3c884cefec 8072676: [macosx] Jtree icon painted over label when scrollbars present in window
anashaty
parents:
diff changeset
    91
        if (!passed) {
ef3c884cefec 8072676: [macosx] Jtree icon painted over label when scrollbars present in window
anashaty
parents:
diff changeset
    92
            throw new RuntimeException("Test failed.");
ef3c884cefec 8072676: [macosx] Jtree icon painted over label when scrollbars present in window
anashaty
parents:
diff changeset
    93
        } else {
ef3c884cefec 8072676: [macosx] Jtree icon painted over label when scrollbars present in window
anashaty
parents:
diff changeset
    94
            System.out.println("Passed.");
ef3c884cefec 8072676: [macosx] Jtree icon painted over label when scrollbars present in window
anashaty
parents:
diff changeset
    95
        }
ef3c884cefec 8072676: [macosx] Jtree icon painted over label when scrollbars present in window
anashaty
parents:
diff changeset
    96
    }
ef3c884cefec 8072676: [macosx] Jtree icon painted over label when scrollbars present in window
anashaty
parents:
diff changeset
    97
}