virtual wxVideoMode GetCurrentMode() const;
virtual bool ChangeMode(const wxVideoMode& mode);
+ virtual bool IsPrimary() const;
+
private:
CGDirectDisplayID m_id;
- DECLARE_NO_COPY_CLASS(wxDisplayImplMacOSX)
+ wxDECLARE_NO_COPY_CLASS(wxDisplayImplMacOSX);
};
class wxDisplayFactoryMacOSX : public wxDisplayFactory
virtual int GetFromPoint(const wxPoint& pt);
protected:
- DECLARE_NO_COPY_CLASS(wxDisplayFactoryMacOSX)
+ wxDECLARE_NO_COPY_CLASS(wxDisplayFactoryMacOSX);
};
// ============================================================================
// wxDisplayFactoryMacOSX implementation
// ============================================================================
+// gets all displays that are not mirror displays
+
+static CGDisplayErr wxOSXGetDisplayList(CGDisplayCount maxDisplays,
+ CGDirectDisplayID *displays,
+ CGDisplayCount *displayCount)
+{
+ CGDisplayErr error = kCGErrorSuccess;
+ CGDisplayCount onlineCount;
+
+ error = CGGetOnlineDisplayList(0,NULL,&onlineCount);
+ if ( error == kCGErrorSuccess )
+ {
+ *displayCount = 0;
+ if ( onlineCount > 0 )
+ {
+ CGDirectDisplayID *onlineDisplays = new CGDirectDisplayID[onlineCount];
+ error = CGGetOnlineDisplayList(onlineCount,onlineDisplays,&onlineCount);
+ if ( error == kCGErrorSuccess )
+ {
+ for ( CGDisplayCount i = 0; i < onlineCount; ++i )
+ {
+ if ( CGDisplayMirrorsDisplay(onlineDisplays[i]) != kCGNullDirectDisplay )
+ continue;
+
+ if ( displays == NULL )
+ *displayCount += 1;
+ else
+ {
+ if ( *displayCount < maxDisplays )
+ {
+ displays[*displayCount] = onlineDisplays[i];
+ *displayCount += 1;
+ }
+ }
+ }
+ }
+ delete[] onlineDisplays;
+ }
+
+ }
+ return error;
+}
+
unsigned wxDisplayFactoryMacOSX::GetCount()
{
CGDisplayCount count;
-#ifdef __WXDEBUG__
- CGDisplayErr err =
-#endif
- CGGetActiveDisplayList(0, NULL, &count);
+ CGDisplayErr err = wxOSXGetDisplayList(0, NULL, &count);
- wxASSERT(err == CGDisplayNoErr);
+ wxCHECK_MSG( err == CGDisplayNoErr, 0, "wxOSXGetDisplayList() failed" );
return count;
}
{
theCount = GetCount();
CGDirectDisplayID* theIDs = new CGDirectDisplayID[theCount];
- err = CGGetActiveDisplayList(theCount, theIDs, &theCount);
+ err = wxOSXGetDisplayList(theCount, theIDs, &theCount);
wxASSERT(err == CGDisplayNoErr);
for (nWhich = 0; nWhich < (int) theCount; ++nWhich)
CGDisplayCount theCount = GetCount();
CGDirectDisplayID* theIDs = new CGDirectDisplayID[theCount];
-#ifdef __WXDEBUG__
- CGDisplayErr err =
-#endif
- CGGetActiveDisplayList(theCount, theIDs, &theCount);
+ CGDisplayErr err = wxOSXGetDisplayList(theCount, theIDs, &theCount);
+ wxCHECK_MSG( err == CGDisplayNoErr, NULL, "wxOSXGetDisplayList() failed" );
- wxASSERT( err == CGDisplayNoErr );
wxASSERT( n < theCount );
wxDisplayImplMacOSX *display = new wxDisplayImplMacOSX(n, theIDs[n]);
// wxDisplayImplMacOSX implementation
// ============================================================================
+bool wxDisplayImplMacOSX::IsPrimary() const
+{
+ return CGDisplayIsMain(m_id);
+}
+
wxRect wxDisplayImplMacOSX::GetGeometry() const
{
CGRect theRect = CGDisplayBounds(m_id);
bool wxDisplayImplMacOSX::ChangeMode( const wxVideoMode& mode )
{
- // Changing to default mode (wxDefaultVideoMode) doesn't
- // work because we don't have access to the system's 'scrn'
- // resource which holds the user's mode which the system
- // will return to after this app is done
+#ifndef __WXOSX_IPHONE__
+ if (mode == wxDefaultVideoMode)
+ {
+ CGRestorePermanentDisplayConfiguration();
+ return true;
+ }
+#endif
+
boolean_t bExactMatch;
CFDictionaryRef theCGMode = CGDisplayBestModeForParametersAndRefreshRate(
m_id,