[WIP] Viewports backend, 2

This commit is contained in:
SpaiR committed 2020-08-30 21:10:18 +03:00
1 parent c1632cfd3e
commit e9cfd62137
13 files changed
+126 -12

No files matched your search

@@ -26,6 +26,7 @@ import org.lwjgl.glfw.GLFWErrorCallback;
import org.lwjgl.glfw.GLFWKeyCallback;
import org.lwjgl.glfw.GLFWMonitorCallback;
import org.lwjgl.glfw.GLFWMouseButtonCallback;
import org.lwjgl.glfw.GLFWNativeWin32;
import org.lwjgl.glfw.GLFWScrollCallback;
import org.lwjgl.glfw.GLFWVidMode;
@@ -43,6 +44,8 @@ import static org.lwjgl.system.MemoryUtil.NULL;
* modify the rendering routine in the way you'd like.
*/
public class ImGuiImplGlfw {
protected static final boolean IS_WINDOWS = System.getProperty("os.name", "generic").toLowerCase().contains("win");
// Pointer of the current GLFW window
private long windowPtr;
@@ -239,6 +242,10 @@ public class ImGuiImplGlfw {
final ImGuiViewport mainViewport = ImGui.getMainViewport();
mainViewport.setPlatformHandle(windowPtr);
if (IS_WINDOWS) {
mainViewport.setPlatformHandleRaw(GLFWNativeWin32.glfwGetWin32Window(windowId));
}
if ((io.getConfigFlags() & ImGuiConfigFlags.ViewportsEnable) != 0) {
initPlatformInterface();
}
@@ -528,6 +535,10 @@ public class ImGuiImplGlfw {
vp.setPlatformHandle(data.window);
if (IS_WINDOWS) {
vp.setPlatformHandleRaw(GLFWNativeWin32.glfwGetWin32Window(data.window));
}
glfwSetWindowPos(data.window, (int) vp.getPosX(), (int) vp.getPosY());
// Install GLFW callbacks for secondary viewports
@@ -562,6 +573,11 @@ public class ImGuiImplGlfw {
@Override
public void accept(final ImGuiViewport vp) {
final ImGuiViewportDataGlfw data = (ImGuiViewportDataGlfw) vp.getPlatformUserData();
if (IS_WINDOWS && (vp.getFlags() & ImGuiViewportFlags.NoTaskBarIcon) != 0) {
ImGuiImplGlfwNative.win32hideFromTaskBar(vp.getPlatformHandleRaw());
}
glfwShowWindow(data.window);
}
}
@@ -606,7 +622,7 @@ public class ImGuiImplGlfw {
public void accept(final ImGuiViewport vp, final ImVec2 imVec2) {
final ImGuiViewportDataGlfw data = (ImGuiViewportDataGlfw) vp.getPlatformUserData();
data.ignoreWindowSizeEventFrame = ImGui.getFrameCount();
glfwSetWindowSize(data.window, (int) imVec2.y, (int) imVec2.y);
glfwSetWindowSize(data.window, (int) imVec2.x, (int) imVec2.y);
}
}
+4 -1
View File
@@ -1,3 +1,4 @@
import imgui.ImGuiViewport;
import imgui.type.ImBoolean;
import imgui.ImColor;
import imgui.ImGui;
@@ -40,8 +41,10 @@ final class ExampleUi {
}
void render() {
final ImGuiViewport mainViewport = ImGui.getMainViewport();
ImGui.setNextWindowSize(600, 300, ImGuiCond.Once);
ImGui.setNextWindowPos(10, 10, ImGuiCond.Once);
ImGui.setNextWindowPos(mainViewport.getWorkPosX() + 10, mainViewport.getWorkPosY() + 10, ImGuiCond.Once);
ImGui.begin("Custom window"); // Start Custom window
@@ -12,6 +12,8 @@ import imgui.ImFontConfig;
import imgui.ImGui;
import imgui.ImGuiFreeType;
import imgui.ImGuiIO;
import imgui.ImGuiStyle;
import imgui.flag.ImGuiCol;
import imgui.flag.ImGuiConfigFlags;
import imgui.gl3.ImGuiImplGl3;
import imgui.glfw.ImGuiImplGlfw;
@@ -143,7 +145,6 @@ public final class ImGuiGlfwExample {
// Initialize ImGuiIO config
final ImGuiIO io = ImGui.getIO();
io.setMouseDrawCursor(true);
io.setIniFilename(null); // We don't want to save .ini file
io.addConfigFlags(ImGuiConfigFlags.NavEnableKeyboard | ImGuiConfigFlags.DockingEnable | ImGuiConfigFlags.ViewportsEnable);
@@ -185,6 +186,13 @@ public final class ImGuiGlfwExample {
// ------------------------------------------------------------
// Use freetype instead of stb_truetype to build a fonts texture
ImGuiFreeType.buildFontAtlas(fontAtlas, ImGuiFreeType.RasterizerFlags.LightHinting);
// When viewports are enabled we tweak WindowRounding/WindowBg so platform windows can look identical to regular ones.
if ((io.getConfigFlags() & ImGuiConfigFlags.ViewportsEnable) != 0) {
final ImGuiStyle style = ImGui.getStyle();
style.setWindowRounding(0.0f);
style.setColor(ImGuiCol.WindowBg, ImGui.getColorU32(ImGuiCol.WindowBg, 1));
}
}
// Main application loop