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