text: #ifndef SYSLIB_SCREEN_HEADER
  #define SYSLIB_SCREEN_HEADER
  
  #include <cstddef>
  
  namespace common
  {
  
  //forward declarations
  class PropertyMap;
  
  }
  
  namespace syslib
  {
  
  ///////////////////////////////////////////////////////////////////////////////////////////////////
  ///Цвет
  ///////////////////////////////////////////////////////////////////////////////////////////////////
  struct Color3f
  {
    float red, green, blue;
  };
  
  ///////////////////////////////////////////////////////////////////////////////////////////////////
  ///Дескриптор видео-режима
  ///////////////////////////////////////////////////////////////////////////////////////////////////
  struct ScreenModeDesc
  {
    unsigned int   width;        //ширина фрейм-буфера
    unsigned int   height;       //высота фрейм-буфера
    unsigned short color_bits;   //количество бит на цвет
    unsigned short refresh_rate; //частота обновления монитора (0-default)
    unsigned short xdpi;         //плотность пикселей на дюйм по горизонтали
    unsigned short ydpi;         //плотность пикселей на дюйм по вертикали
  };
  
  ///////////////////////////////////////////////////////////////////////////////////////////////////
  ///Экран
  ///////////////////////////////////////////////////////////////////////////////////////////////////
  class Screen
  {
    public:
  ///////////////////////////////////////////////////////////////////////////////////////////////////
  ///Конструкторы / деструктор / присваивание
  ///////////////////////////////////////////////////////////////////////////////////////////////////
      Screen  (size_t screen_index);
      Screen  (const Screen&);
      ~Screen ();
      
      Screen& operator = (const Screen&);    
  
  ///////////////////////////////////////////////////////////////////////////////////////////////////
  ///Имя
  ///////////////////////////////////////////////////////////////////////////////////////////////////
      const char* Name () const;
      
  ///////////////////////////////////////////////////////////////////////////////////////////////////
  ///Размеры экрана
  ///////////////////////////////////////////////////////////////////////////////////////////////////
      unsigned int Width  () const;
      unsigned int Height () const;
      
  ///////////////////////////////////////////////////////////////////////////////////////////////////
  ///Количество бит на пиксель
  ///////////////////////////////////////////////////////////////////////////////////////////////////
      unsigned short ColorBits () const;
      
  ///////////////////////////////////////////////////////////////////////////////////////////////////
  ///Частота обновления
  ///////////////////////////////////////////////////////////////////////////////////////////////////
      unsigned short RefreshRate () const;
  
  ///////////////////////////////////////////////////////////////////////////////////////////////////
  ///Плотность пикселей на дюйм
  ///////////////////////////////////////////////////////////////////////////////////////////////////
      unsigned short Xdpi () const;
      unsigned short Ydpi () const;
  
  ///////////////////////////////////////////////////////////////////////////////////////////////////
  ///Получение списка видео-режимов
  ///////////////////////////////////////////////////////////////////////////////////////////////////
      size_t ModesCount () const;
      void   GetMode    (size_t mode_index, ScreenModeDesc& mode_desc) const;
  
  ///////////////////////////////////////////////////////////////////////////////////////////////////
  ///Установка текущего видео-режима
  ///////////////////////////////////////////////////////////////////////////////////////////////////
      void SetCurrentMode     (const ScreenModeDesc&);
      void GetCurrentMode     (ScreenModeDesc&) const;
      void GetDefaultMode     (ScreenModeDesc&) const;
      void RestoreDefaultMode ();
  
  ///////////////////////////////////////////////////////////////////////////////////////////////////
  ///Управление гамма-коррекцией
  ///////////////////////////////////////////////////////////////////////////////////////////////////
      void SetGammaRamp (const Color3f table [256]);    
      void GetGammaRamp (Color3f table [256]) const;
  
  ///////////////////////////////////////////////////////////////////////////////////////////////////
  ///Платформо-зависимый дескриптор экрана
  ///////////////////////////////////////////////////////////////////////////////////////////////////
      const void* Handle () const;
  
  ///////////////////////////////////////////////////////////////////////////////////////////////////
  ///Получение платформо-зависимых свойств экрана
  ///////////////////////////////////////////////////////////////////////////////////////////////////
      void GetProperties (common::PropertyMap&);
      
  ///////////////////////////////////////////////////////////////////////////////////////////////////
  ///Поиск экрана вмещающего окно
  ///////////////////////////////////////////////////////////////////////////////////////////////////
      static Screen ContainingScreen (const void* window_native_handle);
  
  ///////////////////////////////////////////////////////////////////////////////////////////////////
  ///Обмен
  ///////////////////////////////////////////////////////////////////////////////////////////////////
      void Swap (Screen&);
      
  ///////////////////////////////////////////////////////////////////////////////////////////////////
  ///Сравнение
  ///////////////////////////////////////////////////////////////////////////////////////////////////
      bool operator == (const Screen&) const;
      bool operator != (const Screen&) const;
      
    private:
      struct Impl;  
    
      Screen (Impl*);
    
    private:
      Impl* impl;
  };
  
  ///////////////////////////////////////////////////////////////////////////////////////////////////
  ///Обмен
  ///////////////////////////////////////////////////////////////////////////////////////////////////
  void swap (Screen&, Screen&);
  
  ///////////////////////////////////////////////////////////////////////////////////////////////////
  ///Менеджер экранов
  ///////////////////////////////////////////////////////////////////////////////////////////////////
  class ScreenManager
  {
    public:
  ///////////////////////////////////////////////////////////////////////////////////////////////////
  ///Перечисление экранов
  ///////////////////////////////////////////////////////////////////////////////////////////////////
      static size_t         ScreensCount ();
      static syslib::Screen Screen       (size_t index);
  };
  
  }
  
  #endif
  