Blender  V3.3
GHOST_DisplayManager.cpp
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. */
3 
12 #include "GHOST_DisplayManager.h"
13 #include "GHOST_Debug.h"
14 
15 GHOST_DisplayManager::GHOST_DisplayManager() : m_settingsInitialized(false)
16 {
17 }
18 
20 {
21 }
22 
24 {
25  GHOST_TSuccess success;
26  if (!m_settingsInitialized) {
27  success = initializeSettings();
28  m_settingsInitialized = true;
29  }
30  else {
31  success = GHOST_kSuccess;
32  }
33  return success;
34 }
35 
37 {
38  /* Don't know if we have a display. */
39  return GHOST_kFailure;
40 }
41 
43  int32_t &numSettings) const
44 {
45  GHOST_TSuccess success;
46 
48  "GHOST_DisplayManager::getNumDisplaySettings(): m_settingsInitialized=false");
49  uint8_t numDisplays;
50  success = getNumDisplays(numDisplays);
51  if (success == GHOST_kSuccess) {
52  if (display < numDisplays) {
53  numSettings = m_settings[display].size();
54  }
55  else {
56  success = GHOST_kFailure;
57  }
58  }
59  return success;
60 }
61 
63  int32_t index,
64  GHOST_DisplaySetting &setting) const
65 {
66  GHOST_TSuccess success;
67 
69  "GHOST_DisplayManager::getNumDisplaySettings(): m_settingsInitialized=false");
70  uint8_t numDisplays;
71  success = getNumDisplays(numDisplays);
72  if (success == GHOST_kSuccess) {
73  if (display < numDisplays && ((uint8_t)index < m_settings[display].size())) {
74  setting = m_settings[display][index];
75  }
76  else {
77  success = GHOST_kFailure;
78  }
79  }
80  return success;
81 }
82 
84  uint8_t /*display*/, GHOST_DisplaySetting & /*setting*/) const
85 {
86  return GHOST_kFailure;
87 }
88 
90  uint8_t /*display*/, const GHOST_DisplaySetting & /*setting*/)
91 {
92  return GHOST_kFailure;
93 }
94 
96  const GHOST_DisplaySetting &setting,
97  GHOST_DisplaySetting &match) const
98 {
101  "GHOST_DisplayManager::findMatch(): m_settingsInitialized=false");
102 
103  int criteria[4] = {
104  (int)setting.xPixels, (int)setting.yPixels, (int)setting.bpp, (int)setting.frequency};
105  int capabilities[4];
106  double field, score;
107  double best = 1e12; /* A big number. */
108  int found = 0;
109 
110  /* Look at all the display modes. */
111  for (int i = 0; (i < (int)m_settings[display].size()); i++) {
112  /* Store the capabilities of the display device. */
113  capabilities[0] = m_settings[display][i].xPixels;
114  capabilities[1] = m_settings[display][i].yPixels;
115  capabilities[2] = m_settings[display][i].bpp;
116  capabilities[3] = m_settings[display][i].frequency;
117 
118  /* Match against all the fields of the display settings. */
119  score = 0;
120  for (int j = 0; j < 4; j++) {
121  field = capabilities[j] - criteria[j];
122  score += field * field;
123  }
124 
125  if (score < best) {
126  found = i;
127  best = score;
128  }
129  }
130 
131  match = m_settings[display][found];
132 
133  GHOST_PRINT("GHOST_DisplayManager::findMatch(): settings of match:\n");
134  GHOST_PRINT(" setting.xPixels=" << match.xPixels << "\n");
135  GHOST_PRINT(" setting.yPixels=" << match.yPixels << "\n");
136  GHOST_PRINT(" setting.bpp=" << match.bpp << "\n");
137  GHOST_PRINT(" setting.frequency=" << match.frequency << "\n");
138 
139  return success;
140 }
141 
143 {
144  uint8_t numDisplays;
145  GHOST_TSuccess success = getNumDisplays(numDisplays);
146  if (success == GHOST_kSuccess) {
147  for (uint8_t display = 0; (display < numDisplays) && (success == GHOST_kSuccess); display++) {
148  GHOST_DisplaySettings displaySettings;
149  m_settings.push_back(displaySettings);
150  int32_t numSettings;
151  success = getNumDisplaySettings(display, numSettings);
152  if (success == GHOST_kSuccess) {
153  int32_t index;
154  GHOST_DisplaySetting setting;
155  for (index = 0; (index < numSettings) && (success == GHOST_kSuccess); index++) {
156  success = getDisplaySetting(display, index, setting);
157  m_settings[display].push_back(setting);
158  }
159  }
160  else {
161  break;
162  }
163  }
164  }
165  return success;
166 }
#define GHOST_ASSERT(x, info)
Definition: GHOST_Debug.h:54
#define GHOST_PRINT(x)
Definition: GHOST_Debug.h:35
GHOST_TSuccess
Definition: GHOST_Types.h:74
@ GHOST_kFailure
Definition: GHOST_Types.h:74
@ GHOST_kSuccess
Definition: GHOST_Types.h:74
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
Definition: btDbvt.cpp:52
virtual GHOST_TSuccess getDisplaySetting(uint8_t display, int32_t index, GHOST_DisplaySetting &setting) const
GHOST_TSuccess findMatch(uint8_t display, const GHOST_DisplaySetting &setting, GHOST_DisplaySetting &match) const
virtual GHOST_TSuccess setCurrentDisplaySetting(uint8_t display, const GHOST_DisplaySetting &setting)
std::vector< GHOST_DisplaySettings > m_settings
virtual GHOST_TSuccess getNumDisplaySettings(uint8_t display, int32_t &numSettings) const
virtual GHOST_TSuccess initialize(void)
virtual ~GHOST_DisplayManager(void)
GHOST_TSuccess initializeSettings(void)
virtual GHOST_TSuccess getCurrentDisplaySetting(uint8_t display, GHOST_DisplaySetting &setting) const
virtual GHOST_TSuccess getNumDisplays(uint8_t &numDisplays) const
std::vector< GHOST_DisplaySetting > GHOST_DisplaySettings
signed int int32_t
Definition: stdint.h:77
unsigned char uint8_t
Definition: stdint.h:78