aboutsummaryrefslogtreecommitdiffstats
path: root/src/net/java/sip/communicator/plugin/desktoputil/ScreenInformation.java
blob: 139f42938eeb14746db6e764fe2df175beaee7e4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
/*
 * Jitsi, the OpenSource Java VoIP and Instant Messaging client.
 *
 * Distributable under LGPL license.
 * See terms of license at gnu.org.
 */
package net.java.sip.communicator.plugin.desktoputil;

import java.awt.*;

/**
 * A class which reads the screen bounds and provides this information.
 *
 * @author Ingo Bauersachs
 */
public class ScreenInformation
{
    /**
     * Calculates the bounding box of all available screens. This method is
     * highly inaccurate when screens of different sizes are used or not evenly
     * aligned. A correct implementation should generate a polygon.
     *
     * @return A polygon of the usable screen area.
     */
    public static Rectangle getScreenBounds()
    {
        final GraphicsEnvironment ge = GraphicsEnvironment
                .getLocalGraphicsEnvironment();

        Rectangle bounds = new Rectangle();
        for(GraphicsDevice gd : ge.getScreenDevices())
        {
            GraphicsConfiguration gc = gd.getDefaultConfiguration();
            bounds = bounds.union(gc.getBounds());
        }
        return bounds;
    }

    /**
     * Checks whether the top edge of the rectangle is contained in any of the
     * available screens.
     *
     * @param window The bounding box of the window.
     * @return True when the top edge is in a visible screen area; false
     *         otherwise
     */
    public static boolean isTitleOnScreen(Rectangle window)
    {
        final GraphicsEnvironment ge = GraphicsEnvironment
            .getLocalGraphicsEnvironment();

        boolean leftInside = false;
        boolean rightInside = false;
        Point topLeft = new Point(window.x, window.y);
        Point topRight = new Point(window.x + window.width, window.y);
        for(GraphicsDevice gd : ge.getScreenDevices())
        {
            GraphicsConfiguration gc = gd.getDefaultConfiguration();
            if(gc.getBounds().contains(topLeft))
                leftInside = true;
            if(gc.getBounds().contains(topRight))
                rightInside = true;
            if(leftInside && rightInside)
                return true;
        }
        return leftInside && rightInside;
    }
}