00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #pragma once
00024
00025 #include "cinder/Cinder.h"
00026 #include "cinder/Area.h"
00027
00028 #if defined( CINDER_MAC )
00029 # include <CoreVideo/CoreVideo.h>
00030 # if defined( __OBJC__ )
00031 @class NSScreen;
00032 # else
00033 class NSScreen;
00034 # endif
00035 #elif defined( CINDER_MSW )
00036 # include <windows.h>
00037 #endif
00038
00039 #include <map>
00040 #include <vector>
00041
00042 namespace cinder {
00043
00044 class Display {
00045 public:
00046 ~Display();
00047 int getWidth() const { return mArea.getWidth(); }
00048 int getHeight() const { return mArea.getHeight(); }
00049 Area getArea() const { return mArea; }
00050 int getBitsPerPixel() const { return mBitsPerPixel; }
00051
00052 #if defined( CINDER_MAC )
00053 NSScreen* getNSScreen() const { return mScreen; }
00054 CGDirectDisplayID getCGDirectDisplayID() const { return mDirectDisplayID; }
00055 #endif
00056
00057 static shared_ptr<Display> getMainDisplay();
00058 static const std::vector<shared_ptr<Display> >& getDisplays();
00059
00060 #if defined( CINDER_MAC )
00061 static shared_ptr<Display> findFromCGDirectDisplayID( CGDirectDisplayID displayID );
00062 #elif defined( CINDER_MSW )
00063 static BOOL CALLBACK enumMonitorProc( HMONITOR hMonitor, HDC hdc, LPRECT rect, LPARAM lParam );
00064 #endif
00065
00066 private:
00067 Area mArea;
00068 int mBitsPerPixel;
00069 #if defined( CINDER_MAC )
00070 NSScreen *mScreen;
00071 CGDirectDisplayID mDirectDisplayID;
00072 #elif defined( CINDER_MSW )
00073 HMONITOR mMonitor;
00074 #endif
00075
00076 static void enumerateDisplays();
00077
00078 static std::vector<shared_ptr<Display> > sDisplays;
00079 static bool sDisplaysInitialized;
00080 };
00081
00082 }