1/*
2 * Copyright 2005-2011, Haiku.
3 * Distributed under the terms of the MIT License.
4 *
5 * Authors:
6 *		Axel D��rfler, axeld@pinc-software.de
7 */
8#ifndef SCREEN_MODE_H
9#define SCREEN_MODE_H
10
11
12#include <Screen.h>
13
14
15typedef enum {
16	kCombineDisable,
17	kCombineHorizontally,
18	kCombineVertically
19} combine_mode;
20
21struct screen_mode {
22	int32			width;		// these reflect the corrected width/height,
23	int32			height;		// taking the combine mode into account
24	color_space		space;
25	float			refresh;
26	combine_mode	combine;
27	bool			swap_displays;
28	bool			use_laptop_panel;
29	uint32			tv_standard;
30
31	void SetTo(display_mode& mode);
32	int32 BitsPerPixel() const;
33
34	bool operator==(const screen_mode &otherMode) const;
35	bool operator!=(const screen_mode &otherMode) const;
36};
37
38
39class ScreenMode {
40public:
41								ScreenMode(BWindow* window);
42								~ScreenMode();
43
44			status_t			Set(const screen_mode& mode,
45									int32 workspace = ~0);
46			status_t			Get(screen_mode& mode,
47									int32 workspace = ~0) const;
48			status_t			GetOriginalMode(screen_mode &mode,
49									int32 workspace = ~0) const;
50
51			status_t			Set(const display_mode& mode,
52									int32 workspace = ~0);
53			status_t			Get(display_mode& mode,
54									int32 workspace = ~0) const;
55
56			status_t			Revert();
57			void				UpdateOriginalModes();
58
59			bool				SupportsColorSpace(const screen_mode& mode,
60									color_space space);
61			status_t			GetRefreshLimits(const screen_mode& mode,
62									float& min, float& max);
63			const char*			GetManufacturerFromID(const char* id) const;
64			status_t			GetMonitorInfo(monitor_info& info,
65									float* _diagonalInches = NULL);
66
67			status_t			GetDeviceInfo(accelerant_device_info& info);
68
69			screen_mode			ModeAt(int32 index);
70			const display_mode&	DisplayModeAt(int32 index);
71			int32				CountModes();
72
73private:
74			bool				_GetDisplayMode(const screen_mode& mode,
75									display_mode& displayMode);
76
77private:
78			BWindow*			fWindow;
79			display_mode*		fModeList;
80			uint32				fModeCount;
81
82			bool				fUpdatedModes;
83			display_mode		fOriginalDisplayMode[32];
84			screen_mode			fOriginal[32];
85};
86
87
88#endif	/* SCREEN_MODE_H */
89