Blender  V2.93
GHOST_DisplayManager.cpp
Go to the documentation of this file.
1 /*
2  * This program is free software; you can redistribute it and/or
3  * modify it under the terms of the GNU General Public License
4  * as published by the Free Software Foundation; either version 2
5  * of the License, or (at your option) any later version.
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10  * GNU General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * along with this program; if not, write to the Free Software Foundation,
14  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
15  *
16  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
17  * All rights reserved.
18  */
19 
28 #include "GHOST_DisplayManager.h"
29 #include "GHOST_Debug.h"
30 
31 GHOST_DisplayManager::GHOST_DisplayManager(void) : m_settingsInitialized(false)
32 {
33 }
34 
36 {
37 }
38 
40 {
41  GHOST_TSuccess success;
42  if (!m_settingsInitialized) {
43  success = initializeSettings();
44  m_settingsInitialized = true;
45  }
46  else {
47  success = GHOST_kSuccess;
48  }
49  return success;
50 }
51 
53 {
54  // Don't know if we have a display...
55  return GHOST_kFailure;
56 }
57 
59  GHOST_TInt32 &numSettings) const
60 {
61  GHOST_TSuccess success;
62 
64  "GHOST_DisplayManager::getNumDisplaySettings(): m_settingsInitialized=false");
65  GHOST_TUns8 numDisplays;
66  success = getNumDisplays(numDisplays);
67  if (success == GHOST_kSuccess) {
68  if (display < numDisplays) {
69  numSettings = m_settings[display].size();
70  }
71  else {
72  success = GHOST_kFailure;
73  }
74  }
75  return success;
76 }
77 
79  GHOST_TInt32 index,
80  GHOST_DisplaySetting &setting) const
81 {
82  GHOST_TSuccess success;
83 
85  "GHOST_DisplayManager::getNumDisplaySettings(): m_settingsInitialized=false");
86  GHOST_TUns8 numDisplays;
87  success = getNumDisplays(numDisplays);
88  if (success == GHOST_kSuccess) {
89  if (display < numDisplays && ((GHOST_TUns8)index < m_settings[display].size())) {
90  setting = m_settings[display][index];
91  }
92  else {
93  success = GHOST_kFailure;
94  }
95  }
96  return success;
97 }
98 
100  GHOST_TUns8 /*display*/, GHOST_DisplaySetting & /*setting*/) const
101 {
102  return GHOST_kFailure;
103 }
104 
106  GHOST_TUns8 /*display*/, const GHOST_DisplaySetting & /*setting*/)
107 {
108  return GHOST_kFailure;
109 }
110 
112  const GHOST_DisplaySetting &setting,
113  GHOST_DisplaySetting &match) const
114 {
115  GHOST_TSuccess success = GHOST_kSuccess;
117  "GHOST_DisplayManager::findMatch(): m_settingsInitialized=false");
118 
119  int criteria[4] = {
120  (int)setting.xPixels, (int)setting.yPixels, (int)setting.bpp, (int)setting.frequency};
121  int capabilities[4];
122  double field, score;
123  double best = 1e12; // A big number
124  int found = 0;
125 
126  // Look at all the display modes
127  for (int i = 0; (i < (int)m_settings[display].size()); i++) {
128  // Store the capabilities of the display device
129  capabilities[0] = m_settings[display][i].xPixels;
130  capabilities[1] = m_settings[display][i].yPixels;
131  capabilities[2] = m_settings[display][i].bpp;
132  capabilities[3] = m_settings[display][i].frequency;
133 
134  // Match against all the fields of the display settings
135  score = 0;
136  for (int j = 0; j < 4; j++) {
137  field = capabilities[j] - criteria[j];
138  score += field * field;
139  }
140 
141  if (score < best) {
142  found = i;
143  best = score;
144  }
145  }
146 
147  match = m_settings[display][found];
148 
149  GHOST_PRINT("GHOST_DisplayManager::findMatch(): settings of match:\n");
150  GHOST_PRINT(" setting.xPixels=" << match.xPixels << "\n");
151  GHOST_PRINT(" setting.yPixels=" << match.yPixels << "\n");
152  GHOST_PRINT(" setting.bpp=" << match.bpp << "\n");
153  GHOST_PRINT(" setting.frequency=" << match.frequency << "\n");
154 
155  return success;
156 }
157 
159 {
160  GHOST_TUns8 numDisplays;
161  GHOST_TSuccess success = getNumDisplays(numDisplays);
162  if (success == GHOST_kSuccess) {
163  for (GHOST_TUns8 display = 0; (display < numDisplays) && (success == GHOST_kSuccess);
164  display++) {
165  GHOST_DisplaySettings displaySettings;
166  m_settings.push_back(displaySettings);
167  GHOST_TInt32 numSettings;
168  success = getNumDisplaySettings(display, numSettings);
169  if (success == GHOST_kSuccess) {
170  GHOST_TInt32 index;
171  GHOST_DisplaySetting setting;
172  for (index = 0; (index < numSettings) && (success == GHOST_kSuccess); index++) {
173  success = getDisplaySetting(display, index, setting);
174  m_settings[display].push_back(setting);
175  }
176  }
177  else {
178  break;
179  }
180  }
181  }
182  return success;
183 }
#define GHOST_ASSERT(x, info)
Definition: GHOST_Debug.h:79
#define GHOST_PRINT(x)
Definition: GHOST_Debug.h:51
int GHOST_TInt32
Definition: GHOST_Types.h:63
GHOST_TSuccess
Definition: GHOST_Types.h:91
@ GHOST_kFailure
Definition: GHOST_Types.h:91
@ GHOST_kSuccess
Definition: GHOST_Types.h:91
unsigned char GHOST_TUns8
Definition: GHOST_Types.h:60
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
Definition: btDbvt.cpp:52
GHOST_TSuccess findMatch(GHOST_TUns8 display, const GHOST_DisplaySetting &setting, GHOST_DisplaySetting &match) const
virtual GHOST_TSuccess getNumDisplaySettings(GHOST_TUns8 display, GHOST_TInt32 &numSettings) const
std::vector< GHOST_DisplaySettings > m_settings
virtual GHOST_TSuccess getCurrentDisplaySetting(GHOST_TUns8 display, GHOST_DisplaySetting &setting) const
virtual GHOST_TSuccess getDisplaySetting(GHOST_TUns8 display, GHOST_TInt32 index, GHOST_DisplaySetting &setting) const
virtual GHOST_TSuccess setCurrentDisplaySetting(GHOST_TUns8 display, const GHOST_DisplaySetting &setting)
virtual GHOST_TSuccess initialize(void)
virtual ~GHOST_DisplayManager(void)
virtual GHOST_TSuccess getNumDisplays(GHOST_TUns8 &numDisplays) const
GHOST_TSuccess initializeSettings(void)
std::vector< GHOST_DisplaySetting > GHOST_DisplaySettings
GHOST_TUns32 bpp
Definition: GHOST_Types.h:584
GHOST_TUns32 xPixels
Definition: GHOST_Types.h:580
GHOST_TUns32 frequency
Definition: GHOST_Types.h:586
GHOST_TUns32 yPixels
Definition: GHOST_Types.h:582