/* * Copyright 2005-2011, Haiku. * Distributed under the terms of the MIT License. * * Authors: * Axel Dörfler, axeld@pinc-software.de */ #ifndef SCREEN_MODE_H #define SCREEN_MODE_H #include typedef enum { kCombineDisable, kCombineHorizontally, kCombineVertically } combine_mode; struct screen_mode { int32 width; // these reflect the corrected width/height, int32 height; // taking the combine mode into account color_space space; float refresh; combine_mode combine; bool swap_displays; bool use_laptop_panel; uint32 tv_standard; void SetTo(display_mode& mode); int32 BitsPerPixel() const; bool operator==(const screen_mode &otherMode) const; bool operator!=(const screen_mode &otherMode) const; }; class ScreenMode { public: ScreenMode(BWindow* window); ~ScreenMode(); status_t Set(const screen_mode& mode, int32 workspace = ~0); status_t Get(screen_mode& mode, int32 workspace = ~0) const; status_t GetOriginalMode(screen_mode &mode, int32 workspace = ~0) const; status_t Set(const display_mode& mode, int32 workspace = ~0); status_t Get(display_mode& mode, int32 workspace = ~0) const; status_t Revert(); void UpdateOriginalModes(); bool SupportsColorSpace(const screen_mode& mode, color_space space); status_t GetRefreshLimits(const screen_mode& mode, float& min, float& max); const char* GetManufacturerFromID(const char* id) const; status_t GetMonitorInfo(monitor_info& info, float* _diagonalInches = NULL); status_t GetDeviceInfo(accelerant_device_info& info); screen_mode ModeAt(int32 index); const display_mode& DisplayModeAt(int32 index); int32 CountModes(); private: bool _GetDisplayMode(const screen_mode& mode, display_mode& displayMode); private: BWindow* fWindow; display_mode* fModeList; uint32 fModeCount; bool fUpdatedModes; display_mode fOriginalDisplayMode[32]; screen_mode fOriginal[32]; }; #endif /* SCREEN_MODE_H */