137 lines
		
	
	
	
		
			3.6 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			137 lines
		
	
	
	
		
			3.6 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
| package com.mojang.blaze3d.platform;
 | |
| 
 | |
| import java.util.Locale;
 | |
| import java.util.Objects;
 | |
| import java.util.Optional;
 | |
| import java.util.regex.Matcher;
 | |
| import java.util.regex.Pattern;
 | |
| import net.fabricmc.api.EnvType;
 | |
| import net.fabricmc.api.Environment;
 | |
| import org.jetbrains.annotations.Nullable;
 | |
| import org.lwjgl.glfw.GLFWVidMode;
 | |
| import org.lwjgl.glfw.GLFWVidMode.Buffer;
 | |
| 
 | |
| @Environment(EnvType.CLIENT)
 | |
| public final class VideoMode {
 | |
| 	private final int width;
 | |
| 	private final int height;
 | |
| 	private final int redBits;
 | |
| 	private final int greenBits;
 | |
| 	private final int blueBits;
 | |
| 	private final int refreshRate;
 | |
| 	private static final Pattern PATTERN = Pattern.compile("(\\d+)x(\\d+)(?:@(\\d+)(?::(\\d+))?)?");
 | |
| 
 | |
| 	public VideoMode(int width, int height, int redBits, int greenBits, int blueBits, int refreshRate) {
 | |
| 		this.width = width;
 | |
| 		this.height = height;
 | |
| 		this.redBits = redBits;
 | |
| 		this.greenBits = greenBits;
 | |
| 		this.blueBits = blueBits;
 | |
| 		this.refreshRate = refreshRate;
 | |
| 	}
 | |
| 
 | |
| 	public VideoMode(Buffer bufferVideoMode) {
 | |
| 		this.width = bufferVideoMode.width();
 | |
| 		this.height = bufferVideoMode.height();
 | |
| 		this.redBits = bufferVideoMode.redBits();
 | |
| 		this.greenBits = bufferVideoMode.greenBits();
 | |
| 		this.blueBits = bufferVideoMode.blueBits();
 | |
| 		this.refreshRate = bufferVideoMode.refreshRate();
 | |
| 	}
 | |
| 
 | |
| 	public VideoMode(GLFWVidMode glfwVideoMode) {
 | |
| 		this.width = glfwVideoMode.width();
 | |
| 		this.height = glfwVideoMode.height();
 | |
| 		this.redBits = glfwVideoMode.redBits();
 | |
| 		this.greenBits = glfwVideoMode.greenBits();
 | |
| 		this.blueBits = glfwVideoMode.blueBits();
 | |
| 		this.refreshRate = glfwVideoMode.refreshRate();
 | |
| 	}
 | |
| 
 | |
| 	public int getWidth() {
 | |
| 		return this.width;
 | |
| 	}
 | |
| 
 | |
| 	public int getHeight() {
 | |
| 		return this.height;
 | |
| 	}
 | |
| 
 | |
| 	public int getRedBits() {
 | |
| 		return this.redBits;
 | |
| 	}
 | |
| 
 | |
| 	public int getGreenBits() {
 | |
| 		return this.greenBits;
 | |
| 	}
 | |
| 
 | |
| 	public int getBlueBits() {
 | |
| 		return this.blueBits;
 | |
| 	}
 | |
| 
 | |
| 	public int getRefreshRate() {
 | |
| 		return this.refreshRate;
 | |
| 	}
 | |
| 
 | |
| 	public boolean equals(Object object) {
 | |
| 		if (this == object) {
 | |
| 			return true;
 | |
| 		} else if (object != null && this.getClass() == object.getClass()) {
 | |
| 			VideoMode videoMode = (VideoMode)object;
 | |
| 			return this.width == videoMode.width
 | |
| 				&& this.height == videoMode.height
 | |
| 				&& this.redBits == videoMode.redBits
 | |
| 				&& this.greenBits == videoMode.greenBits
 | |
| 				&& this.blueBits == videoMode.blueBits
 | |
| 				&& this.refreshRate == videoMode.refreshRate;
 | |
| 		} else {
 | |
| 			return false;
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	public int hashCode() {
 | |
| 		return Objects.hash(new Object[]{this.width, this.height, this.redBits, this.greenBits, this.blueBits, this.refreshRate});
 | |
| 	}
 | |
| 
 | |
| 	public String toString() {
 | |
| 		return String.format(Locale.ROOT, "%sx%s@%s (%sbit)", this.width, this.height, this.refreshRate, this.redBits + this.greenBits + this.blueBits);
 | |
| 	}
 | |
| 
 | |
| 	public static Optional<VideoMode> read(@Nullable String videoMode) {
 | |
| 		if (videoMode == null) {
 | |
| 			return Optional.empty();
 | |
| 		} else {
 | |
| 			try {
 | |
| 				Matcher matcher = PATTERN.matcher(videoMode);
 | |
| 				if (matcher.matches()) {
 | |
| 					int i = Integer.parseInt(matcher.group(1));
 | |
| 					int j = Integer.parseInt(matcher.group(2));
 | |
| 					String string = matcher.group(3);
 | |
| 					int k;
 | |
| 					if (string == null) {
 | |
| 						k = 60;
 | |
| 					} else {
 | |
| 						k = Integer.parseInt(string);
 | |
| 					}
 | |
| 
 | |
| 					String string2 = matcher.group(4);
 | |
| 					int l;
 | |
| 					if (string2 == null) {
 | |
| 						l = 24;
 | |
| 					} else {
 | |
| 						l = Integer.parseInt(string2);
 | |
| 					}
 | |
| 
 | |
| 					int m = l / 3;
 | |
| 					return Optional.of(new VideoMode(i, j, m, m, m, k));
 | |
| 				}
 | |
| 			} catch (Exception var9) {
 | |
| 			}
 | |
| 
 | |
| 			return Optional.empty();
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	public String write() {
 | |
| 		return String.format(Locale.ROOT, "%sx%s@%s:%s", this.width, this.height, this.refreshRate, this.redBits + this.greenBits + this.blueBits);
 | |
| 	}
 | |
| }
 |