Path: blob/aarch64-shenandoah-jdk8u272-b10/jdk/test/java/awt/FullScreen/NoResizeEventOnDMChangeTest/NoResizeEventOnDMChangeTest.java
38828 views
/*1* Copyright (c) 2007, 2008, Oracle and/or its affiliates. All rights reserved.2* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.3*4* This code is free software; you can redistribute it and/or modify it5* under the terms of the GNU General Public License version 2 only, as6* published by the Free Software Foundation.7*8* This code is distributed in the hope that it will be useful, but WITHOUT9* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or10* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License11* version 2 for more details (a copy is included in the LICENSE file that12* accompanied this code).13*14* You should have received a copy of the GNU General Public License version15* 2 along with this work; if not, write to the Free Software Foundation,16* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.17*18* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA19* or visit www.oracle.com if you need additional information or have any20* questions.21*/22/*23* @test24* @bug 664641125* @summary Tests that full screen window and its children receive resize26event when display mode changes27* @author [email protected]: area=Graphics28* @run main/othervm NoResizeEventOnDMChangeTest29* @run main/othervm -Dsun.java2d.d3d=false NoResizeEventOnDMChangeTest30*/3132import java.awt.Canvas;33import java.awt.Color;34import java.awt.Component;35import java.awt.DisplayMode;36import java.awt.EventQueue;37import java.awt.Frame;38import java.awt.Graphics;39import java.awt.GraphicsDevice;40import java.awt.GraphicsEnvironment;41import java.awt.Window;42import java.awt.event.ComponentAdapter;43import java.awt.event.ComponentEvent;44import java.awt.event.WindowAdapter;45import java.awt.event.WindowEvent;4647public class NoResizeEventOnDMChangeTest {48public static void main(String[] args) {49final GraphicsDevice gd = GraphicsEnvironment.50getLocalGraphicsEnvironment().getDefaultScreenDevice();5152if (!gd.isFullScreenSupported()) {53System.out.println("Full screen not supported, test passed");54return;55}5657DisplayMode dm = gd.getDisplayMode();58final DisplayMode dms[] = new DisplayMode[2];59for (DisplayMode dm1 : gd.getDisplayModes()) {60if (dm1.getWidth() != dm.getWidth() ||61dm1.getHeight() != dm.getHeight())62{63dms[0] = dm1;64break;65}66}67if (dms[0] == null) {68System.out.println("Test Passed: all DMs have same dimensions");69return;70}71dms[1] = dm;7273Frame f = new Frame() {74@Override75public void paint(Graphics g) {76g.setColor(Color.red);77g.fillRect(0, 0, getWidth(), getHeight());78g.setColor(Color.green);79g.drawRect(0, 0, getWidth()-1, getHeight()-1);80}81};82f.setUndecorated(true);83testFSWindow(gd, dms, f);8485Window w = new Window(f) {86@Override87public void paint(Graphics g) {88g.setColor(Color.magenta);89g.fillRect(0, 0, getWidth(), getHeight());90g.setColor(Color.cyan);91g.drawRect(0, 0, getWidth()-1, getHeight()-1);92}93};94testFSWindow(gd, dms, w);95System.out.println("Test Passed.");96}9798private static void testFSWindow(final GraphicsDevice gd,99final DisplayMode dms[],100final Window fsWin)101{102System.out.println("Testing FS window: "+fsWin);103Component c = new Canvas() {104@Override105public void paint(Graphics g) {106g.setColor(Color.blue);107g.fillRect(0, 0, getWidth(), getHeight());108g.setColor(Color.magenta);109g.drawRect(0, 0, getWidth()-1, getHeight()-1);110g.setColor(Color.red);111g.drawString("FS Window : " + fsWin, 50, 50);112DisplayMode dm =113getGraphicsConfiguration().getDevice().getDisplayMode();114g.drawString("Display Mode: " +115dm.getWidth() + "x" + dm.getHeight(), 50, 75);116}117};118fsWin.add("Center", c);119fsWin.addWindowListener(new WindowAdapter() {120@Override121public void windowClosing(WindowEvent e) {122fsWin.dispose();123if (fsWin.getOwner() != null) {124fsWin.getOwner().dispose();125}126}127});128129try {130EventQueue.invokeAndWait(new Runnable() {131public void run() {132gd.setFullScreenWindow(fsWin);133}134});135} catch (Exception ex) {}136137sleep(1000);138139final ResizeEventChecker r1 = new ResizeEventChecker();140final ResizeEventChecker r2 = new ResizeEventChecker();141142if (gd.isDisplayChangeSupported()) {143fsWin.addComponentListener(r1);144c.addComponentListener(r2);145for (final DisplayMode dm1 : dms) {146try {147EventQueue.invokeAndWait(new Runnable() {148public void run() {149System.err.printf("----------- Setting DM %dx%d:\n",150dm1.getWidth(), dm1.getHeight());151try {152gd.setDisplayMode(dm1);153r1.incDmChanges();154r2.incDmChanges();155} catch (IllegalArgumentException iae) {}156}157});158} catch (Exception ex) {}159for (int i = 0; i < 3; i++) {160fsWin.repaint();161sleep(1000);162}163}164fsWin.removeComponentListener(r1);165c.removeComponentListener(r2);166}167try {168EventQueue.invokeAndWait(new Runnable() {169public void run() {170gd.setFullScreenWindow(null);171fsWin.dispose();172if (fsWin.getOwner() != null) {173fsWin.getOwner().dispose();174}175}176});177} catch (Exception ex) {}178179System.out.printf("FS Window: resizes=%d, dm changes=%d\n",180r1.getResizes(), r1.getDmChanges());181System.out.printf("Component: resizes=%d, dm changes=%d\n",182r2.getResizes(), r2.getDmChanges());183if (r1.getResizes() < r1.getDmChanges()) {184throw new RuntimeException("FS Window didn't receive all resizes!");185}186if (r2.getResizes() < r2.getDmChanges()) {187throw new RuntimeException("Component didn't receive all resizes!");188}189}190191static void sleep(long ms) {192try {193Thread.sleep(ms);194} catch (InterruptedException ex) {}195}196static class ResizeEventChecker extends ComponentAdapter {197int dmChanges;198int resizes;199200@Override201public synchronized void componentResized(ComponentEvent e) {202System.out.println("Received resize event for "+e.getSource());203resizes++;204}205public synchronized int getResizes() {206return resizes;207}208public synchronized void incDmChanges() {209dmChanges++;210}211public synchronized int getDmChanges() {212return dmChanges;213}214}215}216217218