xref: /haiku/src/preferences/screen/ScreenMode.h (revision 4a55cc230cf7566cadcbb23b1928eefff8aea9a2)
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 
15 typedef enum {
16 	kCombineDisable,
17 	kCombineHorizontally,
18 	kCombineVertically
19 } combine_mode;
20 
21 struct 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 
39 class ScreenMode {
40 public:
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 
73 private:
74 			bool				_GetDisplayMode(const screen_mode& mode,
75 									display_mode& displayMode);
76 
77 private:
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