xref: /haiku/headers/private/interface/PrivateScreen.h (revision 3a2b67b5ae3750e6a2963e575e7ee2b39f91bf6d)
1f7e005ebSAxel Dörfler /*
2f7e005ebSAxel Dörfler  * Copyright 2002-2009, Haiku Inc.
3f7e005ebSAxel Dörfler  * Distributed under the terms of the MIT License.
4f7e005ebSAxel Dörfler  *
5f7e005ebSAxel Dörfler  * Authors:
6f7e005ebSAxel Dörfler  *		Stefano Ceccherini (burton666@libero.it)
7f7e005ebSAxel Dörfler  *		Axel Dörfler, axeld@pinc-software.de
8f7e005ebSAxel Dörfler  */
9f7e005ebSAxel Dörfler #ifndef _PRIVATE_SCREEN_H_
10f7e005ebSAxel Dörfler #define _PRIVATE_SCREEN_H_
11f7e005ebSAxel Dörfler 
12f7e005ebSAxel Dörfler 
13f7e005ebSAxel Dörfler #include <Accelerant.h>
14f7e005ebSAxel Dörfler #include <GraphicsDefs.h>
15f7e005ebSAxel Dörfler #include <ObjectList.h>
16f7e005ebSAxel Dörfler #include <Rect.h>
17f7e005ebSAxel Dörfler 
18f7e005ebSAxel Dörfler 
19f7e005ebSAxel Dörfler struct color_map;
20f7e005ebSAxel Dörfler class BBitmap;
21f7e005ebSAxel Dörfler class BApplication;
22f7e005ebSAxel Dörfler class BWindow;
23f7e005ebSAxel Dörfler 
24f7e005ebSAxel Dörfler 
25f7e005ebSAxel Dörfler #define B_CURRENT_WORKSPACE_INDEX	(~0L)
26f7e005ebSAxel Dörfler 
27f7e005ebSAxel Dörfler 
28f7e005ebSAxel Dörfler namespace BPrivate {
29f7e005ebSAxel Dörfler 
30f7e005ebSAxel Dörfler class BPrivateScreen {
31f7e005ebSAxel Dörfler public:
32f7e005ebSAxel Dörfler 	// Constructor and destructor are private. Use the static methods
33f7e005ebSAxel Dörfler 	// Get() and Put() instead.
34f7e005ebSAxel Dörfler 
35f7e005ebSAxel Dörfler 	static	BPrivateScreen*		Get(BWindow* window);
36f7e005ebSAxel Dörfler 	static	BPrivateScreen*		Get(int32 id);
37f7e005ebSAxel Dörfler 	static	void				Put(BPrivateScreen* screen);
38f7e005ebSAxel Dörfler 
39f7e005ebSAxel Dörfler 	static	BPrivateScreen*		GetNext(BPrivateScreen* screen);
40f7e005ebSAxel Dörfler 
41f7e005ebSAxel Dörfler 			bool				IsValid() const;
42f7e005ebSAxel Dörfler 			color_space			ColorSpace();
43f7e005ebSAxel Dörfler 			BRect				Frame();
ID()44f7e005ebSAxel Dörfler 			int32				ID() const { return fID; }
45f7e005ebSAxel Dörfler 			status_t			GetNextID(int32& id);
46f7e005ebSAxel Dörfler 
47f7e005ebSAxel Dörfler 			status_t			WaitForRetrace(bigtime_t timeout);
48f7e005ebSAxel Dörfler 
49f7e005ebSAxel Dörfler 			uint8				IndexForColor(uint8 red, uint8 green,
50f7e005ebSAxel Dörfler 									uint8 blue, uint8 alpha);
51f7e005ebSAxel Dörfler 			rgb_color			ColorForIndex(const uint8 index);
52f7e005ebSAxel Dörfler 			uint8				InvertIndex(uint8 index);
53f7e005ebSAxel Dörfler 
54f7e005ebSAxel Dörfler 			const color_map*	ColorMap();
55f7e005ebSAxel Dörfler 
56f7e005ebSAxel Dörfler 			status_t			GetBitmap(BBitmap** bitmap, bool drawCursor,
57f7e005ebSAxel Dörfler 									BRect* bounds);
58f7e005ebSAxel Dörfler 			status_t			ReadBitmap(BBitmap* bitmap, bool drawCursor,
59f7e005ebSAxel Dörfler 									BRect* bounds);
60f7e005ebSAxel Dörfler 
61f7e005ebSAxel Dörfler 			rgb_color			DesktopColor(uint32 index);
62f7e005ebSAxel Dörfler 			void				SetDesktopColor(rgb_color, uint32, bool);
63f7e005ebSAxel Dörfler 
64f7e005ebSAxel Dörfler 			status_t			ProposeMode(display_mode* target,
65f7e005ebSAxel Dörfler 									const display_mode* low,
66f7e005ebSAxel Dörfler 									const display_mode* high);
67f7e005ebSAxel Dörfler 
68f7e005ebSAxel Dörfler 			status_t			GetModeList(display_mode** _modeList,
69f7e005ebSAxel Dörfler 									uint32* _count);
70f7e005ebSAxel Dörfler 			status_t			GetMode(uint32 workspace, display_mode* mode);
71f7e005ebSAxel Dörfler 			status_t			SetMode(uint32 workspace, display_mode* mode,
72f7e005ebSAxel Dörfler 									bool makeDefault);
73f7e005ebSAxel Dörfler 
74f7e005ebSAxel Dörfler 			status_t			GetDeviceInfo(accelerant_device_info* info);
75f7e005ebSAxel Dörfler 			status_t			GetMonitorInfo(monitor_info* info);
76f7e005ebSAxel Dörfler 			status_t			GetPixelClockLimits(display_mode* mode,
77f7e005ebSAxel Dörfler 									uint32* _low, uint32* _high);
78f7e005ebSAxel Dörfler 			status_t			GetTimingConstraints(
79f7e005ebSAxel Dörfler 									display_timing_constraints* constraints);
80f7e005ebSAxel Dörfler 
81f7e005ebSAxel Dörfler 			status_t			SetDPMS(uint32 dpmsState);
82f7e005ebSAxel Dörfler 			uint32				DPMSState();
83f7e005ebSAxel Dörfler 			uint32				DPMSCapabilites();
84f7e005ebSAxel Dörfler 
85*3a2b67b5SAdrien Destugues 			status_t			GetBrightness(float*);
86*3a2b67b5SAdrien Destugues 			status_t			SetBrightness(float);
87*3a2b67b5SAdrien Destugues 
88f7e005ebSAxel Dörfler 			void*				BaseAddress();
89f7e005ebSAxel Dörfler 			uint32				BytesPerRow();
90f7e005ebSAxel Dörfler 
91f7e005ebSAxel Dörfler private:
92f7e005ebSAxel Dörfler 	friend class BObjectList<BPrivateScreen>;
93f7e005ebSAxel Dörfler 
94f7e005ebSAxel Dörfler 								BPrivateScreen(int32 id);
95f7e005ebSAxel Dörfler 								~BPrivateScreen();
96f7e005ebSAxel Dörfler 
97f7e005ebSAxel Dörfler 			void				_Acquire();
98f7e005ebSAxel Dörfler 			bool				_Release();
99f7e005ebSAxel Dörfler 
100f7e005ebSAxel Dörfler 			sem_id				_RetraceSemaphore();
101f7e005ebSAxel Dörfler 			status_t			_GetFrameBufferConfig(
102f7e005ebSAxel Dörfler 									frame_buffer_config& config);
103f7e005ebSAxel Dörfler 
104f7e005ebSAxel Dörfler 	static	BPrivateScreen*		_Get(int32 id, bool check);
105f7e005ebSAxel Dörfler 	static	bool				_IsValid(int32 id);
106f7e005ebSAxel Dörfler 
107f7e005ebSAxel Dörfler private:
108f7e005ebSAxel Dörfler 			int32				fID;
109f7e005ebSAxel Dörfler 			int32				fReferenceCount;
110f7e005ebSAxel Dörfler 			color_map*			fColorMap;
111f7e005ebSAxel Dörfler 			sem_id				fRetraceSem;
112f7e005ebSAxel Dörfler 			bool				fRetraceSemValid;
113f7e005ebSAxel Dörfler 			bool				fOwnsColorMap;
114f7e005ebSAxel Dörfler 			BRect				fFrame;
115f7e005ebSAxel Dörfler 			bigtime_t			fLastUpdate;
116f7e005ebSAxel Dörfler };
117f7e005ebSAxel Dörfler 
118f7e005ebSAxel Dörfler }	// namespace BPrivate
119f7e005ebSAxel Dörfler 
120f7e005ebSAxel Dörfler #endif // _PRIVATE_SCREEN_H_
121