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