1c2784486SAxel Dörfler/*
289208c77SStephan Aßmus * Copyright 2007-2009, Haiku, Inc. All rights reserved.
3c2784486SAxel Dörfler * Distributed under the terms of the MIT License.
4c2784486SAxel Dörfler */
5d734a8ceSbeveloper#ifndef _SCREEN_H
6d734a8ceSbeveloper#define _SCREEN_H
7d734a8ceSbeveloper
8c2784486SAxel Dörfler
9d734a8ceSbeveloper#include <Accelerant.h>
10d734a8ceSbeveloper#include <GraphicsDefs.h>
11d734a8ceSbeveloper#include <Rect.h>
12d734a8ceSbeveloper#include <OS.h>
13d734a8ceSbeveloper
14d734a8ceSbeveloper
15f6e4cbb9SAxel Dörflerclass BBitmap;
16d734a8ceSbeveloperclass BWindow;
17d734a8ceSbeveloper
18c2784486SAxel Dörflernamespace BPrivate {
19c2784486SAxel Dörfler	class BPrivateScreen;
20c2784486SAxel Dörfler}
21d734a8ceSbeveloper
2289208c77SStephan Aßmus
23d734a8ceSbeveloperclass BScreen {
2489208c77SStephan Aßmuspublic:
2589208c77SStephan Aßmus								BScreen(screen_id id = B_MAIN_SCREEN_ID);
2689208c77SStephan Aßmus								BScreen(BWindow* window);
2789208c77SStephan Aßmus								~BScreen();
2889208c77SStephan Aßmus
2989208c77SStephan Aßmus			bool				IsValid();
3089208c77SStephan Aßmus			status_t			SetToNext();
3189208c77SStephan Aßmus
3289208c77SStephan Aßmus			color_space			ColorSpace();
3389208c77SStephan Aßmus			BRect				Frame();
3489208c77SStephan Aßmus			screen_id			ID();
3589208c77SStephan Aßmus
3689208c77SStephan Aßmus			status_t			WaitForRetrace();
3789208c77SStephan Aßmus			status_t			WaitForRetrace(bigtime_t timeout);
3889208c77SStephan Aßmus
3989208c77SStephan Aßmus			uint8				IndexForColor(rgb_color color);
4089208c77SStephan Aßmus			uint8				IndexForColor(uint8 red, uint8 green,
4189208c77SStephan Aßmus									uint8 blue, uint8 alpha = 255);
4289208c77SStephan Aßmus			rgb_color			ColorForIndex(uint8 index);
4389208c77SStephan Aßmus			uint8				InvertIndex(uint8 index);
4489208c77SStephan Aßmus
4589208c77SStephan Aßmus			const color_map*	ColorMap();
4689208c77SStephan Aßmus
4789208c77SStephan Aßmus			status_t			GetBitmap(BBitmap** _bitmap,
4889208c77SStephan Aßmus									bool drawCursor = true,
4989208c77SStephan Aßmus									BRect* frame = NULL);
5089208c77SStephan Aßmus			status_t			ReadBitmap(BBitmap* bitmap,
5189208c77SStephan Aßmus									bool drawCursor = true,
5289208c77SStephan Aßmus									BRect* frame = NULL);
5389208c77SStephan Aßmus
5489208c77SStephan Aßmus			rgb_color			DesktopColor();
551326b9d0SNiels Sascha Reedijk			rgb_color			DesktopColor(uint32 workspace);
5689208c77SStephan Aßmus			void				SetDesktopColor(rgb_color color,
571326b9d0SNiels Sascha Reedijk									bool stick = true);
5889208c77SStephan Aßmus			void				SetDesktopColor(rgb_color color,
591326b9d0SNiels Sascha Reedijk									uint32 workspace, bool stick = true);
6089208c77SStephan Aßmus
6189208c77SStephan Aßmus			status_t			ProposeMode(display_mode* target,
6289208c77SStephan Aßmus									const display_mode* low,
6389208c77SStephan Aßmus									const display_mode* high);
6489208c77SStephan Aßmus			status_t			GetModeList(display_mode** _modeList,
6589208c77SStephan Aßmus									uint32* _count);
661326b9d0SNiels Sascha Reedijk			status_t			GetMode(display_mode* mode);
6789208c77SStephan Aßmus			status_t			GetMode(uint32 workspace,
681326b9d0SNiels Sascha Reedijk									display_mode* mode);
6989208c77SStephan Aßmus			status_t			SetMode(display_mode* mode,
7089208c77SStephan Aßmus									bool makeDefault = false);
7189208c77SStephan Aßmus			status_t			SetMode(uint32 workspace,
7289208c77SStephan Aßmus									display_mode* mode,
7389208c77SStephan Aßmus									bool makeDefault = false);
7489208c77SStephan Aßmus			status_t			GetDeviceInfo(accelerant_device_info* info);
7589208c77SStephan Aßmus			status_t			GetMonitorInfo(monitor_info* info);
7689208c77SStephan Aßmus			status_t			GetPixelClockLimits(display_mode* mode,
771326b9d0SNiels Sascha Reedijk									uint32* _low, uint32* _high);
7889208c77SStephan Aßmus			status_t			GetTimingConstraints(
7989208c77SStephan Aßmus									display_timing_constraints*
8089208c77SStephan Aßmus										timingConstraints);
8189208c77SStephan Aßmus			status_t			SetDPMS(uint32 state);
8289208c77SStephan Aßmus			uint32				DPMSState();
8389208c77SStephan Aßmus			uint32				DPMSCapabilites();
8489208c77SStephan Aßmus
8524e63de5SAdrien Destugues			status_t			GetBrightness(float* brightness);
8624e63de5SAdrien Destugues			status_t			SetBrightness(float brightness);
873a2b67b5SAdrien Destugues
8889208c77SStephan Aßmusprivate:
8989208c77SStephan Aßmus	// Forbidden and deprecated methods
9089208c77SStephan Aßmus								BScreen(const BScreen& other);
9189208c77SStephan Aßmus			BScreen&			operator=(const BScreen& other);
9289208c77SStephan Aßmus
9389208c77SStephan Aßmus			BPrivate::BPrivateScreen* private_screen();
9489208c77SStephan Aßmus			status_t			ProposeDisplayMode(display_mode* target,
9589208c77SStephan Aßmus									const display_mode* low,
9689208c77SStephan Aßmus									const display_mode* high);
9789208c77SStephan Aßmus			void*				BaseAddress();
9889208c77SStephan Aßmus			uint32				BytesPerRow();
9989208c77SStephan Aßmus
10089208c77SStephan Aßmusprivate:
10189208c77SStephan Aßmus			BPrivate::BPrivateScreen* fScreen;
102d734a8ceSbeveloper};
103d734a8ceSbeveloper
104d734a8ceSbeveloper
105c2784486SAxel Dörflerinline uint8
106c2784486SAxel DörflerBScreen::IndexForColor(rgb_color color)
107c2784486SAxel Dörfler{
108c2784486SAxel Dörfler	return IndexForColor(color.red, color.green, color.blue, color.alpha);
109c2784486SAxel Dörfler}
110d734a8ceSbeveloper
11189208c77SStephan Aßmus#endif // _SCREEN_H
112