Blender  V3.3
GHOST_DisplayManagerCocoa.mm
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-or-later
2  * Copyright 2001-2002 NaN Holding BV. All rights reserved. 2009 Damien Plisson. */
3 
4 #include <Cocoa/Cocoa.h>
5 
6 #include "GHOST_Debug.h"
8 
9 // We do not support multiple monitors at the moment
10 
12 {
13 }
14 
16 {
17  NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
18 
19  numDisplays = (uint8_t)[[NSScreen screens] count];
20 
21  [pool drain];
22  return GHOST_kSuccess;
23 }
24 
26  int32_t &numSettings) const
27 {
28  numSettings = (int32_t)3; // Width, Height, BitsPerPixel
29 
30  return GHOST_kSuccess;
31 }
32 
34  int32_t index,
35  GHOST_DisplaySetting &setting) const
36 {
37  NSScreen *askedDisplay;
38 
39  NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
40 
41  if (display == kMainDisplay) // Screen #0 may not be the main one
42  askedDisplay = [NSScreen mainScreen];
43  else
44  askedDisplay = [[NSScreen screens] objectAtIndex:display];
45 
46  if (askedDisplay == nil) {
47  [pool drain];
48  return GHOST_kFailure;
49  }
50 
51  NSRect frame = [askedDisplay visibleFrame];
52  setting.xPixels = frame.size.width;
53  setting.yPixels = frame.size.height;
54 
55  setting.bpp = NSBitsPerPixelFromDepth([askedDisplay depth]);
56 
57  setting.frequency = 0; // No more CRT display...
58 
59 #ifdef GHOST_DEBUG
60  printf("display mode: width=%d, height=%d, bpp=%d, frequency=%d\n",
61  setting.xPixels,
62  setting.yPixels,
63  setting.bpp,
64  setting.frequency);
65 #endif // GHOST_DEBUG
66 
67  [pool drain];
68  return GHOST_kSuccess;
69 }
70 
72  uint8_t display, GHOST_DisplaySetting &setting) const
73 {
74  NSScreen *askedDisplay;
75 
77  (display == kMainDisplay),
78  "GHOST_DisplayManagerCocoa::getCurrentDisplaySetting(): only main display is supported");
79 
80  NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
81 
82  if (display == kMainDisplay) // Screen #0 may not be the main one
83  askedDisplay = [NSScreen mainScreen];
84  else
85  askedDisplay = [[NSScreen screens] objectAtIndex:display];
86 
87  if (askedDisplay == nil) {
88  [pool drain];
89  return GHOST_kFailure;
90  }
91 
92  NSRect frame = [askedDisplay visibleFrame];
93  setting.xPixels = frame.size.width;
94  setting.yPixels = frame.size.height;
95 
96  setting.bpp = NSBitsPerPixelFromDepth([askedDisplay depth]);
97 
98  setting.frequency = 0; // No more CRT display...
99 
100 #ifdef GHOST_DEBUG
101  printf("current display mode: width=%d, height=%d, bpp=%d, frequency=%d\n",
102  setting.xPixels,
103  setting.yPixels,
104  setting.bpp,
105  setting.frequency);
106 #endif // GHOST_DEBUG
107 
108  [pool drain];
109  return GHOST_kSuccess;
110 }
111 
113  uint8_t display, const GHOST_DisplaySetting &setting)
114 {
115  GHOST_ASSERT(
116  (display == kMainDisplay),
117  "GHOST_DisplayManagerCocoa::setCurrentDisplaySetting(): only main display is supported");
118 
119 #ifdef GHOST_DEBUG
120  printf("GHOST_DisplayManagerCocoa::setCurrentDisplaySetting(): requested settings:\n");
121  printf(" setting.xPixels=%d\n", setting.xPixels);
122  printf(" setting.yPixels=%d\n", setting.yPixels);
123  printf(" setting.bpp=%d\n", setting.bpp);
124  printf(" setting.frequency=%d\n", setting.frequency);
125 #endif // GHOST_DEBUG
126 
127  /* Display configuration is no more available in 10.6. */
128 
129 #if 0
130  CFDictionaryRef displayModeValues = ::CGDisplayBestModeForParametersAndRefreshRate(
131  m_displayIDs[display],
132  (size_t)setting.bpp,
133  (size_t)setting.xPixels,
134  (size_t)setting.yPixels,
135  (CGRefreshRate)setting.frequency,
136  NULL);
137 #endif
138 
139 #ifdef GHOST_DEBUG
140 # if 0
141  printf("GHOST_DisplayManagerCocoa::setCurrentDisplaySetting(): switching to:\n");
142  printf(" setting.xPixels=%d\n", getValue(displayModeValues, kCGDisplayWidth));
143  printf(" setting.yPixels=%d\n", getValue(displayModeValues, kCGDisplayHeight));
144  printf(" setting.bpp=%d\n", getValue(displayModeValues, kCGDisplayBitsPerPixel));
145  printf(" setting.frequency=%d\n", getValue(displayModeValues, kCGDisplayRefreshRate));
146 # endif
147 #endif // GHOST_DEBUG
148 
149  // CGDisplayErr err = ::CGDisplaySwitchToMode(m_displayIDs[display], displayModeValues);
150 
151  return /* err == CGDisplayNoErr ? */ GHOST_kSuccess /* : GHOST_kFailure */;
152 }
#define GHOST_ASSERT(x, info)
Definition: GHOST_Debug.h:54
GHOST_TSuccess
Definition: GHOST_Types.h:74
@ GHOST_kFailure
Definition: GHOST_Types.h:74
@ GHOST_kSuccess
Definition: GHOST_Types.h:74
GHOST_TSuccess getDisplaySetting(uint8_t display, int32_t index, GHOST_DisplaySetting &setting) const
GHOST_TSuccess getCurrentDisplaySetting(uint8_t display, GHOST_DisplaySetting &setting) const
GHOST_TSuccess getNumDisplays(uint8_t &numDisplays) const
GHOST_TSuccess getNumDisplaySettings(uint8_t display, int32_t &numSettings) const
GHOST_TSuccess setCurrentDisplaySetting(uint8_t display, const GHOST_DisplaySetting &setting)
int count
signed int int32_t
Definition: stdint.h:77
unsigned char uint8_t
Definition: stdint.h:78