FlatScreenInfo tool added

This commit is contained in:
Karl Tauber
2020-09-03 15:55:12 +02:00
parent a2ac24ac74
commit dcce14b122

View File

@@ -0,0 +1,112 @@
/*
* Copyright 2020 FormDev Software GmbH
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.formdev.flatlaf.testing;
import java.awt.DisplayMode;
import java.awt.GraphicsConfiguration;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.Insets;
import java.awt.Rectangle;
import java.awt.Toolkit;
import java.awt.geom.AffineTransform;
import javax.swing.SwingUtilities;
/**
* Displays information about screens connected to a computer.
*
* This is a single-file program that can be compiled/run without any other
* FlatLaf code or dependencies.
*
* Since Java 11, you can run this program from source with:
* java FlatScreenInfo.java
*
* @author Karl Tauber
*/
public class FlatScreenInfo
{
public static void main( String[] args ) {
SwingUtilities.invokeLater( () -> {
printScreenInfo();
} );
}
private static void printScreenInfo() {
Toolkit toolkit = Toolkit.getDefaultToolkit();
GraphicsEnvironment graphicsEnvironment = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice defaultScreenDevice = graphicsEnvironment.getDefaultScreenDevice();
GraphicsDevice[] screenDevices = graphicsEnvironment.getScreenDevices();
System.out.print( "Scale factors: " );
for( GraphicsDevice gd : screenDevices ) {
GraphicsConfiguration gc = gd.getDefaultConfiguration();
if( gd != screenDevices[0] )
System.out.print( " / " );
System.out.print( (int) (gc.getDefaultTransform().getScaleX() * 100) );
System.out.print( "%" );
}
System.out.println();
System.out.println( "Java version: " + System.getProperty( "java.version" ) );
for( GraphicsDevice gd : screenDevices ) {
GraphicsConfiguration gc = gd.getDefaultConfiguration();
DisplayMode displayMode = gd.getDisplayMode();
Rectangle bounds = gc.getBounds();
int width = displayMode.getWidth();
int height = displayMode.getHeight();
double boundsScaleX = (bounds.width > width)
? (double) bounds.width / (double) width
: -((double) width / (double) bounds.width);
double boundsScaleY = (bounds.height > height)
? (double) bounds.height / (double) height
: -((double) height / (double) bounds.height);
boundsScaleX = Math.round( boundsScaleX * 1000. ) / 1000.;
boundsScaleY = Math.round( boundsScaleY * 1000. ) / 1000.;
Insets screenInsets = toolkit.getScreenInsets( gc );
AffineTransform defaultTransform = gc.getDefaultTransform();
double scaleX = defaultTransform.getScaleX();
double scaleY = defaultTransform.getScaleY();
System.out.println();
System.out.print( "ID: " + gd.getIDstring() );
if( gd == defaultScreenDevice )
System.out.print( " (main)" );
System.out.println();
System.out.printf( "Size: %d x %d / %d Bit / %d Hz%n",
displayMode.getWidth(), displayMode.getHeight(),
displayMode.getBitDepth(), displayMode.getRefreshRate() );
System.out.printf( "Bounds: %d x %d / x %d / y %d",
bounds.width, bounds.height, bounds.x, bounds.y );
if( Math.abs( boundsScaleX ) != 1 || Math.abs( boundsScaleY ) != 1 )
System.out.printf( " (scale %s)", toString( boundsScaleX, boundsScaleY ) );
System.out.println();
System.out.printf( "Insets: left %d / right %d / top %d / bottom %d%n",
screenInsets.left, screenInsets.right, screenInsets.top, screenInsets.bottom );
System.out.println( "Scale: " + toString( scaleX, scaleY ) );
}
}
private static String toString( double scaleX, double scaleY ) {
return (scaleX == scaleY)
? String.valueOf( scaleX )
: scaleX + " / " + scaleY;
}
}