1 /* 2 * Copyright 2005-2011, 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 int32 workspace = ~0); 46 status_t Get(screen_mode& mode, 47 int32 workspace = ~0) const; 48 status_t GetOriginalMode(screen_mode &mode, 49 int32 workspace = ~0) const; 50 51 status_t Set(const display_mode& mode, 52 int32 workspace = ~0); 53 status_t Get(display_mode& mode, 54 int32 workspace = ~0) const; 55 56 status_t Revert(); 57 void UpdateOriginalModes(); 58 59 bool SupportsColorSpace(const screen_mode& mode, 60 color_space space); 61 status_t GetRefreshLimits(const screen_mode& mode, 62 float& min, float& max); 63 const char* GetManufacturerFromID(const char* id) const; 64 status_t GetMonitorInfo(monitor_info& info, 65 float* _diagonalInches = NULL); 66 67 status_t GetDeviceInfo(accelerant_device_info& info); 68 69 screen_mode ModeAt(int32 index); 70 const display_mode& DisplayModeAt(int32 index); 71 int32 CountModes(); 72 73 private: 74 bool _GetDisplayMode(const screen_mode& mode, 75 display_mode& displayMode); 76 77 private: 78 BWindow* fWindow; 79 display_mode* fModeList; 80 uint32 fModeCount; 81 82 bool fUpdatedModes; 83 display_mode fOriginalDisplayMode[32]; 84 screen_mode fOriginal[32]; 85 }; 86 87 88 #endif /* SCREEN_MODE_H */ 89