Path: blob/master/test/jdk/java/awt/FullScreen/NoResizeEventOnDMChangeTest/NoResizeEventOnDMChangeTest.java
41154 views
/*1* Copyright (c) 2007, 2016, 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* @key headful25* @bug 664641126* @summary Tests that full screen window and its children receive resize27event when display mode changes28* @author [email protected]: area=Graphics29* @run main/othervm NoResizeEventOnDMChangeTest30* @run main/othervm -Dsun.java2d.d3d=false NoResizeEventOnDMChangeTest31*/3233import java.awt.Canvas;34import java.awt.Color;35import java.awt.Component;36import java.awt.DisplayMode;37import java.awt.EventQueue;38import java.awt.Frame;39import java.awt.Graphics;40import java.awt.GraphicsDevice;41import java.awt.GraphicsEnvironment;42import java.awt.Window;43import java.awt.event.ComponentAdapter;44import java.awt.event.ComponentEvent;45import java.awt.event.WindowAdapter;46import java.awt.event.WindowEvent;4748public class NoResizeEventOnDMChangeTest {49public static void main(String[] args) {50final GraphicsDevice gd = GraphicsEnvironment.51getLocalGraphicsEnvironment().getDefaultScreenDevice();5253if (!gd.isFullScreenSupported()) {54System.out.println("Full screen not supported, test passed");55return;56}5758DisplayMode dm = gd.getDisplayMode();59final DisplayMode dms[] = new DisplayMode[2];60for (DisplayMode dm1 : gd.getDisplayModes()) {61if (dm1.getWidth() != dm.getWidth() ||62dm1.getHeight() != dm.getHeight())63{64dms[0] = dm1;65break;66}67}68if (dms[0] == null) {69System.out.println("Test Passed: all DMs have same dimensions");70return;71}72dms[1] = dm;7374Frame f = new Frame() {75@Override76public void paint(Graphics g) {77g.setColor(Color.red);78g.fillRect(0, 0, getWidth(), getHeight());79g.setColor(Color.green);80g.drawRect(0, 0, getWidth()-1, getHeight()-1);81}82};83f.setUndecorated(true);84testFSWindow(gd, dms, f);8586Window w = new Window(f) {87@Override88public void paint(Graphics g) {89g.setColor(Color.magenta);90g.fillRect(0, 0, getWidth(), getHeight());91g.setColor(Color.cyan);92g.drawRect(0, 0, getWidth()-1, getHeight()-1);93}94};95testFSWindow(gd, dms, w);96System.out.println("Test Passed.");97}9899private static void testFSWindow(final GraphicsDevice gd,100final DisplayMode dms[],101final Window fsWin)102{103System.out.println("Testing FS window: "+fsWin);104Component c = new Canvas() {105@Override106public void paint(Graphics g) {107g.setColor(Color.blue);108g.fillRect(0, 0, getWidth(), getHeight());109g.setColor(Color.magenta);110g.drawRect(0, 0, getWidth()-1, getHeight()-1);111g.setColor(Color.red);112g.drawString("FS Window : " + fsWin, 50, 50);113DisplayMode dm =114getGraphicsConfiguration().getDevice().getDisplayMode();115g.drawString("Display Mode: " +116dm.getWidth() + "x" + dm.getHeight(), 50, 75);117}118};119fsWin.add("Center", c);120fsWin.addWindowListener(new WindowAdapter() {121@Override122public void windowClosing(WindowEvent e) {123fsWin.dispose();124if (fsWin.getOwner() != null) {125fsWin.getOwner().dispose();126}127}128});129130try {131EventQueue.invokeAndWait(new Runnable() {132public void run() {133gd.setFullScreenWindow(fsWin);134}135});136} catch (Exception ex) {}137138sleep(1000);139140final ResizeEventChecker r1 = new ResizeEventChecker();141final ResizeEventChecker r2 = new ResizeEventChecker();142143if (gd.isDisplayChangeSupported()) {144fsWin.addComponentListener(r1);145c.addComponentListener(r2);146for (final DisplayMode dm1 : dms) {147try {148EventQueue.invokeAndWait(new Runnable() {149public void run() {150System.err.printf("----------- Setting DM %dx%d:\n",151dm1.getWidth(), dm1.getHeight());152try {153gd.setDisplayMode(dm1);154r1.incDmChanges();155r2.incDmChanges();156} catch (IllegalArgumentException iae) {}157}158});159} catch (Exception ex) {}160for (int i = 0; i < 3; i++) {161fsWin.repaint();162sleep(1000);163}164}165fsWin.removeComponentListener(r1);166c.removeComponentListener(r2);167}168try {169EventQueue.invokeAndWait(new Runnable() {170public void run() {171gd.setFullScreenWindow(null);172fsWin.dispose();173if (fsWin.getOwner() != null) {174fsWin.getOwner().dispose();175}176}177});178} catch (Exception ex) {}179180System.out.printf("FS Window: resizes=%d, dm changes=%d\n",181r1.getResizes(), r1.getDmChanges());182System.out.printf("Component: resizes=%d, dm changes=%d\n",183r2.getResizes(), r2.getDmChanges());184if (r1.getResizes() < r1.getDmChanges()) {185throw new RuntimeException("FS Window didn't receive all resizes!");186}187if (r2.getResizes() < r2.getDmChanges()) {188throw new RuntimeException("Component didn't receive all resizes!");189}190}191192static void sleep(long ms) {193try {194Thread.sleep(ms);195} catch (InterruptedException ex) {}196}197static class ResizeEventChecker extends ComponentAdapter {198int dmChanges;199int resizes;200201@Override202public synchronized void componentResized(ComponentEvent e) {203System.out.println("Received resize event for "+e.getSource());204resizes++;205}206public synchronized int getResizes() {207return resizes;208}209public synchronized void incDmChanges() {210dmChanges++;211}212public synchronized int getDmChanges() {213return dmChanges;214}215}216}217218219