JOGL v2.6.0-rc-20250712
JOGL, High-Performance Graphics Binding for Java™ (public API).
MonitorModeUtil.java
Go to the documentation of this file.
1/**
2 * Copyright 2010 JogAmp Community. All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without modification, are
5 * permitted provided that the following conditions are met:
6 *
7 * 1. Redistributions of source code must retain the above copyright notice, this list of
8 * conditions and the following disclaimer.
9 *
10 * 2. Redistributions in binary form must reproduce the above copyright notice, this list
11 * of conditions and the following disclaimer in the documentation and/or other materials
12 * provided with the distribution.
13 *
14 * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED
15 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
16 * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR
17 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
19 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
20 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
21 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
22 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23 *
24 * The views and conclusions contained in the software and documentation are those of the
25 * authors and should not be interpreted as representing official policies, either expressed
26 * or implied, of JogAmp Community.
27 */
28
29package com.jogamp.newt.util;
30
31import com.jogamp.newt.MonitorMode;
32
33import java.util.ArrayList;
34import java.util.Collections;
35import java.util.List;
36
37import com.jogamp.nativewindow.util.DimensionImmutable;
38import com.jogamp.nativewindow.util.SurfaceSize;
39
40/**
41 * Convenient {@link com.jogamp.newt.MonitorMode} utility methods,
42 * filters etc.
43 */
44public class MonitorModeUtil {
45
46 public static int getIndex(final List<MonitorMode> monitorModes, final MonitorMode search) {
47 return monitorModes.indexOf(search);
48 }
49
50 public static int getIndexByHashCode(final List<MonitorMode> monitorModes, final MonitorMode search) {
51 if( null!=monitorModes && monitorModes.size()>0 ) {
52 for (int i=0; i<monitorModes.size(); i++) {
53 if ( search.hashCode() == monitorModes.get(i).hashCode() ) {
54 return i;
55 }
56 }
57 }
58 return -1;
59 }
60
61 public static MonitorMode getByNativeSizeRateIdAndRotation(final List<MonitorMode> monitorModes, final MonitorMode.SizeAndRRate sizeAndRate, final int modeId, final int rotation) {
62 if( null!=monitorModes && monitorModes.size()>0 ) {
63 for (int i=0; i<monitorModes.size(); i++) {
64 final MonitorMode mode = monitorModes.get(i);
65 if( mode.getSizeAndRRate().equals(sizeAndRate) && mode.getId() == modeId && mode.getRotation() == rotation ) {
66 return mode;
67 }
68 }
69 }
70 return null;
71 }
72
73 /** Sort the given {@link MonitorMode} collection w/ {@link MonitorMode#compareTo(MonitorMode)} function. */
74 public static void sort(final List<MonitorMode> monitorModes, final boolean ascendingOrder) {
75 if( ascendingOrder ) {
76 Collections.sort(monitorModes);
77 } else {
78 Collections.sort(monitorModes, MonitorMode.monitorModeComparatorInv);
79 }
80 }
81
82 /**
83 *
84 * @param monitorModes
85 * @param surfaceSize
86 * @return modes with exact {@link SurfaceSize}. May return zero sized list for non.
87 */
88 public static List<MonitorMode> filterBySurfaceSize(final List<MonitorMode> monitorModes, final SurfaceSize surfaceSize) {
89 final List<MonitorMode> out = new ArrayList<MonitorMode>();
90 if( null!=monitorModes && monitorModes.size()>0 ) {
91 for (int i=0; null!=monitorModes && i<monitorModes.size(); i++) {
92 final MonitorMode mode = monitorModes.get(i);
93 if(mode.getSurfaceSize().equals(surfaceSize)) {
94 out.add(mode);
95 }
96 }
97 }
98 return out;
99 }
100
101 /**
102 *
103 * @param monitorModes
104 * @param rotation
105 * @return modes with exact rotation. May return zero sized list for non.
106 */
107 public static List<MonitorMode> filterByRotation(final List<MonitorMode> monitorModes, final int rotation) {
108 final List<MonitorMode> out = new ArrayList<MonitorMode>();
109 if( null!=monitorModes && monitorModes.size()>0 ) {
110 for (int i=0; null!=monitorModes && i<monitorModes.size(); i++) {
111 final MonitorMode mode = monitorModes.get(i);
112 if(mode.getRotation() == rotation) {
113 out.add(mode);
114 }
115 }
116 }
117 return out;
118 }
119
120 /**
121 *
122 * @param monitorModes
123 * @param bitsPerPixel
124 * @return modes with exact bpp. May return zero sized list for non.
125 */
126 public static List<MonitorMode> filterByBpp(final List<MonitorMode> monitorModes, final int bitsPerPixel) {
127 final List<MonitorMode> out = new ArrayList<MonitorMode>();
128 if( null!=monitorModes && monitorModes.size()>0 ) {
129 for (int i=0; null!=monitorModes && i<monitorModes.size(); i++) {
130 final MonitorMode mode = monitorModes.get(i);
131 if(mode.getSurfaceSize().getBitsPerPixel() == bitsPerPixel) {
132 out.add(mode);
133 }
134 }
135 }
136 return out;
137 }
138
139 /**
140 *
141 * @param monitorModes
142 * @param flags
143 * @return modes with exact flags. May return zero sized list for non.
144 */
145 public static List<MonitorMode> filterByFlags(final List<MonitorMode> monitorModes, final int flags) {
146 final List<MonitorMode> out = new ArrayList<MonitorMode>();
147 if( null!=monitorModes && monitorModes.size()>0 ) {
148 for (int i=0; null!=monitorModes && i<monitorModes.size(); i++) {
149 final MonitorMode mode = monitorModes.get(i);
150 if(mode.getFlags() == flags) {
151 out.add(mode);
152 }
153 }
154 }
155 return out;
156 }
157
158 /**
159 * @param monitorModes
160 * @param resolution in pixel units
161 * @return modes with nearest resolution, or matching ones. May return zero sized list for non.
162 */
163 public static List<MonitorMode> filterByResolution(final List<MonitorMode> monitorModes, final DimensionImmutable resolution) {
164 final List<MonitorMode> out = new ArrayList<MonitorMode>();
165 if( null!=monitorModes && monitorModes.size()>0 ) {
166 final int resolution_sq = resolution.getHeight()*resolution.getWidth();
167 int mode_dsq=Integer.MAX_VALUE, mode_dsq_idx=0;
168
169 for (int i=0; null!=monitorModes && i<monitorModes.size(); i++) {
170 final MonitorMode mode = monitorModes.get(i);
172 final int dsq = Math.abs(resolution_sq - res.getHeight()*res.getWidth());
173 if(dsq<mode_dsq) {
174 mode_dsq = dsq;
175 mode_dsq_idx = i;
176 }
177 if(res.equals(resolution)) {
178 out.add(mode);
179 }
180 }
181 if(out.size() == 0 && 0 <= mode_dsq_idx ) {
182 // nearest ..
183 out.add(monitorModes.get(mode_dsq_idx));
184 }
185 }
186 return out;
187 }
188
189 /**
190 *
191 * @param monitorModes
192 * @param refreshRate
193 * @return modes with nearest refreshRate, or matching ones. May return zero sized list for non.
194 */
195 public static List<MonitorMode> filterByRate(final List<MonitorMode> monitorModes, final float refreshRate) {
196 final List<MonitorMode> out = new ArrayList<MonitorMode>();
197 if( null!=monitorModes && monitorModes.size()>0 ) {
198 float mode_dr = Float.MAX_VALUE;
199 int mode_dr_idx = -1;
200 for (int i=0; null!=monitorModes && i<monitorModes.size(); i++) {
201 final MonitorMode mode = monitorModes.get(i);
202 final float dr = Math.abs(refreshRate - mode.getRefreshRate());
203 if(dr<mode_dr) {
204 mode_dr = dr;
205 mode_dr_idx = i;
206 }
207 if(0 == dr) {
208 out.add(mode);
209 }
210 }
211 if(out.size() == 0 && 0 <= mode_dr_idx ) {
212 // nearest ..
213 out.add(monitorModes.get(mode_dr_idx));
214 }
215 }
216 return out;
217 }
218
219 /**
220 * @param monitorModes
221 * @return modes with highest available bpp (color depth). May return zero sized list for non.
222 */
223 public static List<MonitorMode> getHighestAvailableBpp(final List<MonitorMode> monitorModes) {
224 if( null!=monitorModes && monitorModes.size()>0 ) {
225 int highest = -1;
226 for (int i=0; null!=monitorModes && i < monitorModes.size(); i++) {
227 final MonitorMode mode = monitorModes.get(i);
228 final int bpp = mode.getSurfaceSize().getBitsPerPixel();
229 if (bpp > highest) {
230 highest = bpp;
231 }
232 }
233 return filterByBpp(monitorModes, highest);
234 }
235 return new ArrayList<MonitorMode>();
236 }
237
238 /**
239 *
240 * @param monitorModes
241 * @return modes with highest available refresh rate. May return zero sized list for non.
242 */
243 public static List<MonitorMode> getHighestAvailableRate(final List<MonitorMode> monitorModes) {
244 if( null!=monitorModes && monitorModes.size()>0 ) {
245 float highest = -1;
246 for (int i=0; null!=monitorModes && i < monitorModes.size(); i++) {
247 final MonitorMode mode = monitorModes.get(i);
248 final float rate = mode.getRefreshRate();
249 if (rate > highest) {
250 highest = rate;
251 }
252 }
253 return filterByRate(monitorModes, highest);
254 }
255 return new ArrayList<MonitorMode>();
256 }
257
258}
Immutable SurfaceSize Class, consisting of it's read only components:
final boolean equals(final Object obj)
Checks whether two size objects are equal.
final DimensionImmutable getResolution()
Returns the resolution in pixel units.
Immutable surfaceSize, flags and refreshRate Class, consisting of it's read only components:
final boolean equals(final Object obj)
Tests equality of two SizeAndRRate objects by evaluating equality of it's components:
Immutable MonitorMode Class, consisting of it's read only components:
final int getFlags()
Returns bitfield w/ flags, i.e.
static final Comparator< MonitorMode > monitorModeComparatorInv
Comparator for 2 MonitorModes, following comparison order as described in MonitorMode#compareTo(Monit...
final SizeAndRRate getSizeAndRRate()
Returns the surfaceSize and refreshRate instance.
final SurfaceSize getSurfaceSize()
Returns the unrotated SurfaceSize.
final int getRotation()
Returns the CCW rotation of this mode.
final float getRefreshRate()
Returns the vertical refresh rate.
Convenient com.jogamp.newt.MonitorMode utility methods, filters etc.
static List< MonitorMode > filterBySurfaceSize(final List< MonitorMode > monitorModes, final SurfaceSize surfaceSize)
static List< MonitorMode > filterByFlags(final List< MonitorMode > monitorModes, final int flags)
static List< MonitorMode > filterByResolution(final List< MonitorMode > monitorModes, final DimensionImmutable resolution)
static List< MonitorMode > getHighestAvailableRate(final List< MonitorMode > monitorModes)
static int getIndex(final List< MonitorMode > monitorModes, final MonitorMode search)
static void sort(final List< MonitorMode > monitorModes, final boolean ascendingOrder)
Sort the given MonitorMode collection w/ MonitorMode#compareTo(MonitorMode) function.
static List< MonitorMode > getHighestAvailableBpp(final List< MonitorMode > monitorModes)
static List< MonitorMode > filterByRotation(final List< MonitorMode > monitorModes, final int rotation)
static List< MonitorMode > filterByBpp(final List< MonitorMode > monitorModes, final int bitsPerPixel)
static MonitorMode getByNativeSizeRateIdAndRotation(final List< MonitorMode > monitorModes, final MonitorMode.SizeAndRRate sizeAndRate, final int modeId, final int rotation)
static int getIndexByHashCode(final List< MonitorMode > monitorModes, final MonitorMode search)
static List< MonitorMode > filterByRate(final List< MonitorMode > monitorModes, final float refreshRate)
Immutable Dimension Interface, consisting of it's read only components:
boolean equals(Object obj)
Checks whether two dimensions objects are equal.