File: MultiMonitor.h

package info (click to toggle)
darkradiant 3.9.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 41,080 kB
  • sloc: cpp: 264,743; ansic: 10,659; python: 1,852; xml: 1,650; sh: 92; makefile: 21
file content (77 lines) | stat: -rw-r--r-- 1,822 bytes parent folder | download | duplicates (4)
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
69
70
71
72
73
74
75
76
77
#pragma once

#include <wx/display.h>

#include "itextstream.h"

namespace wxutil
{

/**
 * greebo: This class acts as container for several
 * multi-monitor-related functions. Use the getMonitor() method
 * to acquire the screen dimensions of the given screen.
 */
class MultiMonitor
{
public:
	/**
	 * Returns the number of monitors of the default screen.
	 */
	static unsigned int getNumMonitors()
	{
		// Get and return the number of monitors
		return wxDisplay::GetCount();
	}

	/**
	 * Returns the screen rectangle of the screen with the given index.
	 * The first screen is always present and has the index 0.
	 */
	static wxRect getMonitor(int monitorNum)
	{
		wxDisplay display(monitorNum);

		return display.GetGeometry();
	}

	/**
	 * Returns the index of the monitor
	 * the given window is currently displayed on.
	 * If the window cannot be found, the first monitor number 0 is returned.
	 */
	static unsigned int getMonitorNumForWindow(wxWindow* window)
	{
		int num = wxDisplay::GetFromWindow(window);
		return num != wxNOT_FOUND && num > 0 ? static_cast<unsigned int>(num) : 0;
	}

	/**
	 * Returns the rectangle (width/height) for the monitor
	 * which the given window is displayed on.
	 */
	static wxRect getMonitorForWindow(wxWindow* window)
	{
		// Retrieve the screen
		wxDisplay display(wxDisplay::GetFromWindow(window));
		
		return display.GetGeometry();
	}

	static void printMonitorInfo()
	{
		rMessage() << "Default screen has " << getNumMonitors() << " monitors." << std::endl;

		// detect multiple monitors
		for (unsigned int j = 0; j < getNumMonitors(); j++)
		{
			wxRect geom = getMonitor(j);

			rMessage() << "Monitor " << j << " geometry: "
				<< geom.GetWidth() << "x" << geom.GetHeight() << " at "
				<< geom.GetX() << ", " << geom.GetY() << std::endl;
		}
	}
};

} // namespace