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