2025-11-24 22:52:51 +03:00

67 lines
2.3 KiB
Java

/*
* Decompiled with CFR 0.152.
*
* Could not load the following classes:
* org.lwjgl.BufferUtils
* org.lwjgl.glfw.GLFW
* org.lwjgl.glfw.GLFWErrorCallback
* org.lwjgl.glfw.GLFWErrorCallbackI
* org.lwjgl.system.MemoryUtil
*/
package com.mojang.blaze3d.platform;
import com.mojang.blaze3d.platform.Window;
import java.nio.Buffer;
import java.nio.ByteBuffer;
import java.nio.charset.StandardCharsets;
import net.minecraft.util.StringDecomposer;
import org.lwjgl.BufferUtils;
import org.lwjgl.glfw.GLFW;
import org.lwjgl.glfw.GLFWErrorCallback;
import org.lwjgl.glfw.GLFWErrorCallbackI;
import org.lwjgl.system.MemoryUtil;
public class ClipboardManager {
public static final int FORMAT_UNAVAILABLE = 65545;
private final ByteBuffer clipboardScratchBuffer = BufferUtils.createByteBuffer((int)8192);
public String getClipboard(Window window, GLFWErrorCallbackI errorCallback) {
GLFWErrorCallback prevCallback = GLFW.glfwSetErrorCallback((GLFWErrorCallbackI)errorCallback);
String clipboard = GLFW.glfwGetClipboardString((long)window.handle());
clipboard = clipboard != null ? StringDecomposer.filterBrokenSurrogates(clipboard) : "";
GLFWErrorCallback oldCallback = GLFW.glfwSetErrorCallback((GLFWErrorCallbackI)prevCallback);
if (oldCallback != null) {
oldCallback.free();
}
return clipboard;
}
private static void pushClipboard(Window window, ByteBuffer buffer, byte[] data) {
buffer.clear();
buffer.put(data);
buffer.put((byte)0);
buffer.flip();
GLFW.glfwSetClipboardString((long)window.handle(), (ByteBuffer)buffer);
}
/*
* WARNING - Removed try catching itself - possible behaviour change.
*/
public void setClipboard(Window window, String clipboard) {
byte[] encoded = clipboard.getBytes(StandardCharsets.UTF_8);
int encodedLength = encoded.length + 1;
if (encodedLength < this.clipboardScratchBuffer.capacity()) {
ClipboardManager.pushClipboard(window, this.clipboardScratchBuffer, encoded);
} else {
ByteBuffer buffer = MemoryUtil.memAlloc((int)encodedLength);
try {
ClipboardManager.pushClipboard(window, buffer, encoded);
}
finally {
MemoryUtil.memFree((Buffer)buffer);
}
}
}
}