xref: /haiku/src/preferences/screen/ScreenMode.h (revision 16d5c24e533eb14b7b8a99ee9f3ec9ba66335b1e)
1 /*
2  * Copyright 2005, 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, int32 workspace = ~0);
45 		status_t Get(screen_mode& mode, int32 workspace = ~0) const;
46 		status_t GetOriginalMode(screen_mode &mode, int32 workspace = ~0) const;
47 
48 		status_t Revert();
49 		void UpdateOriginalModes();
50 
51 		bool SupportsColorSpace(const screen_mode& mode, color_space space);
52 		status_t GetRefreshLimits(const screen_mode& mode, float& min, float& max);
53 
54 		screen_mode ModeAt(int32 index);
55 		int32 CountModes();
56 
57 	private:
58 		bool GetDisplayMode(const screen_mode& mode, display_mode& displayMode);
59 
60 		BWindow*		fWindow;
61 		display_mode*	fModeList;
62 		uint32			fModeCount;
63 
64 		bool			fUpdatedModes;
65 		display_mode	fOriginalDisplayMode[32];
66 		screen_mode		fOriginal[32];
67 };
68 
69 #endif	/* SCREEN_MODE_H */
70