diff --git a/src/imgui_impl.js b/src/imgui_impl.js index 3fdd928..a611a08 100644 --- a/src/imgui_impl.js +++ b/src/imgui_impl.js @@ -1,6 +1,6 @@ -System.register(["imgui-js"], function (exports_1, context_1) { +System.register(["imgui-js", "pixi.js", "./utils"], function (exports_1, context_1) { "use strict"; - var ImGui, clipboard_text, ImGuiImplPIXI, canvas, gl, g_ShaderHandle, g_VertHandle, g_FragHandle, g_AttribLocationTex, g_AttribLocationProjMtx, g_AttribLocationPosition, g_AttribLocationUV, g_AttribLocationColor, g_VboHandle, g_ElementsHandle, g_FontTexture, ctx, prev_time, mouse_button_map; + var ImGui, PIXI, U, clipboard_text, contexts, contextIOs, isFirstWindow, ImGuiImplInternalRenderer, gl, app, ImGuiWindow, canvas, g_ShaderHandle, g_VertHandle, g_FragHandle, g_AttribLocationTex, g_AttribLocationProjMtx, g_AttribLocationPosition, g_AttribLocationUV, g_AttribLocationColor, g_VboHandle, g_ElementsHandle, g_FontTexture, prev_time, mouse_button_map; var __moduleName = context_1 && context_1.id; function document_on_copy(event) { if (event.clipboardData) { @@ -30,193 +30,118 @@ console.log("Gamepad disconnected at index %d: %s.", event.gamepad.index, event.gamepad.id); } function canvas_on_blur(event) { - const io = ImGui.GetIO(); - io.KeyCtrl = false; - io.KeyShift = false; - io.KeyAlt = false; - io.KeySuper = false; - for (let i = 0; i < io.KeysDown.length; ++i) { - io.KeysDown[i] = false; - } - for (let i = 0; i < io.MouseDown.length; ++i) { - io.MouseDown[i] = false; + for (var io of contextIOs) { + io.KeyCtrl = false; + io.KeyShift = false; + io.KeyAlt = false; + io.KeySuper = false; + for (let i = 0; i < io.KeysDown.length; ++i) { + io.KeysDown[i] = false; + } + for (let i = 0; i < io.MouseDown.length; ++i) { + io.MouseDown[i] = false; + } } } function canvas_on_keydown(event) { // console.log(event.type, event.key, event.keyCode); - const io = ImGui.GetIO(); - io.KeyCtrl = event.ctrlKey; - io.KeyShift = event.shiftKey; - io.KeyAlt = event.altKey; - io.KeySuper = event.metaKey; - ImGui.IM_ASSERT(event.keyCode >= 0 && event.keyCode < ImGui.IM_ARRAYSIZE(io.KeysDown)); - io.KeysDown[event.keyCode] = true; - // forward to the keypress event - if ( /*io.WantCaptureKeyboard ||*/event.key === "Tab") { - event.preventDefault(); + for (var io of contextIOs) { + io.KeyCtrl = event.ctrlKey; + io.KeyShift = event.shiftKey; + io.KeyAlt = event.altKey; + io.KeySuper = event.metaKey; + ImGui.IM_ASSERT(event.keyCode >= 0 && event.keyCode < ImGui.IM_ARRAYSIZE(io.KeysDown)); + io.KeysDown[event.keyCode] = true; + // forward to the keypress event + if ( /*io.WantCaptureKeyboard ||*/event.key === "Tab") { + event.preventDefault(); + } } } function canvas_on_keyup(event) { // console.log(event.type, event.key, event.keyCode); - const io = ImGui.GetIO(); - io.KeyCtrl = event.ctrlKey; - io.KeyShift = event.shiftKey; - io.KeyAlt = event.altKey; - io.KeySuper = event.metaKey; - ImGui.IM_ASSERT(event.keyCode >= 0 && event.keyCode < ImGui.IM_ARRAYSIZE(io.KeysDown)); - io.KeysDown[event.keyCode] = false; - if (io.WantCaptureKeyboard) { - event.preventDefault(); + for (var io of contextIOs) { + io.KeyCtrl = event.ctrlKey; + io.KeyShift = event.shiftKey; + io.KeyAlt = event.altKey; + io.KeySuper = event.metaKey; + ImGui.IM_ASSERT(event.keyCode >= 0 && event.keyCode < ImGui.IM_ARRAYSIZE(io.KeysDown)); + io.KeysDown[event.keyCode] = false; + if (io.WantCaptureKeyboard) { + event.preventDefault(); + } } } function canvas_on_keypress(event) { // console.log(event.type, event.key, event.keyCode); - const io = ImGui.GetIO(); - io.AddInputCharacter(event.charCode); - if (io.WantCaptureKeyboard) { - event.preventDefault(); + for (var io of contextIOs) { + io.AddInputCharacter(event.charCode); + if (io.WantCaptureKeyboard) { + event.preventDefault(); + } } } - function canvas_on_pointermove(event) { - const io = ImGui.GetIO(); - const devicePixelRatio = window.devicePixelRatio || 1; - io.MousePos.x = event.offsetX * devicePixelRatio; - io.MousePos.y = event.offsetY * devicePixelRatio; - if (io.WantCaptureMouse) { - event.preventDefault(); - } - } - function canvas_on_pointerdown(event) { - const io = ImGui.GetIO(); - const devicePixelRatio = window.devicePixelRatio || 1; - io.MousePos.x = event.offsetX * devicePixelRatio; - io.MousePos.y = event.offsetY * devicePixelRatio; - io.MouseDown[mouse_button_map[event.button]] = true; - // if (io.WantCaptureMouse) { - // event.preventDefault(); - // } - } function canvas_on_contextmenu(event) { - const io = ImGui.GetIO(); - if (io.WantCaptureMouse) { - event.preventDefault(); - } - } - function canvas_on_pointerup(event) { - const io = ImGui.GetIO(); - io.MouseDown[mouse_button_map[event.button]] = false; - if (io.WantCaptureMouse) { - event.preventDefault(); + for (var io of contextIOs) { + if (io.WantCaptureMouse) { + event.preventDefault(); + } } } function canvas_on_wheel(event) { - const io = ImGui.GetIO(); - let scale = 1.0; - switch (event.deltaMode) { - case event.DOM_DELTA_PIXEL: - scale = 0.01; - break; - case event.DOM_DELTA_LINE: - scale = 0.2; - break; - case event.DOM_DELTA_PAGE: - scale = 1.0; - break; - } - io.MouseWheelH = event.deltaX * scale; - io.MouseWheel = -event.deltaY * scale; // Mouse wheel: 1 unit scrolls about 5 lines text. - if (io.WantCaptureMouse) { - event.preventDefault(); + for (var io of contextIOs) { + let scale = 1.0; + switch (event.deltaMode) { + case event.DOM_DELTA_PIXEL: + scale = 0.01; + break; + case event.DOM_DELTA_LINE: + scale = 0.2; + break; + case event.DOM_DELTA_PAGE: + scale = 1.0; + break; + } + io.MouseWheelH = event.deltaX * scale; + io.MouseWheel = -event.deltaY * scale; // Mouse wheel: 1 unit scrolls about 5 lines text. + if (io.WantCaptureMouse) { + event.preventDefault(); + } } } - function Init(value) { - const io = ImGui.GetIO(); + function Init(_app) { + // Setup Dear ImGui binding + ImGui.IMGUI_CHECKVERSION(); + ImGui.CreateContext(); + ImGui.StyleColorsLight(); + contexts.push(ImGui.GetCurrentContext()); + contextIOs.push(ImGui.GetIO()); + contextIOs[0].Fonts.AddFontDefault(); + PIXI.Renderer.registerPlugin("imgui_renderer", U.fromConstructor(ImGuiImplInternalRenderer)); if (typeof (window) !== "undefined") { ImGui.LoadIniSettingsFromMemory(window.localStorage.getItem("imgui.ini") || ""); } - if (typeof (navigator) !== "undefined") { - io.ConfigMacOSXBehaviors = navigator.platform.match(/Mac/) !== null; - } if (typeof (document) !== "undefined") { document.body.addEventListener("copy", document_on_copy); document.body.addEventListener("cut", document_on_cut); document.body.addEventListener("paste", document_on_paste); } - io.SetClipboardTextFn = (user_data, text) => { - clipboard_text = text; - // console.log(`set clipboard_text: "${clipboard_text}"`); - if (typeof navigator !== "undefined" && typeof navigator.clipboard !== "undefined") { - // console.log(`clipboard.writeText: "${clipboard_text}"`); - navigator.clipboard.writeText(clipboard_text).then(() => { - // console.log(`clipboard.writeText: "${clipboard_text}" done.`); - }); - } - }; - io.GetClipboardTextFn = (user_data) => { - // if (typeof navigator !== "undefined" && typeof (navigator as any).clipboard !== "undefined") { - // console.log(`clipboard.readText: "${clipboard_text}"`); - // (navigator as any).clipboard.readText().then((text: string): void => { - // clipboard_text = text; - // console.log(`clipboard.readText: "${clipboard_text}" done.`); - // }); - // } - // console.log(`get clipboard_text: "${clipboard_text}"`); - return clipboard_text; - }; - io.ClipboardUserData = null; if (typeof (window) !== "undefined") { window.addEventListener("gamepadconnected", window_on_gamepadconnected); window.addEventListener("gamepaddisconnected", window_on_gamepaddisconnected); } - if (typeof (window) !== "undefined") { - if (value instanceof (HTMLCanvasElement)) { - value = value.getContext("webgl2", { alpha: false }) || value.getContext("2d"); - } - if (value instanceof (WebGL2RenderingContext)) { - canvas = value.canvas; - exports_1("gl", gl = value); - } - if (value instanceof (CanvasRenderingContext2D)) { - canvas = value.canvas; - exports_1("ctx", ctx = value); - } - } + app = _app; + gl = app.renderer.gl; + canvas = app.view; if (canvas !== null) { canvas.style.touchAction = "none"; // Disable browser handling of all panning and zooming gestures. canvas.addEventListener("blur", canvas_on_blur); canvas.addEventListener("keydown", canvas_on_keydown); canvas.addEventListener("keyup", canvas_on_keyup); canvas.addEventListener("keypress", canvas_on_keypress); - canvas.addEventListener("pointermove", canvas_on_pointermove); - canvas.addEventListener("pointerdown", canvas_on_pointerdown); canvas.addEventListener("contextmenu", canvas_on_contextmenu); - canvas.addEventListener("pointerup", canvas_on_pointerup); canvas.addEventListener("wheel", canvas_on_wheel); } - // Setup back-end capabilities flags - io.BackendFlags |= ImGui.BackendFlags.HasMouseCursors; // We can honor GetMouseCursor() values (optional) - // Keyboard mapping. ImGui will use those indices to peek into the io.KeyDown[] array. - io.KeyMap[ImGui.Key.Tab] = 9; - io.KeyMap[ImGui.Key.LeftArrow] = 37; - io.KeyMap[ImGui.Key.RightArrow] = 39; - io.KeyMap[ImGui.Key.UpArrow] = 38; - io.KeyMap[ImGui.Key.DownArrow] = 40; - io.KeyMap[ImGui.Key.PageUp] = 33; - io.KeyMap[ImGui.Key.PageDown] = 34; - io.KeyMap[ImGui.Key.Home] = 36; - io.KeyMap[ImGui.Key.End] = 35; - io.KeyMap[ImGui.Key.Insert] = 45; - io.KeyMap[ImGui.Key.Delete] = 46; - io.KeyMap[ImGui.Key.Backspace] = 8; - io.KeyMap[ImGui.Key.Space] = 32; - io.KeyMap[ImGui.Key.Enter] = 13; - io.KeyMap[ImGui.Key.Escape] = 27; - io.KeyMap[ImGui.Key.A] = 65; - io.KeyMap[ImGui.Key.C] = 67; - io.KeyMap[ImGui.Key.V] = 86; - io.KeyMap[ImGui.Key.X] = 88; - io.KeyMap[ImGui.Key.Y] = 89; - io.KeyMap[ImGui.Key.Z] = 90; CreateDeviceObjects(); } exports_1("Init", Init); @@ -227,14 +152,10 @@ canvas.removeEventListener("keydown", canvas_on_keydown); canvas.removeEventListener("keyup", canvas_on_keyup); canvas.removeEventListener("keypress", canvas_on_keypress); - canvas.removeEventListener("pointermove", canvas_on_pointermove); - canvas.removeEventListener("pointerdown", canvas_on_pointerdown); canvas.removeEventListener("contextmenu", canvas_on_contextmenu); - canvas.removeEventListener("pointerup", canvas_on_pointerup); canvas.removeEventListener("wheel", canvas_on_wheel); } - exports_1("gl", gl = null); - exports_1("ctx", ctx = null); + app = null; canvas = null; if (typeof (window) !== "undefined") { window.removeEventListener("gamepadconnected", window_on_gamepadconnected); @@ -247,392 +168,6 @@ } } exports_1("Shutdown", Shutdown); - function NewFrame(time) { - const io = ImGui.GetIO(); - if (io.WantSaveIniSettings) { - io.WantSaveIniSettings = false; - if (typeof (window) !== "undefined") { - window.localStorage.setItem("imgui.ini", ImGui.SaveIniSettingsToMemory()); - } - } - const w = canvas && canvas.width || 640; - const h = canvas && canvas.height || 480; - const display_w = gl && gl.drawingBufferWidth || w; - const display_h = gl && gl.drawingBufferHeight || h; - io.DisplaySize.x = w; - io.DisplaySize.y = h; - io.DisplayFramebufferScale.x = w > 0 ? (display_w / w) : 0; - io.DisplayFramebufferScale.y = h > 0 ? (display_h / h) : 0; - const dt = time - prev_time; - prev_time = time; - io.DeltaTime = dt / 1000; - if (io.WantSetMousePos) { - console.log("TODO: MousePos", io.MousePos.x, io.MousePos.y); - } - if (typeof (document) !== "undefined") { - if (io.MouseDrawCursor) { - document.body.style.cursor = "none"; - } - else { - switch (ImGui.GetMouseCursor()) { - case ImGui.MouseCursor.None: - document.body.style.cursor = "none"; - break; - default: - case ImGui.MouseCursor.Arrow: - document.body.style.cursor = "default"; - break; - case ImGui.MouseCursor.TextInput: - document.body.style.cursor = "text"; - break; // When hovering over InputText, etc. - case ImGui.MouseCursor.ResizeAll: - document.body.style.cursor = "move"; - break; // Unused - case ImGui.MouseCursor.ResizeNS: - document.body.style.cursor = "ns-resize"; - break; // When hovering over an horizontal border - case ImGui.MouseCursor.ResizeEW: - document.body.style.cursor = "ew-resize"; - break; // When hovering over a vertical border or a column - case ImGui.MouseCursor.ResizeNESW: - document.body.style.cursor = "nesw-resize"; - break; // When hovering over the bottom-left corner of a window - case ImGui.MouseCursor.ResizeNWSE: - document.body.style.cursor = "nwse-resize"; - break; // When hovering over the bottom-right corner of a window - case ImGui.MouseCursor.Hand: - document.body.style.cursor = "move"; - break; - } - } - } - // Gamepad navigation mapping [BETA] - for (let i = 0; i < io.NavInputs.length; ++i) { - io.NavInputs[i] = 0.0; - } - if (io.ConfigFlags & ImGui.ConfigFlags.NavEnableGamepad) { - // Update gamepad inputs - const gamepads = (typeof (navigator) !== "undefined" && typeof (navigator.getGamepads) === "function") ? navigator.getGamepads() : []; - for (let i = 0; i < gamepads.length; ++i) { - const gamepad = gamepads[i]; - if (!gamepad) { - continue; - } - const buttons_count = gamepad.buttons.length; - const axes_count = gamepad.axes.length; - const MAP_BUTTON = function (NAV_NO, BUTTON_NO) { - if (!gamepad) { - return; - } - if (buttons_count > BUTTON_NO && gamepad.buttons[BUTTON_NO].pressed) - io.NavInputs[NAV_NO] = 1.0; - }; - const MAP_ANALOG = function (NAV_NO, AXIS_NO, V0, V1) { - if (!gamepad) { - return; - } - let v = (axes_count > AXIS_NO) ? gamepad.axes[AXIS_NO] : V0; - v = (v - V0) / (V1 - V0); - if (v > 1.0) - v = 1.0; - if (io.NavInputs[NAV_NO] < v) - io.NavInputs[NAV_NO] = v; - }; - // TODO: map input based on vendor and product id - // https://developer.mozilla.org/en-US/docs/Web/API/Gamepad/id - const match = gamepad.id.match(/^([0-9a-f]{4})-([0-9a-f]{4})-.*$/); - const match_chrome = gamepad.id.match(/^.*\(.*Vendor: ([0-9a-f]{4}) Product: ([0-9a-f]{4})\).*$/); - const vendor = (match && match[1]) || (match_chrome && match_chrome[1]) || "0000"; - const product = (match && match[2]) || (match_chrome && match_chrome[2]) || "0000"; - switch (vendor + product) { - case "046dc216": // Logitech Logitech Dual Action (Vendor: 046d Product: c216) - MAP_BUTTON(ImGui.NavInput.Activate, 1); // Cross / A - MAP_BUTTON(ImGui.NavInput.Cancel, 2); // Circle / B - MAP_BUTTON(ImGui.NavInput.Menu, 0); // Square / X - MAP_BUTTON(ImGui.NavInput.Input, 3); // Triangle / Y - MAP_ANALOG(ImGui.NavInput.DpadLeft, 4, -0.3, -0.9); // D-Pad Left - MAP_ANALOG(ImGui.NavInput.DpadRight, 4, +0.3, +0.9); // D-Pad Right - MAP_ANALOG(ImGui.NavInput.DpadUp, 5, -0.3, -0.9); // D-Pad Up - MAP_ANALOG(ImGui.NavInput.DpadDown, 5, +0.3, +0.9); // D-Pad Down - MAP_BUTTON(ImGui.NavInput.FocusPrev, 4); // L1 / LB - MAP_BUTTON(ImGui.NavInput.FocusNext, 5); // R1 / RB - MAP_BUTTON(ImGui.NavInput.TweakSlow, 6); // L2 / LT - MAP_BUTTON(ImGui.NavInput.TweakFast, 7); // R2 / RT - MAP_ANALOG(ImGui.NavInput.LStickLeft, 0, -0.3, -0.9); - MAP_ANALOG(ImGui.NavInput.LStickRight, 0, +0.3, +0.9); - MAP_ANALOG(ImGui.NavInput.LStickUp, 1, -0.3, -0.9); - MAP_ANALOG(ImGui.NavInput.LStickDown, 1, +0.3, +0.9); - break; - case "046dc21d": // Logitech Gamepad F310 (STANDARD GAMEPAD Vendor: 046d Product: c21d) - MAP_BUTTON(ImGui.NavInput.Activate, 0); // Cross / A - MAP_BUTTON(ImGui.NavInput.Cancel, 1); // Circle / B - MAP_BUTTON(ImGui.NavInput.Menu, 2); // Square / X - MAP_BUTTON(ImGui.NavInput.Input, 3); // Triangle / Y - MAP_BUTTON(ImGui.NavInput.DpadLeft, 14); // D-Pad Left - MAP_BUTTON(ImGui.NavInput.DpadRight, 15); // D-Pad Right - MAP_BUTTON(ImGui.NavInput.DpadUp, 12); // D-Pad Up - MAP_BUTTON(ImGui.NavInput.DpadDown, 13); // D-Pad Down - MAP_BUTTON(ImGui.NavInput.FocusPrev, 4); // L1 / LB - MAP_BUTTON(ImGui.NavInput.FocusNext, 5); // R1 / RB - MAP_ANALOG(ImGui.NavInput.TweakSlow, 6, +0.3, +0.9); // L2 / LT - MAP_ANALOG(ImGui.NavInput.TweakFast, 7, +0.3, +0.9); // R2 / RT - MAP_ANALOG(ImGui.NavInput.LStickLeft, 0, -0.3, -0.9); - MAP_ANALOG(ImGui.NavInput.LStickRight, 0, +0.3, +0.9); - MAP_ANALOG(ImGui.NavInput.LStickUp, 1, -0.3, -0.9); - MAP_ANALOG(ImGui.NavInput.LStickDown, 1, +0.3, +0.9); - break; - case "2dc86001": // 8Bitdo SN30 Pro 8Bitdo SN30 Pro (Vendor: 2dc8 Product: 6001) - case "2dc86101": // 8Bitdo SN30 Pro (Vendor: 2dc8 Product: 6101) - MAP_BUTTON(ImGui.NavInput.Activate, 1); // Cross / A - MAP_BUTTON(ImGui.NavInput.Cancel, 0); // Circle / B - MAP_BUTTON(ImGui.NavInput.Menu, 4); // Square / X - MAP_BUTTON(ImGui.NavInput.Input, 3); // Triangle / Y - MAP_ANALOG(ImGui.NavInput.DpadLeft, 6, -0.3, -0.9); // D-Pad Left - MAP_ANALOG(ImGui.NavInput.DpadRight, 6, +0.3, +0.9); // D-Pad Right - MAP_ANALOG(ImGui.NavInput.DpadUp, 7, -0.3, -0.9); // D-Pad Up - MAP_ANALOG(ImGui.NavInput.DpadDown, 7, +0.3, +0.9); // D-Pad Down - MAP_BUTTON(ImGui.NavInput.FocusPrev, 6); // L1 / LB - MAP_BUTTON(ImGui.NavInput.FocusNext, 7); // R1 / RB - MAP_BUTTON(ImGui.NavInput.TweakSlow, 8); // L2 / LT - MAP_BUTTON(ImGui.NavInput.TweakFast, 9); // R2 / RT - MAP_ANALOG(ImGui.NavInput.LStickLeft, 0, -0.3, -0.9); - MAP_ANALOG(ImGui.NavInput.LStickRight, 0, +0.3, +0.9); - MAP_ANALOG(ImGui.NavInput.LStickUp, 1, -0.3, -0.9); - MAP_ANALOG(ImGui.NavInput.LStickDown, 1, +0.3, +0.9); - break; - default: // standard gamepad: https://w3c.github.io/gamepad/#remapping - MAP_BUTTON(ImGui.NavInput.Activate, 0); // Cross / A - MAP_BUTTON(ImGui.NavInput.Cancel, 1); // Circle / B - MAP_BUTTON(ImGui.NavInput.Menu, 2); // Square / X - MAP_BUTTON(ImGui.NavInput.Input, 3); // Triangle / Y - MAP_BUTTON(ImGui.NavInput.DpadLeft, 14); // D-Pad Left - MAP_BUTTON(ImGui.NavInput.DpadRight, 15); // D-Pad Right - MAP_BUTTON(ImGui.NavInput.DpadUp, 12); // D-Pad Up - MAP_BUTTON(ImGui.NavInput.DpadDown, 13); // D-Pad Down - MAP_BUTTON(ImGui.NavInput.FocusPrev, 4); // L1 / LB - MAP_BUTTON(ImGui.NavInput.FocusNext, 5); // R1 / RB - MAP_BUTTON(ImGui.NavInput.TweakSlow, 6); // L2 / LT - MAP_BUTTON(ImGui.NavInput.TweakFast, 7); // R2 / RT - MAP_ANALOG(ImGui.NavInput.LStickLeft, 0, -0.3, -0.9); - MAP_ANALOG(ImGui.NavInput.LStickRight, 0, +0.3, +0.9); - MAP_ANALOG(ImGui.NavInput.LStickUp, 1, -0.3, -0.9); - MAP_ANALOG(ImGui.NavInput.LStickDown, 1, +0.3, +0.9); - break; - } - } - } - } - exports_1("NewFrame", NewFrame); - function RenderDrawData(draw_data = ImGui.GetDrawData()) { - const io = ImGui.GetIO(); - if (draw_data === null) { - throw new Error(); - } - gl || ctx || console.log(draw_data); - // Avoid rendering when minimized, scale coordinates for retina displays (screen coordinates != framebuffer coordinates) - const fb_width = io.DisplaySize.x * io.DisplayFramebufferScale.x; - const fb_height = io.DisplaySize.y * io.DisplayFramebufferScale.y; - if (fb_width === 0 || fb_height === 0) { - return; - } - draw_data.ScaleClipRects(io.DisplayFramebufferScale); - // Backup GL state - const last_active_texture = gl && gl.getParameter(gl.ACTIVE_TEXTURE) || null; - const last_program = gl && gl.getParameter(gl.CURRENT_PROGRAM) || null; - const last_texture = gl && gl.getParameter(gl.TEXTURE_BINDING_2D) || null; - const last_array_buffer = gl && gl.getParameter(gl.ARRAY_BUFFER_BINDING) || null; - const last_element_array_buffer = gl && gl.getParameter(gl.ELEMENT_ARRAY_BUFFER_BINDING) || null; - // GLint last_polygon_mode[2]; glGetIntegerv(GL_POLYGON_MODE, last_polygon_mode); - const last_viewport = gl && gl.getParameter(gl.VIEWPORT) || null; - const last_scissor_box = gl && gl.getParameter(gl.SCISSOR_BOX) || null; - const last_blend_src_rgb = gl && gl.getParameter(gl.BLEND_SRC_RGB) || null; - const last_blend_dst_rgb = gl && gl.getParameter(gl.BLEND_DST_RGB) || null; - const last_blend_src_alpha = gl && gl.getParameter(gl.BLEND_SRC_ALPHA) || null; - const last_blend_dst_alpha = gl && gl.getParameter(gl.BLEND_DST_ALPHA) || null; - const last_blend_equation_rgb = gl && gl.getParameter(gl.BLEND_EQUATION_RGB) || null; - const last_blend_equation_alpha = gl && gl.getParameter(gl.BLEND_EQUATION_ALPHA) || null; - const last_enable_blend = gl && gl.getParameter(gl.BLEND) || null; - const last_enable_cull_face = gl && gl.getParameter(gl.CULL_FACE) || null; - const last_enable_depth_test = gl && gl.getParameter(gl.DEPTH_TEST) || null; - const last_enable_scissor_test = gl && gl.getParameter(gl.SCISSOR_TEST) || null; - // Setup render state: alpha-blending enabled, no face culling, no depth testing, scissor enabled, polygon fill - gl && gl.enable(gl.BLEND); - gl && gl.blendEquation(gl.FUNC_ADD); - gl && gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA); - gl && gl.disable(gl.CULL_FACE); - gl && gl.disable(gl.DEPTH_TEST); - gl && gl.enable(gl.SCISSOR_TEST); - // glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); - // Setup viewport, orthographic projection matrix - // Our visible imgui space lies from draw_data->DisplayPps (top left) to draw_data->DisplayPos+data_data->DisplaySize (bottom right). DisplayMin is typically (0,0) for single viewport apps. - gl && gl.viewport(0, 0, fb_width, fb_height); - const L = draw_data.DisplayPos.x; - const R = draw_data.DisplayPos.x + draw_data.DisplaySize.x; - const T = draw_data.DisplayPos.y; - const B = draw_data.DisplayPos.y + draw_data.DisplaySize.y; - const ortho_projection = new Float32Array([ - 2.0 / (R - L), 0.0, 0.0, 0.0, - 0.0, 2.0 / (T - B), 0.0, 0.0, - 0.0, 0.0, -1.0, 0.0, - (R + L) / (L - R), (T + B) / (B - T), 0.0, 1.0, - ]); - gl && gl.useProgram(g_ShaderHandle); - gl && gl.uniform1i(g_AttribLocationTex, 0); - gl && g_AttribLocationProjMtx && gl.uniformMatrix4fv(g_AttribLocationProjMtx, false, ortho_projection); - // Render command lists - gl && gl.bindBuffer(gl.ARRAY_BUFFER, g_VboHandle); - gl && gl.enableVertexAttribArray(g_AttribLocationPosition); - gl && gl.enableVertexAttribArray(g_AttribLocationUV); - gl && gl.enableVertexAttribArray(g_AttribLocationColor); - gl && gl.vertexAttribPointer(g_AttribLocationPosition, 2, gl.FLOAT, false, ImGui.ImDrawVertSize, ImGui.ImDrawVertPosOffset); - gl && gl.vertexAttribPointer(g_AttribLocationUV, 2, gl.FLOAT, false, ImGui.ImDrawVertSize, ImGui.ImDrawVertUVOffset); - gl && gl.vertexAttribPointer(g_AttribLocationColor, 4, gl.UNSIGNED_BYTE, true, ImGui.ImDrawVertSize, ImGui.ImDrawVertColOffset); - // Draw - const pos = draw_data.DisplayPos; - const idx_buffer_type = gl && ((ImGui.ImDrawIdxSize === 4) ? gl.UNSIGNED_INT : gl.UNSIGNED_SHORT) || 0; - draw_data.IterateDrawLists((draw_list) => { - gl || ctx || console.log(draw_list); - gl || ctx || console.log("VtxBuffer.length", draw_list.VtxBuffer.length); - gl || ctx || console.log("IdxBuffer.length", draw_list.IdxBuffer.length); - let idx_buffer_offset = 0; - gl && gl.bindBuffer(gl.ARRAY_BUFFER, g_VboHandle); - gl && gl.bufferData(gl.ARRAY_BUFFER, draw_list.VtxBuffer, gl.STREAM_DRAW); - gl && gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, g_ElementsHandle); - gl && gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, draw_list.IdxBuffer, gl.STREAM_DRAW); - draw_list.IterateDrawCmds((draw_cmd) => { - gl || ctx || console.log(draw_cmd); - gl || ctx || console.log("ElemCount", draw_cmd.ElemCount); - gl || ctx || console.log("ClipRect", draw_cmd.ClipRect.x, fb_height - draw_cmd.ClipRect.w, draw_cmd.ClipRect.z - draw_cmd.ClipRect.x, draw_cmd.ClipRect.w - draw_cmd.ClipRect.y); - gl || ctx || console.log("TextureId", draw_cmd.TextureId); - if (!gl && !ctx) { - console.log("i: pos.x pos.y uv.x uv.y col"); - for (let i = 0; i < Math.min(3, draw_cmd.ElemCount); ++i) { - const view = new ImGui.ImDrawVert(draw_list.VtxBuffer.buffer, draw_list.VtxBuffer.byteOffset + i * ImGui.ImDrawVertSize); - console.log(`${i}: ${view.pos[0].toFixed(2)} ${view.pos[1].toFixed(2)} ${view.uv[0].toFixed(5)} ${view.uv[1].toFixed(5)} ${("00000000" + view.col[0].toString(16)).substr(-8)}`); - } - } - if (draw_cmd.UserCallback !== null) { - // User callback (registered via ImDrawList::AddCallback) - draw_cmd.UserCallback(draw_list, draw_cmd); - } - else { - const clip_rect = new ImGui.ImVec4(draw_cmd.ClipRect.x - pos.x, draw_cmd.ClipRect.y - pos.y, draw_cmd.ClipRect.z - pos.x, draw_cmd.ClipRect.w - pos.y); - if (clip_rect.x < fb_width && clip_rect.y < fb_height && clip_rect.z >= 0.0 && clip_rect.w >= 0.0) { - // Apply scissor/clipping rectangle - gl && gl.scissor(clip_rect.x, fb_height - clip_rect.w, clip_rect.z - clip_rect.x, clip_rect.w - clip_rect.y); - // Bind texture, Draw - gl && gl.activeTexture(gl.TEXTURE0); - gl && gl.bindTexture(gl.TEXTURE_2D, draw_cmd.TextureId); - gl && gl.drawElements(gl.TRIANGLES, draw_cmd.ElemCount, idx_buffer_type, idx_buffer_offset); - if (ctx) { - ctx.save(); - ctx.beginPath(); - ctx.rect(clip_rect.x, clip_rect.y, clip_rect.z - clip_rect.x, clip_rect.w - clip_rect.y); - ctx.clip(); - const idx = ImGui.ImDrawIdxSize === 4 ? - new Uint32Array(draw_list.IdxBuffer.buffer, draw_list.IdxBuffer.byteOffset + idx_buffer_offset) : - new Uint16Array(draw_list.IdxBuffer.buffer, draw_list.IdxBuffer.byteOffset + idx_buffer_offset); - for (let i = 0; i < draw_cmd.ElemCount; i += 3) { - const i0 = idx[i + 0]; - const i1 = idx[i + 1]; - const i2 = idx[i + 2]; - const v0 = new ImGui.ImDrawVert(draw_list.VtxBuffer.buffer, draw_list.VtxBuffer.byteOffset + i0 * ImGui.ImDrawVertSize); - const v1 = new ImGui.ImDrawVert(draw_list.VtxBuffer.buffer, draw_list.VtxBuffer.byteOffset + i1 * ImGui.ImDrawVertSize); - const v2 = new ImGui.ImDrawVert(draw_list.VtxBuffer.buffer, draw_list.VtxBuffer.byteOffset + i2 * ImGui.ImDrawVertSize); - const i3 = idx[i + 3]; - const i4 = idx[i + 4]; - const i5 = idx[i + 5]; - const v3 = new ImGui.ImDrawVert(draw_list.VtxBuffer.buffer, draw_list.VtxBuffer.byteOffset + i3 * ImGui.ImDrawVertSize); - const v4 = new ImGui.ImDrawVert(draw_list.VtxBuffer.buffer, draw_list.VtxBuffer.byteOffset + i4 * ImGui.ImDrawVertSize); - const v5 = new ImGui.ImDrawVert(draw_list.VtxBuffer.buffer, draw_list.VtxBuffer.byteOffset + i5 * ImGui.ImDrawVertSize); - let quad = true; - let minmin = v0; - let minmax = v0; - let maxmin = v0; - let maxmax = v0; - for (const v of [v1, v2, v3, v4, v5]) { - let found = false; - if (v.pos[0] <= minmin.pos[0] && v.pos[1] <= minmin.pos[1]) { - minmin = v; - found = true; - } - if (v.pos[0] <= minmax.pos[0] && v.pos[1] >= minmax.pos[1]) { - minmax = v; - found = true; - } - if (v.pos[0] >= maxmin.pos[0] && v.pos[1] <= maxmin.pos[1]) { - maxmin = v; - found = true; - } - if (v.pos[0] >= maxmax.pos[0] && v.pos[1] >= maxmax.pos[1]) { - maxmax = v; - found = true; - } - if (!found) { - quad = false; - } - } - quad = quad && (minmin.pos[0] === minmax.pos[0]); - quad = quad && (maxmin.pos[0] === maxmax.pos[0]); - quad = quad && (minmin.pos[1] === maxmin.pos[1]); - quad = quad && (minmax.pos[1] === maxmax.pos[1]); - if (quad) { - if (minmin.uv[0] < 0.01 && minmin.uv[1] < 0.01) { - // one vertex color - ctx.beginPath(); - ctx.rect(minmin.pos[0], minmin.pos[1], maxmax.pos[0] - minmin.pos[0], maxmax.pos[1] - minmin.pos[1]); - ctx.fillStyle = `rgba(${v0.col[0] >> 0 & 0xff}, ${v0.col[0] >> 8 & 0xff}, ${v0.col[0] >> 16 & 0xff}, ${(v0.col[0] >> 24 & 0xff) / 0xff})`; - ctx.fill(); - } - else { - // no vertex color - const image = draw_cmd.TextureId; - ctx.drawImage(image, minmin.uv[0] * image.width, minmin.uv[1] * image.height, (maxmax.uv[0] - minmin.uv[0]) * image.width, (maxmax.uv[1] - minmin.uv[1]) * image.height, minmin.pos[0], minmin.pos[1], maxmax.pos[0] - minmin.pos[0], maxmax.pos[1] - minmin.pos[1]); - // ctx.beginPath(); - // ctx.rect(minmin.pos[0], minmin.pos[1], maxmax.pos[0] - minmin.pos[0], maxmax.pos[1] - minmin.pos[1]); - // ctx.strokeStyle = "yellow"; - // ctx.stroke(); - } - i += 3; - } - else { - // one vertex color, no texture - ctx.beginPath(); - ctx.moveTo(v0.pos[0], v0.pos[1]); - ctx.lineTo(v1.pos[0], v1.pos[1]); - ctx.lineTo(v2.pos[0], v2.pos[1]); - ctx.closePath(); - ctx.fillStyle = `rgba(${v0.col[0] >> 0 & 0xff}, ${v0.col[0] >> 8 & 0xff}, ${v0.col[0] >> 16 & 0xff}, ${(v0.col[0] >> 24 & 0xff) / 0xff})`; - ctx.fill(); - } - } - ctx.restore(); - } - } - } - idx_buffer_offset += draw_cmd.ElemCount * ImGui.ImDrawIdxSize; - }); - }); - // Restore modified GL state - gl && (last_program !== null) && gl.useProgram(last_program); - gl && (last_texture !== null) && gl.bindTexture(gl.TEXTURE_2D, last_texture); - gl && (last_active_texture !== null) && gl.activeTexture(last_active_texture); - gl && gl.disableVertexAttribArray(g_AttribLocationPosition); - gl && gl.disableVertexAttribArray(g_AttribLocationUV); - gl && gl.disableVertexAttribArray(g_AttribLocationColor); - gl && (last_array_buffer !== null) && gl.bindBuffer(gl.ARRAY_BUFFER, last_array_buffer); - gl && (last_element_array_buffer !== null) && gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, last_element_array_buffer); - gl && (last_blend_equation_rgb !== null && last_blend_equation_alpha !== null) && gl.blendEquationSeparate(last_blend_equation_rgb, last_blend_equation_alpha); - gl && (last_blend_src_rgb !== null && last_blend_src_alpha !== null && last_blend_dst_rgb !== null && last_blend_dst_alpha !== null) && gl.blendFuncSeparate(last_blend_src_rgb, last_blend_src_alpha, last_blend_dst_rgb, last_blend_dst_alpha); - gl && (last_enable_blend ? gl.enable(gl.BLEND) : gl.disable(gl.BLEND)); - gl && (last_enable_cull_face ? gl.enable(gl.CULL_FACE) : gl.disable(gl.CULL_FACE)); - gl && (last_enable_depth_test ? gl.enable(gl.DEPTH_TEST) : gl.disable(gl.DEPTH_TEST)); - gl && (last_enable_scissor_test ? gl.enable(gl.SCISSOR_TEST) : gl.disable(gl.SCISSOR_TEST)); - // glPolygonMode(GL_FRONT_AND_BACK, (GLenum)last_polygon_mode[0]); - gl && (last_viewport !== null) && gl.viewport(last_viewport[0], last_viewport[1], last_viewport[2], last_viewport[3]); - gl && (last_scissor_box !== null) && gl.scissor(last_scissor_box[0], last_scissor_box[1], last_scissor_box[2], last_scissor_box[3]); - } - exports_1("RenderDrawData", RenderDrawData); function CreateFontsTexture() { const io = ImGui.GetIO(); // Backup GL state @@ -653,19 +188,6 @@ // Store our identifier io.Fonts.TexID = g_FontTexture || { foo: "bar" }; // console.log("font texture id", g_FontTexture); - if (ctx) { - const image_canvas = document.createElement("canvas"); - image_canvas.width = width; - image_canvas.height = height; - const image_ctx = image_canvas.getContext("2d"); - if (image_ctx === null) { - throw new Error(); - } - const image_data = image_ctx.getImageData(0, 0, width, height); - image_data.data.set(pixels); - image_ctx.putImageData(image_data, 0, 0); - io.Fonts.TexID = image_canvas; - } // Restore modified GL state gl && last_texture && gl.bindTexture(gl.TEXTURE_2D, last_texture); } @@ -743,19 +265,430 @@ setters: [ function (ImGui_1) { ImGui = ImGui_1; + }, + function (PIXI_1) { + PIXI = PIXI_1; + }, + function (U_1) { + U = U_1; } ], execute: function () { clipboard_text = ""; - ImGuiImplPIXI = class ImGuiImplPIXI { - constructor(app, owner) { - this.app = app; - this.owner = owner; + contexts = []; + contextIOs = []; + isFirstWindow = true; + ImGuiImplInternalRenderer = class ImGuiImplInternalRenderer extends PIXI.ObjectRenderer { + constructor(r) { + super(r); + } + render(owner) { + if (!(owner instanceof ImGuiWindow)) + return; + const window = owner; + const io = window.io; + const draw_data = ImGui.GetDrawData(); + if (draw_data === null) { + throw new Error(); + } + gl || console.log(draw_data); + // Avoid rendering when minimized, scale coordinates for retina displays (screen coordinates != framebuffer coordinates) + const fb_width = io.DisplaySize.x * io.DisplayFramebufferScale.x; + const fb_height = io.DisplaySize.y * io.DisplayFramebufferScale.y; + if (fb_width === 0 || fb_height === 0) { + return; + } + draw_data.ScaleClipRects(io.DisplayFramebufferScale); + // Backup GL state + const last_active_texture = gl && gl.getParameter(gl.ACTIVE_TEXTURE) || null; + const last_program = gl && gl.getParameter(gl.CURRENT_PROGRAM) || null; + const last_texture = gl && gl.getParameter(gl.TEXTURE_BINDING_2D) || null; + const last_array_buffer = gl && gl.getParameter(gl.ARRAY_BUFFER_BINDING) || null; + const last_element_array_buffer = gl && gl.getParameter(gl.ELEMENT_ARRAY_BUFFER_BINDING) || null; + // GLint last_polygon_mode[2]; glGetIntegerv(GL_POLYGON_MODE, last_polygon_mode); + const last_viewport = gl && gl.getParameter(gl.VIEWPORT) || null; + const last_scissor_box = gl && gl.getParameter(gl.SCISSOR_BOX) || null; + const last_blend_src_rgb = gl && gl.getParameter(gl.BLEND_SRC_RGB) || null; + const last_blend_dst_rgb = gl && gl.getParameter(gl.BLEND_DST_RGB) || null; + const last_blend_src_alpha = gl && gl.getParameter(gl.BLEND_SRC_ALPHA) || null; + const last_blend_dst_alpha = gl && gl.getParameter(gl.BLEND_DST_ALPHA) || null; + const last_blend_equation_rgb = gl && gl.getParameter(gl.BLEND_EQUATION_RGB) || null; + const last_blend_equation_alpha = gl && gl.getParameter(gl.BLEND_EQUATION_ALPHA) || null; + const last_enable_blend = gl && gl.getParameter(gl.BLEND) || null; + const last_enable_cull_face = gl && gl.getParameter(gl.CULL_FACE) || null; + const last_enable_depth_test = gl && gl.getParameter(gl.DEPTH_TEST) || null; + const last_enable_scissor_test = gl && gl.getParameter(gl.SCISSOR_TEST) || null; + // Setup render state: alpha-blending enabled, no face culling, no depth testing, scissor enabled, polygon fill + gl && gl.enable(gl.BLEND); + gl && gl.blendEquation(gl.FUNC_ADD); + gl && gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA); + gl && gl.disable(gl.CULL_FACE); + gl && gl.disable(gl.DEPTH_TEST); + gl && gl.enable(gl.SCISSOR_TEST); + // glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); + // Setup viewport, orthographic projection matrix + // Our visible imgui space lies from draw_data->DisplayPps (top left) to draw_data->DisplayPos+data_data->DisplaySize (bottom right). DisplayMin is typically (0,0) for single viewport apps. + gl && gl.viewport(0, 0, fb_width, fb_height); + const L = draw_data.DisplayPos.x; + const R = draw_data.DisplayPos.x + draw_data.DisplaySize.x; + const T = draw_data.DisplayPos.y; + const B = draw_data.DisplayPos.y + draw_data.DisplaySize.y; + const ortho_projection = new Float32Array([ + 2.0 / (R - L), 0.0, 0.0, 0.0, + 0.0, 2.0 / (T - B), 0.0, 0.0, + 0.0, 0.0, -1.0, 0.0, + (R + L) / (L - R), (T + B) / (B - T), 0.0, 1.0, + ]); + gl && gl.useProgram(g_ShaderHandle); + gl && gl.uniform1i(g_AttribLocationTex, 0); + gl && g_AttribLocationProjMtx && gl.uniformMatrix4fv(g_AttribLocationProjMtx, false, ortho_projection); + // Render command lists + gl && gl.bindBuffer(gl.ARRAY_BUFFER, g_VboHandle); + gl && gl.enableVertexAttribArray(g_AttribLocationPosition); + gl && gl.enableVertexAttribArray(g_AttribLocationUV); + gl && gl.enableVertexAttribArray(g_AttribLocationColor); + gl && gl.vertexAttribPointer(g_AttribLocationPosition, 2, gl.FLOAT, false, ImGui.ImDrawVertSize, ImGui.ImDrawVertPosOffset); + gl && gl.vertexAttribPointer(g_AttribLocationUV, 2, gl.FLOAT, false, ImGui.ImDrawVertSize, ImGui.ImDrawVertUVOffset); + gl && gl.vertexAttribPointer(g_AttribLocationColor, 4, gl.UNSIGNED_BYTE, true, ImGui.ImDrawVertSize, ImGui.ImDrawVertColOffset); + // Draw + const pos = draw_data.DisplayPos; + const idx_buffer_type = gl && ((ImGui.ImDrawIdxSize === 4) ? gl.UNSIGNED_INT : gl.UNSIGNED_SHORT) || 0; + draw_data.IterateDrawLists((draw_list) => { + gl || console.log(draw_list); + gl || console.log("VtxBuffer.length", draw_list.VtxBuffer.length); + gl || console.log("IdxBuffer.length", draw_list.IdxBuffer.length); + let idx_buffer_offset = 0; + gl && gl.bindBuffer(gl.ARRAY_BUFFER, g_VboHandle); + gl && gl.bufferData(gl.ARRAY_BUFFER, draw_list.VtxBuffer, gl.STREAM_DRAW); + gl && gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, g_ElementsHandle); + gl && gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, draw_list.IdxBuffer, gl.STREAM_DRAW); + draw_list.IterateDrawCmds((draw_cmd) => { + gl || console.log(draw_cmd); + gl || console.log("ElemCount", draw_cmd.ElemCount); + gl || console.log("ClipRect", draw_cmd.ClipRect.x, fb_height - draw_cmd.ClipRect.w, draw_cmd.ClipRect.z - draw_cmd.ClipRect.x, draw_cmd.ClipRect.w - draw_cmd.ClipRect.y); + gl || console.log("TextureId", draw_cmd.TextureId); + if (!gl) { + console.log("i: pos.x pos.y uv.x uv.y col"); + for (let i = 0; i < Math.min(3, draw_cmd.ElemCount); ++i) { + const view = new ImGui.ImDrawVert(draw_list.VtxBuffer.buffer, draw_list.VtxBuffer.byteOffset + i * ImGui.ImDrawVertSize); + console.log(`${i}: ${view.pos[0].toFixed(2)} ${view.pos[1].toFixed(2)} ${view.uv[0].toFixed(5)} ${view.uv[1].toFixed(5)} ${("00000000" + view.col[0].toString(16)).substr(-8)}`); + } + } + if (draw_cmd.UserCallback !== null) { + // User callback (registered via ImDrawList::AddCallback) + draw_cmd.UserCallback(draw_list, draw_cmd); + } + else { + const clip_rect = new ImGui.ImVec4(draw_cmd.ClipRect.x - pos.x, draw_cmd.ClipRect.y - pos.y, draw_cmd.ClipRect.z - pos.x, draw_cmd.ClipRect.w - pos.y); + if (clip_rect.x < fb_width && clip_rect.y < fb_height && clip_rect.z >= 0.0 && clip_rect.w >= 0.0) { + // Apply scissor/clipping rectangle + gl && gl.scissor(clip_rect.x, fb_height - clip_rect.w, clip_rect.z - clip_rect.x, clip_rect.w - clip_rect.y); + // Bind texture, Draw + gl && gl.activeTexture(gl.TEXTURE0); + gl && gl.bindTexture(gl.TEXTURE_2D, draw_cmd.TextureId); + gl && gl.drawElements(gl.TRIANGLES, draw_cmd.ElemCount, idx_buffer_type, idx_buffer_offset); + } + } + idx_buffer_offset += draw_cmd.ElemCount * ImGui.ImDrawIdxSize; + }); + }); + // Restore modified GL state + gl && (last_program !== null) && gl.useProgram(last_program); + gl && (last_texture !== null) && gl.bindTexture(gl.TEXTURE_2D, last_texture); + gl && (last_active_texture !== null) && gl.activeTexture(last_active_texture); + gl && gl.disableVertexAttribArray(g_AttribLocationPosition); + gl && gl.disableVertexAttribArray(g_AttribLocationUV); + gl && gl.disableVertexAttribArray(g_AttribLocationColor); + gl && (last_array_buffer !== null) && gl.bindBuffer(gl.ARRAY_BUFFER, last_array_buffer); + gl && (last_element_array_buffer !== null) && gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, last_element_array_buffer); + gl && (last_blend_equation_rgb !== null && last_blend_equation_alpha !== null) && gl.blendEquationSeparate(last_blend_equation_rgb, last_blend_equation_alpha); + gl && (last_blend_src_rgb !== null && last_blend_src_alpha !== null && last_blend_dst_rgb !== null && last_blend_dst_alpha !== null) && gl.blendFuncSeparate(last_blend_src_rgb, last_blend_src_alpha, last_blend_dst_rgb, last_blend_dst_alpha); + gl && (last_enable_blend ? gl.enable(gl.BLEND) : gl.disable(gl.BLEND)); + gl && (last_enable_cull_face ? gl.enable(gl.CULL_FACE) : gl.disable(gl.CULL_FACE)); + gl && (last_enable_depth_test ? gl.enable(gl.DEPTH_TEST) : gl.disable(gl.DEPTH_TEST)); + gl && (last_enable_scissor_test ? gl.enable(gl.SCISSOR_TEST) : gl.disable(gl.SCISSOR_TEST)); + // glPolygonMode(GL_FRONT_AND_BACK, (GLenum)last_polygon_mode[0]); + gl && (last_viewport !== null) && gl.viewport(last_viewport[0], last_viewport[1], last_viewport[2], last_viewport[3]); + gl && (last_scissor_box !== null) && gl.scissor(last_scissor_box[0], last_scissor_box[1], last_scissor_box[2], last_scissor_box[3]); } }; - exports_1("ImGuiImplPIXI", ImGuiImplPIXI); + gl = null; + app = null; + ImGuiWindow = class ImGuiWindow extends PIXI.Container { + constructor(sizeX, sizeY, update) { + super(); + this.baseTex = new PIXI.BaseRenderTexture({ scaleMode: PIXI.SCALE_MODES.LINEAR, resolution: 1 }); + this.tex = new PIXI.RenderTexture(this.baseTex); + this.surface = new PIXI.Sprite(this.tex); + this.imgui = new PIXI.Sprite(); + if (isFirstWindow) { + this.ctx = contexts[0]; + this.io = contextIOs[0]; + } + else { + this.ctx = ImGui.CreateContext(); + ImGui.SetCurrentContext(this.ctx); + this.io = ImGui.GetIO(); + } + if (!isFirstWindow) { + this.io.Fonts.TexID = contextIOs[0].Fonts.TexID; + } + isFirstWindow = false; + if (typeof (navigator) !== "undefined") { + this.io.ConfigMacOSXBehaviors = navigator.platform.match(/Mac/) !== null; + } + this.io.SetClipboardTextFn = (user_data, text) => { + clipboard_text = text; + // console.log(`set clipboard_text: "${clipboard_text}"`); + if (typeof navigator !== "undefined" && typeof navigator.clipboard !== "undefined") { + // console.log(`clipboard.writeText: "${clipboard_text}"`); + navigator.clipboard.writeText(clipboard_text).then(() => { + // console.log(`clipboard.writeText: "${clipboard_text}" done.`); + }); + } + }; + this.io.GetClipboardTextFn = (user_data) => { + // if (typeof navigator !== "undefined" && typeof (navigator as any).clipboard !== "undefined") { + // console.log(`clipboard.readText: "${clipboard_text}"`); + // (navigator as any).clipboard.readText().then((text: string): void => { + // clipboard_text = text; + // console.log(`clipboard.readText: "${clipboard_text}" done.`); + // }); + // } + // console.log(`get clipboard_text: "${clipboard_text}"`); + return clipboard_text; + }; + this.io.ClipboardUserData = null; + // Setup back-end capabilities flags + this.io.BackendFlags |= ImGui.BackendFlags.HasMouseCursors; // We can honor GetMouseCursor() values (optional) + // Keyboard mapping. ImGui will use those indices to peek into the io.KeyDown[] array. + this.io.KeyMap[ImGui.Key.Tab] = 9; + this.io.KeyMap[ImGui.Key.LeftArrow] = 37; + this.io.KeyMap[ImGui.Key.RightArrow] = 39; + this.io.KeyMap[ImGui.Key.UpArrow] = 38; + this.io.KeyMap[ImGui.Key.DownArrow] = 40; + this.io.KeyMap[ImGui.Key.PageUp] = 33; + this.io.KeyMap[ImGui.Key.PageDown] = 34; + this.io.KeyMap[ImGui.Key.Home] = 36; + this.io.KeyMap[ImGui.Key.End] = 35; + this.io.KeyMap[ImGui.Key.Insert] = 45; + this.io.KeyMap[ImGui.Key.Delete] = 46; + this.io.KeyMap[ImGui.Key.Backspace] = 8; + this.io.KeyMap[ImGui.Key.Space] = 32; + this.io.KeyMap[ImGui.Key.Enter] = 13; + this.io.KeyMap[ImGui.Key.Escape] = 27; + this.io.KeyMap[ImGui.Key.A] = 65; + this.io.KeyMap[ImGui.Key.C] = 67; + this.io.KeyMap[ImGui.Key.V] = 86; + this.io.KeyMap[ImGui.Key.X] = 88; + this.io.KeyMap[ImGui.Key.Y] = 89; + this.io.KeyMap[ImGui.Key.Z] = 90; + contextIOs.push(this.io); + this.update = update; + this.resize(sizeX, sizeY); + this.imgui.pluginName = 'imgui_renderer'; + this.addChild(this.surface); + this.surface.addListener("mousedown", this.mouseDown.bind(this)); + this.surface.addListener("mouseup", this.mouseUp.bind(this)); + app.ticker.add(this.updateInternal.bind(this)); + } + getSizeX() { return this.sizeX; } + getSizeY() { return this.sizeY; } + mouseDown(e) { + this.io.MouseDown[mouse_button_map[0]] = true; + } + mouseUp(e) { + this.io.MouseDown[mouse_button_map[0]] = false; + } + resize(sizeX, sizeY) { + this.sizeX = sizeX; + this.sizeY = sizeY; + this.baseTex.resize(sizeX, sizeY); + this.tex.frame = new PIXI.Rectangle(0, 0, this.baseTex.width, this.baseTex.height); + this.surface.hitArea = this.tex.frame; + } + updateInternal(deltaTime) { + const dt = deltaTime * 1 / (1000 * PIXI.settings.TARGET_FPMS); + ImGui.SetCurrentContext(this.ctx); + if (this.io.WantSaveIniSettings) { + this.io.WantSaveIniSettings = false; + if (typeof (window) !== "undefined") { + window.localStorage.setItem("imgui.ini", ImGui.SaveIniSettingsToMemory()); + } + } + this.io.DisplaySize.x = this.sizeX; + this.io.DisplaySize.y = this.sizeY; + this.io.DisplayFramebufferScale.x = 1; + this.io.DisplayFramebufferScale.y = 1; + this.io.DeltaTime = dt; + const localPos = this.getGlobalPosition(new PIXI.Point()); + this.io.MousePos.x = localPos.x; + this.io.MousePos.y = localPos.y; + if (this.io.WantSetMousePos) { + console.log("TODO: MousePos", this.io.MousePos.x, this.io.MousePos.y); + } + if (typeof (document) !== "undefined") { + if (this.io.MouseDrawCursor) { + document.body.style.cursor = "none"; + } + else { + switch (ImGui.GetMouseCursor()) { + case ImGui.MouseCursor.None: + document.body.style.cursor = "none"; + break; + default: + case ImGui.MouseCursor.Arrow: + document.body.style.cursor = "default"; + break; + case ImGui.MouseCursor.TextInput: + document.body.style.cursor = "text"; + break; // When hovering over InputText, etc. + case ImGui.MouseCursor.ResizeAll: + document.body.style.cursor = "move"; + break; // Unused + case ImGui.MouseCursor.ResizeNS: + document.body.style.cursor = "ns-resize"; + break; // When hovering over an horizontal border + case ImGui.MouseCursor.ResizeEW: + document.body.style.cursor = "ew-resize"; + break; // When hovering over a vertical border or a column + case ImGui.MouseCursor.ResizeNESW: + document.body.style.cursor = "nesw-resize"; + break; // When hovering over the bottom-left corner of a window + case ImGui.MouseCursor.ResizeNWSE: + document.body.style.cursor = "nwse-resize"; + break; // When hovering over the bottom-right corner of a window + case ImGui.MouseCursor.Hand: + document.body.style.cursor = "move"; + break; + } + } + } + // Gamepad navigation mapping [BETA] + for (let i = 0; i < this.io.NavInputs.length; ++i) { + this.io.NavInputs[i] = 0.0; + } + if (this.io.ConfigFlags & ImGui.ConfigFlags.NavEnableGamepad) { + // Update gamepad inputs + const gamepads = (typeof (navigator) !== "undefined" && typeof (navigator.getGamepads) === "function") ? navigator.getGamepads() : []; + for (let i = 0; i < gamepads.length; ++i) { + const gamepad = gamepads[i]; + if (!gamepad) { + continue; + } + const buttons_count = gamepad.buttons.length; + const axes_count = gamepad.axes.length; + const MAP_BUTTON = function (NAV_NO, BUTTON_NO) { + if (!gamepad) { + return; + } + if (buttons_count > BUTTON_NO && gamepad.buttons[BUTTON_NO].pressed) + this.io.NavInputs[NAV_NO] = 1.0; + }; + const MAP_ANALOG = function (NAV_NO, AXIS_NO, V0, V1) { + if (!gamepad) { + return; + } + let v = (axes_count > AXIS_NO) ? gamepad.axes[AXIS_NO] : V0; + v = (v - V0) / (V1 - V0); + if (v > 1.0) + v = 1.0; + if (this.io.NavInputs[NAV_NO] < v) + this.io.NavInputs[NAV_NO] = v; + }; + // TODO: map input based on vendor and product id + // https://developer.mozilla.org/en-US/docs/Web/API/Gamepad/id + const match = gamepad.id.match(/^([0-9a-f]{4})-([0-9a-f]{4})-.*$/); + const match_chrome = gamepad.id.match(/^.*\(.*Vendor: ([0-9a-f]{4}) Product: ([0-9a-f]{4})\).*$/); + const vendor = (match && match[1]) || (match_chrome && match_chrome[1]) || "0000"; + const product = (match && match[2]) || (match_chrome && match_chrome[2]) || "0000"; + switch (vendor + product) { + case "046dc216": // Logitech Logitech Dual Action (Vendor: 046d Product: c216) + MAP_BUTTON(ImGui.NavInput.Activate, 1); // Cross / A + MAP_BUTTON(ImGui.NavInput.Cancel, 2); // Circle / B + MAP_BUTTON(ImGui.NavInput.Menu, 0); // Square / X + MAP_BUTTON(ImGui.NavInput.Input, 3); // Triangle / Y + MAP_ANALOG(ImGui.NavInput.DpadLeft, 4, -0.3, -0.9); // D-Pad Left + MAP_ANALOG(ImGui.NavInput.DpadRight, 4, +0.3, +0.9); // D-Pad Right + MAP_ANALOG(ImGui.NavInput.DpadUp, 5, -0.3, -0.9); // D-Pad Up + MAP_ANALOG(ImGui.NavInput.DpadDown, 5, +0.3, +0.9); // D-Pad Down + MAP_BUTTON(ImGui.NavInput.FocusPrev, 4); // L1 / LB + MAP_BUTTON(ImGui.NavInput.FocusNext, 5); // R1 / RB + MAP_BUTTON(ImGui.NavInput.TweakSlow, 6); // L2 / LT + MAP_BUTTON(ImGui.NavInput.TweakFast, 7); // R2 / RT + MAP_ANALOG(ImGui.NavInput.LStickLeft, 0, -0.3, -0.9); + MAP_ANALOG(ImGui.NavInput.LStickRight, 0, +0.3, +0.9); + MAP_ANALOG(ImGui.NavInput.LStickUp, 1, -0.3, -0.9); + MAP_ANALOG(ImGui.NavInput.LStickDown, 1, +0.3, +0.9); + break; + case "046dc21d": // Logitech Gamepad F310 (STANDARD GAMEPAD Vendor: 046d Product: c21d) + MAP_BUTTON(ImGui.NavInput.Activate, 0); // Cross / A + MAP_BUTTON(ImGui.NavInput.Cancel, 1); // Circle / B + MAP_BUTTON(ImGui.NavInput.Menu, 2); // Square / X + MAP_BUTTON(ImGui.NavInput.Input, 3); // Triangle / Y + MAP_BUTTON(ImGui.NavInput.DpadLeft, 14); // D-Pad Left + MAP_BUTTON(ImGui.NavInput.DpadRight, 15); // D-Pad Right + MAP_BUTTON(ImGui.NavInput.DpadUp, 12); // D-Pad Up + MAP_BUTTON(ImGui.NavInput.DpadDown, 13); // D-Pad Down + MAP_BUTTON(ImGui.NavInput.FocusPrev, 4); // L1 / LB + MAP_BUTTON(ImGui.NavInput.FocusNext, 5); // R1 / RB + MAP_ANALOG(ImGui.NavInput.TweakSlow, 6, +0.3, +0.9); // L2 / LT + MAP_ANALOG(ImGui.NavInput.TweakFast, 7, +0.3, +0.9); // R2 / RT + MAP_ANALOG(ImGui.NavInput.LStickLeft, 0, -0.3, -0.9); + MAP_ANALOG(ImGui.NavInput.LStickRight, 0, +0.3, +0.9); + MAP_ANALOG(ImGui.NavInput.LStickUp, 1, -0.3, -0.9); + MAP_ANALOG(ImGui.NavInput.LStickDown, 1, +0.3, +0.9); + break; + case "2dc86001": // 8Bitdo SN30 Pro 8Bitdo SN30 Pro (Vendor: 2dc8 Product: 6001) + case "2dc86101": // 8Bitdo SN30 Pro (Vendor: 2dc8 Product: 6101) + MAP_BUTTON(ImGui.NavInput.Activate, 1); // Cross / A + MAP_BUTTON(ImGui.NavInput.Cancel, 0); // Circle / B + MAP_BUTTON(ImGui.NavInput.Menu, 4); // Square / X + MAP_BUTTON(ImGui.NavInput.Input, 3); // Triangle / Y + MAP_ANALOG(ImGui.NavInput.DpadLeft, 6, -0.3, -0.9); // D-Pad Left + MAP_ANALOG(ImGui.NavInput.DpadRight, 6, +0.3, +0.9); // D-Pad Right + MAP_ANALOG(ImGui.NavInput.DpadUp, 7, -0.3, -0.9); // D-Pad Up + MAP_ANALOG(ImGui.NavInput.DpadDown, 7, +0.3, +0.9); // D-Pad Down + MAP_BUTTON(ImGui.NavInput.FocusPrev, 6); // L1 / LB + MAP_BUTTON(ImGui.NavInput.FocusNext, 7); // R1 / RB + MAP_BUTTON(ImGui.NavInput.TweakSlow, 8); // L2 / LT + MAP_BUTTON(ImGui.NavInput.TweakFast, 9); // R2 / RT + MAP_ANALOG(ImGui.NavInput.LStickLeft, 0, -0.3, -0.9); + MAP_ANALOG(ImGui.NavInput.LStickRight, 0, +0.3, +0.9); + MAP_ANALOG(ImGui.NavInput.LStickUp, 1, -0.3, -0.9); + MAP_ANALOG(ImGui.NavInput.LStickDown, 1, +0.3, +0.9); + break; + default: // standard gamepad: https://w3c.github.io/gamepad/#remapping + MAP_BUTTON(ImGui.NavInput.Activate, 0); // Cross / A + MAP_BUTTON(ImGui.NavInput.Cancel, 1); // Circle / B + MAP_BUTTON(ImGui.NavInput.Menu, 2); // Square / X + MAP_BUTTON(ImGui.NavInput.Input, 3); // Triangle / Y + MAP_BUTTON(ImGui.NavInput.DpadLeft, 14); // D-Pad Left + MAP_BUTTON(ImGui.NavInput.DpadRight, 15); // D-Pad Right + MAP_BUTTON(ImGui.NavInput.DpadUp, 12); // D-Pad Up + MAP_BUTTON(ImGui.NavInput.DpadDown, 13); // D-Pad Down + MAP_BUTTON(ImGui.NavInput.FocusPrev, 4); // L1 / LB + MAP_BUTTON(ImGui.NavInput.FocusNext, 5); // R1 / RB + MAP_BUTTON(ImGui.NavInput.TweakSlow, 6); // L2 / LT + MAP_BUTTON(ImGui.NavInput.TweakFast, 7); // R2 / RT + MAP_ANALOG(ImGui.NavInput.LStickLeft, 0, -0.3, -0.9); + MAP_ANALOG(ImGui.NavInput.LStickRight, 0, +0.3, +0.9); + MAP_ANALOG(ImGui.NavInput.LStickUp, 1, -0.3, -0.9); + MAP_ANALOG(ImGui.NavInput.LStickDown, 1, +0.3, +0.9); + break; + } + } + } + ImGui.NewFrame(); + this.update(dt); + ImGui.EndFrame(); + ImGui.Render(); + app.renderer.render(this.imgui, this.tex); + } + }; + exports_1("ImGuiWindow", ImGuiWindow); canvas = null; - exports_1("gl", gl = null); + //export let gl: WebGL2RenderingContext | null = null; g_ShaderHandle = null; g_VertHandle = null; g_FragHandle = null; @@ -767,7 +700,6 @@ g_VboHandle = null; g_ElementsHandle = null; g_FontTexture = null; - exports_1("ctx", ctx = null); prev_time = 0; // MouseEvent.button // A number representing a given button: diff --git a/src/imgui_impl.js b/src/imgui_impl.js index 3fdd928..a611a08 100644 --- a/src/imgui_impl.js +++ b/src/imgui_impl.js @@ -1,6 +1,6 @@ -System.register(["imgui-js"], function (exports_1, context_1) { +System.register(["imgui-js", "pixi.js", "./utils"], function (exports_1, context_1) { "use strict"; - var ImGui, clipboard_text, ImGuiImplPIXI, canvas, gl, g_ShaderHandle, g_VertHandle, g_FragHandle, g_AttribLocationTex, g_AttribLocationProjMtx, g_AttribLocationPosition, g_AttribLocationUV, g_AttribLocationColor, g_VboHandle, g_ElementsHandle, g_FontTexture, ctx, prev_time, mouse_button_map; + var ImGui, PIXI, U, clipboard_text, contexts, contextIOs, isFirstWindow, ImGuiImplInternalRenderer, gl, app, ImGuiWindow, canvas, g_ShaderHandle, g_VertHandle, g_FragHandle, g_AttribLocationTex, g_AttribLocationProjMtx, g_AttribLocationPosition, g_AttribLocationUV, g_AttribLocationColor, g_VboHandle, g_ElementsHandle, g_FontTexture, prev_time, mouse_button_map; var __moduleName = context_1 && context_1.id; function document_on_copy(event) { if (event.clipboardData) { @@ -30,193 +30,118 @@ console.log("Gamepad disconnected at index %d: %s.", event.gamepad.index, event.gamepad.id); } function canvas_on_blur(event) { - const io = ImGui.GetIO(); - io.KeyCtrl = false; - io.KeyShift = false; - io.KeyAlt = false; - io.KeySuper = false; - for (let i = 0; i < io.KeysDown.length; ++i) { - io.KeysDown[i] = false; - } - for (let i = 0; i < io.MouseDown.length; ++i) { - io.MouseDown[i] = false; + for (var io of contextIOs) { + io.KeyCtrl = false; + io.KeyShift = false; + io.KeyAlt = false; + io.KeySuper = false; + for (let i = 0; i < io.KeysDown.length; ++i) { + io.KeysDown[i] = false; + } + for (let i = 0; i < io.MouseDown.length; ++i) { + io.MouseDown[i] = false; + } } } function canvas_on_keydown(event) { // console.log(event.type, event.key, event.keyCode); - const io = ImGui.GetIO(); - io.KeyCtrl = event.ctrlKey; - io.KeyShift = event.shiftKey; - io.KeyAlt = event.altKey; - io.KeySuper = event.metaKey; - ImGui.IM_ASSERT(event.keyCode >= 0 && event.keyCode < ImGui.IM_ARRAYSIZE(io.KeysDown)); - io.KeysDown[event.keyCode] = true; - // forward to the keypress event - if ( /*io.WantCaptureKeyboard ||*/event.key === "Tab") { - event.preventDefault(); + for (var io of contextIOs) { + io.KeyCtrl = event.ctrlKey; + io.KeyShift = event.shiftKey; + io.KeyAlt = event.altKey; + io.KeySuper = event.metaKey; + ImGui.IM_ASSERT(event.keyCode >= 0 && event.keyCode < ImGui.IM_ARRAYSIZE(io.KeysDown)); + io.KeysDown[event.keyCode] = true; + // forward to the keypress event + if ( /*io.WantCaptureKeyboard ||*/event.key === "Tab") { + event.preventDefault(); + } } } function canvas_on_keyup(event) { // console.log(event.type, event.key, event.keyCode); - const io = ImGui.GetIO(); - io.KeyCtrl = event.ctrlKey; - io.KeyShift = event.shiftKey; - io.KeyAlt = event.altKey; - io.KeySuper = event.metaKey; - ImGui.IM_ASSERT(event.keyCode >= 0 && event.keyCode < ImGui.IM_ARRAYSIZE(io.KeysDown)); - io.KeysDown[event.keyCode] = false; - if (io.WantCaptureKeyboard) { - event.preventDefault(); + for (var io of contextIOs) { + io.KeyCtrl = event.ctrlKey; + io.KeyShift = event.shiftKey; + io.KeyAlt = event.altKey; + io.KeySuper = event.metaKey; + ImGui.IM_ASSERT(event.keyCode >= 0 && event.keyCode < ImGui.IM_ARRAYSIZE(io.KeysDown)); + io.KeysDown[event.keyCode] = false; + if (io.WantCaptureKeyboard) { + event.preventDefault(); + } } } function canvas_on_keypress(event) { // console.log(event.type, event.key, event.keyCode); - const io = ImGui.GetIO(); - io.AddInputCharacter(event.charCode); - if (io.WantCaptureKeyboard) { - event.preventDefault(); + for (var io of contextIOs) { + io.AddInputCharacter(event.charCode); + if (io.WantCaptureKeyboard) { + event.preventDefault(); + } } } - function canvas_on_pointermove(event) { - const io = ImGui.GetIO(); - const devicePixelRatio = window.devicePixelRatio || 1; - io.MousePos.x = event.offsetX * devicePixelRatio; - io.MousePos.y = event.offsetY * devicePixelRatio; - if (io.WantCaptureMouse) { - event.preventDefault(); - } - } - function canvas_on_pointerdown(event) { - const io = ImGui.GetIO(); - const devicePixelRatio = window.devicePixelRatio || 1; - io.MousePos.x = event.offsetX * devicePixelRatio; - io.MousePos.y = event.offsetY * devicePixelRatio; - io.MouseDown[mouse_button_map[event.button]] = true; - // if (io.WantCaptureMouse) { - // event.preventDefault(); - // } - } function canvas_on_contextmenu(event) { - const io = ImGui.GetIO(); - if (io.WantCaptureMouse) { - event.preventDefault(); - } - } - function canvas_on_pointerup(event) { - const io = ImGui.GetIO(); - io.MouseDown[mouse_button_map[event.button]] = false; - if (io.WantCaptureMouse) { - event.preventDefault(); + for (var io of contextIOs) { + if (io.WantCaptureMouse) { + event.preventDefault(); + } } } function canvas_on_wheel(event) { - const io = ImGui.GetIO(); - let scale = 1.0; - switch (event.deltaMode) { - case event.DOM_DELTA_PIXEL: - scale = 0.01; - break; - case event.DOM_DELTA_LINE: - scale = 0.2; - break; - case event.DOM_DELTA_PAGE: - scale = 1.0; - break; - } - io.MouseWheelH = event.deltaX * scale; - io.MouseWheel = -event.deltaY * scale; // Mouse wheel: 1 unit scrolls about 5 lines text. - if (io.WantCaptureMouse) { - event.preventDefault(); + for (var io of contextIOs) { + let scale = 1.0; + switch (event.deltaMode) { + case event.DOM_DELTA_PIXEL: + scale = 0.01; + break; + case event.DOM_DELTA_LINE: + scale = 0.2; + break; + case event.DOM_DELTA_PAGE: + scale = 1.0; + break; + } + io.MouseWheelH = event.deltaX * scale; + io.MouseWheel = -event.deltaY * scale; // Mouse wheel: 1 unit scrolls about 5 lines text. + if (io.WantCaptureMouse) { + event.preventDefault(); + } } } - function Init(value) { - const io = ImGui.GetIO(); + function Init(_app) { + // Setup Dear ImGui binding + ImGui.IMGUI_CHECKVERSION(); + ImGui.CreateContext(); + ImGui.StyleColorsLight(); + contexts.push(ImGui.GetCurrentContext()); + contextIOs.push(ImGui.GetIO()); + contextIOs[0].Fonts.AddFontDefault(); + PIXI.Renderer.registerPlugin("imgui_renderer", U.fromConstructor(ImGuiImplInternalRenderer)); if (typeof (window) !== "undefined") { ImGui.LoadIniSettingsFromMemory(window.localStorage.getItem("imgui.ini") || ""); } - if (typeof (navigator) !== "undefined") { - io.ConfigMacOSXBehaviors = navigator.platform.match(/Mac/) !== null; - } if (typeof (document) !== "undefined") { document.body.addEventListener("copy", document_on_copy); document.body.addEventListener("cut", document_on_cut); document.body.addEventListener("paste", document_on_paste); } - io.SetClipboardTextFn = (user_data, text) => { - clipboard_text = text; - // console.log(`set clipboard_text: "${clipboard_text}"`); - if (typeof navigator !== "undefined" && typeof navigator.clipboard !== "undefined") { - // console.log(`clipboard.writeText: "${clipboard_text}"`); - navigator.clipboard.writeText(clipboard_text).then(() => { - // console.log(`clipboard.writeText: "${clipboard_text}" done.`); - }); - } - }; - io.GetClipboardTextFn = (user_data) => { - // if (typeof navigator !== "undefined" && typeof (navigator as any).clipboard !== "undefined") { - // console.log(`clipboard.readText: "${clipboard_text}"`); - // (navigator as any).clipboard.readText().then((text: string): void => { - // clipboard_text = text; - // console.log(`clipboard.readText: "${clipboard_text}" done.`); - // }); - // } - // console.log(`get clipboard_text: "${clipboard_text}"`); - return clipboard_text; - }; - io.ClipboardUserData = null; if (typeof (window) !== "undefined") { window.addEventListener("gamepadconnected", window_on_gamepadconnected); window.addEventListener("gamepaddisconnected", window_on_gamepaddisconnected); } - if (typeof (window) !== "undefined") { - if (value instanceof (HTMLCanvasElement)) { - value = value.getContext("webgl2", { alpha: false }) || value.getContext("2d"); - } - if (value instanceof (WebGL2RenderingContext)) { - canvas = value.canvas; - exports_1("gl", gl = value); - } - if (value instanceof (CanvasRenderingContext2D)) { - canvas = value.canvas; - exports_1("ctx", ctx = value); - } - } + app = _app; + gl = app.renderer.gl; + canvas = app.view; if (canvas !== null) { canvas.style.touchAction = "none"; // Disable browser handling of all panning and zooming gestures. canvas.addEventListener("blur", canvas_on_blur); canvas.addEventListener("keydown", canvas_on_keydown); canvas.addEventListener("keyup", canvas_on_keyup); canvas.addEventListener("keypress", canvas_on_keypress); - canvas.addEventListener("pointermove", canvas_on_pointermove); - canvas.addEventListener("pointerdown", canvas_on_pointerdown); canvas.addEventListener("contextmenu", canvas_on_contextmenu); - canvas.addEventListener("pointerup", canvas_on_pointerup); canvas.addEventListener("wheel", canvas_on_wheel); } - // Setup back-end capabilities flags - io.BackendFlags |= ImGui.BackendFlags.HasMouseCursors; // We can honor GetMouseCursor() values (optional) - // Keyboard mapping. ImGui will use those indices to peek into the io.KeyDown[] array. - io.KeyMap[ImGui.Key.Tab] = 9; - io.KeyMap[ImGui.Key.LeftArrow] = 37; - io.KeyMap[ImGui.Key.RightArrow] = 39; - io.KeyMap[ImGui.Key.UpArrow] = 38; - io.KeyMap[ImGui.Key.DownArrow] = 40; - io.KeyMap[ImGui.Key.PageUp] = 33; - io.KeyMap[ImGui.Key.PageDown] = 34; - io.KeyMap[ImGui.Key.Home] = 36; - io.KeyMap[ImGui.Key.End] = 35; - io.KeyMap[ImGui.Key.Insert] = 45; - io.KeyMap[ImGui.Key.Delete] = 46; - io.KeyMap[ImGui.Key.Backspace] = 8; - io.KeyMap[ImGui.Key.Space] = 32; - io.KeyMap[ImGui.Key.Enter] = 13; - io.KeyMap[ImGui.Key.Escape] = 27; - io.KeyMap[ImGui.Key.A] = 65; - io.KeyMap[ImGui.Key.C] = 67; - io.KeyMap[ImGui.Key.V] = 86; - io.KeyMap[ImGui.Key.X] = 88; - io.KeyMap[ImGui.Key.Y] = 89; - io.KeyMap[ImGui.Key.Z] = 90; CreateDeviceObjects(); } exports_1("Init", Init); @@ -227,14 +152,10 @@ canvas.removeEventListener("keydown", canvas_on_keydown); canvas.removeEventListener("keyup", canvas_on_keyup); canvas.removeEventListener("keypress", canvas_on_keypress); - canvas.removeEventListener("pointermove", canvas_on_pointermove); - canvas.removeEventListener("pointerdown", canvas_on_pointerdown); canvas.removeEventListener("contextmenu", canvas_on_contextmenu); - canvas.removeEventListener("pointerup", canvas_on_pointerup); canvas.removeEventListener("wheel", canvas_on_wheel); } - exports_1("gl", gl = null); - exports_1("ctx", ctx = null); + app = null; canvas = null; if (typeof (window) !== "undefined") { window.removeEventListener("gamepadconnected", window_on_gamepadconnected); @@ -247,392 +168,6 @@ } } exports_1("Shutdown", Shutdown); - function NewFrame(time) { - const io = ImGui.GetIO(); - if (io.WantSaveIniSettings) { - io.WantSaveIniSettings = false; - if (typeof (window) !== "undefined") { - window.localStorage.setItem("imgui.ini", ImGui.SaveIniSettingsToMemory()); - } - } - const w = canvas && canvas.width || 640; - const h = canvas && canvas.height || 480; - const display_w = gl && gl.drawingBufferWidth || w; - const display_h = gl && gl.drawingBufferHeight || h; - io.DisplaySize.x = w; - io.DisplaySize.y = h; - io.DisplayFramebufferScale.x = w > 0 ? (display_w / w) : 0; - io.DisplayFramebufferScale.y = h > 0 ? (display_h / h) : 0; - const dt = time - prev_time; - prev_time = time; - io.DeltaTime = dt / 1000; - if (io.WantSetMousePos) { - console.log("TODO: MousePos", io.MousePos.x, io.MousePos.y); - } - if (typeof (document) !== "undefined") { - if (io.MouseDrawCursor) { - document.body.style.cursor = "none"; - } - else { - switch (ImGui.GetMouseCursor()) { - case ImGui.MouseCursor.None: - document.body.style.cursor = "none"; - break; - default: - case ImGui.MouseCursor.Arrow: - document.body.style.cursor = "default"; - break; - case ImGui.MouseCursor.TextInput: - document.body.style.cursor = "text"; - break; // When hovering over InputText, etc. - case ImGui.MouseCursor.ResizeAll: - document.body.style.cursor = "move"; - break; // Unused - case ImGui.MouseCursor.ResizeNS: - document.body.style.cursor = "ns-resize"; - break; // When hovering over an horizontal border - case ImGui.MouseCursor.ResizeEW: - document.body.style.cursor = "ew-resize"; - break; // When hovering over a vertical border or a column - case ImGui.MouseCursor.ResizeNESW: - document.body.style.cursor = "nesw-resize"; - break; // When hovering over the bottom-left corner of a window - case ImGui.MouseCursor.ResizeNWSE: - document.body.style.cursor = "nwse-resize"; - break; // When hovering over the bottom-right corner of a window - case ImGui.MouseCursor.Hand: - document.body.style.cursor = "move"; - break; - } - } - } - // Gamepad navigation mapping [BETA] - for (let i = 0; i < io.NavInputs.length; ++i) { - io.NavInputs[i] = 0.0; - } - if (io.ConfigFlags & ImGui.ConfigFlags.NavEnableGamepad) { - // Update gamepad inputs - const gamepads = (typeof (navigator) !== "undefined" && typeof (navigator.getGamepads) === "function") ? navigator.getGamepads() : []; - for (let i = 0; i < gamepads.length; ++i) { - const gamepad = gamepads[i]; - if (!gamepad) { - continue; - } - const buttons_count = gamepad.buttons.length; - const axes_count = gamepad.axes.length; - const MAP_BUTTON = function (NAV_NO, BUTTON_NO) { - if (!gamepad) { - return; - } - if (buttons_count > BUTTON_NO && gamepad.buttons[BUTTON_NO].pressed) - io.NavInputs[NAV_NO] = 1.0; - }; - const MAP_ANALOG = function (NAV_NO, AXIS_NO, V0, V1) { - if (!gamepad) { - return; - } - let v = (axes_count > AXIS_NO) ? gamepad.axes[AXIS_NO] : V0; - v = (v - V0) / (V1 - V0); - if (v > 1.0) - v = 1.0; - if (io.NavInputs[NAV_NO] < v) - io.NavInputs[NAV_NO] = v; - }; - // TODO: map input based on vendor and product id - // https://developer.mozilla.org/en-US/docs/Web/API/Gamepad/id - const match = gamepad.id.match(/^([0-9a-f]{4})-([0-9a-f]{4})-.*$/); - const match_chrome = gamepad.id.match(/^.*\(.*Vendor: ([0-9a-f]{4}) Product: ([0-9a-f]{4})\).*$/); - const vendor = (match && match[1]) || (match_chrome && match_chrome[1]) || "0000"; - const product = (match && match[2]) || (match_chrome && match_chrome[2]) || "0000"; - switch (vendor + product) { - case "046dc216": // Logitech Logitech Dual Action (Vendor: 046d Product: c216) - MAP_BUTTON(ImGui.NavInput.Activate, 1); // Cross / A - MAP_BUTTON(ImGui.NavInput.Cancel, 2); // Circle / B - MAP_BUTTON(ImGui.NavInput.Menu, 0); // Square / X - MAP_BUTTON(ImGui.NavInput.Input, 3); // Triangle / Y - MAP_ANALOG(ImGui.NavInput.DpadLeft, 4, -0.3, -0.9); // D-Pad Left - MAP_ANALOG(ImGui.NavInput.DpadRight, 4, +0.3, +0.9); // D-Pad Right - MAP_ANALOG(ImGui.NavInput.DpadUp, 5, -0.3, -0.9); // D-Pad Up - MAP_ANALOG(ImGui.NavInput.DpadDown, 5, +0.3, +0.9); // D-Pad Down - MAP_BUTTON(ImGui.NavInput.FocusPrev, 4); // L1 / LB - MAP_BUTTON(ImGui.NavInput.FocusNext, 5); // R1 / RB - MAP_BUTTON(ImGui.NavInput.TweakSlow, 6); // L2 / LT - MAP_BUTTON(ImGui.NavInput.TweakFast, 7); // R2 / RT - MAP_ANALOG(ImGui.NavInput.LStickLeft, 0, -0.3, -0.9); - MAP_ANALOG(ImGui.NavInput.LStickRight, 0, +0.3, +0.9); - MAP_ANALOG(ImGui.NavInput.LStickUp, 1, -0.3, -0.9); - MAP_ANALOG(ImGui.NavInput.LStickDown, 1, +0.3, +0.9); - break; - case "046dc21d": // Logitech Gamepad F310 (STANDARD GAMEPAD Vendor: 046d Product: c21d) - MAP_BUTTON(ImGui.NavInput.Activate, 0); // Cross / A - MAP_BUTTON(ImGui.NavInput.Cancel, 1); // Circle / B - MAP_BUTTON(ImGui.NavInput.Menu, 2); // Square / X - MAP_BUTTON(ImGui.NavInput.Input, 3); // Triangle / Y - MAP_BUTTON(ImGui.NavInput.DpadLeft, 14); // D-Pad Left - MAP_BUTTON(ImGui.NavInput.DpadRight, 15); // D-Pad Right - MAP_BUTTON(ImGui.NavInput.DpadUp, 12); // D-Pad Up - MAP_BUTTON(ImGui.NavInput.DpadDown, 13); // D-Pad Down - MAP_BUTTON(ImGui.NavInput.FocusPrev, 4); // L1 / LB - MAP_BUTTON(ImGui.NavInput.FocusNext, 5); // R1 / RB - MAP_ANALOG(ImGui.NavInput.TweakSlow, 6, +0.3, +0.9); // L2 / LT - MAP_ANALOG(ImGui.NavInput.TweakFast, 7, +0.3, +0.9); // R2 / RT - MAP_ANALOG(ImGui.NavInput.LStickLeft, 0, -0.3, -0.9); - MAP_ANALOG(ImGui.NavInput.LStickRight, 0, +0.3, +0.9); - MAP_ANALOG(ImGui.NavInput.LStickUp, 1, -0.3, -0.9); - MAP_ANALOG(ImGui.NavInput.LStickDown, 1, +0.3, +0.9); - break; - case "2dc86001": // 8Bitdo SN30 Pro 8Bitdo SN30 Pro (Vendor: 2dc8 Product: 6001) - case "2dc86101": // 8Bitdo SN30 Pro (Vendor: 2dc8 Product: 6101) - MAP_BUTTON(ImGui.NavInput.Activate, 1); // Cross / A - MAP_BUTTON(ImGui.NavInput.Cancel, 0); // Circle / B - MAP_BUTTON(ImGui.NavInput.Menu, 4); // Square / X - MAP_BUTTON(ImGui.NavInput.Input, 3); // Triangle / Y - MAP_ANALOG(ImGui.NavInput.DpadLeft, 6, -0.3, -0.9); // D-Pad Left - MAP_ANALOG(ImGui.NavInput.DpadRight, 6, +0.3, +0.9); // D-Pad Right - MAP_ANALOG(ImGui.NavInput.DpadUp, 7, -0.3, -0.9); // D-Pad Up - MAP_ANALOG(ImGui.NavInput.DpadDown, 7, +0.3, +0.9); // D-Pad Down - MAP_BUTTON(ImGui.NavInput.FocusPrev, 6); // L1 / LB - MAP_BUTTON(ImGui.NavInput.FocusNext, 7); // R1 / RB - MAP_BUTTON(ImGui.NavInput.TweakSlow, 8); // L2 / LT - MAP_BUTTON(ImGui.NavInput.TweakFast, 9); // R2 / RT - MAP_ANALOG(ImGui.NavInput.LStickLeft, 0, -0.3, -0.9); - MAP_ANALOG(ImGui.NavInput.LStickRight, 0, +0.3, +0.9); - MAP_ANALOG(ImGui.NavInput.LStickUp, 1, -0.3, -0.9); - MAP_ANALOG(ImGui.NavInput.LStickDown, 1, +0.3, +0.9); - break; - default: // standard gamepad: https://w3c.github.io/gamepad/#remapping - MAP_BUTTON(ImGui.NavInput.Activate, 0); // Cross / A - MAP_BUTTON(ImGui.NavInput.Cancel, 1); // Circle / B - MAP_BUTTON(ImGui.NavInput.Menu, 2); // Square / X - MAP_BUTTON(ImGui.NavInput.Input, 3); // Triangle / Y - MAP_BUTTON(ImGui.NavInput.DpadLeft, 14); // D-Pad Left - MAP_BUTTON(ImGui.NavInput.DpadRight, 15); // D-Pad Right - MAP_BUTTON(ImGui.NavInput.DpadUp, 12); // D-Pad Up - MAP_BUTTON(ImGui.NavInput.DpadDown, 13); // D-Pad Down - MAP_BUTTON(ImGui.NavInput.FocusPrev, 4); // L1 / LB - MAP_BUTTON(ImGui.NavInput.FocusNext, 5); // R1 / RB - MAP_BUTTON(ImGui.NavInput.TweakSlow, 6); // L2 / LT - MAP_BUTTON(ImGui.NavInput.TweakFast, 7); // R2 / RT - MAP_ANALOG(ImGui.NavInput.LStickLeft, 0, -0.3, -0.9); - MAP_ANALOG(ImGui.NavInput.LStickRight, 0, +0.3, +0.9); - MAP_ANALOG(ImGui.NavInput.LStickUp, 1, -0.3, -0.9); - MAP_ANALOG(ImGui.NavInput.LStickDown, 1, +0.3, +0.9); - break; - } - } - } - } - exports_1("NewFrame", NewFrame); - function RenderDrawData(draw_data = ImGui.GetDrawData()) { - const io = ImGui.GetIO(); - if (draw_data === null) { - throw new Error(); - } - gl || ctx || console.log(draw_data); - // Avoid rendering when minimized, scale coordinates for retina displays (screen coordinates != framebuffer coordinates) - const fb_width = io.DisplaySize.x * io.DisplayFramebufferScale.x; - const fb_height = io.DisplaySize.y * io.DisplayFramebufferScale.y; - if (fb_width === 0 || fb_height === 0) { - return; - } - draw_data.ScaleClipRects(io.DisplayFramebufferScale); - // Backup GL state - const last_active_texture = gl && gl.getParameter(gl.ACTIVE_TEXTURE) || null; - const last_program = gl && gl.getParameter(gl.CURRENT_PROGRAM) || null; - const last_texture = gl && gl.getParameter(gl.TEXTURE_BINDING_2D) || null; - const last_array_buffer = gl && gl.getParameter(gl.ARRAY_BUFFER_BINDING) || null; - const last_element_array_buffer = gl && gl.getParameter(gl.ELEMENT_ARRAY_BUFFER_BINDING) || null; - // GLint last_polygon_mode[2]; glGetIntegerv(GL_POLYGON_MODE, last_polygon_mode); - const last_viewport = gl && gl.getParameter(gl.VIEWPORT) || null; - const last_scissor_box = gl && gl.getParameter(gl.SCISSOR_BOX) || null; - const last_blend_src_rgb = gl && gl.getParameter(gl.BLEND_SRC_RGB) || null; - const last_blend_dst_rgb = gl && gl.getParameter(gl.BLEND_DST_RGB) || null; - const last_blend_src_alpha = gl && gl.getParameter(gl.BLEND_SRC_ALPHA) || null; - const last_blend_dst_alpha = gl && gl.getParameter(gl.BLEND_DST_ALPHA) || null; - const last_blend_equation_rgb = gl && gl.getParameter(gl.BLEND_EQUATION_RGB) || null; - const last_blend_equation_alpha = gl && gl.getParameter(gl.BLEND_EQUATION_ALPHA) || null; - const last_enable_blend = gl && gl.getParameter(gl.BLEND) || null; - const last_enable_cull_face = gl && gl.getParameter(gl.CULL_FACE) || null; - const last_enable_depth_test = gl && gl.getParameter(gl.DEPTH_TEST) || null; - const last_enable_scissor_test = gl && gl.getParameter(gl.SCISSOR_TEST) || null; - // Setup render state: alpha-blending enabled, no face culling, no depth testing, scissor enabled, polygon fill - gl && gl.enable(gl.BLEND); - gl && gl.blendEquation(gl.FUNC_ADD); - gl && gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA); - gl && gl.disable(gl.CULL_FACE); - gl && gl.disable(gl.DEPTH_TEST); - gl && gl.enable(gl.SCISSOR_TEST); - // glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); - // Setup viewport, orthographic projection matrix - // Our visible imgui space lies from draw_data->DisplayPps (top left) to draw_data->DisplayPos+data_data->DisplaySize (bottom right). DisplayMin is typically (0,0) for single viewport apps. - gl && gl.viewport(0, 0, fb_width, fb_height); - const L = draw_data.DisplayPos.x; - const R = draw_data.DisplayPos.x + draw_data.DisplaySize.x; - const T = draw_data.DisplayPos.y; - const B = draw_data.DisplayPos.y + draw_data.DisplaySize.y; - const ortho_projection = new Float32Array([ - 2.0 / (R - L), 0.0, 0.0, 0.0, - 0.0, 2.0 / (T - B), 0.0, 0.0, - 0.0, 0.0, -1.0, 0.0, - (R + L) / (L - R), (T + B) / (B - T), 0.0, 1.0, - ]); - gl && gl.useProgram(g_ShaderHandle); - gl && gl.uniform1i(g_AttribLocationTex, 0); - gl && g_AttribLocationProjMtx && gl.uniformMatrix4fv(g_AttribLocationProjMtx, false, ortho_projection); - // Render command lists - gl && gl.bindBuffer(gl.ARRAY_BUFFER, g_VboHandle); - gl && gl.enableVertexAttribArray(g_AttribLocationPosition); - gl && gl.enableVertexAttribArray(g_AttribLocationUV); - gl && gl.enableVertexAttribArray(g_AttribLocationColor); - gl && gl.vertexAttribPointer(g_AttribLocationPosition, 2, gl.FLOAT, false, ImGui.ImDrawVertSize, ImGui.ImDrawVertPosOffset); - gl && gl.vertexAttribPointer(g_AttribLocationUV, 2, gl.FLOAT, false, ImGui.ImDrawVertSize, ImGui.ImDrawVertUVOffset); - gl && gl.vertexAttribPointer(g_AttribLocationColor, 4, gl.UNSIGNED_BYTE, true, ImGui.ImDrawVertSize, ImGui.ImDrawVertColOffset); - // Draw - const pos = draw_data.DisplayPos; - const idx_buffer_type = gl && ((ImGui.ImDrawIdxSize === 4) ? gl.UNSIGNED_INT : gl.UNSIGNED_SHORT) || 0; - draw_data.IterateDrawLists((draw_list) => { - gl || ctx || console.log(draw_list); - gl || ctx || console.log("VtxBuffer.length", draw_list.VtxBuffer.length); - gl || ctx || console.log("IdxBuffer.length", draw_list.IdxBuffer.length); - let idx_buffer_offset = 0; - gl && gl.bindBuffer(gl.ARRAY_BUFFER, g_VboHandle); - gl && gl.bufferData(gl.ARRAY_BUFFER, draw_list.VtxBuffer, gl.STREAM_DRAW); - gl && gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, g_ElementsHandle); - gl && gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, draw_list.IdxBuffer, gl.STREAM_DRAW); - draw_list.IterateDrawCmds((draw_cmd) => { - gl || ctx || console.log(draw_cmd); - gl || ctx || console.log("ElemCount", draw_cmd.ElemCount); - gl || ctx || console.log("ClipRect", draw_cmd.ClipRect.x, fb_height - draw_cmd.ClipRect.w, draw_cmd.ClipRect.z - draw_cmd.ClipRect.x, draw_cmd.ClipRect.w - draw_cmd.ClipRect.y); - gl || ctx || console.log("TextureId", draw_cmd.TextureId); - if (!gl && !ctx) { - console.log("i: pos.x pos.y uv.x uv.y col"); - for (let i = 0; i < Math.min(3, draw_cmd.ElemCount); ++i) { - const view = new ImGui.ImDrawVert(draw_list.VtxBuffer.buffer, draw_list.VtxBuffer.byteOffset + i * ImGui.ImDrawVertSize); - console.log(`${i}: ${view.pos[0].toFixed(2)} ${view.pos[1].toFixed(2)} ${view.uv[0].toFixed(5)} ${view.uv[1].toFixed(5)} ${("00000000" + view.col[0].toString(16)).substr(-8)}`); - } - } - if (draw_cmd.UserCallback !== null) { - // User callback (registered via ImDrawList::AddCallback) - draw_cmd.UserCallback(draw_list, draw_cmd); - } - else { - const clip_rect = new ImGui.ImVec4(draw_cmd.ClipRect.x - pos.x, draw_cmd.ClipRect.y - pos.y, draw_cmd.ClipRect.z - pos.x, draw_cmd.ClipRect.w - pos.y); - if (clip_rect.x < fb_width && clip_rect.y < fb_height && clip_rect.z >= 0.0 && clip_rect.w >= 0.0) { - // Apply scissor/clipping rectangle - gl && gl.scissor(clip_rect.x, fb_height - clip_rect.w, clip_rect.z - clip_rect.x, clip_rect.w - clip_rect.y); - // Bind texture, Draw - gl && gl.activeTexture(gl.TEXTURE0); - gl && gl.bindTexture(gl.TEXTURE_2D, draw_cmd.TextureId); - gl && gl.drawElements(gl.TRIANGLES, draw_cmd.ElemCount, idx_buffer_type, idx_buffer_offset); - if (ctx) { - ctx.save(); - ctx.beginPath(); - ctx.rect(clip_rect.x, clip_rect.y, clip_rect.z - clip_rect.x, clip_rect.w - clip_rect.y); - ctx.clip(); - const idx = ImGui.ImDrawIdxSize === 4 ? - new Uint32Array(draw_list.IdxBuffer.buffer, draw_list.IdxBuffer.byteOffset + idx_buffer_offset) : - new Uint16Array(draw_list.IdxBuffer.buffer, draw_list.IdxBuffer.byteOffset + idx_buffer_offset); - for (let i = 0; i < draw_cmd.ElemCount; i += 3) { - const i0 = idx[i + 0]; - const i1 = idx[i + 1]; - const i2 = idx[i + 2]; - const v0 = new ImGui.ImDrawVert(draw_list.VtxBuffer.buffer, draw_list.VtxBuffer.byteOffset + i0 * ImGui.ImDrawVertSize); - const v1 = new ImGui.ImDrawVert(draw_list.VtxBuffer.buffer, draw_list.VtxBuffer.byteOffset + i1 * ImGui.ImDrawVertSize); - const v2 = new ImGui.ImDrawVert(draw_list.VtxBuffer.buffer, draw_list.VtxBuffer.byteOffset + i2 * ImGui.ImDrawVertSize); - const i3 = idx[i + 3]; - const i4 = idx[i + 4]; - const i5 = idx[i + 5]; - const v3 = new ImGui.ImDrawVert(draw_list.VtxBuffer.buffer, draw_list.VtxBuffer.byteOffset + i3 * ImGui.ImDrawVertSize); - const v4 = new ImGui.ImDrawVert(draw_list.VtxBuffer.buffer, draw_list.VtxBuffer.byteOffset + i4 * ImGui.ImDrawVertSize); - const v5 = new ImGui.ImDrawVert(draw_list.VtxBuffer.buffer, draw_list.VtxBuffer.byteOffset + i5 * ImGui.ImDrawVertSize); - let quad = true; - let minmin = v0; - let minmax = v0; - let maxmin = v0; - let maxmax = v0; - for (const v of [v1, v2, v3, v4, v5]) { - let found = false; - if (v.pos[0] <= minmin.pos[0] && v.pos[1] <= minmin.pos[1]) { - minmin = v; - found = true; - } - if (v.pos[0] <= minmax.pos[0] && v.pos[1] >= minmax.pos[1]) { - minmax = v; - found = true; - } - if (v.pos[0] >= maxmin.pos[0] && v.pos[1] <= maxmin.pos[1]) { - maxmin = v; - found = true; - } - if (v.pos[0] >= maxmax.pos[0] && v.pos[1] >= maxmax.pos[1]) { - maxmax = v; - found = true; - } - if (!found) { - quad = false; - } - } - quad = quad && (minmin.pos[0] === minmax.pos[0]); - quad = quad && (maxmin.pos[0] === maxmax.pos[0]); - quad = quad && (minmin.pos[1] === maxmin.pos[1]); - quad = quad && (minmax.pos[1] === maxmax.pos[1]); - if (quad) { - if (minmin.uv[0] < 0.01 && minmin.uv[1] < 0.01) { - // one vertex color - ctx.beginPath(); - ctx.rect(minmin.pos[0], minmin.pos[1], maxmax.pos[0] - minmin.pos[0], maxmax.pos[1] - minmin.pos[1]); - ctx.fillStyle = `rgba(${v0.col[0] >> 0 & 0xff}, ${v0.col[0] >> 8 & 0xff}, ${v0.col[0] >> 16 & 0xff}, ${(v0.col[0] >> 24 & 0xff) / 0xff})`; - ctx.fill(); - } - else { - // no vertex color - const image = draw_cmd.TextureId; - ctx.drawImage(image, minmin.uv[0] * image.width, minmin.uv[1] * image.height, (maxmax.uv[0] - minmin.uv[0]) * image.width, (maxmax.uv[1] - minmin.uv[1]) * image.height, minmin.pos[0], minmin.pos[1], maxmax.pos[0] - minmin.pos[0], maxmax.pos[1] - minmin.pos[1]); - // ctx.beginPath(); - // ctx.rect(minmin.pos[0], minmin.pos[1], maxmax.pos[0] - minmin.pos[0], maxmax.pos[1] - minmin.pos[1]); - // ctx.strokeStyle = "yellow"; - // ctx.stroke(); - } - i += 3; - } - else { - // one vertex color, no texture - ctx.beginPath(); - ctx.moveTo(v0.pos[0], v0.pos[1]); - ctx.lineTo(v1.pos[0], v1.pos[1]); - ctx.lineTo(v2.pos[0], v2.pos[1]); - ctx.closePath(); - ctx.fillStyle = `rgba(${v0.col[0] >> 0 & 0xff}, ${v0.col[0] >> 8 & 0xff}, ${v0.col[0] >> 16 & 0xff}, ${(v0.col[0] >> 24 & 0xff) / 0xff})`; - ctx.fill(); - } - } - ctx.restore(); - } - } - } - idx_buffer_offset += draw_cmd.ElemCount * ImGui.ImDrawIdxSize; - }); - }); - // Restore modified GL state - gl && (last_program !== null) && gl.useProgram(last_program); - gl && (last_texture !== null) && gl.bindTexture(gl.TEXTURE_2D, last_texture); - gl && (last_active_texture !== null) && gl.activeTexture(last_active_texture); - gl && gl.disableVertexAttribArray(g_AttribLocationPosition); - gl && gl.disableVertexAttribArray(g_AttribLocationUV); - gl && gl.disableVertexAttribArray(g_AttribLocationColor); - gl && (last_array_buffer !== null) && gl.bindBuffer(gl.ARRAY_BUFFER, last_array_buffer); - gl && (last_element_array_buffer !== null) && gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, last_element_array_buffer); - gl && (last_blend_equation_rgb !== null && last_blend_equation_alpha !== null) && gl.blendEquationSeparate(last_blend_equation_rgb, last_blend_equation_alpha); - gl && (last_blend_src_rgb !== null && last_blend_src_alpha !== null && last_blend_dst_rgb !== null && last_blend_dst_alpha !== null) && gl.blendFuncSeparate(last_blend_src_rgb, last_blend_src_alpha, last_blend_dst_rgb, last_blend_dst_alpha); - gl && (last_enable_blend ? gl.enable(gl.BLEND) : gl.disable(gl.BLEND)); - gl && (last_enable_cull_face ? gl.enable(gl.CULL_FACE) : gl.disable(gl.CULL_FACE)); - gl && (last_enable_depth_test ? gl.enable(gl.DEPTH_TEST) : gl.disable(gl.DEPTH_TEST)); - gl && (last_enable_scissor_test ? gl.enable(gl.SCISSOR_TEST) : gl.disable(gl.SCISSOR_TEST)); - // glPolygonMode(GL_FRONT_AND_BACK, (GLenum)last_polygon_mode[0]); - gl && (last_viewport !== null) && gl.viewport(last_viewport[0], last_viewport[1], last_viewport[2], last_viewport[3]); - gl && (last_scissor_box !== null) && gl.scissor(last_scissor_box[0], last_scissor_box[1], last_scissor_box[2], last_scissor_box[3]); - } - exports_1("RenderDrawData", RenderDrawData); function CreateFontsTexture() { const io = ImGui.GetIO(); // Backup GL state @@ -653,19 +188,6 @@ // Store our identifier io.Fonts.TexID = g_FontTexture || { foo: "bar" }; // console.log("font texture id", g_FontTexture); - if (ctx) { - const image_canvas = document.createElement("canvas"); - image_canvas.width = width; - image_canvas.height = height; - const image_ctx = image_canvas.getContext("2d"); - if (image_ctx === null) { - throw new Error(); - } - const image_data = image_ctx.getImageData(0, 0, width, height); - image_data.data.set(pixels); - image_ctx.putImageData(image_data, 0, 0); - io.Fonts.TexID = image_canvas; - } // Restore modified GL state gl && last_texture && gl.bindTexture(gl.TEXTURE_2D, last_texture); } @@ -743,19 +265,430 @@ setters: [ function (ImGui_1) { ImGui = ImGui_1; + }, + function (PIXI_1) { + PIXI = PIXI_1; + }, + function (U_1) { + U = U_1; } ], execute: function () { clipboard_text = ""; - ImGuiImplPIXI = class ImGuiImplPIXI { - constructor(app, owner) { - this.app = app; - this.owner = owner; + contexts = []; + contextIOs = []; + isFirstWindow = true; + ImGuiImplInternalRenderer = class ImGuiImplInternalRenderer extends PIXI.ObjectRenderer { + constructor(r) { + super(r); + } + render(owner) { + if (!(owner instanceof ImGuiWindow)) + return; + const window = owner; + const io = window.io; + const draw_data = ImGui.GetDrawData(); + if (draw_data === null) { + throw new Error(); + } + gl || console.log(draw_data); + // Avoid rendering when minimized, scale coordinates for retina displays (screen coordinates != framebuffer coordinates) + const fb_width = io.DisplaySize.x * io.DisplayFramebufferScale.x; + const fb_height = io.DisplaySize.y * io.DisplayFramebufferScale.y; + if (fb_width === 0 || fb_height === 0) { + return; + } + draw_data.ScaleClipRects(io.DisplayFramebufferScale); + // Backup GL state + const last_active_texture = gl && gl.getParameter(gl.ACTIVE_TEXTURE) || null; + const last_program = gl && gl.getParameter(gl.CURRENT_PROGRAM) || null; + const last_texture = gl && gl.getParameter(gl.TEXTURE_BINDING_2D) || null; + const last_array_buffer = gl && gl.getParameter(gl.ARRAY_BUFFER_BINDING) || null; + const last_element_array_buffer = gl && gl.getParameter(gl.ELEMENT_ARRAY_BUFFER_BINDING) || null; + // GLint last_polygon_mode[2]; glGetIntegerv(GL_POLYGON_MODE, last_polygon_mode); + const last_viewport = gl && gl.getParameter(gl.VIEWPORT) || null; + const last_scissor_box = gl && gl.getParameter(gl.SCISSOR_BOX) || null; + const last_blend_src_rgb = gl && gl.getParameter(gl.BLEND_SRC_RGB) || null; + const last_blend_dst_rgb = gl && gl.getParameter(gl.BLEND_DST_RGB) || null; + const last_blend_src_alpha = gl && gl.getParameter(gl.BLEND_SRC_ALPHA) || null; + const last_blend_dst_alpha = gl && gl.getParameter(gl.BLEND_DST_ALPHA) || null; + const last_blend_equation_rgb = gl && gl.getParameter(gl.BLEND_EQUATION_RGB) || null; + const last_blend_equation_alpha = gl && gl.getParameter(gl.BLEND_EQUATION_ALPHA) || null; + const last_enable_blend = gl && gl.getParameter(gl.BLEND) || null; + const last_enable_cull_face = gl && gl.getParameter(gl.CULL_FACE) || null; + const last_enable_depth_test = gl && gl.getParameter(gl.DEPTH_TEST) || null; + const last_enable_scissor_test = gl && gl.getParameter(gl.SCISSOR_TEST) || null; + // Setup render state: alpha-blending enabled, no face culling, no depth testing, scissor enabled, polygon fill + gl && gl.enable(gl.BLEND); + gl && gl.blendEquation(gl.FUNC_ADD); + gl && gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA); + gl && gl.disable(gl.CULL_FACE); + gl && gl.disable(gl.DEPTH_TEST); + gl && gl.enable(gl.SCISSOR_TEST); + // glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); + // Setup viewport, orthographic projection matrix + // Our visible imgui space lies from draw_data->DisplayPps (top left) to draw_data->DisplayPos+data_data->DisplaySize (bottom right). DisplayMin is typically (0,0) for single viewport apps. + gl && gl.viewport(0, 0, fb_width, fb_height); + const L = draw_data.DisplayPos.x; + const R = draw_data.DisplayPos.x + draw_data.DisplaySize.x; + const T = draw_data.DisplayPos.y; + const B = draw_data.DisplayPos.y + draw_data.DisplaySize.y; + const ortho_projection = new Float32Array([ + 2.0 / (R - L), 0.0, 0.0, 0.0, + 0.0, 2.0 / (T - B), 0.0, 0.0, + 0.0, 0.0, -1.0, 0.0, + (R + L) / (L - R), (T + B) / (B - T), 0.0, 1.0, + ]); + gl && gl.useProgram(g_ShaderHandle); + gl && gl.uniform1i(g_AttribLocationTex, 0); + gl && g_AttribLocationProjMtx && gl.uniformMatrix4fv(g_AttribLocationProjMtx, false, ortho_projection); + // Render command lists + gl && gl.bindBuffer(gl.ARRAY_BUFFER, g_VboHandle); + gl && gl.enableVertexAttribArray(g_AttribLocationPosition); + gl && gl.enableVertexAttribArray(g_AttribLocationUV); + gl && gl.enableVertexAttribArray(g_AttribLocationColor); + gl && gl.vertexAttribPointer(g_AttribLocationPosition, 2, gl.FLOAT, false, ImGui.ImDrawVertSize, ImGui.ImDrawVertPosOffset); + gl && gl.vertexAttribPointer(g_AttribLocationUV, 2, gl.FLOAT, false, ImGui.ImDrawVertSize, ImGui.ImDrawVertUVOffset); + gl && gl.vertexAttribPointer(g_AttribLocationColor, 4, gl.UNSIGNED_BYTE, true, ImGui.ImDrawVertSize, ImGui.ImDrawVertColOffset); + // Draw + const pos = draw_data.DisplayPos; + const idx_buffer_type = gl && ((ImGui.ImDrawIdxSize === 4) ? gl.UNSIGNED_INT : gl.UNSIGNED_SHORT) || 0; + draw_data.IterateDrawLists((draw_list) => { + gl || console.log(draw_list); + gl || console.log("VtxBuffer.length", draw_list.VtxBuffer.length); + gl || console.log("IdxBuffer.length", draw_list.IdxBuffer.length); + let idx_buffer_offset = 0; + gl && gl.bindBuffer(gl.ARRAY_BUFFER, g_VboHandle); + gl && gl.bufferData(gl.ARRAY_BUFFER, draw_list.VtxBuffer, gl.STREAM_DRAW); + gl && gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, g_ElementsHandle); + gl && gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, draw_list.IdxBuffer, gl.STREAM_DRAW); + draw_list.IterateDrawCmds((draw_cmd) => { + gl || console.log(draw_cmd); + gl || console.log("ElemCount", draw_cmd.ElemCount); + gl || console.log("ClipRect", draw_cmd.ClipRect.x, fb_height - draw_cmd.ClipRect.w, draw_cmd.ClipRect.z - draw_cmd.ClipRect.x, draw_cmd.ClipRect.w - draw_cmd.ClipRect.y); + gl || console.log("TextureId", draw_cmd.TextureId); + if (!gl) { + console.log("i: pos.x pos.y uv.x uv.y col"); + for (let i = 0; i < Math.min(3, draw_cmd.ElemCount); ++i) { + const view = new ImGui.ImDrawVert(draw_list.VtxBuffer.buffer, draw_list.VtxBuffer.byteOffset + i * ImGui.ImDrawVertSize); + console.log(`${i}: ${view.pos[0].toFixed(2)} ${view.pos[1].toFixed(2)} ${view.uv[0].toFixed(5)} ${view.uv[1].toFixed(5)} ${("00000000" + view.col[0].toString(16)).substr(-8)}`); + } + } + if (draw_cmd.UserCallback !== null) { + // User callback (registered via ImDrawList::AddCallback) + draw_cmd.UserCallback(draw_list, draw_cmd); + } + else { + const clip_rect = new ImGui.ImVec4(draw_cmd.ClipRect.x - pos.x, draw_cmd.ClipRect.y - pos.y, draw_cmd.ClipRect.z - pos.x, draw_cmd.ClipRect.w - pos.y); + if (clip_rect.x < fb_width && clip_rect.y < fb_height && clip_rect.z >= 0.0 && clip_rect.w >= 0.0) { + // Apply scissor/clipping rectangle + gl && gl.scissor(clip_rect.x, fb_height - clip_rect.w, clip_rect.z - clip_rect.x, clip_rect.w - clip_rect.y); + // Bind texture, Draw + gl && gl.activeTexture(gl.TEXTURE0); + gl && gl.bindTexture(gl.TEXTURE_2D, draw_cmd.TextureId); + gl && gl.drawElements(gl.TRIANGLES, draw_cmd.ElemCount, idx_buffer_type, idx_buffer_offset); + } + } + idx_buffer_offset += draw_cmd.ElemCount * ImGui.ImDrawIdxSize; + }); + }); + // Restore modified GL state + gl && (last_program !== null) && gl.useProgram(last_program); + gl && (last_texture !== null) && gl.bindTexture(gl.TEXTURE_2D, last_texture); + gl && (last_active_texture !== null) && gl.activeTexture(last_active_texture); + gl && gl.disableVertexAttribArray(g_AttribLocationPosition); + gl && gl.disableVertexAttribArray(g_AttribLocationUV); + gl && gl.disableVertexAttribArray(g_AttribLocationColor); + gl && (last_array_buffer !== null) && gl.bindBuffer(gl.ARRAY_BUFFER, last_array_buffer); + gl && (last_element_array_buffer !== null) && gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, last_element_array_buffer); + gl && (last_blend_equation_rgb !== null && last_blend_equation_alpha !== null) && gl.blendEquationSeparate(last_blend_equation_rgb, last_blend_equation_alpha); + gl && (last_blend_src_rgb !== null && last_blend_src_alpha !== null && last_blend_dst_rgb !== null && last_blend_dst_alpha !== null) && gl.blendFuncSeparate(last_blend_src_rgb, last_blend_src_alpha, last_blend_dst_rgb, last_blend_dst_alpha); + gl && (last_enable_blend ? gl.enable(gl.BLEND) : gl.disable(gl.BLEND)); + gl && (last_enable_cull_face ? gl.enable(gl.CULL_FACE) : gl.disable(gl.CULL_FACE)); + gl && (last_enable_depth_test ? gl.enable(gl.DEPTH_TEST) : gl.disable(gl.DEPTH_TEST)); + gl && (last_enable_scissor_test ? gl.enable(gl.SCISSOR_TEST) : gl.disable(gl.SCISSOR_TEST)); + // glPolygonMode(GL_FRONT_AND_BACK, (GLenum)last_polygon_mode[0]); + gl && (last_viewport !== null) && gl.viewport(last_viewport[0], last_viewport[1], last_viewport[2], last_viewport[3]); + gl && (last_scissor_box !== null) && gl.scissor(last_scissor_box[0], last_scissor_box[1], last_scissor_box[2], last_scissor_box[3]); } }; - exports_1("ImGuiImplPIXI", ImGuiImplPIXI); + gl = null; + app = null; + ImGuiWindow = class ImGuiWindow extends PIXI.Container { + constructor(sizeX, sizeY, update) { + super(); + this.baseTex = new PIXI.BaseRenderTexture({ scaleMode: PIXI.SCALE_MODES.LINEAR, resolution: 1 }); + this.tex = new PIXI.RenderTexture(this.baseTex); + this.surface = new PIXI.Sprite(this.tex); + this.imgui = new PIXI.Sprite(); + if (isFirstWindow) { + this.ctx = contexts[0]; + this.io = contextIOs[0]; + } + else { + this.ctx = ImGui.CreateContext(); + ImGui.SetCurrentContext(this.ctx); + this.io = ImGui.GetIO(); + } + if (!isFirstWindow) { + this.io.Fonts.TexID = contextIOs[0].Fonts.TexID; + } + isFirstWindow = false; + if (typeof (navigator) !== "undefined") { + this.io.ConfigMacOSXBehaviors = navigator.platform.match(/Mac/) !== null; + } + this.io.SetClipboardTextFn = (user_data, text) => { + clipboard_text = text; + // console.log(`set clipboard_text: "${clipboard_text}"`); + if (typeof navigator !== "undefined" && typeof navigator.clipboard !== "undefined") { + // console.log(`clipboard.writeText: "${clipboard_text}"`); + navigator.clipboard.writeText(clipboard_text).then(() => { + // console.log(`clipboard.writeText: "${clipboard_text}" done.`); + }); + } + }; + this.io.GetClipboardTextFn = (user_data) => { + // if (typeof navigator !== "undefined" && typeof (navigator as any).clipboard !== "undefined") { + // console.log(`clipboard.readText: "${clipboard_text}"`); + // (navigator as any).clipboard.readText().then((text: string): void => { + // clipboard_text = text; + // console.log(`clipboard.readText: "${clipboard_text}" done.`); + // }); + // } + // console.log(`get clipboard_text: "${clipboard_text}"`); + return clipboard_text; + }; + this.io.ClipboardUserData = null; + // Setup back-end capabilities flags + this.io.BackendFlags |= ImGui.BackendFlags.HasMouseCursors; // We can honor GetMouseCursor() values (optional) + // Keyboard mapping. ImGui will use those indices to peek into the io.KeyDown[] array. + this.io.KeyMap[ImGui.Key.Tab] = 9; + this.io.KeyMap[ImGui.Key.LeftArrow] = 37; + this.io.KeyMap[ImGui.Key.RightArrow] = 39; + this.io.KeyMap[ImGui.Key.UpArrow] = 38; + this.io.KeyMap[ImGui.Key.DownArrow] = 40; + this.io.KeyMap[ImGui.Key.PageUp] = 33; + this.io.KeyMap[ImGui.Key.PageDown] = 34; + this.io.KeyMap[ImGui.Key.Home] = 36; + this.io.KeyMap[ImGui.Key.End] = 35; + this.io.KeyMap[ImGui.Key.Insert] = 45; + this.io.KeyMap[ImGui.Key.Delete] = 46; + this.io.KeyMap[ImGui.Key.Backspace] = 8; + this.io.KeyMap[ImGui.Key.Space] = 32; + this.io.KeyMap[ImGui.Key.Enter] = 13; + this.io.KeyMap[ImGui.Key.Escape] = 27; + this.io.KeyMap[ImGui.Key.A] = 65; + this.io.KeyMap[ImGui.Key.C] = 67; + this.io.KeyMap[ImGui.Key.V] = 86; + this.io.KeyMap[ImGui.Key.X] = 88; + this.io.KeyMap[ImGui.Key.Y] = 89; + this.io.KeyMap[ImGui.Key.Z] = 90; + contextIOs.push(this.io); + this.update = update; + this.resize(sizeX, sizeY); + this.imgui.pluginName = 'imgui_renderer'; + this.addChild(this.surface); + this.surface.addListener("mousedown", this.mouseDown.bind(this)); + this.surface.addListener("mouseup", this.mouseUp.bind(this)); + app.ticker.add(this.updateInternal.bind(this)); + } + getSizeX() { return this.sizeX; } + getSizeY() { return this.sizeY; } + mouseDown(e) { + this.io.MouseDown[mouse_button_map[0]] = true; + } + mouseUp(e) { + this.io.MouseDown[mouse_button_map[0]] = false; + } + resize(sizeX, sizeY) { + this.sizeX = sizeX; + this.sizeY = sizeY; + this.baseTex.resize(sizeX, sizeY); + this.tex.frame = new PIXI.Rectangle(0, 0, this.baseTex.width, this.baseTex.height); + this.surface.hitArea = this.tex.frame; + } + updateInternal(deltaTime) { + const dt = deltaTime * 1 / (1000 * PIXI.settings.TARGET_FPMS); + ImGui.SetCurrentContext(this.ctx); + if (this.io.WantSaveIniSettings) { + this.io.WantSaveIniSettings = false; + if (typeof (window) !== "undefined") { + window.localStorage.setItem("imgui.ini", ImGui.SaveIniSettingsToMemory()); + } + } + this.io.DisplaySize.x = this.sizeX; + this.io.DisplaySize.y = this.sizeY; + this.io.DisplayFramebufferScale.x = 1; + this.io.DisplayFramebufferScale.y = 1; + this.io.DeltaTime = dt; + const localPos = this.getGlobalPosition(new PIXI.Point()); + this.io.MousePos.x = localPos.x; + this.io.MousePos.y = localPos.y; + if (this.io.WantSetMousePos) { + console.log("TODO: MousePos", this.io.MousePos.x, this.io.MousePos.y); + } + if (typeof (document) !== "undefined") { + if (this.io.MouseDrawCursor) { + document.body.style.cursor = "none"; + } + else { + switch (ImGui.GetMouseCursor()) { + case ImGui.MouseCursor.None: + document.body.style.cursor = "none"; + break; + default: + case ImGui.MouseCursor.Arrow: + document.body.style.cursor = "default"; + break; + case ImGui.MouseCursor.TextInput: + document.body.style.cursor = "text"; + break; // When hovering over InputText, etc. + case ImGui.MouseCursor.ResizeAll: + document.body.style.cursor = "move"; + break; // Unused + case ImGui.MouseCursor.ResizeNS: + document.body.style.cursor = "ns-resize"; + break; // When hovering over an horizontal border + case ImGui.MouseCursor.ResizeEW: + document.body.style.cursor = "ew-resize"; + break; // When hovering over a vertical border or a column + case ImGui.MouseCursor.ResizeNESW: + document.body.style.cursor = "nesw-resize"; + break; // When hovering over the bottom-left corner of a window + case ImGui.MouseCursor.ResizeNWSE: + document.body.style.cursor = "nwse-resize"; + break; // When hovering over the bottom-right corner of a window + case ImGui.MouseCursor.Hand: + document.body.style.cursor = "move"; + break; + } + } + } + // Gamepad navigation mapping [BETA] + for (let i = 0; i < this.io.NavInputs.length; ++i) { + this.io.NavInputs[i] = 0.0; + } + if (this.io.ConfigFlags & ImGui.ConfigFlags.NavEnableGamepad) { + // Update gamepad inputs + const gamepads = (typeof (navigator) !== "undefined" && typeof (navigator.getGamepads) === "function") ? navigator.getGamepads() : []; + for (let i = 0; i < gamepads.length; ++i) { + const gamepad = gamepads[i]; + if (!gamepad) { + continue; + } + const buttons_count = gamepad.buttons.length; + const axes_count = gamepad.axes.length; + const MAP_BUTTON = function (NAV_NO, BUTTON_NO) { + if (!gamepad) { + return; + } + if (buttons_count > BUTTON_NO && gamepad.buttons[BUTTON_NO].pressed) + this.io.NavInputs[NAV_NO] = 1.0; + }; + const MAP_ANALOG = function (NAV_NO, AXIS_NO, V0, V1) { + if (!gamepad) { + return; + } + let v = (axes_count > AXIS_NO) ? gamepad.axes[AXIS_NO] : V0; + v = (v - V0) / (V1 - V0); + if (v > 1.0) + v = 1.0; + if (this.io.NavInputs[NAV_NO] < v) + this.io.NavInputs[NAV_NO] = v; + }; + // TODO: map input based on vendor and product id + // https://developer.mozilla.org/en-US/docs/Web/API/Gamepad/id + const match = gamepad.id.match(/^([0-9a-f]{4})-([0-9a-f]{4})-.*$/); + const match_chrome = gamepad.id.match(/^.*\(.*Vendor: ([0-9a-f]{4}) Product: ([0-9a-f]{4})\).*$/); + const vendor = (match && match[1]) || (match_chrome && match_chrome[1]) || "0000"; + const product = (match && match[2]) || (match_chrome && match_chrome[2]) || "0000"; + switch (vendor + product) { + case "046dc216": // Logitech Logitech Dual Action (Vendor: 046d Product: c216) + MAP_BUTTON(ImGui.NavInput.Activate, 1); // Cross / A + MAP_BUTTON(ImGui.NavInput.Cancel, 2); // Circle / B + MAP_BUTTON(ImGui.NavInput.Menu, 0); // Square / X + MAP_BUTTON(ImGui.NavInput.Input, 3); // Triangle / Y + MAP_ANALOG(ImGui.NavInput.DpadLeft, 4, -0.3, -0.9); // D-Pad Left + MAP_ANALOG(ImGui.NavInput.DpadRight, 4, +0.3, +0.9); // D-Pad Right + MAP_ANALOG(ImGui.NavInput.DpadUp, 5, -0.3, -0.9); // D-Pad Up + MAP_ANALOG(ImGui.NavInput.DpadDown, 5, +0.3, +0.9); // D-Pad Down + MAP_BUTTON(ImGui.NavInput.FocusPrev, 4); // L1 / LB + MAP_BUTTON(ImGui.NavInput.FocusNext, 5); // R1 / RB + MAP_BUTTON(ImGui.NavInput.TweakSlow, 6); // L2 / LT + MAP_BUTTON(ImGui.NavInput.TweakFast, 7); // R2 / RT + MAP_ANALOG(ImGui.NavInput.LStickLeft, 0, -0.3, -0.9); + MAP_ANALOG(ImGui.NavInput.LStickRight, 0, +0.3, +0.9); + MAP_ANALOG(ImGui.NavInput.LStickUp, 1, -0.3, -0.9); + MAP_ANALOG(ImGui.NavInput.LStickDown, 1, +0.3, +0.9); + break; + case "046dc21d": // Logitech Gamepad F310 (STANDARD GAMEPAD Vendor: 046d Product: c21d) + MAP_BUTTON(ImGui.NavInput.Activate, 0); // Cross / A + MAP_BUTTON(ImGui.NavInput.Cancel, 1); // Circle / B + MAP_BUTTON(ImGui.NavInput.Menu, 2); // Square / X + MAP_BUTTON(ImGui.NavInput.Input, 3); // Triangle / Y + MAP_BUTTON(ImGui.NavInput.DpadLeft, 14); // D-Pad Left + MAP_BUTTON(ImGui.NavInput.DpadRight, 15); // D-Pad Right + MAP_BUTTON(ImGui.NavInput.DpadUp, 12); // D-Pad Up + MAP_BUTTON(ImGui.NavInput.DpadDown, 13); // D-Pad Down + MAP_BUTTON(ImGui.NavInput.FocusPrev, 4); // L1 / LB + MAP_BUTTON(ImGui.NavInput.FocusNext, 5); // R1 / RB + MAP_ANALOG(ImGui.NavInput.TweakSlow, 6, +0.3, +0.9); // L2 / LT + MAP_ANALOG(ImGui.NavInput.TweakFast, 7, +0.3, +0.9); // R2 / RT + MAP_ANALOG(ImGui.NavInput.LStickLeft, 0, -0.3, -0.9); + MAP_ANALOG(ImGui.NavInput.LStickRight, 0, +0.3, +0.9); + MAP_ANALOG(ImGui.NavInput.LStickUp, 1, -0.3, -0.9); + MAP_ANALOG(ImGui.NavInput.LStickDown, 1, +0.3, +0.9); + break; + case "2dc86001": // 8Bitdo SN30 Pro 8Bitdo SN30 Pro (Vendor: 2dc8 Product: 6001) + case "2dc86101": // 8Bitdo SN30 Pro (Vendor: 2dc8 Product: 6101) + MAP_BUTTON(ImGui.NavInput.Activate, 1); // Cross / A + MAP_BUTTON(ImGui.NavInput.Cancel, 0); // Circle / B + MAP_BUTTON(ImGui.NavInput.Menu, 4); // Square / X + MAP_BUTTON(ImGui.NavInput.Input, 3); // Triangle / Y + MAP_ANALOG(ImGui.NavInput.DpadLeft, 6, -0.3, -0.9); // D-Pad Left + MAP_ANALOG(ImGui.NavInput.DpadRight, 6, +0.3, +0.9); // D-Pad Right + MAP_ANALOG(ImGui.NavInput.DpadUp, 7, -0.3, -0.9); // D-Pad Up + MAP_ANALOG(ImGui.NavInput.DpadDown, 7, +0.3, +0.9); // D-Pad Down + MAP_BUTTON(ImGui.NavInput.FocusPrev, 6); // L1 / LB + MAP_BUTTON(ImGui.NavInput.FocusNext, 7); // R1 / RB + MAP_BUTTON(ImGui.NavInput.TweakSlow, 8); // L2 / LT + MAP_BUTTON(ImGui.NavInput.TweakFast, 9); // R2 / RT + MAP_ANALOG(ImGui.NavInput.LStickLeft, 0, -0.3, -0.9); + MAP_ANALOG(ImGui.NavInput.LStickRight, 0, +0.3, +0.9); + MAP_ANALOG(ImGui.NavInput.LStickUp, 1, -0.3, -0.9); + MAP_ANALOG(ImGui.NavInput.LStickDown, 1, +0.3, +0.9); + break; + default: // standard gamepad: https://w3c.github.io/gamepad/#remapping + MAP_BUTTON(ImGui.NavInput.Activate, 0); // Cross / A + MAP_BUTTON(ImGui.NavInput.Cancel, 1); // Circle / B + MAP_BUTTON(ImGui.NavInput.Menu, 2); // Square / X + MAP_BUTTON(ImGui.NavInput.Input, 3); // Triangle / Y + MAP_BUTTON(ImGui.NavInput.DpadLeft, 14); // D-Pad Left + MAP_BUTTON(ImGui.NavInput.DpadRight, 15); // D-Pad Right + MAP_BUTTON(ImGui.NavInput.DpadUp, 12); // D-Pad Up + MAP_BUTTON(ImGui.NavInput.DpadDown, 13); // D-Pad Down + MAP_BUTTON(ImGui.NavInput.FocusPrev, 4); // L1 / LB + MAP_BUTTON(ImGui.NavInput.FocusNext, 5); // R1 / RB + MAP_BUTTON(ImGui.NavInput.TweakSlow, 6); // L2 / LT + MAP_BUTTON(ImGui.NavInput.TweakFast, 7); // R2 / RT + MAP_ANALOG(ImGui.NavInput.LStickLeft, 0, -0.3, -0.9); + MAP_ANALOG(ImGui.NavInput.LStickRight, 0, +0.3, +0.9); + MAP_ANALOG(ImGui.NavInput.LStickUp, 1, -0.3, -0.9); + MAP_ANALOG(ImGui.NavInput.LStickDown, 1, +0.3, +0.9); + break; + } + } + } + ImGui.NewFrame(); + this.update(dt); + ImGui.EndFrame(); + ImGui.Render(); + app.renderer.render(this.imgui, this.tex); + } + }; + exports_1("ImGuiWindow", ImGuiWindow); canvas = null; - exports_1("gl", gl = null); + //export let gl: WebGL2RenderingContext | null = null; g_ShaderHandle = null; g_VertHandle = null; g_FragHandle = null; @@ -767,7 +700,6 @@ g_VboHandle = null; g_ElementsHandle = null; g_FontTexture = null; - exports_1("ctx", ctx = null); prev_time = 0; // MouseEvent.button // A number representing a given button: diff --git a/src/imgui_impl.js.map b/src/imgui_impl.js.map index 6d2bb7c..68bf7e0 100644 --- a/src/imgui_impl.js.map +++ b/src/imgui_impl.js.map @@ -1 +1 @@ -{"version":3,"file":"imgui_impl.js","sourceRoot":"","sources":["imgui_impl.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"imgui_impl.js","sourceRoot":"","sources":["imgui_impl.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/src/imgui_impl.js b/src/imgui_impl.js index 3fdd928..a611a08 100644 --- a/src/imgui_impl.js +++ b/src/imgui_impl.js @@ -1,6 +1,6 @@ -System.register(["imgui-js"], function (exports_1, context_1) { +System.register(["imgui-js", "pixi.js", "./utils"], function (exports_1, context_1) { "use strict"; - var ImGui, clipboard_text, ImGuiImplPIXI, canvas, gl, g_ShaderHandle, g_VertHandle, g_FragHandle, g_AttribLocationTex, g_AttribLocationProjMtx, g_AttribLocationPosition, g_AttribLocationUV, g_AttribLocationColor, g_VboHandle, g_ElementsHandle, g_FontTexture, ctx, prev_time, mouse_button_map; + var ImGui, PIXI, U, clipboard_text, contexts, contextIOs, isFirstWindow, ImGuiImplInternalRenderer, gl, app, ImGuiWindow, canvas, g_ShaderHandle, g_VertHandle, g_FragHandle, g_AttribLocationTex, g_AttribLocationProjMtx, g_AttribLocationPosition, g_AttribLocationUV, g_AttribLocationColor, g_VboHandle, g_ElementsHandle, g_FontTexture, prev_time, mouse_button_map; var __moduleName = context_1 && context_1.id; function document_on_copy(event) { if (event.clipboardData) { @@ -30,193 +30,118 @@ console.log("Gamepad disconnected at index %d: %s.", event.gamepad.index, event.gamepad.id); } function canvas_on_blur(event) { - const io = ImGui.GetIO(); - io.KeyCtrl = false; - io.KeyShift = false; - io.KeyAlt = false; - io.KeySuper = false; - for (let i = 0; i < io.KeysDown.length; ++i) { - io.KeysDown[i] = false; - } - for (let i = 0; i < io.MouseDown.length; ++i) { - io.MouseDown[i] = false; + for (var io of contextIOs) { + io.KeyCtrl = false; + io.KeyShift = false; + io.KeyAlt = false; + io.KeySuper = false; + for (let i = 0; i < io.KeysDown.length; ++i) { + io.KeysDown[i] = false; + } + for (let i = 0; i < io.MouseDown.length; ++i) { + io.MouseDown[i] = false; + } } } function canvas_on_keydown(event) { // console.log(event.type, event.key, event.keyCode); - const io = ImGui.GetIO(); - io.KeyCtrl = event.ctrlKey; - io.KeyShift = event.shiftKey; - io.KeyAlt = event.altKey; - io.KeySuper = event.metaKey; - ImGui.IM_ASSERT(event.keyCode >= 0 && event.keyCode < ImGui.IM_ARRAYSIZE(io.KeysDown)); - io.KeysDown[event.keyCode] = true; - // forward to the keypress event - if ( /*io.WantCaptureKeyboard ||*/event.key === "Tab") { - event.preventDefault(); + for (var io of contextIOs) { + io.KeyCtrl = event.ctrlKey; + io.KeyShift = event.shiftKey; + io.KeyAlt = event.altKey; + io.KeySuper = event.metaKey; + ImGui.IM_ASSERT(event.keyCode >= 0 && event.keyCode < ImGui.IM_ARRAYSIZE(io.KeysDown)); + io.KeysDown[event.keyCode] = true; + // forward to the keypress event + if ( /*io.WantCaptureKeyboard ||*/event.key === "Tab") { + event.preventDefault(); + } } } function canvas_on_keyup(event) { // console.log(event.type, event.key, event.keyCode); - const io = ImGui.GetIO(); - io.KeyCtrl = event.ctrlKey; - io.KeyShift = event.shiftKey; - io.KeyAlt = event.altKey; - io.KeySuper = event.metaKey; - ImGui.IM_ASSERT(event.keyCode >= 0 && event.keyCode < ImGui.IM_ARRAYSIZE(io.KeysDown)); - io.KeysDown[event.keyCode] = false; - if (io.WantCaptureKeyboard) { - event.preventDefault(); + for (var io of contextIOs) { + io.KeyCtrl = event.ctrlKey; + io.KeyShift = event.shiftKey; + io.KeyAlt = event.altKey; + io.KeySuper = event.metaKey; + ImGui.IM_ASSERT(event.keyCode >= 0 && event.keyCode < ImGui.IM_ARRAYSIZE(io.KeysDown)); + io.KeysDown[event.keyCode] = false; + if (io.WantCaptureKeyboard) { + event.preventDefault(); + } } } function canvas_on_keypress(event) { // console.log(event.type, event.key, event.keyCode); - const io = ImGui.GetIO(); - io.AddInputCharacter(event.charCode); - if (io.WantCaptureKeyboard) { - event.preventDefault(); + for (var io of contextIOs) { + io.AddInputCharacter(event.charCode); + if (io.WantCaptureKeyboard) { + event.preventDefault(); + } } } - function canvas_on_pointermove(event) { - const io = ImGui.GetIO(); - const devicePixelRatio = window.devicePixelRatio || 1; - io.MousePos.x = event.offsetX * devicePixelRatio; - io.MousePos.y = event.offsetY * devicePixelRatio; - if (io.WantCaptureMouse) { - event.preventDefault(); - } - } - function canvas_on_pointerdown(event) { - const io = ImGui.GetIO(); - const devicePixelRatio = window.devicePixelRatio || 1; - io.MousePos.x = event.offsetX * devicePixelRatio; - io.MousePos.y = event.offsetY * devicePixelRatio; - io.MouseDown[mouse_button_map[event.button]] = true; - // if (io.WantCaptureMouse) { - // event.preventDefault(); - // } - } function canvas_on_contextmenu(event) { - const io = ImGui.GetIO(); - if (io.WantCaptureMouse) { - event.preventDefault(); - } - } - function canvas_on_pointerup(event) { - const io = ImGui.GetIO(); - io.MouseDown[mouse_button_map[event.button]] = false; - if (io.WantCaptureMouse) { - event.preventDefault(); + for (var io of contextIOs) { + if (io.WantCaptureMouse) { + event.preventDefault(); + } } } function canvas_on_wheel(event) { - const io = ImGui.GetIO(); - let scale = 1.0; - switch (event.deltaMode) { - case event.DOM_DELTA_PIXEL: - scale = 0.01; - break; - case event.DOM_DELTA_LINE: - scale = 0.2; - break; - case event.DOM_DELTA_PAGE: - scale = 1.0; - break; - } - io.MouseWheelH = event.deltaX * scale; - io.MouseWheel = -event.deltaY * scale; // Mouse wheel: 1 unit scrolls about 5 lines text. - if (io.WantCaptureMouse) { - event.preventDefault(); + for (var io of contextIOs) { + let scale = 1.0; + switch (event.deltaMode) { + case event.DOM_DELTA_PIXEL: + scale = 0.01; + break; + case event.DOM_DELTA_LINE: + scale = 0.2; + break; + case event.DOM_DELTA_PAGE: + scale = 1.0; + break; + } + io.MouseWheelH = event.deltaX * scale; + io.MouseWheel = -event.deltaY * scale; // Mouse wheel: 1 unit scrolls about 5 lines text. + if (io.WantCaptureMouse) { + event.preventDefault(); + } } } - function Init(value) { - const io = ImGui.GetIO(); + function Init(_app) { + // Setup Dear ImGui binding + ImGui.IMGUI_CHECKVERSION(); + ImGui.CreateContext(); + ImGui.StyleColorsLight(); + contexts.push(ImGui.GetCurrentContext()); + contextIOs.push(ImGui.GetIO()); + contextIOs[0].Fonts.AddFontDefault(); + PIXI.Renderer.registerPlugin("imgui_renderer", U.fromConstructor(ImGuiImplInternalRenderer)); if (typeof (window) !== "undefined") { ImGui.LoadIniSettingsFromMemory(window.localStorage.getItem("imgui.ini") || ""); } - if (typeof (navigator) !== "undefined") { - io.ConfigMacOSXBehaviors = navigator.platform.match(/Mac/) !== null; - } if (typeof (document) !== "undefined") { document.body.addEventListener("copy", document_on_copy); document.body.addEventListener("cut", document_on_cut); document.body.addEventListener("paste", document_on_paste); } - io.SetClipboardTextFn = (user_data, text) => { - clipboard_text = text; - // console.log(`set clipboard_text: "${clipboard_text}"`); - if (typeof navigator !== "undefined" && typeof navigator.clipboard !== "undefined") { - // console.log(`clipboard.writeText: "${clipboard_text}"`); - navigator.clipboard.writeText(clipboard_text).then(() => { - // console.log(`clipboard.writeText: "${clipboard_text}" done.`); - }); - } - }; - io.GetClipboardTextFn = (user_data) => { - // if (typeof navigator !== "undefined" && typeof (navigator as any).clipboard !== "undefined") { - // console.log(`clipboard.readText: "${clipboard_text}"`); - // (navigator as any).clipboard.readText().then((text: string): void => { - // clipboard_text = text; - // console.log(`clipboard.readText: "${clipboard_text}" done.`); - // }); - // } - // console.log(`get clipboard_text: "${clipboard_text}"`); - return clipboard_text; - }; - io.ClipboardUserData = null; if (typeof (window) !== "undefined") { window.addEventListener("gamepadconnected", window_on_gamepadconnected); window.addEventListener("gamepaddisconnected", window_on_gamepaddisconnected); } - if (typeof (window) !== "undefined") { - if (value instanceof (HTMLCanvasElement)) { - value = value.getContext("webgl2", { alpha: false }) || value.getContext("2d"); - } - if (value instanceof (WebGL2RenderingContext)) { - canvas = value.canvas; - exports_1("gl", gl = value); - } - if (value instanceof (CanvasRenderingContext2D)) { - canvas = value.canvas; - exports_1("ctx", ctx = value); - } - } + app = _app; + gl = app.renderer.gl; + canvas = app.view; if (canvas !== null) { canvas.style.touchAction = "none"; // Disable browser handling of all panning and zooming gestures. canvas.addEventListener("blur", canvas_on_blur); canvas.addEventListener("keydown", canvas_on_keydown); canvas.addEventListener("keyup", canvas_on_keyup); canvas.addEventListener("keypress", canvas_on_keypress); - canvas.addEventListener("pointermove", canvas_on_pointermove); - canvas.addEventListener("pointerdown", canvas_on_pointerdown); canvas.addEventListener("contextmenu", canvas_on_contextmenu); - canvas.addEventListener("pointerup", canvas_on_pointerup); canvas.addEventListener("wheel", canvas_on_wheel); } - // Setup back-end capabilities flags - io.BackendFlags |= ImGui.BackendFlags.HasMouseCursors; // We can honor GetMouseCursor() values (optional) - // Keyboard mapping. ImGui will use those indices to peek into the io.KeyDown[] array. - io.KeyMap[ImGui.Key.Tab] = 9; - io.KeyMap[ImGui.Key.LeftArrow] = 37; - io.KeyMap[ImGui.Key.RightArrow] = 39; - io.KeyMap[ImGui.Key.UpArrow] = 38; - io.KeyMap[ImGui.Key.DownArrow] = 40; - io.KeyMap[ImGui.Key.PageUp] = 33; - io.KeyMap[ImGui.Key.PageDown] = 34; - io.KeyMap[ImGui.Key.Home] = 36; - io.KeyMap[ImGui.Key.End] = 35; - io.KeyMap[ImGui.Key.Insert] = 45; - io.KeyMap[ImGui.Key.Delete] = 46; - io.KeyMap[ImGui.Key.Backspace] = 8; - io.KeyMap[ImGui.Key.Space] = 32; - io.KeyMap[ImGui.Key.Enter] = 13; - io.KeyMap[ImGui.Key.Escape] = 27; - io.KeyMap[ImGui.Key.A] = 65; - io.KeyMap[ImGui.Key.C] = 67; - io.KeyMap[ImGui.Key.V] = 86; - io.KeyMap[ImGui.Key.X] = 88; - io.KeyMap[ImGui.Key.Y] = 89; - io.KeyMap[ImGui.Key.Z] = 90; CreateDeviceObjects(); } exports_1("Init", Init); @@ -227,14 +152,10 @@ canvas.removeEventListener("keydown", canvas_on_keydown); canvas.removeEventListener("keyup", canvas_on_keyup); canvas.removeEventListener("keypress", canvas_on_keypress); - canvas.removeEventListener("pointermove", canvas_on_pointermove); - canvas.removeEventListener("pointerdown", canvas_on_pointerdown); canvas.removeEventListener("contextmenu", canvas_on_contextmenu); - canvas.removeEventListener("pointerup", canvas_on_pointerup); canvas.removeEventListener("wheel", canvas_on_wheel); } - exports_1("gl", gl = null); - exports_1("ctx", ctx = null); + app = null; canvas = null; if (typeof (window) !== "undefined") { window.removeEventListener("gamepadconnected", window_on_gamepadconnected); @@ -247,392 +168,6 @@ } } exports_1("Shutdown", Shutdown); - function NewFrame(time) { - const io = ImGui.GetIO(); - if (io.WantSaveIniSettings) { - io.WantSaveIniSettings = false; - if (typeof (window) !== "undefined") { - window.localStorage.setItem("imgui.ini", ImGui.SaveIniSettingsToMemory()); - } - } - const w = canvas && canvas.width || 640; - const h = canvas && canvas.height || 480; - const display_w = gl && gl.drawingBufferWidth || w; - const display_h = gl && gl.drawingBufferHeight || h; - io.DisplaySize.x = w; - io.DisplaySize.y = h; - io.DisplayFramebufferScale.x = w > 0 ? (display_w / w) : 0; - io.DisplayFramebufferScale.y = h > 0 ? (display_h / h) : 0; - const dt = time - prev_time; - prev_time = time; - io.DeltaTime = dt / 1000; - if (io.WantSetMousePos) { - console.log("TODO: MousePos", io.MousePos.x, io.MousePos.y); - } - if (typeof (document) !== "undefined") { - if (io.MouseDrawCursor) { - document.body.style.cursor = "none"; - } - else { - switch (ImGui.GetMouseCursor()) { - case ImGui.MouseCursor.None: - document.body.style.cursor = "none"; - break; - default: - case ImGui.MouseCursor.Arrow: - document.body.style.cursor = "default"; - break; - case ImGui.MouseCursor.TextInput: - document.body.style.cursor = "text"; - break; // When hovering over InputText, etc. - case ImGui.MouseCursor.ResizeAll: - document.body.style.cursor = "move"; - break; // Unused - case ImGui.MouseCursor.ResizeNS: - document.body.style.cursor = "ns-resize"; - break; // When hovering over an horizontal border - case ImGui.MouseCursor.ResizeEW: - document.body.style.cursor = "ew-resize"; - break; // When hovering over a vertical border or a column - case ImGui.MouseCursor.ResizeNESW: - document.body.style.cursor = "nesw-resize"; - break; // When hovering over the bottom-left corner of a window - case ImGui.MouseCursor.ResizeNWSE: - document.body.style.cursor = "nwse-resize"; - break; // When hovering over the bottom-right corner of a window - case ImGui.MouseCursor.Hand: - document.body.style.cursor = "move"; - break; - } - } - } - // Gamepad navigation mapping [BETA] - for (let i = 0; i < io.NavInputs.length; ++i) { - io.NavInputs[i] = 0.0; - } - if (io.ConfigFlags & ImGui.ConfigFlags.NavEnableGamepad) { - // Update gamepad inputs - const gamepads = (typeof (navigator) !== "undefined" && typeof (navigator.getGamepads) === "function") ? navigator.getGamepads() : []; - for (let i = 0; i < gamepads.length; ++i) { - const gamepad = gamepads[i]; - if (!gamepad) { - continue; - } - const buttons_count = gamepad.buttons.length; - const axes_count = gamepad.axes.length; - const MAP_BUTTON = function (NAV_NO, BUTTON_NO) { - if (!gamepad) { - return; - } - if (buttons_count > BUTTON_NO && gamepad.buttons[BUTTON_NO].pressed) - io.NavInputs[NAV_NO] = 1.0; - }; - const MAP_ANALOG = function (NAV_NO, AXIS_NO, V0, V1) { - if (!gamepad) { - return; - } - let v = (axes_count > AXIS_NO) ? gamepad.axes[AXIS_NO] : V0; - v = (v - V0) / (V1 - V0); - if (v > 1.0) - v = 1.0; - if (io.NavInputs[NAV_NO] < v) - io.NavInputs[NAV_NO] = v; - }; - // TODO: map input based on vendor and product id - // https://developer.mozilla.org/en-US/docs/Web/API/Gamepad/id - const match = gamepad.id.match(/^([0-9a-f]{4})-([0-9a-f]{4})-.*$/); - const match_chrome = gamepad.id.match(/^.*\(.*Vendor: ([0-9a-f]{4}) Product: ([0-9a-f]{4})\).*$/); - const vendor = (match && match[1]) || (match_chrome && match_chrome[1]) || "0000"; - const product = (match && match[2]) || (match_chrome && match_chrome[2]) || "0000"; - switch (vendor + product) { - case "046dc216": // Logitech Logitech Dual Action (Vendor: 046d Product: c216) - MAP_BUTTON(ImGui.NavInput.Activate, 1); // Cross / A - MAP_BUTTON(ImGui.NavInput.Cancel, 2); // Circle / B - MAP_BUTTON(ImGui.NavInput.Menu, 0); // Square / X - MAP_BUTTON(ImGui.NavInput.Input, 3); // Triangle / Y - MAP_ANALOG(ImGui.NavInput.DpadLeft, 4, -0.3, -0.9); // D-Pad Left - MAP_ANALOG(ImGui.NavInput.DpadRight, 4, +0.3, +0.9); // D-Pad Right - MAP_ANALOG(ImGui.NavInput.DpadUp, 5, -0.3, -0.9); // D-Pad Up - MAP_ANALOG(ImGui.NavInput.DpadDown, 5, +0.3, +0.9); // D-Pad Down - MAP_BUTTON(ImGui.NavInput.FocusPrev, 4); // L1 / LB - MAP_BUTTON(ImGui.NavInput.FocusNext, 5); // R1 / RB - MAP_BUTTON(ImGui.NavInput.TweakSlow, 6); // L2 / LT - MAP_BUTTON(ImGui.NavInput.TweakFast, 7); // R2 / RT - MAP_ANALOG(ImGui.NavInput.LStickLeft, 0, -0.3, -0.9); - MAP_ANALOG(ImGui.NavInput.LStickRight, 0, +0.3, +0.9); - MAP_ANALOG(ImGui.NavInput.LStickUp, 1, -0.3, -0.9); - MAP_ANALOG(ImGui.NavInput.LStickDown, 1, +0.3, +0.9); - break; - case "046dc21d": // Logitech Gamepad F310 (STANDARD GAMEPAD Vendor: 046d Product: c21d) - MAP_BUTTON(ImGui.NavInput.Activate, 0); // Cross / A - MAP_BUTTON(ImGui.NavInput.Cancel, 1); // Circle / B - MAP_BUTTON(ImGui.NavInput.Menu, 2); // Square / X - MAP_BUTTON(ImGui.NavInput.Input, 3); // Triangle / Y - MAP_BUTTON(ImGui.NavInput.DpadLeft, 14); // D-Pad Left - MAP_BUTTON(ImGui.NavInput.DpadRight, 15); // D-Pad Right - MAP_BUTTON(ImGui.NavInput.DpadUp, 12); // D-Pad Up - MAP_BUTTON(ImGui.NavInput.DpadDown, 13); // D-Pad Down - MAP_BUTTON(ImGui.NavInput.FocusPrev, 4); // L1 / LB - MAP_BUTTON(ImGui.NavInput.FocusNext, 5); // R1 / RB - MAP_ANALOG(ImGui.NavInput.TweakSlow, 6, +0.3, +0.9); // L2 / LT - MAP_ANALOG(ImGui.NavInput.TweakFast, 7, +0.3, +0.9); // R2 / RT - MAP_ANALOG(ImGui.NavInput.LStickLeft, 0, -0.3, -0.9); - MAP_ANALOG(ImGui.NavInput.LStickRight, 0, +0.3, +0.9); - MAP_ANALOG(ImGui.NavInput.LStickUp, 1, -0.3, -0.9); - MAP_ANALOG(ImGui.NavInput.LStickDown, 1, +0.3, +0.9); - break; - case "2dc86001": // 8Bitdo SN30 Pro 8Bitdo SN30 Pro (Vendor: 2dc8 Product: 6001) - case "2dc86101": // 8Bitdo SN30 Pro (Vendor: 2dc8 Product: 6101) - MAP_BUTTON(ImGui.NavInput.Activate, 1); // Cross / A - MAP_BUTTON(ImGui.NavInput.Cancel, 0); // Circle / B - MAP_BUTTON(ImGui.NavInput.Menu, 4); // Square / X - MAP_BUTTON(ImGui.NavInput.Input, 3); // Triangle / Y - MAP_ANALOG(ImGui.NavInput.DpadLeft, 6, -0.3, -0.9); // D-Pad Left - MAP_ANALOG(ImGui.NavInput.DpadRight, 6, +0.3, +0.9); // D-Pad Right - MAP_ANALOG(ImGui.NavInput.DpadUp, 7, -0.3, -0.9); // D-Pad Up - MAP_ANALOG(ImGui.NavInput.DpadDown, 7, +0.3, +0.9); // D-Pad Down - MAP_BUTTON(ImGui.NavInput.FocusPrev, 6); // L1 / LB - MAP_BUTTON(ImGui.NavInput.FocusNext, 7); // R1 / RB - MAP_BUTTON(ImGui.NavInput.TweakSlow, 8); // L2 / LT - MAP_BUTTON(ImGui.NavInput.TweakFast, 9); // R2 / RT - MAP_ANALOG(ImGui.NavInput.LStickLeft, 0, -0.3, -0.9); - MAP_ANALOG(ImGui.NavInput.LStickRight, 0, +0.3, +0.9); - MAP_ANALOG(ImGui.NavInput.LStickUp, 1, -0.3, -0.9); - MAP_ANALOG(ImGui.NavInput.LStickDown, 1, +0.3, +0.9); - break; - default: // standard gamepad: https://w3c.github.io/gamepad/#remapping - MAP_BUTTON(ImGui.NavInput.Activate, 0); // Cross / A - MAP_BUTTON(ImGui.NavInput.Cancel, 1); // Circle / B - MAP_BUTTON(ImGui.NavInput.Menu, 2); // Square / X - MAP_BUTTON(ImGui.NavInput.Input, 3); // Triangle / Y - MAP_BUTTON(ImGui.NavInput.DpadLeft, 14); // D-Pad Left - MAP_BUTTON(ImGui.NavInput.DpadRight, 15); // D-Pad Right - MAP_BUTTON(ImGui.NavInput.DpadUp, 12); // D-Pad Up - MAP_BUTTON(ImGui.NavInput.DpadDown, 13); // D-Pad Down - MAP_BUTTON(ImGui.NavInput.FocusPrev, 4); // L1 / LB - MAP_BUTTON(ImGui.NavInput.FocusNext, 5); // R1 / RB - MAP_BUTTON(ImGui.NavInput.TweakSlow, 6); // L2 / LT - MAP_BUTTON(ImGui.NavInput.TweakFast, 7); // R2 / RT - MAP_ANALOG(ImGui.NavInput.LStickLeft, 0, -0.3, -0.9); - MAP_ANALOG(ImGui.NavInput.LStickRight, 0, +0.3, +0.9); - MAP_ANALOG(ImGui.NavInput.LStickUp, 1, -0.3, -0.9); - MAP_ANALOG(ImGui.NavInput.LStickDown, 1, +0.3, +0.9); - break; - } - } - } - } - exports_1("NewFrame", NewFrame); - function RenderDrawData(draw_data = ImGui.GetDrawData()) { - const io = ImGui.GetIO(); - if (draw_data === null) { - throw new Error(); - } - gl || ctx || console.log(draw_data); - // Avoid rendering when minimized, scale coordinates for retina displays (screen coordinates != framebuffer coordinates) - const fb_width = io.DisplaySize.x * io.DisplayFramebufferScale.x; - const fb_height = io.DisplaySize.y * io.DisplayFramebufferScale.y; - if (fb_width === 0 || fb_height === 0) { - return; - } - draw_data.ScaleClipRects(io.DisplayFramebufferScale); - // Backup GL state - const last_active_texture = gl && gl.getParameter(gl.ACTIVE_TEXTURE) || null; - const last_program = gl && gl.getParameter(gl.CURRENT_PROGRAM) || null; - const last_texture = gl && gl.getParameter(gl.TEXTURE_BINDING_2D) || null; - const last_array_buffer = gl && gl.getParameter(gl.ARRAY_BUFFER_BINDING) || null; - const last_element_array_buffer = gl && gl.getParameter(gl.ELEMENT_ARRAY_BUFFER_BINDING) || null; - // GLint last_polygon_mode[2]; glGetIntegerv(GL_POLYGON_MODE, last_polygon_mode); - const last_viewport = gl && gl.getParameter(gl.VIEWPORT) || null; - const last_scissor_box = gl && gl.getParameter(gl.SCISSOR_BOX) || null; - const last_blend_src_rgb = gl && gl.getParameter(gl.BLEND_SRC_RGB) || null; - const last_blend_dst_rgb = gl && gl.getParameter(gl.BLEND_DST_RGB) || null; - const last_blend_src_alpha = gl && gl.getParameter(gl.BLEND_SRC_ALPHA) || null; - const last_blend_dst_alpha = gl && gl.getParameter(gl.BLEND_DST_ALPHA) || null; - const last_blend_equation_rgb = gl && gl.getParameter(gl.BLEND_EQUATION_RGB) || null; - const last_blend_equation_alpha = gl && gl.getParameter(gl.BLEND_EQUATION_ALPHA) || null; - const last_enable_blend = gl && gl.getParameter(gl.BLEND) || null; - const last_enable_cull_face = gl && gl.getParameter(gl.CULL_FACE) || null; - const last_enable_depth_test = gl && gl.getParameter(gl.DEPTH_TEST) || null; - const last_enable_scissor_test = gl && gl.getParameter(gl.SCISSOR_TEST) || null; - // Setup render state: alpha-blending enabled, no face culling, no depth testing, scissor enabled, polygon fill - gl && gl.enable(gl.BLEND); - gl && gl.blendEquation(gl.FUNC_ADD); - gl && gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA); - gl && gl.disable(gl.CULL_FACE); - gl && gl.disable(gl.DEPTH_TEST); - gl && gl.enable(gl.SCISSOR_TEST); - // glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); - // Setup viewport, orthographic projection matrix - // Our visible imgui space lies from draw_data->DisplayPps (top left) to draw_data->DisplayPos+data_data->DisplaySize (bottom right). DisplayMin is typically (0,0) for single viewport apps. - gl && gl.viewport(0, 0, fb_width, fb_height); - const L = draw_data.DisplayPos.x; - const R = draw_data.DisplayPos.x + draw_data.DisplaySize.x; - const T = draw_data.DisplayPos.y; - const B = draw_data.DisplayPos.y + draw_data.DisplaySize.y; - const ortho_projection = new Float32Array([ - 2.0 / (R - L), 0.0, 0.0, 0.0, - 0.0, 2.0 / (T - B), 0.0, 0.0, - 0.0, 0.0, -1.0, 0.0, - (R + L) / (L - R), (T + B) / (B - T), 0.0, 1.0, - ]); - gl && gl.useProgram(g_ShaderHandle); - gl && gl.uniform1i(g_AttribLocationTex, 0); - gl && g_AttribLocationProjMtx && gl.uniformMatrix4fv(g_AttribLocationProjMtx, false, ortho_projection); - // Render command lists - gl && gl.bindBuffer(gl.ARRAY_BUFFER, g_VboHandle); - gl && gl.enableVertexAttribArray(g_AttribLocationPosition); - gl && gl.enableVertexAttribArray(g_AttribLocationUV); - gl && gl.enableVertexAttribArray(g_AttribLocationColor); - gl && gl.vertexAttribPointer(g_AttribLocationPosition, 2, gl.FLOAT, false, ImGui.ImDrawVertSize, ImGui.ImDrawVertPosOffset); - gl && gl.vertexAttribPointer(g_AttribLocationUV, 2, gl.FLOAT, false, ImGui.ImDrawVertSize, ImGui.ImDrawVertUVOffset); - gl && gl.vertexAttribPointer(g_AttribLocationColor, 4, gl.UNSIGNED_BYTE, true, ImGui.ImDrawVertSize, ImGui.ImDrawVertColOffset); - // Draw - const pos = draw_data.DisplayPos; - const idx_buffer_type = gl && ((ImGui.ImDrawIdxSize === 4) ? gl.UNSIGNED_INT : gl.UNSIGNED_SHORT) || 0; - draw_data.IterateDrawLists((draw_list) => { - gl || ctx || console.log(draw_list); - gl || ctx || console.log("VtxBuffer.length", draw_list.VtxBuffer.length); - gl || ctx || console.log("IdxBuffer.length", draw_list.IdxBuffer.length); - let idx_buffer_offset = 0; - gl && gl.bindBuffer(gl.ARRAY_BUFFER, g_VboHandle); - gl && gl.bufferData(gl.ARRAY_BUFFER, draw_list.VtxBuffer, gl.STREAM_DRAW); - gl && gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, g_ElementsHandle); - gl && gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, draw_list.IdxBuffer, gl.STREAM_DRAW); - draw_list.IterateDrawCmds((draw_cmd) => { - gl || ctx || console.log(draw_cmd); - gl || ctx || console.log("ElemCount", draw_cmd.ElemCount); - gl || ctx || console.log("ClipRect", draw_cmd.ClipRect.x, fb_height - draw_cmd.ClipRect.w, draw_cmd.ClipRect.z - draw_cmd.ClipRect.x, draw_cmd.ClipRect.w - draw_cmd.ClipRect.y); - gl || ctx || console.log("TextureId", draw_cmd.TextureId); - if (!gl && !ctx) { - console.log("i: pos.x pos.y uv.x uv.y col"); - for (let i = 0; i < Math.min(3, draw_cmd.ElemCount); ++i) { - const view = new ImGui.ImDrawVert(draw_list.VtxBuffer.buffer, draw_list.VtxBuffer.byteOffset + i * ImGui.ImDrawVertSize); - console.log(`${i}: ${view.pos[0].toFixed(2)} ${view.pos[1].toFixed(2)} ${view.uv[0].toFixed(5)} ${view.uv[1].toFixed(5)} ${("00000000" + view.col[0].toString(16)).substr(-8)}`); - } - } - if (draw_cmd.UserCallback !== null) { - // User callback (registered via ImDrawList::AddCallback) - draw_cmd.UserCallback(draw_list, draw_cmd); - } - else { - const clip_rect = new ImGui.ImVec4(draw_cmd.ClipRect.x - pos.x, draw_cmd.ClipRect.y - pos.y, draw_cmd.ClipRect.z - pos.x, draw_cmd.ClipRect.w - pos.y); - if (clip_rect.x < fb_width && clip_rect.y < fb_height && clip_rect.z >= 0.0 && clip_rect.w >= 0.0) { - // Apply scissor/clipping rectangle - gl && gl.scissor(clip_rect.x, fb_height - clip_rect.w, clip_rect.z - clip_rect.x, clip_rect.w - clip_rect.y); - // Bind texture, Draw - gl && gl.activeTexture(gl.TEXTURE0); - gl && gl.bindTexture(gl.TEXTURE_2D, draw_cmd.TextureId); - gl && gl.drawElements(gl.TRIANGLES, draw_cmd.ElemCount, idx_buffer_type, idx_buffer_offset); - if (ctx) { - ctx.save(); - ctx.beginPath(); - ctx.rect(clip_rect.x, clip_rect.y, clip_rect.z - clip_rect.x, clip_rect.w - clip_rect.y); - ctx.clip(); - const idx = ImGui.ImDrawIdxSize === 4 ? - new Uint32Array(draw_list.IdxBuffer.buffer, draw_list.IdxBuffer.byteOffset + idx_buffer_offset) : - new Uint16Array(draw_list.IdxBuffer.buffer, draw_list.IdxBuffer.byteOffset + idx_buffer_offset); - for (let i = 0; i < draw_cmd.ElemCount; i += 3) { - const i0 = idx[i + 0]; - const i1 = idx[i + 1]; - const i2 = idx[i + 2]; - const v0 = new ImGui.ImDrawVert(draw_list.VtxBuffer.buffer, draw_list.VtxBuffer.byteOffset + i0 * ImGui.ImDrawVertSize); - const v1 = new ImGui.ImDrawVert(draw_list.VtxBuffer.buffer, draw_list.VtxBuffer.byteOffset + i1 * ImGui.ImDrawVertSize); - const v2 = new ImGui.ImDrawVert(draw_list.VtxBuffer.buffer, draw_list.VtxBuffer.byteOffset + i2 * ImGui.ImDrawVertSize); - const i3 = idx[i + 3]; - const i4 = idx[i + 4]; - const i5 = idx[i + 5]; - const v3 = new ImGui.ImDrawVert(draw_list.VtxBuffer.buffer, draw_list.VtxBuffer.byteOffset + i3 * ImGui.ImDrawVertSize); - const v4 = new ImGui.ImDrawVert(draw_list.VtxBuffer.buffer, draw_list.VtxBuffer.byteOffset + i4 * ImGui.ImDrawVertSize); - const v5 = new ImGui.ImDrawVert(draw_list.VtxBuffer.buffer, draw_list.VtxBuffer.byteOffset + i5 * ImGui.ImDrawVertSize); - let quad = true; - let minmin = v0; - let minmax = v0; - let maxmin = v0; - let maxmax = v0; - for (const v of [v1, v2, v3, v4, v5]) { - let found = false; - if (v.pos[0] <= minmin.pos[0] && v.pos[1] <= minmin.pos[1]) { - minmin = v; - found = true; - } - if (v.pos[0] <= minmax.pos[0] && v.pos[1] >= minmax.pos[1]) { - minmax = v; - found = true; - } - if (v.pos[0] >= maxmin.pos[0] && v.pos[1] <= maxmin.pos[1]) { - maxmin = v; - found = true; - } - if (v.pos[0] >= maxmax.pos[0] && v.pos[1] >= maxmax.pos[1]) { - maxmax = v; - found = true; - } - if (!found) { - quad = false; - } - } - quad = quad && (minmin.pos[0] === minmax.pos[0]); - quad = quad && (maxmin.pos[0] === maxmax.pos[0]); - quad = quad && (minmin.pos[1] === maxmin.pos[1]); - quad = quad && (minmax.pos[1] === maxmax.pos[1]); - if (quad) { - if (minmin.uv[0] < 0.01 && minmin.uv[1] < 0.01) { - // one vertex color - ctx.beginPath(); - ctx.rect(minmin.pos[0], minmin.pos[1], maxmax.pos[0] - minmin.pos[0], maxmax.pos[1] - minmin.pos[1]); - ctx.fillStyle = `rgba(${v0.col[0] >> 0 & 0xff}, ${v0.col[0] >> 8 & 0xff}, ${v0.col[0] >> 16 & 0xff}, ${(v0.col[0] >> 24 & 0xff) / 0xff})`; - ctx.fill(); - } - else { - // no vertex color - const image = draw_cmd.TextureId; - ctx.drawImage(image, minmin.uv[0] * image.width, minmin.uv[1] * image.height, (maxmax.uv[0] - minmin.uv[0]) * image.width, (maxmax.uv[1] - minmin.uv[1]) * image.height, minmin.pos[0], minmin.pos[1], maxmax.pos[0] - minmin.pos[0], maxmax.pos[1] - minmin.pos[1]); - // ctx.beginPath(); - // ctx.rect(minmin.pos[0], minmin.pos[1], maxmax.pos[0] - minmin.pos[0], maxmax.pos[1] - minmin.pos[1]); - // ctx.strokeStyle = "yellow"; - // ctx.stroke(); - } - i += 3; - } - else { - // one vertex color, no texture - ctx.beginPath(); - ctx.moveTo(v0.pos[0], v0.pos[1]); - ctx.lineTo(v1.pos[0], v1.pos[1]); - ctx.lineTo(v2.pos[0], v2.pos[1]); - ctx.closePath(); - ctx.fillStyle = `rgba(${v0.col[0] >> 0 & 0xff}, ${v0.col[0] >> 8 & 0xff}, ${v0.col[0] >> 16 & 0xff}, ${(v0.col[0] >> 24 & 0xff) / 0xff})`; - ctx.fill(); - } - } - ctx.restore(); - } - } - } - idx_buffer_offset += draw_cmd.ElemCount * ImGui.ImDrawIdxSize; - }); - }); - // Restore modified GL state - gl && (last_program !== null) && gl.useProgram(last_program); - gl && (last_texture !== null) && gl.bindTexture(gl.TEXTURE_2D, last_texture); - gl && (last_active_texture !== null) && gl.activeTexture(last_active_texture); - gl && gl.disableVertexAttribArray(g_AttribLocationPosition); - gl && gl.disableVertexAttribArray(g_AttribLocationUV); - gl && gl.disableVertexAttribArray(g_AttribLocationColor); - gl && (last_array_buffer !== null) && gl.bindBuffer(gl.ARRAY_BUFFER, last_array_buffer); - gl && (last_element_array_buffer !== null) && gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, last_element_array_buffer); - gl && (last_blend_equation_rgb !== null && last_blend_equation_alpha !== null) && gl.blendEquationSeparate(last_blend_equation_rgb, last_blend_equation_alpha); - gl && (last_blend_src_rgb !== null && last_blend_src_alpha !== null && last_blend_dst_rgb !== null && last_blend_dst_alpha !== null) && gl.blendFuncSeparate(last_blend_src_rgb, last_blend_src_alpha, last_blend_dst_rgb, last_blend_dst_alpha); - gl && (last_enable_blend ? gl.enable(gl.BLEND) : gl.disable(gl.BLEND)); - gl && (last_enable_cull_face ? gl.enable(gl.CULL_FACE) : gl.disable(gl.CULL_FACE)); - gl && (last_enable_depth_test ? gl.enable(gl.DEPTH_TEST) : gl.disable(gl.DEPTH_TEST)); - gl && (last_enable_scissor_test ? gl.enable(gl.SCISSOR_TEST) : gl.disable(gl.SCISSOR_TEST)); - // glPolygonMode(GL_FRONT_AND_BACK, (GLenum)last_polygon_mode[0]); - gl && (last_viewport !== null) && gl.viewport(last_viewport[0], last_viewport[1], last_viewport[2], last_viewport[3]); - gl && (last_scissor_box !== null) && gl.scissor(last_scissor_box[0], last_scissor_box[1], last_scissor_box[2], last_scissor_box[3]); - } - exports_1("RenderDrawData", RenderDrawData); function CreateFontsTexture() { const io = ImGui.GetIO(); // Backup GL state @@ -653,19 +188,6 @@ // Store our identifier io.Fonts.TexID = g_FontTexture || { foo: "bar" }; // console.log("font texture id", g_FontTexture); - if (ctx) { - const image_canvas = document.createElement("canvas"); - image_canvas.width = width; - image_canvas.height = height; - const image_ctx = image_canvas.getContext("2d"); - if (image_ctx === null) { - throw new Error(); - } - const image_data = image_ctx.getImageData(0, 0, width, height); - image_data.data.set(pixels); - image_ctx.putImageData(image_data, 0, 0); - io.Fonts.TexID = image_canvas; - } // Restore modified GL state gl && last_texture && gl.bindTexture(gl.TEXTURE_2D, last_texture); } @@ -743,19 +265,430 @@ setters: [ function (ImGui_1) { ImGui = ImGui_1; + }, + function (PIXI_1) { + PIXI = PIXI_1; + }, + function (U_1) { + U = U_1; } ], execute: function () { clipboard_text = ""; - ImGuiImplPIXI = class ImGuiImplPIXI { - constructor(app, owner) { - this.app = app; - this.owner = owner; + contexts = []; + contextIOs = []; + isFirstWindow = true; + ImGuiImplInternalRenderer = class ImGuiImplInternalRenderer extends PIXI.ObjectRenderer { + constructor(r) { + super(r); + } + render(owner) { + if (!(owner instanceof ImGuiWindow)) + return; + const window = owner; + const io = window.io; + const draw_data = ImGui.GetDrawData(); + if (draw_data === null) { + throw new Error(); + } + gl || console.log(draw_data); + // Avoid rendering when minimized, scale coordinates for retina displays (screen coordinates != framebuffer coordinates) + const fb_width = io.DisplaySize.x * io.DisplayFramebufferScale.x; + const fb_height = io.DisplaySize.y * io.DisplayFramebufferScale.y; + if (fb_width === 0 || fb_height === 0) { + return; + } + draw_data.ScaleClipRects(io.DisplayFramebufferScale); + // Backup GL state + const last_active_texture = gl && gl.getParameter(gl.ACTIVE_TEXTURE) || null; + const last_program = gl && gl.getParameter(gl.CURRENT_PROGRAM) || null; + const last_texture = gl && gl.getParameter(gl.TEXTURE_BINDING_2D) || null; + const last_array_buffer = gl && gl.getParameter(gl.ARRAY_BUFFER_BINDING) || null; + const last_element_array_buffer = gl && gl.getParameter(gl.ELEMENT_ARRAY_BUFFER_BINDING) || null; + // GLint last_polygon_mode[2]; glGetIntegerv(GL_POLYGON_MODE, last_polygon_mode); + const last_viewport = gl && gl.getParameter(gl.VIEWPORT) || null; + const last_scissor_box = gl && gl.getParameter(gl.SCISSOR_BOX) || null; + const last_blend_src_rgb = gl && gl.getParameter(gl.BLEND_SRC_RGB) || null; + const last_blend_dst_rgb = gl && gl.getParameter(gl.BLEND_DST_RGB) || null; + const last_blend_src_alpha = gl && gl.getParameter(gl.BLEND_SRC_ALPHA) || null; + const last_blend_dst_alpha = gl && gl.getParameter(gl.BLEND_DST_ALPHA) || null; + const last_blend_equation_rgb = gl && gl.getParameter(gl.BLEND_EQUATION_RGB) || null; + const last_blend_equation_alpha = gl && gl.getParameter(gl.BLEND_EQUATION_ALPHA) || null; + const last_enable_blend = gl && gl.getParameter(gl.BLEND) || null; + const last_enable_cull_face = gl && gl.getParameter(gl.CULL_FACE) || null; + const last_enable_depth_test = gl && gl.getParameter(gl.DEPTH_TEST) || null; + const last_enable_scissor_test = gl && gl.getParameter(gl.SCISSOR_TEST) || null; + // Setup render state: alpha-blending enabled, no face culling, no depth testing, scissor enabled, polygon fill + gl && gl.enable(gl.BLEND); + gl && gl.blendEquation(gl.FUNC_ADD); + gl && gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA); + gl && gl.disable(gl.CULL_FACE); + gl && gl.disable(gl.DEPTH_TEST); + gl && gl.enable(gl.SCISSOR_TEST); + // glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); + // Setup viewport, orthographic projection matrix + // Our visible imgui space lies from draw_data->DisplayPps (top left) to draw_data->DisplayPos+data_data->DisplaySize (bottom right). DisplayMin is typically (0,0) for single viewport apps. + gl && gl.viewport(0, 0, fb_width, fb_height); + const L = draw_data.DisplayPos.x; + const R = draw_data.DisplayPos.x + draw_data.DisplaySize.x; + const T = draw_data.DisplayPos.y; + const B = draw_data.DisplayPos.y + draw_data.DisplaySize.y; + const ortho_projection = new Float32Array([ + 2.0 / (R - L), 0.0, 0.0, 0.0, + 0.0, 2.0 / (T - B), 0.0, 0.0, + 0.0, 0.0, -1.0, 0.0, + (R + L) / (L - R), (T + B) / (B - T), 0.0, 1.0, + ]); + gl && gl.useProgram(g_ShaderHandle); + gl && gl.uniform1i(g_AttribLocationTex, 0); + gl && g_AttribLocationProjMtx && gl.uniformMatrix4fv(g_AttribLocationProjMtx, false, ortho_projection); + // Render command lists + gl && gl.bindBuffer(gl.ARRAY_BUFFER, g_VboHandle); + gl && gl.enableVertexAttribArray(g_AttribLocationPosition); + gl && gl.enableVertexAttribArray(g_AttribLocationUV); + gl && gl.enableVertexAttribArray(g_AttribLocationColor); + gl && gl.vertexAttribPointer(g_AttribLocationPosition, 2, gl.FLOAT, false, ImGui.ImDrawVertSize, ImGui.ImDrawVertPosOffset); + gl && gl.vertexAttribPointer(g_AttribLocationUV, 2, gl.FLOAT, false, ImGui.ImDrawVertSize, ImGui.ImDrawVertUVOffset); + gl && gl.vertexAttribPointer(g_AttribLocationColor, 4, gl.UNSIGNED_BYTE, true, ImGui.ImDrawVertSize, ImGui.ImDrawVertColOffset); + // Draw + const pos = draw_data.DisplayPos; + const idx_buffer_type = gl && ((ImGui.ImDrawIdxSize === 4) ? gl.UNSIGNED_INT : gl.UNSIGNED_SHORT) || 0; + draw_data.IterateDrawLists((draw_list) => { + gl || console.log(draw_list); + gl || console.log("VtxBuffer.length", draw_list.VtxBuffer.length); + gl || console.log("IdxBuffer.length", draw_list.IdxBuffer.length); + let idx_buffer_offset = 0; + gl && gl.bindBuffer(gl.ARRAY_BUFFER, g_VboHandle); + gl && gl.bufferData(gl.ARRAY_BUFFER, draw_list.VtxBuffer, gl.STREAM_DRAW); + gl && gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, g_ElementsHandle); + gl && gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, draw_list.IdxBuffer, gl.STREAM_DRAW); + draw_list.IterateDrawCmds((draw_cmd) => { + gl || console.log(draw_cmd); + gl || console.log("ElemCount", draw_cmd.ElemCount); + gl || console.log("ClipRect", draw_cmd.ClipRect.x, fb_height - draw_cmd.ClipRect.w, draw_cmd.ClipRect.z - draw_cmd.ClipRect.x, draw_cmd.ClipRect.w - draw_cmd.ClipRect.y); + gl || console.log("TextureId", draw_cmd.TextureId); + if (!gl) { + console.log("i: pos.x pos.y uv.x uv.y col"); + for (let i = 0; i < Math.min(3, draw_cmd.ElemCount); ++i) { + const view = new ImGui.ImDrawVert(draw_list.VtxBuffer.buffer, draw_list.VtxBuffer.byteOffset + i * ImGui.ImDrawVertSize); + console.log(`${i}: ${view.pos[0].toFixed(2)} ${view.pos[1].toFixed(2)} ${view.uv[0].toFixed(5)} ${view.uv[1].toFixed(5)} ${("00000000" + view.col[0].toString(16)).substr(-8)}`); + } + } + if (draw_cmd.UserCallback !== null) { + // User callback (registered via ImDrawList::AddCallback) + draw_cmd.UserCallback(draw_list, draw_cmd); + } + else { + const clip_rect = new ImGui.ImVec4(draw_cmd.ClipRect.x - pos.x, draw_cmd.ClipRect.y - pos.y, draw_cmd.ClipRect.z - pos.x, draw_cmd.ClipRect.w - pos.y); + if (clip_rect.x < fb_width && clip_rect.y < fb_height && clip_rect.z >= 0.0 && clip_rect.w >= 0.0) { + // Apply scissor/clipping rectangle + gl && gl.scissor(clip_rect.x, fb_height - clip_rect.w, clip_rect.z - clip_rect.x, clip_rect.w - clip_rect.y); + // Bind texture, Draw + gl && gl.activeTexture(gl.TEXTURE0); + gl && gl.bindTexture(gl.TEXTURE_2D, draw_cmd.TextureId); + gl && gl.drawElements(gl.TRIANGLES, draw_cmd.ElemCount, idx_buffer_type, idx_buffer_offset); + } + } + idx_buffer_offset += draw_cmd.ElemCount * ImGui.ImDrawIdxSize; + }); + }); + // Restore modified GL state + gl && (last_program !== null) && gl.useProgram(last_program); + gl && (last_texture !== null) && gl.bindTexture(gl.TEXTURE_2D, last_texture); + gl && (last_active_texture !== null) && gl.activeTexture(last_active_texture); + gl && gl.disableVertexAttribArray(g_AttribLocationPosition); + gl && gl.disableVertexAttribArray(g_AttribLocationUV); + gl && gl.disableVertexAttribArray(g_AttribLocationColor); + gl && (last_array_buffer !== null) && gl.bindBuffer(gl.ARRAY_BUFFER, last_array_buffer); + gl && (last_element_array_buffer !== null) && gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, last_element_array_buffer); + gl && (last_blend_equation_rgb !== null && last_blend_equation_alpha !== null) && gl.blendEquationSeparate(last_blend_equation_rgb, last_blend_equation_alpha); + gl && (last_blend_src_rgb !== null && last_blend_src_alpha !== null && last_blend_dst_rgb !== null && last_blend_dst_alpha !== null) && gl.blendFuncSeparate(last_blend_src_rgb, last_blend_src_alpha, last_blend_dst_rgb, last_blend_dst_alpha); + gl && (last_enable_blend ? gl.enable(gl.BLEND) : gl.disable(gl.BLEND)); + gl && (last_enable_cull_face ? gl.enable(gl.CULL_FACE) : gl.disable(gl.CULL_FACE)); + gl && (last_enable_depth_test ? gl.enable(gl.DEPTH_TEST) : gl.disable(gl.DEPTH_TEST)); + gl && (last_enable_scissor_test ? gl.enable(gl.SCISSOR_TEST) : gl.disable(gl.SCISSOR_TEST)); + // glPolygonMode(GL_FRONT_AND_BACK, (GLenum)last_polygon_mode[0]); + gl && (last_viewport !== null) && gl.viewport(last_viewport[0], last_viewport[1], last_viewport[2], last_viewport[3]); + gl && (last_scissor_box !== null) && gl.scissor(last_scissor_box[0], last_scissor_box[1], last_scissor_box[2], last_scissor_box[3]); } }; - exports_1("ImGuiImplPIXI", ImGuiImplPIXI); + gl = null; + app = null; + ImGuiWindow = class ImGuiWindow extends PIXI.Container { + constructor(sizeX, sizeY, update) { + super(); + this.baseTex = new PIXI.BaseRenderTexture({ scaleMode: PIXI.SCALE_MODES.LINEAR, resolution: 1 }); + this.tex = new PIXI.RenderTexture(this.baseTex); + this.surface = new PIXI.Sprite(this.tex); + this.imgui = new PIXI.Sprite(); + if (isFirstWindow) { + this.ctx = contexts[0]; + this.io = contextIOs[0]; + } + else { + this.ctx = ImGui.CreateContext(); + ImGui.SetCurrentContext(this.ctx); + this.io = ImGui.GetIO(); + } + if (!isFirstWindow) { + this.io.Fonts.TexID = contextIOs[0].Fonts.TexID; + } + isFirstWindow = false; + if (typeof (navigator) !== "undefined") { + this.io.ConfigMacOSXBehaviors = navigator.platform.match(/Mac/) !== null; + } + this.io.SetClipboardTextFn = (user_data, text) => { + clipboard_text = text; + // console.log(`set clipboard_text: "${clipboard_text}"`); + if (typeof navigator !== "undefined" && typeof navigator.clipboard !== "undefined") { + // console.log(`clipboard.writeText: "${clipboard_text}"`); + navigator.clipboard.writeText(clipboard_text).then(() => { + // console.log(`clipboard.writeText: "${clipboard_text}" done.`); + }); + } + }; + this.io.GetClipboardTextFn = (user_data) => { + // if (typeof navigator !== "undefined" && typeof (navigator as any).clipboard !== "undefined") { + // console.log(`clipboard.readText: "${clipboard_text}"`); + // (navigator as any).clipboard.readText().then((text: string): void => { + // clipboard_text = text; + // console.log(`clipboard.readText: "${clipboard_text}" done.`); + // }); + // } + // console.log(`get clipboard_text: "${clipboard_text}"`); + return clipboard_text; + }; + this.io.ClipboardUserData = null; + // Setup back-end capabilities flags + this.io.BackendFlags |= ImGui.BackendFlags.HasMouseCursors; // We can honor GetMouseCursor() values (optional) + // Keyboard mapping. ImGui will use those indices to peek into the io.KeyDown[] array. + this.io.KeyMap[ImGui.Key.Tab] = 9; + this.io.KeyMap[ImGui.Key.LeftArrow] = 37; + this.io.KeyMap[ImGui.Key.RightArrow] = 39; + this.io.KeyMap[ImGui.Key.UpArrow] = 38; + this.io.KeyMap[ImGui.Key.DownArrow] = 40; + this.io.KeyMap[ImGui.Key.PageUp] = 33; + this.io.KeyMap[ImGui.Key.PageDown] = 34; + this.io.KeyMap[ImGui.Key.Home] = 36; + this.io.KeyMap[ImGui.Key.End] = 35; + this.io.KeyMap[ImGui.Key.Insert] = 45; + this.io.KeyMap[ImGui.Key.Delete] = 46; + this.io.KeyMap[ImGui.Key.Backspace] = 8; + this.io.KeyMap[ImGui.Key.Space] = 32; + this.io.KeyMap[ImGui.Key.Enter] = 13; + this.io.KeyMap[ImGui.Key.Escape] = 27; + this.io.KeyMap[ImGui.Key.A] = 65; + this.io.KeyMap[ImGui.Key.C] = 67; + this.io.KeyMap[ImGui.Key.V] = 86; + this.io.KeyMap[ImGui.Key.X] = 88; + this.io.KeyMap[ImGui.Key.Y] = 89; + this.io.KeyMap[ImGui.Key.Z] = 90; + contextIOs.push(this.io); + this.update = update; + this.resize(sizeX, sizeY); + this.imgui.pluginName = 'imgui_renderer'; + this.addChild(this.surface); + this.surface.addListener("mousedown", this.mouseDown.bind(this)); + this.surface.addListener("mouseup", this.mouseUp.bind(this)); + app.ticker.add(this.updateInternal.bind(this)); + } + getSizeX() { return this.sizeX; } + getSizeY() { return this.sizeY; } + mouseDown(e) { + this.io.MouseDown[mouse_button_map[0]] = true; + } + mouseUp(e) { + this.io.MouseDown[mouse_button_map[0]] = false; + } + resize(sizeX, sizeY) { + this.sizeX = sizeX; + this.sizeY = sizeY; + this.baseTex.resize(sizeX, sizeY); + this.tex.frame = new PIXI.Rectangle(0, 0, this.baseTex.width, this.baseTex.height); + this.surface.hitArea = this.tex.frame; + } + updateInternal(deltaTime) { + const dt = deltaTime * 1 / (1000 * PIXI.settings.TARGET_FPMS); + ImGui.SetCurrentContext(this.ctx); + if (this.io.WantSaveIniSettings) { + this.io.WantSaveIniSettings = false; + if (typeof (window) !== "undefined") { + window.localStorage.setItem("imgui.ini", ImGui.SaveIniSettingsToMemory()); + } + } + this.io.DisplaySize.x = this.sizeX; + this.io.DisplaySize.y = this.sizeY; + this.io.DisplayFramebufferScale.x = 1; + this.io.DisplayFramebufferScale.y = 1; + this.io.DeltaTime = dt; + const localPos = this.getGlobalPosition(new PIXI.Point()); + this.io.MousePos.x = localPos.x; + this.io.MousePos.y = localPos.y; + if (this.io.WantSetMousePos) { + console.log("TODO: MousePos", this.io.MousePos.x, this.io.MousePos.y); + } + if (typeof (document) !== "undefined") { + if (this.io.MouseDrawCursor) { + document.body.style.cursor = "none"; + } + else { + switch (ImGui.GetMouseCursor()) { + case ImGui.MouseCursor.None: + document.body.style.cursor = "none"; + break; + default: + case ImGui.MouseCursor.Arrow: + document.body.style.cursor = "default"; + break; + case ImGui.MouseCursor.TextInput: + document.body.style.cursor = "text"; + break; // When hovering over InputText, etc. + case ImGui.MouseCursor.ResizeAll: + document.body.style.cursor = "move"; + break; // Unused + case ImGui.MouseCursor.ResizeNS: + document.body.style.cursor = "ns-resize"; + break; // When hovering over an horizontal border + case ImGui.MouseCursor.ResizeEW: + document.body.style.cursor = "ew-resize"; + break; // When hovering over a vertical border or a column + case ImGui.MouseCursor.ResizeNESW: + document.body.style.cursor = "nesw-resize"; + break; // When hovering over the bottom-left corner of a window + case ImGui.MouseCursor.ResizeNWSE: + document.body.style.cursor = "nwse-resize"; + break; // When hovering over the bottom-right corner of a window + case ImGui.MouseCursor.Hand: + document.body.style.cursor = "move"; + break; + } + } + } + // Gamepad navigation mapping [BETA] + for (let i = 0; i < this.io.NavInputs.length; ++i) { + this.io.NavInputs[i] = 0.0; + } + if (this.io.ConfigFlags & ImGui.ConfigFlags.NavEnableGamepad) { + // Update gamepad inputs + const gamepads = (typeof (navigator) !== "undefined" && typeof (navigator.getGamepads) === "function") ? navigator.getGamepads() : []; + for (let i = 0; i < gamepads.length; ++i) { + const gamepad = gamepads[i]; + if (!gamepad) { + continue; + } + const buttons_count = gamepad.buttons.length; + const axes_count = gamepad.axes.length; + const MAP_BUTTON = function (NAV_NO, BUTTON_NO) { + if (!gamepad) { + return; + } + if (buttons_count > BUTTON_NO && gamepad.buttons[BUTTON_NO].pressed) + this.io.NavInputs[NAV_NO] = 1.0; + }; + const MAP_ANALOG = function (NAV_NO, AXIS_NO, V0, V1) { + if (!gamepad) { + return; + } + let v = (axes_count > AXIS_NO) ? gamepad.axes[AXIS_NO] : V0; + v = (v - V0) / (V1 - V0); + if (v > 1.0) + v = 1.0; + if (this.io.NavInputs[NAV_NO] < v) + this.io.NavInputs[NAV_NO] = v; + }; + // TODO: map input based on vendor and product id + // https://developer.mozilla.org/en-US/docs/Web/API/Gamepad/id + const match = gamepad.id.match(/^([0-9a-f]{4})-([0-9a-f]{4})-.*$/); + const match_chrome = gamepad.id.match(/^.*\(.*Vendor: ([0-9a-f]{4}) Product: ([0-9a-f]{4})\).*$/); + const vendor = (match && match[1]) || (match_chrome && match_chrome[1]) || "0000"; + const product = (match && match[2]) || (match_chrome && match_chrome[2]) || "0000"; + switch (vendor + product) { + case "046dc216": // Logitech Logitech Dual Action (Vendor: 046d Product: c216) + MAP_BUTTON(ImGui.NavInput.Activate, 1); // Cross / A + MAP_BUTTON(ImGui.NavInput.Cancel, 2); // Circle / B + MAP_BUTTON(ImGui.NavInput.Menu, 0); // Square / X + MAP_BUTTON(ImGui.NavInput.Input, 3); // Triangle / Y + MAP_ANALOG(ImGui.NavInput.DpadLeft, 4, -0.3, -0.9); // D-Pad Left + MAP_ANALOG(ImGui.NavInput.DpadRight, 4, +0.3, +0.9); // D-Pad Right + MAP_ANALOG(ImGui.NavInput.DpadUp, 5, -0.3, -0.9); // D-Pad Up + MAP_ANALOG(ImGui.NavInput.DpadDown, 5, +0.3, +0.9); // D-Pad Down + MAP_BUTTON(ImGui.NavInput.FocusPrev, 4); // L1 / LB + MAP_BUTTON(ImGui.NavInput.FocusNext, 5); // R1 / RB + MAP_BUTTON(ImGui.NavInput.TweakSlow, 6); // L2 / LT + MAP_BUTTON(ImGui.NavInput.TweakFast, 7); // R2 / RT + MAP_ANALOG(ImGui.NavInput.LStickLeft, 0, -0.3, -0.9); + MAP_ANALOG(ImGui.NavInput.LStickRight, 0, +0.3, +0.9); + MAP_ANALOG(ImGui.NavInput.LStickUp, 1, -0.3, -0.9); + MAP_ANALOG(ImGui.NavInput.LStickDown, 1, +0.3, +0.9); + break; + case "046dc21d": // Logitech Gamepad F310 (STANDARD GAMEPAD Vendor: 046d Product: c21d) + MAP_BUTTON(ImGui.NavInput.Activate, 0); // Cross / A + MAP_BUTTON(ImGui.NavInput.Cancel, 1); // Circle / B + MAP_BUTTON(ImGui.NavInput.Menu, 2); // Square / X + MAP_BUTTON(ImGui.NavInput.Input, 3); // Triangle / Y + MAP_BUTTON(ImGui.NavInput.DpadLeft, 14); // D-Pad Left + MAP_BUTTON(ImGui.NavInput.DpadRight, 15); // D-Pad Right + MAP_BUTTON(ImGui.NavInput.DpadUp, 12); // D-Pad Up + MAP_BUTTON(ImGui.NavInput.DpadDown, 13); // D-Pad Down + MAP_BUTTON(ImGui.NavInput.FocusPrev, 4); // L1 / LB + MAP_BUTTON(ImGui.NavInput.FocusNext, 5); // R1 / RB + MAP_ANALOG(ImGui.NavInput.TweakSlow, 6, +0.3, +0.9); // L2 / LT + MAP_ANALOG(ImGui.NavInput.TweakFast, 7, +0.3, +0.9); // R2 / RT + MAP_ANALOG(ImGui.NavInput.LStickLeft, 0, -0.3, -0.9); + MAP_ANALOG(ImGui.NavInput.LStickRight, 0, +0.3, +0.9); + MAP_ANALOG(ImGui.NavInput.LStickUp, 1, -0.3, -0.9); + MAP_ANALOG(ImGui.NavInput.LStickDown, 1, +0.3, +0.9); + break; + case "2dc86001": // 8Bitdo SN30 Pro 8Bitdo SN30 Pro (Vendor: 2dc8 Product: 6001) + case "2dc86101": // 8Bitdo SN30 Pro (Vendor: 2dc8 Product: 6101) + MAP_BUTTON(ImGui.NavInput.Activate, 1); // Cross / A + MAP_BUTTON(ImGui.NavInput.Cancel, 0); // Circle / B + MAP_BUTTON(ImGui.NavInput.Menu, 4); // Square / X + MAP_BUTTON(ImGui.NavInput.Input, 3); // Triangle / Y + MAP_ANALOG(ImGui.NavInput.DpadLeft, 6, -0.3, -0.9); // D-Pad Left + MAP_ANALOG(ImGui.NavInput.DpadRight, 6, +0.3, +0.9); // D-Pad Right + MAP_ANALOG(ImGui.NavInput.DpadUp, 7, -0.3, -0.9); // D-Pad Up + MAP_ANALOG(ImGui.NavInput.DpadDown, 7, +0.3, +0.9); // D-Pad Down + MAP_BUTTON(ImGui.NavInput.FocusPrev, 6); // L1 / LB + MAP_BUTTON(ImGui.NavInput.FocusNext, 7); // R1 / RB + MAP_BUTTON(ImGui.NavInput.TweakSlow, 8); // L2 / LT + MAP_BUTTON(ImGui.NavInput.TweakFast, 9); // R2 / RT + MAP_ANALOG(ImGui.NavInput.LStickLeft, 0, -0.3, -0.9); + MAP_ANALOG(ImGui.NavInput.LStickRight, 0, +0.3, +0.9); + MAP_ANALOG(ImGui.NavInput.LStickUp, 1, -0.3, -0.9); + MAP_ANALOG(ImGui.NavInput.LStickDown, 1, +0.3, +0.9); + break; + default: // standard gamepad: https://w3c.github.io/gamepad/#remapping + MAP_BUTTON(ImGui.NavInput.Activate, 0); // Cross / A + MAP_BUTTON(ImGui.NavInput.Cancel, 1); // Circle / B + MAP_BUTTON(ImGui.NavInput.Menu, 2); // Square / X + MAP_BUTTON(ImGui.NavInput.Input, 3); // Triangle / Y + MAP_BUTTON(ImGui.NavInput.DpadLeft, 14); // D-Pad Left + MAP_BUTTON(ImGui.NavInput.DpadRight, 15); // D-Pad Right + MAP_BUTTON(ImGui.NavInput.DpadUp, 12); // D-Pad Up + MAP_BUTTON(ImGui.NavInput.DpadDown, 13); // D-Pad Down + MAP_BUTTON(ImGui.NavInput.FocusPrev, 4); // L1 / LB + MAP_BUTTON(ImGui.NavInput.FocusNext, 5); // R1 / RB + MAP_BUTTON(ImGui.NavInput.TweakSlow, 6); // L2 / LT + MAP_BUTTON(ImGui.NavInput.TweakFast, 7); // R2 / RT + MAP_ANALOG(ImGui.NavInput.LStickLeft, 0, -0.3, -0.9); + MAP_ANALOG(ImGui.NavInput.LStickRight, 0, +0.3, +0.9); + MAP_ANALOG(ImGui.NavInput.LStickUp, 1, -0.3, -0.9); + MAP_ANALOG(ImGui.NavInput.LStickDown, 1, +0.3, +0.9); + break; + } + } + } + ImGui.NewFrame(); + this.update(dt); + ImGui.EndFrame(); + ImGui.Render(); + app.renderer.render(this.imgui, this.tex); + } + }; + exports_1("ImGuiWindow", ImGuiWindow); canvas = null; - exports_1("gl", gl = null); + //export let gl: WebGL2RenderingContext | null = null; g_ShaderHandle = null; g_VertHandle = null; g_FragHandle = null; @@ -767,7 +700,6 @@ g_VboHandle = null; g_ElementsHandle = null; g_FontTexture = null; - exports_1("ctx", ctx = null); prev_time = 0; // MouseEvent.button // A number representing a given button: diff --git a/src/imgui_impl.js.map b/src/imgui_impl.js.map index 6d2bb7c..68bf7e0 100644 --- a/src/imgui_impl.js.map +++ b/src/imgui_impl.js.map @@ -1 +1 @@ -{"version":3,"file":"imgui_impl.js","sourceRoot":"","sources":["imgui_impl.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"imgui_impl.js","sourceRoot":"","sources":["imgui_impl.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/src/imgui_impl.ts b/src/imgui_impl.ts index b19b8d7..332fd14 100644 --- a/src/imgui_impl.ts +++ b/src/imgui_impl.ts @@ -5,7 +5,9 @@ let clipboard_text: string = ""; +const contexts: ImGui.ImGuiContext[] = []; const contextIOs: ImGui.ImGuiIO[] = []; +let isFirstWindow: boolean = true; class ImGuiImplInternalRenderer extends PIXI.ObjectRenderer { @@ -15,8 +17,11 @@ } render(owner: PIXI.DisplayObject): void { + if (!(owner instanceof ImGuiWindow)) return; - const io: ImGui.ImGuiIO = ImGui.GetIO(); + const window: ImGuiWindow = owner as ImGuiWindow; + + const io: ImGui.ImGuiIO = window.io; const draw_data: ImGui.ImDrawData = ImGui.GetDrawData(); if (draw_data === null) { throw new Error(); } @@ -161,7 +166,7 @@ export class ImGuiWindow extends PIXI.Container { public readonly ctx: ImGui.ImGuiContext; - private readonly io: ImGui.ImGuiIO; + public readonly io: ImGui.ImGuiIO; private sizeX: number; private sizeY: number; public getSizeX(): number { return this.sizeX; } @@ -177,9 +182,80 @@ constructor(sizeX: number, sizeY: number, update: (dt: number) => void) { super(); - this.ctx = ImGui.CreateContext(); - ImGui.SetCurrentContext(this.ctx); - this.io = ImGui.GetIO(); + + if (isFirstWindow) + { + this.ctx = contexts[0]; + this.io = contextIOs[0]; + } + else + { + this.ctx = ImGui.CreateContext(); + ImGui.SetCurrentContext(this.ctx); + this.io = ImGui.GetIO(); + } + + + if (!isFirstWindow) + { + this.io.Fonts.TexID = contextIOs[0].Fonts.TexID; + } + + isFirstWindow = false; + + if (typeof(navigator) !== "undefined") { + this.io.ConfigMacOSXBehaviors = navigator.platform.match(/Mac/) !== null; + } + + this.io.SetClipboardTextFn = (user_data: any, text: string): void => { + clipboard_text = text; + // console.log(`set clipboard_text: "${clipboard_text}"`); + if (typeof navigator !== "undefined" && typeof (navigator as any).clipboard !== "undefined") { + // console.log(`clipboard.writeText: "${clipboard_text}"`); + (navigator as any).clipboard.writeText(clipboard_text).then((): void => { + // console.log(`clipboard.writeText: "${clipboard_text}" done.`); + }); + } + }; + this.io.GetClipboardTextFn = (user_data: any): string => { + // if (typeof navigator !== "undefined" && typeof (navigator as any).clipboard !== "undefined") { + // console.log(`clipboard.readText: "${clipboard_text}"`); + // (navigator as any).clipboard.readText().then((text: string): void => { + // clipboard_text = text; + // console.log(`clipboard.readText: "${clipboard_text}" done.`); + // }); + // } + // console.log(`get clipboard_text: "${clipboard_text}"`); + return clipboard_text; + }; + this.io.ClipboardUserData = null; + + // Setup back-end capabilities flags + this.io.BackendFlags |= ImGui.BackendFlags.HasMouseCursors; // We can honor GetMouseCursor() values (optional) + + // Keyboard mapping. ImGui will use those indices to peek into the io.KeyDown[] array. + this.io.KeyMap[ImGui.Key.Tab] = 9; + this.io.KeyMap[ImGui.Key.LeftArrow] = 37; + this.io.KeyMap[ImGui.Key.RightArrow] = 39; + this.io.KeyMap[ImGui.Key.UpArrow] = 38; + this.io.KeyMap[ImGui.Key.DownArrow] = 40; + this.io.KeyMap[ImGui.Key.PageUp] = 33; + this.io.KeyMap[ImGui.Key.PageDown] = 34; + this.io.KeyMap[ImGui.Key.Home] = 36; + this.io.KeyMap[ImGui.Key.End] = 35; + this.io.KeyMap[ImGui.Key.Insert] = 45; + this.io.KeyMap[ImGui.Key.Delete] = 46; + this.io.KeyMap[ImGui.Key.Backspace] = 8; + this.io.KeyMap[ImGui.Key.Space] = 32; + this.io.KeyMap[ImGui.Key.Enter] = 13; + this.io.KeyMap[ImGui.Key.Escape] = 27; + this.io.KeyMap[ImGui.Key.A] = 65; + this.io.KeyMap[ImGui.Key.C] = 67; + this.io.KeyMap[ImGui.Key.V] = 86; + this.io.KeyMap[ImGui.Key.X] = 88; + this.io.KeyMap[ImGui.Key.Y] = 89; + this.io.KeyMap[ImGui.Key.Z] = 90; + contextIOs.push(this.io); this.update = update; this.resize(sizeX, sizeY); @@ -225,7 +301,6 @@ this.io.DeltaTime = dt; - // TODO global mouse pos to local const localPos: PIXI.Point = this.getGlobalPosition(new PIXI.Point()); this.io.MousePos.x = localPos.x; this.io.MousePos.y = localPos.y; @@ -519,52 +594,31 @@ export function Init(_app: PIXI.Application): void { // Setup Dear ImGui binding ImGui.IMGUI_CHECKVERSION(); + ImGui.CreateContext(); + ImGui.StyleColorsLight(); + + contexts.push(ImGui.GetCurrentContext()); + contextIOs.push(ImGui.GetIO()); + contextIOs[0].Fonts.AddFontDefault(); PIXI.Renderer.registerPlugin("imgui_renderer", U.fromConstructor(ImGuiImplInternalRenderer)); - const io = ImGui.GetIO(); if (typeof(window) !== "undefined") { ImGui.LoadIniSettingsFromMemory(window.localStorage.getItem("imgui.ini") || ""); } - if (typeof(navigator) !== "undefined") { - io.ConfigMacOSXBehaviors = navigator.platform.match(/Mac/) !== null; - } - if (typeof(document) !== "undefined") { document.body.addEventListener("copy", document_on_copy); document.body.addEventListener("cut", document_on_cut); document.body.addEventListener("paste", document_on_paste); } - io.SetClipboardTextFn = (user_data: any, text: string): void => { - clipboard_text = text; - // console.log(`set clipboard_text: "${clipboard_text}"`); - if (typeof navigator !== "undefined" && typeof (navigator as any).clipboard !== "undefined") { - // console.log(`clipboard.writeText: "${clipboard_text}"`); - (navigator as any).clipboard.writeText(clipboard_text).then((): void => { - // console.log(`clipboard.writeText: "${clipboard_text}" done.`); - }); - } - }; - io.GetClipboardTextFn = (user_data: any): string => { - // if (typeof navigator !== "undefined" && typeof (navigator as any).clipboard !== "undefined") { - // console.log(`clipboard.readText: "${clipboard_text}"`); - // (navigator as any).clipboard.readText().then((text: string): void => { - // clipboard_text = text; - // console.log(`clipboard.readText: "${clipboard_text}" done.`); - // }); - // } - // console.log(`get clipboard_text: "${clipboard_text}"`); - return clipboard_text; - }; - io.ClipboardUserData = null; - if (typeof(window) !== "undefined") { window.addEventListener("gamepadconnected", window_on_gamepadconnected); window.addEventListener("gamepaddisconnected", window_on_gamepaddisconnected); } + app = _app; gl = (app.renderer as any).gl; canvas = app.view; @@ -579,31 +633,6 @@ canvas.addEventListener("wheel", canvas_on_wheel); } - // Setup back-end capabilities flags - io.BackendFlags |= ImGui.BackendFlags.HasMouseCursors; // We can honor GetMouseCursor() values (optional) - - // Keyboard mapping. ImGui will use those indices to peek into the io.KeyDown[] array. - io.KeyMap[ImGui.Key.Tab] = 9; - io.KeyMap[ImGui.Key.LeftArrow] = 37; - io.KeyMap[ImGui.Key.RightArrow] = 39; - io.KeyMap[ImGui.Key.UpArrow] = 38; - io.KeyMap[ImGui.Key.DownArrow] = 40; - io.KeyMap[ImGui.Key.PageUp] = 33; - io.KeyMap[ImGui.Key.PageDown] = 34; - io.KeyMap[ImGui.Key.Home] = 36; - io.KeyMap[ImGui.Key.End] = 35; - io.KeyMap[ImGui.Key.Insert] = 45; - io.KeyMap[ImGui.Key.Delete] = 46; - io.KeyMap[ImGui.Key.Backspace] = 8; - io.KeyMap[ImGui.Key.Space] = 32; - io.KeyMap[ImGui.Key.Enter] = 13; - io.KeyMap[ImGui.Key.Escape] = 27; - io.KeyMap[ImGui.Key.A] = 65; - io.KeyMap[ImGui.Key.C] = 67; - io.KeyMap[ImGui.Key.V] = 86; - io.KeyMap[ImGui.Key.X] = 88; - io.KeyMap[ImGui.Key.Y] = 89; - io.KeyMap[ImGui.Key.Z] = 90; CreateDeviceObjects(); } @@ -635,12 +664,6 @@ } } -export function NewFrame(time: number): void { -} - -export function RenderDrawData(draw_data: ImGui.ImDrawData | null = ImGui.GetDrawData()): void { -} - export function CreateFontsTexture(): void { const io = ImGui.GetIO(); diff --git a/src/imgui_impl.js b/src/imgui_impl.js index 3fdd928..a611a08 100644 --- a/src/imgui_impl.js +++ b/src/imgui_impl.js @@ -1,6 +1,6 @@ -System.register(["imgui-js"], function (exports_1, context_1) { +System.register(["imgui-js", "pixi.js", "./utils"], function (exports_1, context_1) { "use strict"; - var ImGui, clipboard_text, ImGuiImplPIXI, canvas, gl, g_ShaderHandle, g_VertHandle, g_FragHandle, g_AttribLocationTex, g_AttribLocationProjMtx, g_AttribLocationPosition, g_AttribLocationUV, g_AttribLocationColor, g_VboHandle, g_ElementsHandle, g_FontTexture, ctx, prev_time, mouse_button_map; + var ImGui, PIXI, U, clipboard_text, contexts, contextIOs, isFirstWindow, ImGuiImplInternalRenderer, gl, app, ImGuiWindow, canvas, g_ShaderHandle, g_VertHandle, g_FragHandle, g_AttribLocationTex, g_AttribLocationProjMtx, g_AttribLocationPosition, g_AttribLocationUV, g_AttribLocationColor, g_VboHandle, g_ElementsHandle, g_FontTexture, prev_time, mouse_button_map; var __moduleName = context_1 && context_1.id; function document_on_copy(event) { if (event.clipboardData) { @@ -30,193 +30,118 @@ console.log("Gamepad disconnected at index %d: %s.", event.gamepad.index, event.gamepad.id); } function canvas_on_blur(event) { - const io = ImGui.GetIO(); - io.KeyCtrl = false; - io.KeyShift = false; - io.KeyAlt = false; - io.KeySuper = false; - for (let i = 0; i < io.KeysDown.length; ++i) { - io.KeysDown[i] = false; - } - for (let i = 0; i < io.MouseDown.length; ++i) { - io.MouseDown[i] = false; + for (var io of contextIOs) { + io.KeyCtrl = false; + io.KeyShift = false; + io.KeyAlt = false; + io.KeySuper = false; + for (let i = 0; i < io.KeysDown.length; ++i) { + io.KeysDown[i] = false; + } + for (let i = 0; i < io.MouseDown.length; ++i) { + io.MouseDown[i] = false; + } } } function canvas_on_keydown(event) { // console.log(event.type, event.key, event.keyCode); - const io = ImGui.GetIO(); - io.KeyCtrl = event.ctrlKey; - io.KeyShift = event.shiftKey; - io.KeyAlt = event.altKey; - io.KeySuper = event.metaKey; - ImGui.IM_ASSERT(event.keyCode >= 0 && event.keyCode < ImGui.IM_ARRAYSIZE(io.KeysDown)); - io.KeysDown[event.keyCode] = true; - // forward to the keypress event - if ( /*io.WantCaptureKeyboard ||*/event.key === "Tab") { - event.preventDefault(); + for (var io of contextIOs) { + io.KeyCtrl = event.ctrlKey; + io.KeyShift = event.shiftKey; + io.KeyAlt = event.altKey; + io.KeySuper = event.metaKey; + ImGui.IM_ASSERT(event.keyCode >= 0 && event.keyCode < ImGui.IM_ARRAYSIZE(io.KeysDown)); + io.KeysDown[event.keyCode] = true; + // forward to the keypress event + if ( /*io.WantCaptureKeyboard ||*/event.key === "Tab") { + event.preventDefault(); + } } } function canvas_on_keyup(event) { // console.log(event.type, event.key, event.keyCode); - const io = ImGui.GetIO(); - io.KeyCtrl = event.ctrlKey; - io.KeyShift = event.shiftKey; - io.KeyAlt = event.altKey; - io.KeySuper = event.metaKey; - ImGui.IM_ASSERT(event.keyCode >= 0 && event.keyCode < ImGui.IM_ARRAYSIZE(io.KeysDown)); - io.KeysDown[event.keyCode] = false; - if (io.WantCaptureKeyboard) { - event.preventDefault(); + for (var io of contextIOs) { + io.KeyCtrl = event.ctrlKey; + io.KeyShift = event.shiftKey; + io.KeyAlt = event.altKey; + io.KeySuper = event.metaKey; + ImGui.IM_ASSERT(event.keyCode >= 0 && event.keyCode < ImGui.IM_ARRAYSIZE(io.KeysDown)); + io.KeysDown[event.keyCode] = false; + if (io.WantCaptureKeyboard) { + event.preventDefault(); + } } } function canvas_on_keypress(event) { // console.log(event.type, event.key, event.keyCode); - const io = ImGui.GetIO(); - io.AddInputCharacter(event.charCode); - if (io.WantCaptureKeyboard) { - event.preventDefault(); + for (var io of contextIOs) { + io.AddInputCharacter(event.charCode); + if (io.WantCaptureKeyboard) { + event.preventDefault(); + } } } - function canvas_on_pointermove(event) { - const io = ImGui.GetIO(); - const devicePixelRatio = window.devicePixelRatio || 1; - io.MousePos.x = event.offsetX * devicePixelRatio; - io.MousePos.y = event.offsetY * devicePixelRatio; - if (io.WantCaptureMouse) { - event.preventDefault(); - } - } - function canvas_on_pointerdown(event) { - const io = ImGui.GetIO(); - const devicePixelRatio = window.devicePixelRatio || 1; - io.MousePos.x = event.offsetX * devicePixelRatio; - io.MousePos.y = event.offsetY * devicePixelRatio; - io.MouseDown[mouse_button_map[event.button]] = true; - // if (io.WantCaptureMouse) { - // event.preventDefault(); - // } - } function canvas_on_contextmenu(event) { - const io = ImGui.GetIO(); - if (io.WantCaptureMouse) { - event.preventDefault(); - } - } - function canvas_on_pointerup(event) { - const io = ImGui.GetIO(); - io.MouseDown[mouse_button_map[event.button]] = false; - if (io.WantCaptureMouse) { - event.preventDefault(); + for (var io of contextIOs) { + if (io.WantCaptureMouse) { + event.preventDefault(); + } } } function canvas_on_wheel(event) { - const io = ImGui.GetIO(); - let scale = 1.0; - switch (event.deltaMode) { - case event.DOM_DELTA_PIXEL: - scale = 0.01; - break; - case event.DOM_DELTA_LINE: - scale = 0.2; - break; - case event.DOM_DELTA_PAGE: - scale = 1.0; - break; - } - io.MouseWheelH = event.deltaX * scale; - io.MouseWheel = -event.deltaY * scale; // Mouse wheel: 1 unit scrolls about 5 lines text. - if (io.WantCaptureMouse) { - event.preventDefault(); + for (var io of contextIOs) { + let scale = 1.0; + switch (event.deltaMode) { + case event.DOM_DELTA_PIXEL: + scale = 0.01; + break; + case event.DOM_DELTA_LINE: + scale = 0.2; + break; + case event.DOM_DELTA_PAGE: + scale = 1.0; + break; + } + io.MouseWheelH = event.deltaX * scale; + io.MouseWheel = -event.deltaY * scale; // Mouse wheel: 1 unit scrolls about 5 lines text. + if (io.WantCaptureMouse) { + event.preventDefault(); + } } } - function Init(value) { - const io = ImGui.GetIO(); + function Init(_app) { + // Setup Dear ImGui binding + ImGui.IMGUI_CHECKVERSION(); + ImGui.CreateContext(); + ImGui.StyleColorsLight(); + contexts.push(ImGui.GetCurrentContext()); + contextIOs.push(ImGui.GetIO()); + contextIOs[0].Fonts.AddFontDefault(); + PIXI.Renderer.registerPlugin("imgui_renderer", U.fromConstructor(ImGuiImplInternalRenderer)); if (typeof (window) !== "undefined") { ImGui.LoadIniSettingsFromMemory(window.localStorage.getItem("imgui.ini") || ""); } - if (typeof (navigator) !== "undefined") { - io.ConfigMacOSXBehaviors = navigator.platform.match(/Mac/) !== null; - } if (typeof (document) !== "undefined") { document.body.addEventListener("copy", document_on_copy); document.body.addEventListener("cut", document_on_cut); document.body.addEventListener("paste", document_on_paste); } - io.SetClipboardTextFn = (user_data, text) => { - clipboard_text = text; - // console.log(`set clipboard_text: "${clipboard_text}"`); - if (typeof navigator !== "undefined" && typeof navigator.clipboard !== "undefined") { - // console.log(`clipboard.writeText: "${clipboard_text}"`); - navigator.clipboard.writeText(clipboard_text).then(() => { - // console.log(`clipboard.writeText: "${clipboard_text}" done.`); - }); - } - }; - io.GetClipboardTextFn = (user_data) => { - // if (typeof navigator !== "undefined" && typeof (navigator as any).clipboard !== "undefined") { - // console.log(`clipboard.readText: "${clipboard_text}"`); - // (navigator as any).clipboard.readText().then((text: string): void => { - // clipboard_text = text; - // console.log(`clipboard.readText: "${clipboard_text}" done.`); - // }); - // } - // console.log(`get clipboard_text: "${clipboard_text}"`); - return clipboard_text; - }; - io.ClipboardUserData = null; if (typeof (window) !== "undefined") { window.addEventListener("gamepadconnected", window_on_gamepadconnected); window.addEventListener("gamepaddisconnected", window_on_gamepaddisconnected); } - if (typeof (window) !== "undefined") { - if (value instanceof (HTMLCanvasElement)) { - value = value.getContext("webgl2", { alpha: false }) || value.getContext("2d"); - } - if (value instanceof (WebGL2RenderingContext)) { - canvas = value.canvas; - exports_1("gl", gl = value); - } - if (value instanceof (CanvasRenderingContext2D)) { - canvas = value.canvas; - exports_1("ctx", ctx = value); - } - } + app = _app; + gl = app.renderer.gl; + canvas = app.view; if (canvas !== null) { canvas.style.touchAction = "none"; // Disable browser handling of all panning and zooming gestures. canvas.addEventListener("blur", canvas_on_blur); canvas.addEventListener("keydown", canvas_on_keydown); canvas.addEventListener("keyup", canvas_on_keyup); canvas.addEventListener("keypress", canvas_on_keypress); - canvas.addEventListener("pointermove", canvas_on_pointermove); - canvas.addEventListener("pointerdown", canvas_on_pointerdown); canvas.addEventListener("contextmenu", canvas_on_contextmenu); - canvas.addEventListener("pointerup", canvas_on_pointerup); canvas.addEventListener("wheel", canvas_on_wheel); } - // Setup back-end capabilities flags - io.BackendFlags |= ImGui.BackendFlags.HasMouseCursors; // We can honor GetMouseCursor() values (optional) - // Keyboard mapping. ImGui will use those indices to peek into the io.KeyDown[] array. - io.KeyMap[ImGui.Key.Tab] = 9; - io.KeyMap[ImGui.Key.LeftArrow] = 37; - io.KeyMap[ImGui.Key.RightArrow] = 39; - io.KeyMap[ImGui.Key.UpArrow] = 38; - io.KeyMap[ImGui.Key.DownArrow] = 40; - io.KeyMap[ImGui.Key.PageUp] = 33; - io.KeyMap[ImGui.Key.PageDown] = 34; - io.KeyMap[ImGui.Key.Home] = 36; - io.KeyMap[ImGui.Key.End] = 35; - io.KeyMap[ImGui.Key.Insert] = 45; - io.KeyMap[ImGui.Key.Delete] = 46; - io.KeyMap[ImGui.Key.Backspace] = 8; - io.KeyMap[ImGui.Key.Space] = 32; - io.KeyMap[ImGui.Key.Enter] = 13; - io.KeyMap[ImGui.Key.Escape] = 27; - io.KeyMap[ImGui.Key.A] = 65; - io.KeyMap[ImGui.Key.C] = 67; - io.KeyMap[ImGui.Key.V] = 86; - io.KeyMap[ImGui.Key.X] = 88; - io.KeyMap[ImGui.Key.Y] = 89; - io.KeyMap[ImGui.Key.Z] = 90; CreateDeviceObjects(); } exports_1("Init", Init); @@ -227,14 +152,10 @@ canvas.removeEventListener("keydown", canvas_on_keydown); canvas.removeEventListener("keyup", canvas_on_keyup); canvas.removeEventListener("keypress", canvas_on_keypress); - canvas.removeEventListener("pointermove", canvas_on_pointermove); - canvas.removeEventListener("pointerdown", canvas_on_pointerdown); canvas.removeEventListener("contextmenu", canvas_on_contextmenu); - canvas.removeEventListener("pointerup", canvas_on_pointerup); canvas.removeEventListener("wheel", canvas_on_wheel); } - exports_1("gl", gl = null); - exports_1("ctx", ctx = null); + app = null; canvas = null; if (typeof (window) !== "undefined") { window.removeEventListener("gamepadconnected", window_on_gamepadconnected); @@ -247,392 +168,6 @@ } } exports_1("Shutdown", Shutdown); - function NewFrame(time) { - const io = ImGui.GetIO(); - if (io.WantSaveIniSettings) { - io.WantSaveIniSettings = false; - if (typeof (window) !== "undefined") { - window.localStorage.setItem("imgui.ini", ImGui.SaveIniSettingsToMemory()); - } - } - const w = canvas && canvas.width || 640; - const h = canvas && canvas.height || 480; - const display_w = gl && gl.drawingBufferWidth || w; - const display_h = gl && gl.drawingBufferHeight || h; - io.DisplaySize.x = w; - io.DisplaySize.y = h; - io.DisplayFramebufferScale.x = w > 0 ? (display_w / w) : 0; - io.DisplayFramebufferScale.y = h > 0 ? (display_h / h) : 0; - const dt = time - prev_time; - prev_time = time; - io.DeltaTime = dt / 1000; - if (io.WantSetMousePos) { - console.log("TODO: MousePos", io.MousePos.x, io.MousePos.y); - } - if (typeof (document) !== "undefined") { - if (io.MouseDrawCursor) { - document.body.style.cursor = "none"; - } - else { - switch (ImGui.GetMouseCursor()) { - case ImGui.MouseCursor.None: - document.body.style.cursor = "none"; - break; - default: - case ImGui.MouseCursor.Arrow: - document.body.style.cursor = "default"; - break; - case ImGui.MouseCursor.TextInput: - document.body.style.cursor = "text"; - break; // When hovering over InputText, etc. - case ImGui.MouseCursor.ResizeAll: - document.body.style.cursor = "move"; - break; // Unused - case ImGui.MouseCursor.ResizeNS: - document.body.style.cursor = "ns-resize"; - break; // When hovering over an horizontal border - case ImGui.MouseCursor.ResizeEW: - document.body.style.cursor = "ew-resize"; - break; // When hovering over a vertical border or a column - case ImGui.MouseCursor.ResizeNESW: - document.body.style.cursor = "nesw-resize"; - break; // When hovering over the bottom-left corner of a window - case ImGui.MouseCursor.ResizeNWSE: - document.body.style.cursor = "nwse-resize"; - break; // When hovering over the bottom-right corner of a window - case ImGui.MouseCursor.Hand: - document.body.style.cursor = "move"; - break; - } - } - } - // Gamepad navigation mapping [BETA] - for (let i = 0; i < io.NavInputs.length; ++i) { - io.NavInputs[i] = 0.0; - } - if (io.ConfigFlags & ImGui.ConfigFlags.NavEnableGamepad) { - // Update gamepad inputs - const gamepads = (typeof (navigator) !== "undefined" && typeof (navigator.getGamepads) === "function") ? navigator.getGamepads() : []; - for (let i = 0; i < gamepads.length; ++i) { - const gamepad = gamepads[i]; - if (!gamepad) { - continue; - } - const buttons_count = gamepad.buttons.length; - const axes_count = gamepad.axes.length; - const MAP_BUTTON = function (NAV_NO, BUTTON_NO) { - if (!gamepad) { - return; - } - if (buttons_count > BUTTON_NO && gamepad.buttons[BUTTON_NO].pressed) - io.NavInputs[NAV_NO] = 1.0; - }; - const MAP_ANALOG = function (NAV_NO, AXIS_NO, V0, V1) { - if (!gamepad) { - return; - } - let v = (axes_count > AXIS_NO) ? gamepad.axes[AXIS_NO] : V0; - v = (v - V0) / (V1 - V0); - if (v > 1.0) - v = 1.0; - if (io.NavInputs[NAV_NO] < v) - io.NavInputs[NAV_NO] = v; - }; - // TODO: map input based on vendor and product id - // https://developer.mozilla.org/en-US/docs/Web/API/Gamepad/id - const match = gamepad.id.match(/^([0-9a-f]{4})-([0-9a-f]{4})-.*$/); - const match_chrome = gamepad.id.match(/^.*\(.*Vendor: ([0-9a-f]{4}) Product: ([0-9a-f]{4})\).*$/); - const vendor = (match && match[1]) || (match_chrome && match_chrome[1]) || "0000"; - const product = (match && match[2]) || (match_chrome && match_chrome[2]) || "0000"; - switch (vendor + product) { - case "046dc216": // Logitech Logitech Dual Action (Vendor: 046d Product: c216) - MAP_BUTTON(ImGui.NavInput.Activate, 1); // Cross / A - MAP_BUTTON(ImGui.NavInput.Cancel, 2); // Circle / B - MAP_BUTTON(ImGui.NavInput.Menu, 0); // Square / X - MAP_BUTTON(ImGui.NavInput.Input, 3); // Triangle / Y - MAP_ANALOG(ImGui.NavInput.DpadLeft, 4, -0.3, -0.9); // D-Pad Left - MAP_ANALOG(ImGui.NavInput.DpadRight, 4, +0.3, +0.9); // D-Pad Right - MAP_ANALOG(ImGui.NavInput.DpadUp, 5, -0.3, -0.9); // D-Pad Up - MAP_ANALOG(ImGui.NavInput.DpadDown, 5, +0.3, +0.9); // D-Pad Down - MAP_BUTTON(ImGui.NavInput.FocusPrev, 4); // L1 / LB - MAP_BUTTON(ImGui.NavInput.FocusNext, 5); // R1 / RB - MAP_BUTTON(ImGui.NavInput.TweakSlow, 6); // L2 / LT - MAP_BUTTON(ImGui.NavInput.TweakFast, 7); // R2 / RT - MAP_ANALOG(ImGui.NavInput.LStickLeft, 0, -0.3, -0.9); - MAP_ANALOG(ImGui.NavInput.LStickRight, 0, +0.3, +0.9); - MAP_ANALOG(ImGui.NavInput.LStickUp, 1, -0.3, -0.9); - MAP_ANALOG(ImGui.NavInput.LStickDown, 1, +0.3, +0.9); - break; - case "046dc21d": // Logitech Gamepad F310 (STANDARD GAMEPAD Vendor: 046d Product: c21d) - MAP_BUTTON(ImGui.NavInput.Activate, 0); // Cross / A - MAP_BUTTON(ImGui.NavInput.Cancel, 1); // Circle / B - MAP_BUTTON(ImGui.NavInput.Menu, 2); // Square / X - MAP_BUTTON(ImGui.NavInput.Input, 3); // Triangle / Y - MAP_BUTTON(ImGui.NavInput.DpadLeft, 14); // D-Pad Left - MAP_BUTTON(ImGui.NavInput.DpadRight, 15); // D-Pad Right - MAP_BUTTON(ImGui.NavInput.DpadUp, 12); // D-Pad Up - MAP_BUTTON(ImGui.NavInput.DpadDown, 13); // D-Pad Down - MAP_BUTTON(ImGui.NavInput.FocusPrev, 4); // L1 / LB - MAP_BUTTON(ImGui.NavInput.FocusNext, 5); // R1 / RB - MAP_ANALOG(ImGui.NavInput.TweakSlow, 6, +0.3, +0.9); // L2 / LT - MAP_ANALOG(ImGui.NavInput.TweakFast, 7, +0.3, +0.9); // R2 / RT - MAP_ANALOG(ImGui.NavInput.LStickLeft, 0, -0.3, -0.9); - MAP_ANALOG(ImGui.NavInput.LStickRight, 0, +0.3, +0.9); - MAP_ANALOG(ImGui.NavInput.LStickUp, 1, -0.3, -0.9); - MAP_ANALOG(ImGui.NavInput.LStickDown, 1, +0.3, +0.9); - break; - case "2dc86001": // 8Bitdo SN30 Pro 8Bitdo SN30 Pro (Vendor: 2dc8 Product: 6001) - case "2dc86101": // 8Bitdo SN30 Pro (Vendor: 2dc8 Product: 6101) - MAP_BUTTON(ImGui.NavInput.Activate, 1); // Cross / A - MAP_BUTTON(ImGui.NavInput.Cancel, 0); // Circle / B - MAP_BUTTON(ImGui.NavInput.Menu, 4); // Square / X - MAP_BUTTON(ImGui.NavInput.Input, 3); // Triangle / Y - MAP_ANALOG(ImGui.NavInput.DpadLeft, 6, -0.3, -0.9); // D-Pad Left - MAP_ANALOG(ImGui.NavInput.DpadRight, 6, +0.3, +0.9); // D-Pad Right - MAP_ANALOG(ImGui.NavInput.DpadUp, 7, -0.3, -0.9); // D-Pad Up - MAP_ANALOG(ImGui.NavInput.DpadDown, 7, +0.3, +0.9); // D-Pad Down - MAP_BUTTON(ImGui.NavInput.FocusPrev, 6); // L1 / LB - MAP_BUTTON(ImGui.NavInput.FocusNext, 7); // R1 / RB - MAP_BUTTON(ImGui.NavInput.TweakSlow, 8); // L2 / LT - MAP_BUTTON(ImGui.NavInput.TweakFast, 9); // R2 / RT - MAP_ANALOG(ImGui.NavInput.LStickLeft, 0, -0.3, -0.9); - MAP_ANALOG(ImGui.NavInput.LStickRight, 0, +0.3, +0.9); - MAP_ANALOG(ImGui.NavInput.LStickUp, 1, -0.3, -0.9); - MAP_ANALOG(ImGui.NavInput.LStickDown, 1, +0.3, +0.9); - break; - default: // standard gamepad: https://w3c.github.io/gamepad/#remapping - MAP_BUTTON(ImGui.NavInput.Activate, 0); // Cross / A - MAP_BUTTON(ImGui.NavInput.Cancel, 1); // Circle / B - MAP_BUTTON(ImGui.NavInput.Menu, 2); // Square / X - MAP_BUTTON(ImGui.NavInput.Input, 3); // Triangle / Y - MAP_BUTTON(ImGui.NavInput.DpadLeft, 14); // D-Pad Left - MAP_BUTTON(ImGui.NavInput.DpadRight, 15); // D-Pad Right - MAP_BUTTON(ImGui.NavInput.DpadUp, 12); // D-Pad Up - MAP_BUTTON(ImGui.NavInput.DpadDown, 13); // D-Pad Down - MAP_BUTTON(ImGui.NavInput.FocusPrev, 4); // L1 / LB - MAP_BUTTON(ImGui.NavInput.FocusNext, 5); // R1 / RB - MAP_BUTTON(ImGui.NavInput.TweakSlow, 6); // L2 / LT - MAP_BUTTON(ImGui.NavInput.TweakFast, 7); // R2 / RT - MAP_ANALOG(ImGui.NavInput.LStickLeft, 0, -0.3, -0.9); - MAP_ANALOG(ImGui.NavInput.LStickRight, 0, +0.3, +0.9); - MAP_ANALOG(ImGui.NavInput.LStickUp, 1, -0.3, -0.9); - MAP_ANALOG(ImGui.NavInput.LStickDown, 1, +0.3, +0.9); - break; - } - } - } - } - exports_1("NewFrame", NewFrame); - function RenderDrawData(draw_data = ImGui.GetDrawData()) { - const io = ImGui.GetIO(); - if (draw_data === null) { - throw new Error(); - } - gl || ctx || console.log(draw_data); - // Avoid rendering when minimized, scale coordinates for retina displays (screen coordinates != framebuffer coordinates) - const fb_width = io.DisplaySize.x * io.DisplayFramebufferScale.x; - const fb_height = io.DisplaySize.y * io.DisplayFramebufferScale.y; - if (fb_width === 0 || fb_height === 0) { - return; - } - draw_data.ScaleClipRects(io.DisplayFramebufferScale); - // Backup GL state - const last_active_texture = gl && gl.getParameter(gl.ACTIVE_TEXTURE) || null; - const last_program = gl && gl.getParameter(gl.CURRENT_PROGRAM) || null; - const last_texture = gl && gl.getParameter(gl.TEXTURE_BINDING_2D) || null; - const last_array_buffer = gl && gl.getParameter(gl.ARRAY_BUFFER_BINDING) || null; - const last_element_array_buffer = gl && gl.getParameter(gl.ELEMENT_ARRAY_BUFFER_BINDING) || null; - // GLint last_polygon_mode[2]; glGetIntegerv(GL_POLYGON_MODE, last_polygon_mode); - const last_viewport = gl && gl.getParameter(gl.VIEWPORT) || null; - const last_scissor_box = gl && gl.getParameter(gl.SCISSOR_BOX) || null; - const last_blend_src_rgb = gl && gl.getParameter(gl.BLEND_SRC_RGB) || null; - const last_blend_dst_rgb = gl && gl.getParameter(gl.BLEND_DST_RGB) || null; - const last_blend_src_alpha = gl && gl.getParameter(gl.BLEND_SRC_ALPHA) || null; - const last_blend_dst_alpha = gl && gl.getParameter(gl.BLEND_DST_ALPHA) || null; - const last_blend_equation_rgb = gl && gl.getParameter(gl.BLEND_EQUATION_RGB) || null; - const last_blend_equation_alpha = gl && gl.getParameter(gl.BLEND_EQUATION_ALPHA) || null; - const last_enable_blend = gl && gl.getParameter(gl.BLEND) || null; - const last_enable_cull_face = gl && gl.getParameter(gl.CULL_FACE) || null; - const last_enable_depth_test = gl && gl.getParameter(gl.DEPTH_TEST) || null; - const last_enable_scissor_test = gl && gl.getParameter(gl.SCISSOR_TEST) || null; - // Setup render state: alpha-blending enabled, no face culling, no depth testing, scissor enabled, polygon fill - gl && gl.enable(gl.BLEND); - gl && gl.blendEquation(gl.FUNC_ADD); - gl && gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA); - gl && gl.disable(gl.CULL_FACE); - gl && gl.disable(gl.DEPTH_TEST); - gl && gl.enable(gl.SCISSOR_TEST); - // glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); - // Setup viewport, orthographic projection matrix - // Our visible imgui space lies from draw_data->DisplayPps (top left) to draw_data->DisplayPos+data_data->DisplaySize (bottom right). DisplayMin is typically (0,0) for single viewport apps. - gl && gl.viewport(0, 0, fb_width, fb_height); - const L = draw_data.DisplayPos.x; - const R = draw_data.DisplayPos.x + draw_data.DisplaySize.x; - const T = draw_data.DisplayPos.y; - const B = draw_data.DisplayPos.y + draw_data.DisplaySize.y; - const ortho_projection = new Float32Array([ - 2.0 / (R - L), 0.0, 0.0, 0.0, - 0.0, 2.0 / (T - B), 0.0, 0.0, - 0.0, 0.0, -1.0, 0.0, - (R + L) / (L - R), (T + B) / (B - T), 0.0, 1.0, - ]); - gl && gl.useProgram(g_ShaderHandle); - gl && gl.uniform1i(g_AttribLocationTex, 0); - gl && g_AttribLocationProjMtx && gl.uniformMatrix4fv(g_AttribLocationProjMtx, false, ortho_projection); - // Render command lists - gl && gl.bindBuffer(gl.ARRAY_BUFFER, g_VboHandle); - gl && gl.enableVertexAttribArray(g_AttribLocationPosition); - gl && gl.enableVertexAttribArray(g_AttribLocationUV); - gl && gl.enableVertexAttribArray(g_AttribLocationColor); - gl && gl.vertexAttribPointer(g_AttribLocationPosition, 2, gl.FLOAT, false, ImGui.ImDrawVertSize, ImGui.ImDrawVertPosOffset); - gl && gl.vertexAttribPointer(g_AttribLocationUV, 2, gl.FLOAT, false, ImGui.ImDrawVertSize, ImGui.ImDrawVertUVOffset); - gl && gl.vertexAttribPointer(g_AttribLocationColor, 4, gl.UNSIGNED_BYTE, true, ImGui.ImDrawVertSize, ImGui.ImDrawVertColOffset); - // Draw - const pos = draw_data.DisplayPos; - const idx_buffer_type = gl && ((ImGui.ImDrawIdxSize === 4) ? gl.UNSIGNED_INT : gl.UNSIGNED_SHORT) || 0; - draw_data.IterateDrawLists((draw_list) => { - gl || ctx || console.log(draw_list); - gl || ctx || console.log("VtxBuffer.length", draw_list.VtxBuffer.length); - gl || ctx || console.log("IdxBuffer.length", draw_list.IdxBuffer.length); - let idx_buffer_offset = 0; - gl && gl.bindBuffer(gl.ARRAY_BUFFER, g_VboHandle); - gl && gl.bufferData(gl.ARRAY_BUFFER, draw_list.VtxBuffer, gl.STREAM_DRAW); - gl && gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, g_ElementsHandle); - gl && gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, draw_list.IdxBuffer, gl.STREAM_DRAW); - draw_list.IterateDrawCmds((draw_cmd) => { - gl || ctx || console.log(draw_cmd); - gl || ctx || console.log("ElemCount", draw_cmd.ElemCount); - gl || ctx || console.log("ClipRect", draw_cmd.ClipRect.x, fb_height - draw_cmd.ClipRect.w, draw_cmd.ClipRect.z - draw_cmd.ClipRect.x, draw_cmd.ClipRect.w - draw_cmd.ClipRect.y); - gl || ctx || console.log("TextureId", draw_cmd.TextureId); - if (!gl && !ctx) { - console.log("i: pos.x pos.y uv.x uv.y col"); - for (let i = 0; i < Math.min(3, draw_cmd.ElemCount); ++i) { - const view = new ImGui.ImDrawVert(draw_list.VtxBuffer.buffer, draw_list.VtxBuffer.byteOffset + i * ImGui.ImDrawVertSize); - console.log(`${i}: ${view.pos[0].toFixed(2)} ${view.pos[1].toFixed(2)} ${view.uv[0].toFixed(5)} ${view.uv[1].toFixed(5)} ${("00000000" + view.col[0].toString(16)).substr(-8)}`); - } - } - if (draw_cmd.UserCallback !== null) { - // User callback (registered via ImDrawList::AddCallback) - draw_cmd.UserCallback(draw_list, draw_cmd); - } - else { - const clip_rect = new ImGui.ImVec4(draw_cmd.ClipRect.x - pos.x, draw_cmd.ClipRect.y - pos.y, draw_cmd.ClipRect.z - pos.x, draw_cmd.ClipRect.w - pos.y); - if (clip_rect.x < fb_width && clip_rect.y < fb_height && clip_rect.z >= 0.0 && clip_rect.w >= 0.0) { - // Apply scissor/clipping rectangle - gl && gl.scissor(clip_rect.x, fb_height - clip_rect.w, clip_rect.z - clip_rect.x, clip_rect.w - clip_rect.y); - // Bind texture, Draw - gl && gl.activeTexture(gl.TEXTURE0); - gl && gl.bindTexture(gl.TEXTURE_2D, draw_cmd.TextureId); - gl && gl.drawElements(gl.TRIANGLES, draw_cmd.ElemCount, idx_buffer_type, idx_buffer_offset); - if (ctx) { - ctx.save(); - ctx.beginPath(); - ctx.rect(clip_rect.x, clip_rect.y, clip_rect.z - clip_rect.x, clip_rect.w - clip_rect.y); - ctx.clip(); - const idx = ImGui.ImDrawIdxSize === 4 ? - new Uint32Array(draw_list.IdxBuffer.buffer, draw_list.IdxBuffer.byteOffset + idx_buffer_offset) : - new Uint16Array(draw_list.IdxBuffer.buffer, draw_list.IdxBuffer.byteOffset + idx_buffer_offset); - for (let i = 0; i < draw_cmd.ElemCount; i += 3) { - const i0 = idx[i + 0]; - const i1 = idx[i + 1]; - const i2 = idx[i + 2]; - const v0 = new ImGui.ImDrawVert(draw_list.VtxBuffer.buffer, draw_list.VtxBuffer.byteOffset + i0 * ImGui.ImDrawVertSize); - const v1 = new ImGui.ImDrawVert(draw_list.VtxBuffer.buffer, draw_list.VtxBuffer.byteOffset + i1 * ImGui.ImDrawVertSize); - const v2 = new ImGui.ImDrawVert(draw_list.VtxBuffer.buffer, draw_list.VtxBuffer.byteOffset + i2 * ImGui.ImDrawVertSize); - const i3 = idx[i + 3]; - const i4 = idx[i + 4]; - const i5 = idx[i + 5]; - const v3 = new ImGui.ImDrawVert(draw_list.VtxBuffer.buffer, draw_list.VtxBuffer.byteOffset + i3 * ImGui.ImDrawVertSize); - const v4 = new ImGui.ImDrawVert(draw_list.VtxBuffer.buffer, draw_list.VtxBuffer.byteOffset + i4 * ImGui.ImDrawVertSize); - const v5 = new ImGui.ImDrawVert(draw_list.VtxBuffer.buffer, draw_list.VtxBuffer.byteOffset + i5 * ImGui.ImDrawVertSize); - let quad = true; - let minmin = v0; - let minmax = v0; - let maxmin = v0; - let maxmax = v0; - for (const v of [v1, v2, v3, v4, v5]) { - let found = false; - if (v.pos[0] <= minmin.pos[0] && v.pos[1] <= minmin.pos[1]) { - minmin = v; - found = true; - } - if (v.pos[0] <= minmax.pos[0] && v.pos[1] >= minmax.pos[1]) { - minmax = v; - found = true; - } - if (v.pos[0] >= maxmin.pos[0] && v.pos[1] <= maxmin.pos[1]) { - maxmin = v; - found = true; - } - if (v.pos[0] >= maxmax.pos[0] && v.pos[1] >= maxmax.pos[1]) { - maxmax = v; - found = true; - } - if (!found) { - quad = false; - } - } - quad = quad && (minmin.pos[0] === minmax.pos[0]); - quad = quad && (maxmin.pos[0] === maxmax.pos[0]); - quad = quad && (minmin.pos[1] === maxmin.pos[1]); - quad = quad && (minmax.pos[1] === maxmax.pos[1]); - if (quad) { - if (minmin.uv[0] < 0.01 && minmin.uv[1] < 0.01) { - // one vertex color - ctx.beginPath(); - ctx.rect(minmin.pos[0], minmin.pos[1], maxmax.pos[0] - minmin.pos[0], maxmax.pos[1] - minmin.pos[1]); - ctx.fillStyle = `rgba(${v0.col[0] >> 0 & 0xff}, ${v0.col[0] >> 8 & 0xff}, ${v0.col[0] >> 16 & 0xff}, ${(v0.col[0] >> 24 & 0xff) / 0xff})`; - ctx.fill(); - } - else { - // no vertex color - const image = draw_cmd.TextureId; - ctx.drawImage(image, minmin.uv[0] * image.width, minmin.uv[1] * image.height, (maxmax.uv[0] - minmin.uv[0]) * image.width, (maxmax.uv[1] - minmin.uv[1]) * image.height, minmin.pos[0], minmin.pos[1], maxmax.pos[0] - minmin.pos[0], maxmax.pos[1] - minmin.pos[1]); - // ctx.beginPath(); - // ctx.rect(minmin.pos[0], minmin.pos[1], maxmax.pos[0] - minmin.pos[0], maxmax.pos[1] - minmin.pos[1]); - // ctx.strokeStyle = "yellow"; - // ctx.stroke(); - } - i += 3; - } - else { - // one vertex color, no texture - ctx.beginPath(); - ctx.moveTo(v0.pos[0], v0.pos[1]); - ctx.lineTo(v1.pos[0], v1.pos[1]); - ctx.lineTo(v2.pos[0], v2.pos[1]); - ctx.closePath(); - ctx.fillStyle = `rgba(${v0.col[0] >> 0 & 0xff}, ${v0.col[0] >> 8 & 0xff}, ${v0.col[0] >> 16 & 0xff}, ${(v0.col[0] >> 24 & 0xff) / 0xff})`; - ctx.fill(); - } - } - ctx.restore(); - } - } - } - idx_buffer_offset += draw_cmd.ElemCount * ImGui.ImDrawIdxSize; - }); - }); - // Restore modified GL state - gl && (last_program !== null) && gl.useProgram(last_program); - gl && (last_texture !== null) && gl.bindTexture(gl.TEXTURE_2D, last_texture); - gl && (last_active_texture !== null) && gl.activeTexture(last_active_texture); - gl && gl.disableVertexAttribArray(g_AttribLocationPosition); - gl && gl.disableVertexAttribArray(g_AttribLocationUV); - gl && gl.disableVertexAttribArray(g_AttribLocationColor); - gl && (last_array_buffer !== null) && gl.bindBuffer(gl.ARRAY_BUFFER, last_array_buffer); - gl && (last_element_array_buffer !== null) && gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, last_element_array_buffer); - gl && (last_blend_equation_rgb !== null && last_blend_equation_alpha !== null) && gl.blendEquationSeparate(last_blend_equation_rgb, last_blend_equation_alpha); - gl && (last_blend_src_rgb !== null && last_blend_src_alpha !== null && last_blend_dst_rgb !== null && last_blend_dst_alpha !== null) && gl.blendFuncSeparate(last_blend_src_rgb, last_blend_src_alpha, last_blend_dst_rgb, last_blend_dst_alpha); - gl && (last_enable_blend ? gl.enable(gl.BLEND) : gl.disable(gl.BLEND)); - gl && (last_enable_cull_face ? gl.enable(gl.CULL_FACE) : gl.disable(gl.CULL_FACE)); - gl && (last_enable_depth_test ? gl.enable(gl.DEPTH_TEST) : gl.disable(gl.DEPTH_TEST)); - gl && (last_enable_scissor_test ? gl.enable(gl.SCISSOR_TEST) : gl.disable(gl.SCISSOR_TEST)); - // glPolygonMode(GL_FRONT_AND_BACK, (GLenum)last_polygon_mode[0]); - gl && (last_viewport !== null) && gl.viewport(last_viewport[0], last_viewport[1], last_viewport[2], last_viewport[3]); - gl && (last_scissor_box !== null) && gl.scissor(last_scissor_box[0], last_scissor_box[1], last_scissor_box[2], last_scissor_box[3]); - } - exports_1("RenderDrawData", RenderDrawData); function CreateFontsTexture() { const io = ImGui.GetIO(); // Backup GL state @@ -653,19 +188,6 @@ // Store our identifier io.Fonts.TexID = g_FontTexture || { foo: "bar" }; // console.log("font texture id", g_FontTexture); - if (ctx) { - const image_canvas = document.createElement("canvas"); - image_canvas.width = width; - image_canvas.height = height; - const image_ctx = image_canvas.getContext("2d"); - if (image_ctx === null) { - throw new Error(); - } - const image_data = image_ctx.getImageData(0, 0, width, height); - image_data.data.set(pixels); - image_ctx.putImageData(image_data, 0, 0); - io.Fonts.TexID = image_canvas; - } // Restore modified GL state gl && last_texture && gl.bindTexture(gl.TEXTURE_2D, last_texture); } @@ -743,19 +265,430 @@ setters: [ function (ImGui_1) { ImGui = ImGui_1; + }, + function (PIXI_1) { + PIXI = PIXI_1; + }, + function (U_1) { + U = U_1; } ], execute: function () { clipboard_text = ""; - ImGuiImplPIXI = class ImGuiImplPIXI { - constructor(app, owner) { - this.app = app; - this.owner = owner; + contexts = []; + contextIOs = []; + isFirstWindow = true; + ImGuiImplInternalRenderer = class ImGuiImplInternalRenderer extends PIXI.ObjectRenderer { + constructor(r) { + super(r); + } + render(owner) { + if (!(owner instanceof ImGuiWindow)) + return; + const window = owner; + const io = window.io; + const draw_data = ImGui.GetDrawData(); + if (draw_data === null) { + throw new Error(); + } + gl || console.log(draw_data); + // Avoid rendering when minimized, scale coordinates for retina displays (screen coordinates != framebuffer coordinates) + const fb_width = io.DisplaySize.x * io.DisplayFramebufferScale.x; + const fb_height = io.DisplaySize.y * io.DisplayFramebufferScale.y; + if (fb_width === 0 || fb_height === 0) { + return; + } + draw_data.ScaleClipRects(io.DisplayFramebufferScale); + // Backup GL state + const last_active_texture = gl && gl.getParameter(gl.ACTIVE_TEXTURE) || null; + const last_program = gl && gl.getParameter(gl.CURRENT_PROGRAM) || null; + const last_texture = gl && gl.getParameter(gl.TEXTURE_BINDING_2D) || null; + const last_array_buffer = gl && gl.getParameter(gl.ARRAY_BUFFER_BINDING) || null; + const last_element_array_buffer = gl && gl.getParameter(gl.ELEMENT_ARRAY_BUFFER_BINDING) || null; + // GLint last_polygon_mode[2]; glGetIntegerv(GL_POLYGON_MODE, last_polygon_mode); + const last_viewport = gl && gl.getParameter(gl.VIEWPORT) || null; + const last_scissor_box = gl && gl.getParameter(gl.SCISSOR_BOX) || null; + const last_blend_src_rgb = gl && gl.getParameter(gl.BLEND_SRC_RGB) || null; + const last_blend_dst_rgb = gl && gl.getParameter(gl.BLEND_DST_RGB) || null; + const last_blend_src_alpha = gl && gl.getParameter(gl.BLEND_SRC_ALPHA) || null; + const last_blend_dst_alpha = gl && gl.getParameter(gl.BLEND_DST_ALPHA) || null; + const last_blend_equation_rgb = gl && gl.getParameter(gl.BLEND_EQUATION_RGB) || null; + const last_blend_equation_alpha = gl && gl.getParameter(gl.BLEND_EQUATION_ALPHA) || null; + const last_enable_blend = gl && gl.getParameter(gl.BLEND) || null; + const last_enable_cull_face = gl && gl.getParameter(gl.CULL_FACE) || null; + const last_enable_depth_test = gl && gl.getParameter(gl.DEPTH_TEST) || null; + const last_enable_scissor_test = gl && gl.getParameter(gl.SCISSOR_TEST) || null; + // Setup render state: alpha-blending enabled, no face culling, no depth testing, scissor enabled, polygon fill + gl && gl.enable(gl.BLEND); + gl && gl.blendEquation(gl.FUNC_ADD); + gl && gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA); + gl && gl.disable(gl.CULL_FACE); + gl && gl.disable(gl.DEPTH_TEST); + gl && gl.enable(gl.SCISSOR_TEST); + // glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); + // Setup viewport, orthographic projection matrix + // Our visible imgui space lies from draw_data->DisplayPps (top left) to draw_data->DisplayPos+data_data->DisplaySize (bottom right). DisplayMin is typically (0,0) for single viewport apps. + gl && gl.viewport(0, 0, fb_width, fb_height); + const L = draw_data.DisplayPos.x; + const R = draw_data.DisplayPos.x + draw_data.DisplaySize.x; + const T = draw_data.DisplayPos.y; + const B = draw_data.DisplayPos.y + draw_data.DisplaySize.y; + const ortho_projection = new Float32Array([ + 2.0 / (R - L), 0.0, 0.0, 0.0, + 0.0, 2.0 / (T - B), 0.0, 0.0, + 0.0, 0.0, -1.0, 0.0, + (R + L) / (L - R), (T + B) / (B - T), 0.0, 1.0, + ]); + gl && gl.useProgram(g_ShaderHandle); + gl && gl.uniform1i(g_AttribLocationTex, 0); + gl && g_AttribLocationProjMtx && gl.uniformMatrix4fv(g_AttribLocationProjMtx, false, ortho_projection); + // Render command lists + gl && gl.bindBuffer(gl.ARRAY_BUFFER, g_VboHandle); + gl && gl.enableVertexAttribArray(g_AttribLocationPosition); + gl && gl.enableVertexAttribArray(g_AttribLocationUV); + gl && gl.enableVertexAttribArray(g_AttribLocationColor); + gl && gl.vertexAttribPointer(g_AttribLocationPosition, 2, gl.FLOAT, false, ImGui.ImDrawVertSize, ImGui.ImDrawVertPosOffset); + gl && gl.vertexAttribPointer(g_AttribLocationUV, 2, gl.FLOAT, false, ImGui.ImDrawVertSize, ImGui.ImDrawVertUVOffset); + gl && gl.vertexAttribPointer(g_AttribLocationColor, 4, gl.UNSIGNED_BYTE, true, ImGui.ImDrawVertSize, ImGui.ImDrawVertColOffset); + // Draw + const pos = draw_data.DisplayPos; + const idx_buffer_type = gl && ((ImGui.ImDrawIdxSize === 4) ? gl.UNSIGNED_INT : gl.UNSIGNED_SHORT) || 0; + draw_data.IterateDrawLists((draw_list) => { + gl || console.log(draw_list); + gl || console.log("VtxBuffer.length", draw_list.VtxBuffer.length); + gl || console.log("IdxBuffer.length", draw_list.IdxBuffer.length); + let idx_buffer_offset = 0; + gl && gl.bindBuffer(gl.ARRAY_BUFFER, g_VboHandle); + gl && gl.bufferData(gl.ARRAY_BUFFER, draw_list.VtxBuffer, gl.STREAM_DRAW); + gl && gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, g_ElementsHandle); + gl && gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, draw_list.IdxBuffer, gl.STREAM_DRAW); + draw_list.IterateDrawCmds((draw_cmd) => { + gl || console.log(draw_cmd); + gl || console.log("ElemCount", draw_cmd.ElemCount); + gl || console.log("ClipRect", draw_cmd.ClipRect.x, fb_height - draw_cmd.ClipRect.w, draw_cmd.ClipRect.z - draw_cmd.ClipRect.x, draw_cmd.ClipRect.w - draw_cmd.ClipRect.y); + gl || console.log("TextureId", draw_cmd.TextureId); + if (!gl) { + console.log("i: pos.x pos.y uv.x uv.y col"); + for (let i = 0; i < Math.min(3, draw_cmd.ElemCount); ++i) { + const view = new ImGui.ImDrawVert(draw_list.VtxBuffer.buffer, draw_list.VtxBuffer.byteOffset + i * ImGui.ImDrawVertSize); + console.log(`${i}: ${view.pos[0].toFixed(2)} ${view.pos[1].toFixed(2)} ${view.uv[0].toFixed(5)} ${view.uv[1].toFixed(5)} ${("00000000" + view.col[0].toString(16)).substr(-8)}`); + } + } + if (draw_cmd.UserCallback !== null) { + // User callback (registered via ImDrawList::AddCallback) + draw_cmd.UserCallback(draw_list, draw_cmd); + } + else { + const clip_rect = new ImGui.ImVec4(draw_cmd.ClipRect.x - pos.x, draw_cmd.ClipRect.y - pos.y, draw_cmd.ClipRect.z - pos.x, draw_cmd.ClipRect.w - pos.y); + if (clip_rect.x < fb_width && clip_rect.y < fb_height && clip_rect.z >= 0.0 && clip_rect.w >= 0.0) { + // Apply scissor/clipping rectangle + gl && gl.scissor(clip_rect.x, fb_height - clip_rect.w, clip_rect.z - clip_rect.x, clip_rect.w - clip_rect.y); + // Bind texture, Draw + gl && gl.activeTexture(gl.TEXTURE0); + gl && gl.bindTexture(gl.TEXTURE_2D, draw_cmd.TextureId); + gl && gl.drawElements(gl.TRIANGLES, draw_cmd.ElemCount, idx_buffer_type, idx_buffer_offset); + } + } + idx_buffer_offset += draw_cmd.ElemCount * ImGui.ImDrawIdxSize; + }); + }); + // Restore modified GL state + gl && (last_program !== null) && gl.useProgram(last_program); + gl && (last_texture !== null) && gl.bindTexture(gl.TEXTURE_2D, last_texture); + gl && (last_active_texture !== null) && gl.activeTexture(last_active_texture); + gl && gl.disableVertexAttribArray(g_AttribLocationPosition); + gl && gl.disableVertexAttribArray(g_AttribLocationUV); + gl && gl.disableVertexAttribArray(g_AttribLocationColor); + gl && (last_array_buffer !== null) && gl.bindBuffer(gl.ARRAY_BUFFER, last_array_buffer); + gl && (last_element_array_buffer !== null) && gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, last_element_array_buffer); + gl && (last_blend_equation_rgb !== null && last_blend_equation_alpha !== null) && gl.blendEquationSeparate(last_blend_equation_rgb, last_blend_equation_alpha); + gl && (last_blend_src_rgb !== null && last_blend_src_alpha !== null && last_blend_dst_rgb !== null && last_blend_dst_alpha !== null) && gl.blendFuncSeparate(last_blend_src_rgb, last_blend_src_alpha, last_blend_dst_rgb, last_blend_dst_alpha); + gl && (last_enable_blend ? gl.enable(gl.BLEND) : gl.disable(gl.BLEND)); + gl && (last_enable_cull_face ? gl.enable(gl.CULL_FACE) : gl.disable(gl.CULL_FACE)); + gl && (last_enable_depth_test ? gl.enable(gl.DEPTH_TEST) : gl.disable(gl.DEPTH_TEST)); + gl && (last_enable_scissor_test ? gl.enable(gl.SCISSOR_TEST) : gl.disable(gl.SCISSOR_TEST)); + // glPolygonMode(GL_FRONT_AND_BACK, (GLenum)last_polygon_mode[0]); + gl && (last_viewport !== null) && gl.viewport(last_viewport[0], last_viewport[1], last_viewport[2], last_viewport[3]); + gl && (last_scissor_box !== null) && gl.scissor(last_scissor_box[0], last_scissor_box[1], last_scissor_box[2], last_scissor_box[3]); } }; - exports_1("ImGuiImplPIXI", ImGuiImplPIXI); + gl = null; + app = null; + ImGuiWindow = class ImGuiWindow extends PIXI.Container { + constructor(sizeX, sizeY, update) { + super(); + this.baseTex = new PIXI.BaseRenderTexture({ scaleMode: PIXI.SCALE_MODES.LINEAR, resolution: 1 }); + this.tex = new PIXI.RenderTexture(this.baseTex); + this.surface = new PIXI.Sprite(this.tex); + this.imgui = new PIXI.Sprite(); + if (isFirstWindow) { + this.ctx = contexts[0]; + this.io = contextIOs[0]; + } + else { + this.ctx = ImGui.CreateContext(); + ImGui.SetCurrentContext(this.ctx); + this.io = ImGui.GetIO(); + } + if (!isFirstWindow) { + this.io.Fonts.TexID = contextIOs[0].Fonts.TexID; + } + isFirstWindow = false; + if (typeof (navigator) !== "undefined") { + this.io.ConfigMacOSXBehaviors = navigator.platform.match(/Mac/) !== null; + } + this.io.SetClipboardTextFn = (user_data, text) => { + clipboard_text = text; + // console.log(`set clipboard_text: "${clipboard_text}"`); + if (typeof navigator !== "undefined" && typeof navigator.clipboard !== "undefined") { + // console.log(`clipboard.writeText: "${clipboard_text}"`); + navigator.clipboard.writeText(clipboard_text).then(() => { + // console.log(`clipboard.writeText: "${clipboard_text}" done.`); + }); + } + }; + this.io.GetClipboardTextFn = (user_data) => { + // if (typeof navigator !== "undefined" && typeof (navigator as any).clipboard !== "undefined") { + // console.log(`clipboard.readText: "${clipboard_text}"`); + // (navigator as any).clipboard.readText().then((text: string): void => { + // clipboard_text = text; + // console.log(`clipboard.readText: "${clipboard_text}" done.`); + // }); + // } + // console.log(`get clipboard_text: "${clipboard_text}"`); + return clipboard_text; + }; + this.io.ClipboardUserData = null; + // Setup back-end capabilities flags + this.io.BackendFlags |= ImGui.BackendFlags.HasMouseCursors; // We can honor GetMouseCursor() values (optional) + // Keyboard mapping. ImGui will use those indices to peek into the io.KeyDown[] array. + this.io.KeyMap[ImGui.Key.Tab] = 9; + this.io.KeyMap[ImGui.Key.LeftArrow] = 37; + this.io.KeyMap[ImGui.Key.RightArrow] = 39; + this.io.KeyMap[ImGui.Key.UpArrow] = 38; + this.io.KeyMap[ImGui.Key.DownArrow] = 40; + this.io.KeyMap[ImGui.Key.PageUp] = 33; + this.io.KeyMap[ImGui.Key.PageDown] = 34; + this.io.KeyMap[ImGui.Key.Home] = 36; + this.io.KeyMap[ImGui.Key.End] = 35; + this.io.KeyMap[ImGui.Key.Insert] = 45; + this.io.KeyMap[ImGui.Key.Delete] = 46; + this.io.KeyMap[ImGui.Key.Backspace] = 8; + this.io.KeyMap[ImGui.Key.Space] = 32; + this.io.KeyMap[ImGui.Key.Enter] = 13; + this.io.KeyMap[ImGui.Key.Escape] = 27; + this.io.KeyMap[ImGui.Key.A] = 65; + this.io.KeyMap[ImGui.Key.C] = 67; + this.io.KeyMap[ImGui.Key.V] = 86; + this.io.KeyMap[ImGui.Key.X] = 88; + this.io.KeyMap[ImGui.Key.Y] = 89; + this.io.KeyMap[ImGui.Key.Z] = 90; + contextIOs.push(this.io); + this.update = update; + this.resize(sizeX, sizeY); + this.imgui.pluginName = 'imgui_renderer'; + this.addChild(this.surface); + this.surface.addListener("mousedown", this.mouseDown.bind(this)); + this.surface.addListener("mouseup", this.mouseUp.bind(this)); + app.ticker.add(this.updateInternal.bind(this)); + } + getSizeX() { return this.sizeX; } + getSizeY() { return this.sizeY; } + mouseDown(e) { + this.io.MouseDown[mouse_button_map[0]] = true; + } + mouseUp(e) { + this.io.MouseDown[mouse_button_map[0]] = false; + } + resize(sizeX, sizeY) { + this.sizeX = sizeX; + this.sizeY = sizeY; + this.baseTex.resize(sizeX, sizeY); + this.tex.frame = new PIXI.Rectangle(0, 0, this.baseTex.width, this.baseTex.height); + this.surface.hitArea = this.tex.frame; + } + updateInternal(deltaTime) { + const dt = deltaTime * 1 / (1000 * PIXI.settings.TARGET_FPMS); + ImGui.SetCurrentContext(this.ctx); + if (this.io.WantSaveIniSettings) { + this.io.WantSaveIniSettings = false; + if (typeof (window) !== "undefined") { + window.localStorage.setItem("imgui.ini", ImGui.SaveIniSettingsToMemory()); + } + } + this.io.DisplaySize.x = this.sizeX; + this.io.DisplaySize.y = this.sizeY; + this.io.DisplayFramebufferScale.x = 1; + this.io.DisplayFramebufferScale.y = 1; + this.io.DeltaTime = dt; + const localPos = this.getGlobalPosition(new PIXI.Point()); + this.io.MousePos.x = localPos.x; + this.io.MousePos.y = localPos.y; + if (this.io.WantSetMousePos) { + console.log("TODO: MousePos", this.io.MousePos.x, this.io.MousePos.y); + } + if (typeof (document) !== "undefined") { + if (this.io.MouseDrawCursor) { + document.body.style.cursor = "none"; + } + else { + switch (ImGui.GetMouseCursor()) { + case ImGui.MouseCursor.None: + document.body.style.cursor = "none"; + break; + default: + case ImGui.MouseCursor.Arrow: + document.body.style.cursor = "default"; + break; + case ImGui.MouseCursor.TextInput: + document.body.style.cursor = "text"; + break; // When hovering over InputText, etc. + case ImGui.MouseCursor.ResizeAll: + document.body.style.cursor = "move"; + break; // Unused + case ImGui.MouseCursor.ResizeNS: + document.body.style.cursor = "ns-resize"; + break; // When hovering over an horizontal border + case ImGui.MouseCursor.ResizeEW: + document.body.style.cursor = "ew-resize"; + break; // When hovering over a vertical border or a column + case ImGui.MouseCursor.ResizeNESW: + document.body.style.cursor = "nesw-resize"; + break; // When hovering over the bottom-left corner of a window + case ImGui.MouseCursor.ResizeNWSE: + document.body.style.cursor = "nwse-resize"; + break; // When hovering over the bottom-right corner of a window + case ImGui.MouseCursor.Hand: + document.body.style.cursor = "move"; + break; + } + } + } + // Gamepad navigation mapping [BETA] + for (let i = 0; i < this.io.NavInputs.length; ++i) { + this.io.NavInputs[i] = 0.0; + } + if (this.io.ConfigFlags & ImGui.ConfigFlags.NavEnableGamepad) { + // Update gamepad inputs + const gamepads = (typeof (navigator) !== "undefined" && typeof (navigator.getGamepads) === "function") ? navigator.getGamepads() : []; + for (let i = 0; i < gamepads.length; ++i) { + const gamepad = gamepads[i]; + if (!gamepad) { + continue; + } + const buttons_count = gamepad.buttons.length; + const axes_count = gamepad.axes.length; + const MAP_BUTTON = function (NAV_NO, BUTTON_NO) { + if (!gamepad) { + return; + } + if (buttons_count > BUTTON_NO && gamepad.buttons[BUTTON_NO].pressed) + this.io.NavInputs[NAV_NO] = 1.0; + }; + const MAP_ANALOG = function (NAV_NO, AXIS_NO, V0, V1) { + if (!gamepad) { + return; + } + let v = (axes_count > AXIS_NO) ? gamepad.axes[AXIS_NO] : V0; + v = (v - V0) / (V1 - V0); + if (v > 1.0) + v = 1.0; + if (this.io.NavInputs[NAV_NO] < v) + this.io.NavInputs[NAV_NO] = v; + }; + // TODO: map input based on vendor and product id + // https://developer.mozilla.org/en-US/docs/Web/API/Gamepad/id + const match = gamepad.id.match(/^([0-9a-f]{4})-([0-9a-f]{4})-.*$/); + const match_chrome = gamepad.id.match(/^.*\(.*Vendor: ([0-9a-f]{4}) Product: ([0-9a-f]{4})\).*$/); + const vendor = (match && match[1]) || (match_chrome && match_chrome[1]) || "0000"; + const product = (match && match[2]) || (match_chrome && match_chrome[2]) || "0000"; + switch (vendor + product) { + case "046dc216": // Logitech Logitech Dual Action (Vendor: 046d Product: c216) + MAP_BUTTON(ImGui.NavInput.Activate, 1); // Cross / A + MAP_BUTTON(ImGui.NavInput.Cancel, 2); // Circle / B + MAP_BUTTON(ImGui.NavInput.Menu, 0); // Square / X + MAP_BUTTON(ImGui.NavInput.Input, 3); // Triangle / Y + MAP_ANALOG(ImGui.NavInput.DpadLeft, 4, -0.3, -0.9); // D-Pad Left + MAP_ANALOG(ImGui.NavInput.DpadRight, 4, +0.3, +0.9); // D-Pad Right + MAP_ANALOG(ImGui.NavInput.DpadUp, 5, -0.3, -0.9); // D-Pad Up + MAP_ANALOG(ImGui.NavInput.DpadDown, 5, +0.3, +0.9); // D-Pad Down + MAP_BUTTON(ImGui.NavInput.FocusPrev, 4); // L1 / LB + MAP_BUTTON(ImGui.NavInput.FocusNext, 5); // R1 / RB + MAP_BUTTON(ImGui.NavInput.TweakSlow, 6); // L2 / LT + MAP_BUTTON(ImGui.NavInput.TweakFast, 7); // R2 / RT + MAP_ANALOG(ImGui.NavInput.LStickLeft, 0, -0.3, -0.9); + MAP_ANALOG(ImGui.NavInput.LStickRight, 0, +0.3, +0.9); + MAP_ANALOG(ImGui.NavInput.LStickUp, 1, -0.3, -0.9); + MAP_ANALOG(ImGui.NavInput.LStickDown, 1, +0.3, +0.9); + break; + case "046dc21d": // Logitech Gamepad F310 (STANDARD GAMEPAD Vendor: 046d Product: c21d) + MAP_BUTTON(ImGui.NavInput.Activate, 0); // Cross / A + MAP_BUTTON(ImGui.NavInput.Cancel, 1); // Circle / B + MAP_BUTTON(ImGui.NavInput.Menu, 2); // Square / X + MAP_BUTTON(ImGui.NavInput.Input, 3); // Triangle / Y + MAP_BUTTON(ImGui.NavInput.DpadLeft, 14); // D-Pad Left + MAP_BUTTON(ImGui.NavInput.DpadRight, 15); // D-Pad Right + MAP_BUTTON(ImGui.NavInput.DpadUp, 12); // D-Pad Up + MAP_BUTTON(ImGui.NavInput.DpadDown, 13); // D-Pad Down + MAP_BUTTON(ImGui.NavInput.FocusPrev, 4); // L1 / LB + MAP_BUTTON(ImGui.NavInput.FocusNext, 5); // R1 / RB + MAP_ANALOG(ImGui.NavInput.TweakSlow, 6, +0.3, +0.9); // L2 / LT + MAP_ANALOG(ImGui.NavInput.TweakFast, 7, +0.3, +0.9); // R2 / RT + MAP_ANALOG(ImGui.NavInput.LStickLeft, 0, -0.3, -0.9); + MAP_ANALOG(ImGui.NavInput.LStickRight, 0, +0.3, +0.9); + MAP_ANALOG(ImGui.NavInput.LStickUp, 1, -0.3, -0.9); + MAP_ANALOG(ImGui.NavInput.LStickDown, 1, +0.3, +0.9); + break; + case "2dc86001": // 8Bitdo SN30 Pro 8Bitdo SN30 Pro (Vendor: 2dc8 Product: 6001) + case "2dc86101": // 8Bitdo SN30 Pro (Vendor: 2dc8 Product: 6101) + MAP_BUTTON(ImGui.NavInput.Activate, 1); // Cross / A + MAP_BUTTON(ImGui.NavInput.Cancel, 0); // Circle / B + MAP_BUTTON(ImGui.NavInput.Menu, 4); // Square / X + MAP_BUTTON(ImGui.NavInput.Input, 3); // Triangle / Y + MAP_ANALOG(ImGui.NavInput.DpadLeft, 6, -0.3, -0.9); // D-Pad Left + MAP_ANALOG(ImGui.NavInput.DpadRight, 6, +0.3, +0.9); // D-Pad Right + MAP_ANALOG(ImGui.NavInput.DpadUp, 7, -0.3, -0.9); // D-Pad Up + MAP_ANALOG(ImGui.NavInput.DpadDown, 7, +0.3, +0.9); // D-Pad Down + MAP_BUTTON(ImGui.NavInput.FocusPrev, 6); // L1 / LB + MAP_BUTTON(ImGui.NavInput.FocusNext, 7); // R1 / RB + MAP_BUTTON(ImGui.NavInput.TweakSlow, 8); // L2 / LT + MAP_BUTTON(ImGui.NavInput.TweakFast, 9); // R2 / RT + MAP_ANALOG(ImGui.NavInput.LStickLeft, 0, -0.3, -0.9); + MAP_ANALOG(ImGui.NavInput.LStickRight, 0, +0.3, +0.9); + MAP_ANALOG(ImGui.NavInput.LStickUp, 1, -0.3, -0.9); + MAP_ANALOG(ImGui.NavInput.LStickDown, 1, +0.3, +0.9); + break; + default: // standard gamepad: https://w3c.github.io/gamepad/#remapping + MAP_BUTTON(ImGui.NavInput.Activate, 0); // Cross / A + MAP_BUTTON(ImGui.NavInput.Cancel, 1); // Circle / B + MAP_BUTTON(ImGui.NavInput.Menu, 2); // Square / X + MAP_BUTTON(ImGui.NavInput.Input, 3); // Triangle / Y + MAP_BUTTON(ImGui.NavInput.DpadLeft, 14); // D-Pad Left + MAP_BUTTON(ImGui.NavInput.DpadRight, 15); // D-Pad Right + MAP_BUTTON(ImGui.NavInput.DpadUp, 12); // D-Pad Up + MAP_BUTTON(ImGui.NavInput.DpadDown, 13); // D-Pad Down + MAP_BUTTON(ImGui.NavInput.FocusPrev, 4); // L1 / LB + MAP_BUTTON(ImGui.NavInput.FocusNext, 5); // R1 / RB + MAP_BUTTON(ImGui.NavInput.TweakSlow, 6); // L2 / LT + MAP_BUTTON(ImGui.NavInput.TweakFast, 7); // R2 / RT + MAP_ANALOG(ImGui.NavInput.LStickLeft, 0, -0.3, -0.9); + MAP_ANALOG(ImGui.NavInput.LStickRight, 0, +0.3, +0.9); + MAP_ANALOG(ImGui.NavInput.LStickUp, 1, -0.3, -0.9); + MAP_ANALOG(ImGui.NavInput.LStickDown, 1, +0.3, +0.9); + break; + } + } + } + ImGui.NewFrame(); + this.update(dt); + ImGui.EndFrame(); + ImGui.Render(); + app.renderer.render(this.imgui, this.tex); + } + }; + exports_1("ImGuiWindow", ImGuiWindow); canvas = null; - exports_1("gl", gl = null); + //export let gl: WebGL2RenderingContext | null = null; g_ShaderHandle = null; g_VertHandle = null; g_FragHandle = null; @@ -767,7 +700,6 @@ g_VboHandle = null; g_ElementsHandle = null; g_FontTexture = null; - exports_1("ctx", ctx = null); prev_time = 0; // MouseEvent.button // A number representing a given button: diff --git a/src/imgui_impl.js.map b/src/imgui_impl.js.map index 6d2bb7c..68bf7e0 100644 --- a/src/imgui_impl.js.map +++ b/src/imgui_impl.js.map @@ -1 +1 @@ -{"version":3,"file":"imgui_impl.js","sourceRoot":"","sources":["imgui_impl.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"imgui_impl.js","sourceRoot":"","sources":["imgui_impl.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/src/imgui_impl.ts b/src/imgui_impl.ts index b19b8d7..332fd14 100644 --- a/src/imgui_impl.ts +++ b/src/imgui_impl.ts @@ -5,7 +5,9 @@ let clipboard_text: string = ""; +const contexts: ImGui.ImGuiContext[] = []; const contextIOs: ImGui.ImGuiIO[] = []; +let isFirstWindow: boolean = true; class ImGuiImplInternalRenderer extends PIXI.ObjectRenderer { @@ -15,8 +17,11 @@ } render(owner: PIXI.DisplayObject): void { + if (!(owner instanceof ImGuiWindow)) return; - const io: ImGui.ImGuiIO = ImGui.GetIO(); + const window: ImGuiWindow = owner as ImGuiWindow; + + const io: ImGui.ImGuiIO = window.io; const draw_data: ImGui.ImDrawData = ImGui.GetDrawData(); if (draw_data === null) { throw new Error(); } @@ -161,7 +166,7 @@ export class ImGuiWindow extends PIXI.Container { public readonly ctx: ImGui.ImGuiContext; - private readonly io: ImGui.ImGuiIO; + public readonly io: ImGui.ImGuiIO; private sizeX: number; private sizeY: number; public getSizeX(): number { return this.sizeX; } @@ -177,9 +182,80 @@ constructor(sizeX: number, sizeY: number, update: (dt: number) => void) { super(); - this.ctx = ImGui.CreateContext(); - ImGui.SetCurrentContext(this.ctx); - this.io = ImGui.GetIO(); + + if (isFirstWindow) + { + this.ctx = contexts[0]; + this.io = contextIOs[0]; + } + else + { + this.ctx = ImGui.CreateContext(); + ImGui.SetCurrentContext(this.ctx); + this.io = ImGui.GetIO(); + } + + + if (!isFirstWindow) + { + this.io.Fonts.TexID = contextIOs[0].Fonts.TexID; + } + + isFirstWindow = false; + + if (typeof(navigator) !== "undefined") { + this.io.ConfigMacOSXBehaviors = navigator.platform.match(/Mac/) !== null; + } + + this.io.SetClipboardTextFn = (user_data: any, text: string): void => { + clipboard_text = text; + // console.log(`set clipboard_text: "${clipboard_text}"`); + if (typeof navigator !== "undefined" && typeof (navigator as any).clipboard !== "undefined") { + // console.log(`clipboard.writeText: "${clipboard_text}"`); + (navigator as any).clipboard.writeText(clipboard_text).then((): void => { + // console.log(`clipboard.writeText: "${clipboard_text}" done.`); + }); + } + }; + this.io.GetClipboardTextFn = (user_data: any): string => { + // if (typeof navigator !== "undefined" && typeof (navigator as any).clipboard !== "undefined") { + // console.log(`clipboard.readText: "${clipboard_text}"`); + // (navigator as any).clipboard.readText().then((text: string): void => { + // clipboard_text = text; + // console.log(`clipboard.readText: "${clipboard_text}" done.`); + // }); + // } + // console.log(`get clipboard_text: "${clipboard_text}"`); + return clipboard_text; + }; + this.io.ClipboardUserData = null; + + // Setup back-end capabilities flags + this.io.BackendFlags |= ImGui.BackendFlags.HasMouseCursors; // We can honor GetMouseCursor() values (optional) + + // Keyboard mapping. ImGui will use those indices to peek into the io.KeyDown[] array. + this.io.KeyMap[ImGui.Key.Tab] = 9; + this.io.KeyMap[ImGui.Key.LeftArrow] = 37; + this.io.KeyMap[ImGui.Key.RightArrow] = 39; + this.io.KeyMap[ImGui.Key.UpArrow] = 38; + this.io.KeyMap[ImGui.Key.DownArrow] = 40; + this.io.KeyMap[ImGui.Key.PageUp] = 33; + this.io.KeyMap[ImGui.Key.PageDown] = 34; + this.io.KeyMap[ImGui.Key.Home] = 36; + this.io.KeyMap[ImGui.Key.End] = 35; + this.io.KeyMap[ImGui.Key.Insert] = 45; + this.io.KeyMap[ImGui.Key.Delete] = 46; + this.io.KeyMap[ImGui.Key.Backspace] = 8; + this.io.KeyMap[ImGui.Key.Space] = 32; + this.io.KeyMap[ImGui.Key.Enter] = 13; + this.io.KeyMap[ImGui.Key.Escape] = 27; + this.io.KeyMap[ImGui.Key.A] = 65; + this.io.KeyMap[ImGui.Key.C] = 67; + this.io.KeyMap[ImGui.Key.V] = 86; + this.io.KeyMap[ImGui.Key.X] = 88; + this.io.KeyMap[ImGui.Key.Y] = 89; + this.io.KeyMap[ImGui.Key.Z] = 90; + contextIOs.push(this.io); this.update = update; this.resize(sizeX, sizeY); @@ -225,7 +301,6 @@ this.io.DeltaTime = dt; - // TODO global mouse pos to local const localPos: PIXI.Point = this.getGlobalPosition(new PIXI.Point()); this.io.MousePos.x = localPos.x; this.io.MousePos.y = localPos.y; @@ -519,52 +594,31 @@ export function Init(_app: PIXI.Application): void { // Setup Dear ImGui binding ImGui.IMGUI_CHECKVERSION(); + ImGui.CreateContext(); + ImGui.StyleColorsLight(); + + contexts.push(ImGui.GetCurrentContext()); + contextIOs.push(ImGui.GetIO()); + contextIOs[0].Fonts.AddFontDefault(); PIXI.Renderer.registerPlugin("imgui_renderer", U.fromConstructor(ImGuiImplInternalRenderer)); - const io = ImGui.GetIO(); if (typeof(window) !== "undefined") { ImGui.LoadIniSettingsFromMemory(window.localStorage.getItem("imgui.ini") || ""); } - if (typeof(navigator) !== "undefined") { - io.ConfigMacOSXBehaviors = navigator.platform.match(/Mac/) !== null; - } - if (typeof(document) !== "undefined") { document.body.addEventListener("copy", document_on_copy); document.body.addEventListener("cut", document_on_cut); document.body.addEventListener("paste", document_on_paste); } - io.SetClipboardTextFn = (user_data: any, text: string): void => { - clipboard_text = text; - // console.log(`set clipboard_text: "${clipboard_text}"`); - if (typeof navigator !== "undefined" && typeof (navigator as any).clipboard !== "undefined") { - // console.log(`clipboard.writeText: "${clipboard_text}"`); - (navigator as any).clipboard.writeText(clipboard_text).then((): void => { - // console.log(`clipboard.writeText: "${clipboard_text}" done.`); - }); - } - }; - io.GetClipboardTextFn = (user_data: any): string => { - // if (typeof navigator !== "undefined" && typeof (navigator as any).clipboard !== "undefined") { - // console.log(`clipboard.readText: "${clipboard_text}"`); - // (navigator as any).clipboard.readText().then((text: string): void => { - // clipboard_text = text; - // console.log(`clipboard.readText: "${clipboard_text}" done.`); - // }); - // } - // console.log(`get clipboard_text: "${clipboard_text}"`); - return clipboard_text; - }; - io.ClipboardUserData = null; - if (typeof(window) !== "undefined") { window.addEventListener("gamepadconnected", window_on_gamepadconnected); window.addEventListener("gamepaddisconnected", window_on_gamepaddisconnected); } + app = _app; gl = (app.renderer as any).gl; canvas = app.view; @@ -579,31 +633,6 @@ canvas.addEventListener("wheel", canvas_on_wheel); } - // Setup back-end capabilities flags - io.BackendFlags |= ImGui.BackendFlags.HasMouseCursors; // We can honor GetMouseCursor() values (optional) - - // Keyboard mapping. ImGui will use those indices to peek into the io.KeyDown[] array. - io.KeyMap[ImGui.Key.Tab] = 9; - io.KeyMap[ImGui.Key.LeftArrow] = 37; - io.KeyMap[ImGui.Key.RightArrow] = 39; - io.KeyMap[ImGui.Key.UpArrow] = 38; - io.KeyMap[ImGui.Key.DownArrow] = 40; - io.KeyMap[ImGui.Key.PageUp] = 33; - io.KeyMap[ImGui.Key.PageDown] = 34; - io.KeyMap[ImGui.Key.Home] = 36; - io.KeyMap[ImGui.Key.End] = 35; - io.KeyMap[ImGui.Key.Insert] = 45; - io.KeyMap[ImGui.Key.Delete] = 46; - io.KeyMap[ImGui.Key.Backspace] = 8; - io.KeyMap[ImGui.Key.Space] = 32; - io.KeyMap[ImGui.Key.Enter] = 13; - io.KeyMap[ImGui.Key.Escape] = 27; - io.KeyMap[ImGui.Key.A] = 65; - io.KeyMap[ImGui.Key.C] = 67; - io.KeyMap[ImGui.Key.V] = 86; - io.KeyMap[ImGui.Key.X] = 88; - io.KeyMap[ImGui.Key.Y] = 89; - io.KeyMap[ImGui.Key.Z] = 90; CreateDeviceObjects(); } @@ -635,12 +664,6 @@ } } -export function NewFrame(time: number): void { -} - -export function RenderDrawData(draw_data: ImGui.ImDrawData | null = ImGui.GetDrawData()): void { -} - export function CreateFontsTexture(): void { const io = ImGui.GetIO(); diff --git a/src/main.js b/src/main.js index 053077a..b99a6d3 100644 --- a/src/main.js +++ b/src/main.js @@ -8,11 +8,10 @@ step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; - var ImGui_Impl, ImGui, imgui_js_1, imgui_js_2, PIXI, U, ctx, currentCtx, clearColor, ImGuiRenderer, windowOpen, text; + var ImGui_Impl, imgui_impl_1, ImGui, imgui_js_1, imgui_js_2, PIXI, U, clearColor, windowOpen, text; var __moduleName = context_1 && context_1.id; function main() { return __awaiter(this, void 0, void 0, function* () { - PIXI.Renderer.registerPlugin("imgui_renderer", U.fromConstructor(ImGuiRenderer)); console.log("main()"); yield ImGui.default(); window.requestAnimationFrame(init); @@ -33,61 +32,36 @@ app.view.style.bottom = "0px"; app.view.style.width = "100%"; app.view.style.height = "100%"; - // Setup Dear ImGui binding - ImGui.IMGUI_CHECKVERSION(); - for (var i = 0; i < 2; i++) { - let newCtx = ImGui.CreateContext(); - ImGui.SetCurrentContext(newCtx); - const io = ImGui.GetIO(); - io.ConfigFlags |= ImGui.ConfigFlags.NavEnableKeyboard; // Enable Keyboard Controls - // Setup style - ImGui.StyleColorsLight(); - ImGui_Impl.Init(app.view); - ctx.push(newCtx); - } - ImGui.SetCurrentContext(ctx[0]); + // Setup style + ImGui.StyleColorsLight(); + ImGui_Impl.Init(app); app.ticker.add((deltaTime) => { const dt = deltaTime * 1 / (1000 * PIXI.settings.TARGET_FPMS); - ImGui_Impl.NewFrame(dt); - ImGui.NewFrame(); - update(app, dt); - ImGui.EndFrame(); - ImGui.Render(); app.render(); }); - const imguiLayer = new PIXI.Sprite(); - imguiLayer.pluginName = "imgui_renderer"; - app.stage.addChild(imguiLayer); let resizeFunc = function () { app.renderer.resize(window.innerWidth, window.innerHeight); }; + const imgui = new imgui_impl_1.ImGuiWindow(400, 400, update); + app.stage.addChild(imgui); window.onresize = resizeFunc; resizeFunc(); - window.onkeydown = keyDown; } - function keyDown() { - currentCtx = (currentCtx + 1) % ctx.length; - ImGui.SetCurrentContext(ctx[currentCtx]); - } - function update(app, timeElapsed) { + function update(timeElapsed) { ImGui.SetNextWindowPos(new imgui_js_2.ImVec2(0, 0)); ImGui.SetNextWindowSize(new imgui_js_2.ImVec2(600, 400), ImGui.ImGuiCond.Always); - ImGui.Begin("Test Window " + currentCtx, (_ = windowOpen) => windowOpen = _, 0); - if (currentCtx == 0) { - if (ImGui.Button("Add Text")) { - text += "A"; - } - ImGui.Text(text); + ImGui.Begin("Test Window"); + if (ImGui.Button("Add Text")) { + text += "A"; } - else { - ImGui.Text("Another context"); - } + ImGui.Text(text); ImGui.End(); } return { setters: [ function (ImGui_Impl_1) { ImGui_Impl = ImGui_Impl_1; + imgui_impl_1 = ImGui_Impl_1; }, function (ImGui_1) { ImGui = ImGui_1; @@ -102,17 +76,7 @@ } ], execute: function () { - ctx = []; - currentCtx = 0; clearColor = new imgui_js_1.ImVec4(0.7, 0.9, 1, 1); - ImGuiRenderer = class ImGuiRenderer extends PIXI.ObjectRenderer { - constructor(r) { - super(r); - } - render(notUsed) { - ImGui_Impl.RenderDrawData(ImGui.GetDrawData()); - } - }; windowOpen = true; text = "text"; /* diff --git a/src/imgui_impl.js b/src/imgui_impl.js index 3fdd928..a611a08 100644 --- a/src/imgui_impl.js +++ b/src/imgui_impl.js @@ -1,6 +1,6 @@ -System.register(["imgui-js"], function (exports_1, context_1) { +System.register(["imgui-js", "pixi.js", "./utils"], function (exports_1, context_1) { "use strict"; - var ImGui, clipboard_text, ImGuiImplPIXI, canvas, gl, g_ShaderHandle, g_VertHandle, g_FragHandle, g_AttribLocationTex, g_AttribLocationProjMtx, g_AttribLocationPosition, g_AttribLocationUV, g_AttribLocationColor, g_VboHandle, g_ElementsHandle, g_FontTexture, ctx, prev_time, mouse_button_map; + var ImGui, PIXI, U, clipboard_text, contexts, contextIOs, isFirstWindow, ImGuiImplInternalRenderer, gl, app, ImGuiWindow, canvas, g_ShaderHandle, g_VertHandle, g_FragHandle, g_AttribLocationTex, g_AttribLocationProjMtx, g_AttribLocationPosition, g_AttribLocationUV, g_AttribLocationColor, g_VboHandle, g_ElementsHandle, g_FontTexture, prev_time, mouse_button_map; var __moduleName = context_1 && context_1.id; function document_on_copy(event) { if (event.clipboardData) { @@ -30,193 +30,118 @@ console.log("Gamepad disconnected at index %d: %s.", event.gamepad.index, event.gamepad.id); } function canvas_on_blur(event) { - const io = ImGui.GetIO(); - io.KeyCtrl = false; - io.KeyShift = false; - io.KeyAlt = false; - io.KeySuper = false; - for (let i = 0; i < io.KeysDown.length; ++i) { - io.KeysDown[i] = false; - } - for (let i = 0; i < io.MouseDown.length; ++i) { - io.MouseDown[i] = false; + for (var io of contextIOs) { + io.KeyCtrl = false; + io.KeyShift = false; + io.KeyAlt = false; + io.KeySuper = false; + for (let i = 0; i < io.KeysDown.length; ++i) { + io.KeysDown[i] = false; + } + for (let i = 0; i < io.MouseDown.length; ++i) { + io.MouseDown[i] = false; + } } } function canvas_on_keydown(event) { // console.log(event.type, event.key, event.keyCode); - const io = ImGui.GetIO(); - io.KeyCtrl = event.ctrlKey; - io.KeyShift = event.shiftKey; - io.KeyAlt = event.altKey; - io.KeySuper = event.metaKey; - ImGui.IM_ASSERT(event.keyCode >= 0 && event.keyCode < ImGui.IM_ARRAYSIZE(io.KeysDown)); - io.KeysDown[event.keyCode] = true; - // forward to the keypress event - if ( /*io.WantCaptureKeyboard ||*/event.key === "Tab") { - event.preventDefault(); + for (var io of contextIOs) { + io.KeyCtrl = event.ctrlKey; + io.KeyShift = event.shiftKey; + io.KeyAlt = event.altKey; + io.KeySuper = event.metaKey; + ImGui.IM_ASSERT(event.keyCode >= 0 && event.keyCode < ImGui.IM_ARRAYSIZE(io.KeysDown)); + io.KeysDown[event.keyCode] = true; + // forward to the keypress event + if ( /*io.WantCaptureKeyboard ||*/event.key === "Tab") { + event.preventDefault(); + } } } function canvas_on_keyup(event) { // console.log(event.type, event.key, event.keyCode); - const io = ImGui.GetIO(); - io.KeyCtrl = event.ctrlKey; - io.KeyShift = event.shiftKey; - io.KeyAlt = event.altKey; - io.KeySuper = event.metaKey; - ImGui.IM_ASSERT(event.keyCode >= 0 && event.keyCode < ImGui.IM_ARRAYSIZE(io.KeysDown)); - io.KeysDown[event.keyCode] = false; - if (io.WantCaptureKeyboard) { - event.preventDefault(); + for (var io of contextIOs) { + io.KeyCtrl = event.ctrlKey; + io.KeyShift = event.shiftKey; + io.KeyAlt = event.altKey; + io.KeySuper = event.metaKey; + ImGui.IM_ASSERT(event.keyCode >= 0 && event.keyCode < ImGui.IM_ARRAYSIZE(io.KeysDown)); + io.KeysDown[event.keyCode] = false; + if (io.WantCaptureKeyboard) { + event.preventDefault(); + } } } function canvas_on_keypress(event) { // console.log(event.type, event.key, event.keyCode); - const io = ImGui.GetIO(); - io.AddInputCharacter(event.charCode); - if (io.WantCaptureKeyboard) { - event.preventDefault(); + for (var io of contextIOs) { + io.AddInputCharacter(event.charCode); + if (io.WantCaptureKeyboard) { + event.preventDefault(); + } } } - function canvas_on_pointermove(event) { - const io = ImGui.GetIO(); - const devicePixelRatio = window.devicePixelRatio || 1; - io.MousePos.x = event.offsetX * devicePixelRatio; - io.MousePos.y = event.offsetY * devicePixelRatio; - if (io.WantCaptureMouse) { - event.preventDefault(); - } - } - function canvas_on_pointerdown(event) { - const io = ImGui.GetIO(); - const devicePixelRatio = window.devicePixelRatio || 1; - io.MousePos.x = event.offsetX * devicePixelRatio; - io.MousePos.y = event.offsetY * devicePixelRatio; - io.MouseDown[mouse_button_map[event.button]] = true; - // if (io.WantCaptureMouse) { - // event.preventDefault(); - // } - } function canvas_on_contextmenu(event) { - const io = ImGui.GetIO(); - if (io.WantCaptureMouse) { - event.preventDefault(); - } - } - function canvas_on_pointerup(event) { - const io = ImGui.GetIO(); - io.MouseDown[mouse_button_map[event.button]] = false; - if (io.WantCaptureMouse) { - event.preventDefault(); + for (var io of contextIOs) { + if (io.WantCaptureMouse) { + event.preventDefault(); + } } } function canvas_on_wheel(event) { - const io = ImGui.GetIO(); - let scale = 1.0; - switch (event.deltaMode) { - case event.DOM_DELTA_PIXEL: - scale = 0.01; - break; - case event.DOM_DELTA_LINE: - scale = 0.2; - break; - case event.DOM_DELTA_PAGE: - scale = 1.0; - break; - } - io.MouseWheelH = event.deltaX * scale; - io.MouseWheel = -event.deltaY * scale; // Mouse wheel: 1 unit scrolls about 5 lines text. - if (io.WantCaptureMouse) { - event.preventDefault(); + for (var io of contextIOs) { + let scale = 1.0; + switch (event.deltaMode) { + case event.DOM_DELTA_PIXEL: + scale = 0.01; + break; + case event.DOM_DELTA_LINE: + scale = 0.2; + break; + case event.DOM_DELTA_PAGE: + scale = 1.0; + break; + } + io.MouseWheelH = event.deltaX * scale; + io.MouseWheel = -event.deltaY * scale; // Mouse wheel: 1 unit scrolls about 5 lines text. + if (io.WantCaptureMouse) { + event.preventDefault(); + } } } - function Init(value) { - const io = ImGui.GetIO(); + function Init(_app) { + // Setup Dear ImGui binding + ImGui.IMGUI_CHECKVERSION(); + ImGui.CreateContext(); + ImGui.StyleColorsLight(); + contexts.push(ImGui.GetCurrentContext()); + contextIOs.push(ImGui.GetIO()); + contextIOs[0].Fonts.AddFontDefault(); + PIXI.Renderer.registerPlugin("imgui_renderer", U.fromConstructor(ImGuiImplInternalRenderer)); if (typeof (window) !== "undefined") { ImGui.LoadIniSettingsFromMemory(window.localStorage.getItem("imgui.ini") || ""); } - if (typeof (navigator) !== "undefined") { - io.ConfigMacOSXBehaviors = navigator.platform.match(/Mac/) !== null; - } if (typeof (document) !== "undefined") { document.body.addEventListener("copy", document_on_copy); document.body.addEventListener("cut", document_on_cut); document.body.addEventListener("paste", document_on_paste); } - io.SetClipboardTextFn = (user_data, text) => { - clipboard_text = text; - // console.log(`set clipboard_text: "${clipboard_text}"`); - if (typeof navigator !== "undefined" && typeof navigator.clipboard !== "undefined") { - // console.log(`clipboard.writeText: "${clipboard_text}"`); - navigator.clipboard.writeText(clipboard_text).then(() => { - // console.log(`clipboard.writeText: "${clipboard_text}" done.`); - }); - } - }; - io.GetClipboardTextFn = (user_data) => { - // if (typeof navigator !== "undefined" && typeof (navigator as any).clipboard !== "undefined") { - // console.log(`clipboard.readText: "${clipboard_text}"`); - // (navigator as any).clipboard.readText().then((text: string): void => { - // clipboard_text = text; - // console.log(`clipboard.readText: "${clipboard_text}" done.`); - // }); - // } - // console.log(`get clipboard_text: "${clipboard_text}"`); - return clipboard_text; - }; - io.ClipboardUserData = null; if (typeof (window) !== "undefined") { window.addEventListener("gamepadconnected", window_on_gamepadconnected); window.addEventListener("gamepaddisconnected", window_on_gamepaddisconnected); } - if (typeof (window) !== "undefined") { - if (value instanceof (HTMLCanvasElement)) { - value = value.getContext("webgl2", { alpha: false }) || value.getContext("2d"); - } - if (value instanceof (WebGL2RenderingContext)) { - canvas = value.canvas; - exports_1("gl", gl = value); - } - if (value instanceof (CanvasRenderingContext2D)) { - canvas = value.canvas; - exports_1("ctx", ctx = value); - } - } + app = _app; + gl = app.renderer.gl; + canvas = app.view; if (canvas !== null) { canvas.style.touchAction = "none"; // Disable browser handling of all panning and zooming gestures. canvas.addEventListener("blur", canvas_on_blur); canvas.addEventListener("keydown", canvas_on_keydown); canvas.addEventListener("keyup", canvas_on_keyup); canvas.addEventListener("keypress", canvas_on_keypress); - canvas.addEventListener("pointermove", canvas_on_pointermove); - canvas.addEventListener("pointerdown", canvas_on_pointerdown); canvas.addEventListener("contextmenu", canvas_on_contextmenu); - canvas.addEventListener("pointerup", canvas_on_pointerup); canvas.addEventListener("wheel", canvas_on_wheel); } - // Setup back-end capabilities flags - io.BackendFlags |= ImGui.BackendFlags.HasMouseCursors; // We can honor GetMouseCursor() values (optional) - // Keyboard mapping. ImGui will use those indices to peek into the io.KeyDown[] array. - io.KeyMap[ImGui.Key.Tab] = 9; - io.KeyMap[ImGui.Key.LeftArrow] = 37; - io.KeyMap[ImGui.Key.RightArrow] = 39; - io.KeyMap[ImGui.Key.UpArrow] = 38; - io.KeyMap[ImGui.Key.DownArrow] = 40; - io.KeyMap[ImGui.Key.PageUp] = 33; - io.KeyMap[ImGui.Key.PageDown] = 34; - io.KeyMap[ImGui.Key.Home] = 36; - io.KeyMap[ImGui.Key.End] = 35; - io.KeyMap[ImGui.Key.Insert] = 45; - io.KeyMap[ImGui.Key.Delete] = 46; - io.KeyMap[ImGui.Key.Backspace] = 8; - io.KeyMap[ImGui.Key.Space] = 32; - io.KeyMap[ImGui.Key.Enter] = 13; - io.KeyMap[ImGui.Key.Escape] = 27; - io.KeyMap[ImGui.Key.A] = 65; - io.KeyMap[ImGui.Key.C] = 67; - io.KeyMap[ImGui.Key.V] = 86; - io.KeyMap[ImGui.Key.X] = 88; - io.KeyMap[ImGui.Key.Y] = 89; - io.KeyMap[ImGui.Key.Z] = 90; CreateDeviceObjects(); } exports_1("Init", Init); @@ -227,14 +152,10 @@ canvas.removeEventListener("keydown", canvas_on_keydown); canvas.removeEventListener("keyup", canvas_on_keyup); canvas.removeEventListener("keypress", canvas_on_keypress); - canvas.removeEventListener("pointermove", canvas_on_pointermove); - canvas.removeEventListener("pointerdown", canvas_on_pointerdown); canvas.removeEventListener("contextmenu", canvas_on_contextmenu); - canvas.removeEventListener("pointerup", canvas_on_pointerup); canvas.removeEventListener("wheel", canvas_on_wheel); } - exports_1("gl", gl = null); - exports_1("ctx", ctx = null); + app = null; canvas = null; if (typeof (window) !== "undefined") { window.removeEventListener("gamepadconnected", window_on_gamepadconnected); @@ -247,392 +168,6 @@ } } exports_1("Shutdown", Shutdown); - function NewFrame(time) { - const io = ImGui.GetIO(); - if (io.WantSaveIniSettings) { - io.WantSaveIniSettings = false; - if (typeof (window) !== "undefined") { - window.localStorage.setItem("imgui.ini", ImGui.SaveIniSettingsToMemory()); - } - } - const w = canvas && canvas.width || 640; - const h = canvas && canvas.height || 480; - const display_w = gl && gl.drawingBufferWidth || w; - const display_h = gl && gl.drawingBufferHeight || h; - io.DisplaySize.x = w; - io.DisplaySize.y = h; - io.DisplayFramebufferScale.x = w > 0 ? (display_w / w) : 0; - io.DisplayFramebufferScale.y = h > 0 ? (display_h / h) : 0; - const dt = time - prev_time; - prev_time = time; - io.DeltaTime = dt / 1000; - if (io.WantSetMousePos) { - console.log("TODO: MousePos", io.MousePos.x, io.MousePos.y); - } - if (typeof (document) !== "undefined") { - if (io.MouseDrawCursor) { - document.body.style.cursor = "none"; - } - else { - switch (ImGui.GetMouseCursor()) { - case ImGui.MouseCursor.None: - document.body.style.cursor = "none"; - break; - default: - case ImGui.MouseCursor.Arrow: - document.body.style.cursor = "default"; - break; - case ImGui.MouseCursor.TextInput: - document.body.style.cursor = "text"; - break; // When hovering over InputText, etc. - case ImGui.MouseCursor.ResizeAll: - document.body.style.cursor = "move"; - break; // Unused - case ImGui.MouseCursor.ResizeNS: - document.body.style.cursor = "ns-resize"; - break; // When hovering over an horizontal border - case ImGui.MouseCursor.ResizeEW: - document.body.style.cursor = "ew-resize"; - break; // When hovering over a vertical border or a column - case ImGui.MouseCursor.ResizeNESW: - document.body.style.cursor = "nesw-resize"; - break; // When hovering over the bottom-left corner of a window - case ImGui.MouseCursor.ResizeNWSE: - document.body.style.cursor = "nwse-resize"; - break; // When hovering over the bottom-right corner of a window - case ImGui.MouseCursor.Hand: - document.body.style.cursor = "move"; - break; - } - } - } - // Gamepad navigation mapping [BETA] - for (let i = 0; i < io.NavInputs.length; ++i) { - io.NavInputs[i] = 0.0; - } - if (io.ConfigFlags & ImGui.ConfigFlags.NavEnableGamepad) { - // Update gamepad inputs - const gamepads = (typeof (navigator) !== "undefined" && typeof (navigator.getGamepads) === "function") ? navigator.getGamepads() : []; - for (let i = 0; i < gamepads.length; ++i) { - const gamepad = gamepads[i]; - if (!gamepad) { - continue; - } - const buttons_count = gamepad.buttons.length; - const axes_count = gamepad.axes.length; - const MAP_BUTTON = function (NAV_NO, BUTTON_NO) { - if (!gamepad) { - return; - } - if (buttons_count > BUTTON_NO && gamepad.buttons[BUTTON_NO].pressed) - io.NavInputs[NAV_NO] = 1.0; - }; - const MAP_ANALOG = function (NAV_NO, AXIS_NO, V0, V1) { - if (!gamepad) { - return; - } - let v = (axes_count > AXIS_NO) ? gamepad.axes[AXIS_NO] : V0; - v = (v - V0) / (V1 - V0); - if (v > 1.0) - v = 1.0; - if (io.NavInputs[NAV_NO] < v) - io.NavInputs[NAV_NO] = v; - }; - // TODO: map input based on vendor and product id - // https://developer.mozilla.org/en-US/docs/Web/API/Gamepad/id - const match = gamepad.id.match(/^([0-9a-f]{4})-([0-9a-f]{4})-.*$/); - const match_chrome = gamepad.id.match(/^.*\(.*Vendor: ([0-9a-f]{4}) Product: ([0-9a-f]{4})\).*$/); - const vendor = (match && match[1]) || (match_chrome && match_chrome[1]) || "0000"; - const product = (match && match[2]) || (match_chrome && match_chrome[2]) || "0000"; - switch (vendor + product) { - case "046dc216": // Logitech Logitech Dual Action (Vendor: 046d Product: c216) - MAP_BUTTON(ImGui.NavInput.Activate, 1); // Cross / A - MAP_BUTTON(ImGui.NavInput.Cancel, 2); // Circle / B - MAP_BUTTON(ImGui.NavInput.Menu, 0); // Square / X - MAP_BUTTON(ImGui.NavInput.Input, 3); // Triangle / Y - MAP_ANALOG(ImGui.NavInput.DpadLeft, 4, -0.3, -0.9); // D-Pad Left - MAP_ANALOG(ImGui.NavInput.DpadRight, 4, +0.3, +0.9); // D-Pad Right - MAP_ANALOG(ImGui.NavInput.DpadUp, 5, -0.3, -0.9); // D-Pad Up - MAP_ANALOG(ImGui.NavInput.DpadDown, 5, +0.3, +0.9); // D-Pad Down - MAP_BUTTON(ImGui.NavInput.FocusPrev, 4); // L1 / LB - MAP_BUTTON(ImGui.NavInput.FocusNext, 5); // R1 / RB - MAP_BUTTON(ImGui.NavInput.TweakSlow, 6); // L2 / LT - MAP_BUTTON(ImGui.NavInput.TweakFast, 7); // R2 / RT - MAP_ANALOG(ImGui.NavInput.LStickLeft, 0, -0.3, -0.9); - MAP_ANALOG(ImGui.NavInput.LStickRight, 0, +0.3, +0.9); - MAP_ANALOG(ImGui.NavInput.LStickUp, 1, -0.3, -0.9); - MAP_ANALOG(ImGui.NavInput.LStickDown, 1, +0.3, +0.9); - break; - case "046dc21d": // Logitech Gamepad F310 (STANDARD GAMEPAD Vendor: 046d Product: c21d) - MAP_BUTTON(ImGui.NavInput.Activate, 0); // Cross / A - MAP_BUTTON(ImGui.NavInput.Cancel, 1); // Circle / B - MAP_BUTTON(ImGui.NavInput.Menu, 2); // Square / X - MAP_BUTTON(ImGui.NavInput.Input, 3); // Triangle / Y - MAP_BUTTON(ImGui.NavInput.DpadLeft, 14); // D-Pad Left - MAP_BUTTON(ImGui.NavInput.DpadRight, 15); // D-Pad Right - MAP_BUTTON(ImGui.NavInput.DpadUp, 12); // D-Pad Up - MAP_BUTTON(ImGui.NavInput.DpadDown, 13); // D-Pad Down - MAP_BUTTON(ImGui.NavInput.FocusPrev, 4); // L1 / LB - MAP_BUTTON(ImGui.NavInput.FocusNext, 5); // R1 / RB - MAP_ANALOG(ImGui.NavInput.TweakSlow, 6, +0.3, +0.9); // L2 / LT - MAP_ANALOG(ImGui.NavInput.TweakFast, 7, +0.3, +0.9); // R2 / RT - MAP_ANALOG(ImGui.NavInput.LStickLeft, 0, -0.3, -0.9); - MAP_ANALOG(ImGui.NavInput.LStickRight, 0, +0.3, +0.9); - MAP_ANALOG(ImGui.NavInput.LStickUp, 1, -0.3, -0.9); - MAP_ANALOG(ImGui.NavInput.LStickDown, 1, +0.3, +0.9); - break; - case "2dc86001": // 8Bitdo SN30 Pro 8Bitdo SN30 Pro (Vendor: 2dc8 Product: 6001) - case "2dc86101": // 8Bitdo SN30 Pro (Vendor: 2dc8 Product: 6101) - MAP_BUTTON(ImGui.NavInput.Activate, 1); // Cross / A - MAP_BUTTON(ImGui.NavInput.Cancel, 0); // Circle / B - MAP_BUTTON(ImGui.NavInput.Menu, 4); // Square / X - MAP_BUTTON(ImGui.NavInput.Input, 3); // Triangle / Y - MAP_ANALOG(ImGui.NavInput.DpadLeft, 6, -0.3, -0.9); // D-Pad Left - MAP_ANALOG(ImGui.NavInput.DpadRight, 6, +0.3, +0.9); // D-Pad Right - MAP_ANALOG(ImGui.NavInput.DpadUp, 7, -0.3, -0.9); // D-Pad Up - MAP_ANALOG(ImGui.NavInput.DpadDown, 7, +0.3, +0.9); // D-Pad Down - MAP_BUTTON(ImGui.NavInput.FocusPrev, 6); // L1 / LB - MAP_BUTTON(ImGui.NavInput.FocusNext, 7); // R1 / RB - MAP_BUTTON(ImGui.NavInput.TweakSlow, 8); // L2 / LT - MAP_BUTTON(ImGui.NavInput.TweakFast, 9); // R2 / RT - MAP_ANALOG(ImGui.NavInput.LStickLeft, 0, -0.3, -0.9); - MAP_ANALOG(ImGui.NavInput.LStickRight, 0, +0.3, +0.9); - MAP_ANALOG(ImGui.NavInput.LStickUp, 1, -0.3, -0.9); - MAP_ANALOG(ImGui.NavInput.LStickDown, 1, +0.3, +0.9); - break; - default: // standard gamepad: https://w3c.github.io/gamepad/#remapping - MAP_BUTTON(ImGui.NavInput.Activate, 0); // Cross / A - MAP_BUTTON(ImGui.NavInput.Cancel, 1); // Circle / B - MAP_BUTTON(ImGui.NavInput.Menu, 2); // Square / X - MAP_BUTTON(ImGui.NavInput.Input, 3); // Triangle / Y - MAP_BUTTON(ImGui.NavInput.DpadLeft, 14); // D-Pad Left - MAP_BUTTON(ImGui.NavInput.DpadRight, 15); // D-Pad Right - MAP_BUTTON(ImGui.NavInput.DpadUp, 12); // D-Pad Up - MAP_BUTTON(ImGui.NavInput.DpadDown, 13); // D-Pad Down - MAP_BUTTON(ImGui.NavInput.FocusPrev, 4); // L1 / LB - MAP_BUTTON(ImGui.NavInput.FocusNext, 5); // R1 / RB - MAP_BUTTON(ImGui.NavInput.TweakSlow, 6); // L2 / LT - MAP_BUTTON(ImGui.NavInput.TweakFast, 7); // R2 / RT - MAP_ANALOG(ImGui.NavInput.LStickLeft, 0, -0.3, -0.9); - MAP_ANALOG(ImGui.NavInput.LStickRight, 0, +0.3, +0.9); - MAP_ANALOG(ImGui.NavInput.LStickUp, 1, -0.3, -0.9); - MAP_ANALOG(ImGui.NavInput.LStickDown, 1, +0.3, +0.9); - break; - } - } - } - } - exports_1("NewFrame", NewFrame); - function RenderDrawData(draw_data = ImGui.GetDrawData()) { - const io = ImGui.GetIO(); - if (draw_data === null) { - throw new Error(); - } - gl || ctx || console.log(draw_data); - // Avoid rendering when minimized, scale coordinates for retina displays (screen coordinates != framebuffer coordinates) - const fb_width = io.DisplaySize.x * io.DisplayFramebufferScale.x; - const fb_height = io.DisplaySize.y * io.DisplayFramebufferScale.y; - if (fb_width === 0 || fb_height === 0) { - return; - } - draw_data.ScaleClipRects(io.DisplayFramebufferScale); - // Backup GL state - const last_active_texture = gl && gl.getParameter(gl.ACTIVE_TEXTURE) || null; - const last_program = gl && gl.getParameter(gl.CURRENT_PROGRAM) || null; - const last_texture = gl && gl.getParameter(gl.TEXTURE_BINDING_2D) || null; - const last_array_buffer = gl && gl.getParameter(gl.ARRAY_BUFFER_BINDING) || null; - const last_element_array_buffer = gl && gl.getParameter(gl.ELEMENT_ARRAY_BUFFER_BINDING) || null; - // GLint last_polygon_mode[2]; glGetIntegerv(GL_POLYGON_MODE, last_polygon_mode); - const last_viewport = gl && gl.getParameter(gl.VIEWPORT) || null; - const last_scissor_box = gl && gl.getParameter(gl.SCISSOR_BOX) || null; - const last_blend_src_rgb = gl && gl.getParameter(gl.BLEND_SRC_RGB) || null; - const last_blend_dst_rgb = gl && gl.getParameter(gl.BLEND_DST_RGB) || null; - const last_blend_src_alpha = gl && gl.getParameter(gl.BLEND_SRC_ALPHA) || null; - const last_blend_dst_alpha = gl && gl.getParameter(gl.BLEND_DST_ALPHA) || null; - const last_blend_equation_rgb = gl && gl.getParameter(gl.BLEND_EQUATION_RGB) || null; - const last_blend_equation_alpha = gl && gl.getParameter(gl.BLEND_EQUATION_ALPHA) || null; - const last_enable_blend = gl && gl.getParameter(gl.BLEND) || null; - const last_enable_cull_face = gl && gl.getParameter(gl.CULL_FACE) || null; - const last_enable_depth_test = gl && gl.getParameter(gl.DEPTH_TEST) || null; - const last_enable_scissor_test = gl && gl.getParameter(gl.SCISSOR_TEST) || null; - // Setup render state: alpha-blending enabled, no face culling, no depth testing, scissor enabled, polygon fill - gl && gl.enable(gl.BLEND); - gl && gl.blendEquation(gl.FUNC_ADD); - gl && gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA); - gl && gl.disable(gl.CULL_FACE); - gl && gl.disable(gl.DEPTH_TEST); - gl && gl.enable(gl.SCISSOR_TEST); - // glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); - // Setup viewport, orthographic projection matrix - // Our visible imgui space lies from draw_data->DisplayPps (top left) to draw_data->DisplayPos+data_data->DisplaySize (bottom right). DisplayMin is typically (0,0) for single viewport apps. - gl && gl.viewport(0, 0, fb_width, fb_height); - const L = draw_data.DisplayPos.x; - const R = draw_data.DisplayPos.x + draw_data.DisplaySize.x; - const T = draw_data.DisplayPos.y; - const B = draw_data.DisplayPos.y + draw_data.DisplaySize.y; - const ortho_projection = new Float32Array([ - 2.0 / (R - L), 0.0, 0.0, 0.0, - 0.0, 2.0 / (T - B), 0.0, 0.0, - 0.0, 0.0, -1.0, 0.0, - (R + L) / (L - R), (T + B) / (B - T), 0.0, 1.0, - ]); - gl && gl.useProgram(g_ShaderHandle); - gl && gl.uniform1i(g_AttribLocationTex, 0); - gl && g_AttribLocationProjMtx && gl.uniformMatrix4fv(g_AttribLocationProjMtx, false, ortho_projection); - // Render command lists - gl && gl.bindBuffer(gl.ARRAY_BUFFER, g_VboHandle); - gl && gl.enableVertexAttribArray(g_AttribLocationPosition); - gl && gl.enableVertexAttribArray(g_AttribLocationUV); - gl && gl.enableVertexAttribArray(g_AttribLocationColor); - gl && gl.vertexAttribPointer(g_AttribLocationPosition, 2, gl.FLOAT, false, ImGui.ImDrawVertSize, ImGui.ImDrawVertPosOffset); - gl && gl.vertexAttribPointer(g_AttribLocationUV, 2, gl.FLOAT, false, ImGui.ImDrawVertSize, ImGui.ImDrawVertUVOffset); - gl && gl.vertexAttribPointer(g_AttribLocationColor, 4, gl.UNSIGNED_BYTE, true, ImGui.ImDrawVertSize, ImGui.ImDrawVertColOffset); - // Draw - const pos = draw_data.DisplayPos; - const idx_buffer_type = gl && ((ImGui.ImDrawIdxSize === 4) ? gl.UNSIGNED_INT : gl.UNSIGNED_SHORT) || 0; - draw_data.IterateDrawLists((draw_list) => { - gl || ctx || console.log(draw_list); - gl || ctx || console.log("VtxBuffer.length", draw_list.VtxBuffer.length); - gl || ctx || console.log("IdxBuffer.length", draw_list.IdxBuffer.length); - let idx_buffer_offset = 0; - gl && gl.bindBuffer(gl.ARRAY_BUFFER, g_VboHandle); - gl && gl.bufferData(gl.ARRAY_BUFFER, draw_list.VtxBuffer, gl.STREAM_DRAW); - gl && gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, g_ElementsHandle); - gl && gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, draw_list.IdxBuffer, gl.STREAM_DRAW); - draw_list.IterateDrawCmds((draw_cmd) => { - gl || ctx || console.log(draw_cmd); - gl || ctx || console.log("ElemCount", draw_cmd.ElemCount); - gl || ctx || console.log("ClipRect", draw_cmd.ClipRect.x, fb_height - draw_cmd.ClipRect.w, draw_cmd.ClipRect.z - draw_cmd.ClipRect.x, draw_cmd.ClipRect.w - draw_cmd.ClipRect.y); - gl || ctx || console.log("TextureId", draw_cmd.TextureId); - if (!gl && !ctx) { - console.log("i: pos.x pos.y uv.x uv.y col"); - for (let i = 0; i < Math.min(3, draw_cmd.ElemCount); ++i) { - const view = new ImGui.ImDrawVert(draw_list.VtxBuffer.buffer, draw_list.VtxBuffer.byteOffset + i * ImGui.ImDrawVertSize); - console.log(`${i}: ${view.pos[0].toFixed(2)} ${view.pos[1].toFixed(2)} ${view.uv[0].toFixed(5)} ${view.uv[1].toFixed(5)} ${("00000000" + view.col[0].toString(16)).substr(-8)}`); - } - } - if (draw_cmd.UserCallback !== null) { - // User callback (registered via ImDrawList::AddCallback) - draw_cmd.UserCallback(draw_list, draw_cmd); - } - else { - const clip_rect = new ImGui.ImVec4(draw_cmd.ClipRect.x - pos.x, draw_cmd.ClipRect.y - pos.y, draw_cmd.ClipRect.z - pos.x, draw_cmd.ClipRect.w - pos.y); - if (clip_rect.x < fb_width && clip_rect.y < fb_height && clip_rect.z >= 0.0 && clip_rect.w >= 0.0) { - // Apply scissor/clipping rectangle - gl && gl.scissor(clip_rect.x, fb_height - clip_rect.w, clip_rect.z - clip_rect.x, clip_rect.w - clip_rect.y); - // Bind texture, Draw - gl && gl.activeTexture(gl.TEXTURE0); - gl && gl.bindTexture(gl.TEXTURE_2D, draw_cmd.TextureId); - gl && gl.drawElements(gl.TRIANGLES, draw_cmd.ElemCount, idx_buffer_type, idx_buffer_offset); - if (ctx) { - ctx.save(); - ctx.beginPath(); - ctx.rect(clip_rect.x, clip_rect.y, clip_rect.z - clip_rect.x, clip_rect.w - clip_rect.y); - ctx.clip(); - const idx = ImGui.ImDrawIdxSize === 4 ? - new Uint32Array(draw_list.IdxBuffer.buffer, draw_list.IdxBuffer.byteOffset + idx_buffer_offset) : - new Uint16Array(draw_list.IdxBuffer.buffer, draw_list.IdxBuffer.byteOffset + idx_buffer_offset); - for (let i = 0; i < draw_cmd.ElemCount; i += 3) { - const i0 = idx[i + 0]; - const i1 = idx[i + 1]; - const i2 = idx[i + 2]; - const v0 = new ImGui.ImDrawVert(draw_list.VtxBuffer.buffer, draw_list.VtxBuffer.byteOffset + i0 * ImGui.ImDrawVertSize); - const v1 = new ImGui.ImDrawVert(draw_list.VtxBuffer.buffer, draw_list.VtxBuffer.byteOffset + i1 * ImGui.ImDrawVertSize); - const v2 = new ImGui.ImDrawVert(draw_list.VtxBuffer.buffer, draw_list.VtxBuffer.byteOffset + i2 * ImGui.ImDrawVertSize); - const i3 = idx[i + 3]; - const i4 = idx[i + 4]; - const i5 = idx[i + 5]; - const v3 = new ImGui.ImDrawVert(draw_list.VtxBuffer.buffer, draw_list.VtxBuffer.byteOffset + i3 * ImGui.ImDrawVertSize); - const v4 = new ImGui.ImDrawVert(draw_list.VtxBuffer.buffer, draw_list.VtxBuffer.byteOffset + i4 * ImGui.ImDrawVertSize); - const v5 = new ImGui.ImDrawVert(draw_list.VtxBuffer.buffer, draw_list.VtxBuffer.byteOffset + i5 * ImGui.ImDrawVertSize); - let quad = true; - let minmin = v0; - let minmax = v0; - let maxmin = v0; - let maxmax = v0; - for (const v of [v1, v2, v3, v4, v5]) { - let found = false; - if (v.pos[0] <= minmin.pos[0] && v.pos[1] <= minmin.pos[1]) { - minmin = v; - found = true; - } - if (v.pos[0] <= minmax.pos[0] && v.pos[1] >= minmax.pos[1]) { - minmax = v; - found = true; - } - if (v.pos[0] >= maxmin.pos[0] && v.pos[1] <= maxmin.pos[1]) { - maxmin = v; - found = true; - } - if (v.pos[0] >= maxmax.pos[0] && v.pos[1] >= maxmax.pos[1]) { - maxmax = v; - found = true; - } - if (!found) { - quad = false; - } - } - quad = quad && (minmin.pos[0] === minmax.pos[0]); - quad = quad && (maxmin.pos[0] === maxmax.pos[0]); - quad = quad && (minmin.pos[1] === maxmin.pos[1]); - quad = quad && (minmax.pos[1] === maxmax.pos[1]); - if (quad) { - if (minmin.uv[0] < 0.01 && minmin.uv[1] < 0.01) { - // one vertex color - ctx.beginPath(); - ctx.rect(minmin.pos[0], minmin.pos[1], maxmax.pos[0] - minmin.pos[0], maxmax.pos[1] - minmin.pos[1]); - ctx.fillStyle = `rgba(${v0.col[0] >> 0 & 0xff}, ${v0.col[0] >> 8 & 0xff}, ${v0.col[0] >> 16 & 0xff}, ${(v0.col[0] >> 24 & 0xff) / 0xff})`; - ctx.fill(); - } - else { - // no vertex color - const image = draw_cmd.TextureId; - ctx.drawImage(image, minmin.uv[0] * image.width, minmin.uv[1] * image.height, (maxmax.uv[0] - minmin.uv[0]) * image.width, (maxmax.uv[1] - minmin.uv[1]) * image.height, minmin.pos[0], minmin.pos[1], maxmax.pos[0] - minmin.pos[0], maxmax.pos[1] - minmin.pos[1]); - // ctx.beginPath(); - // ctx.rect(minmin.pos[0], minmin.pos[1], maxmax.pos[0] - minmin.pos[0], maxmax.pos[1] - minmin.pos[1]); - // ctx.strokeStyle = "yellow"; - // ctx.stroke(); - } - i += 3; - } - else { - // one vertex color, no texture - ctx.beginPath(); - ctx.moveTo(v0.pos[0], v0.pos[1]); - ctx.lineTo(v1.pos[0], v1.pos[1]); - ctx.lineTo(v2.pos[0], v2.pos[1]); - ctx.closePath(); - ctx.fillStyle = `rgba(${v0.col[0] >> 0 & 0xff}, ${v0.col[0] >> 8 & 0xff}, ${v0.col[0] >> 16 & 0xff}, ${(v0.col[0] >> 24 & 0xff) / 0xff})`; - ctx.fill(); - } - } - ctx.restore(); - } - } - } - idx_buffer_offset += draw_cmd.ElemCount * ImGui.ImDrawIdxSize; - }); - }); - // Restore modified GL state - gl && (last_program !== null) && gl.useProgram(last_program); - gl && (last_texture !== null) && gl.bindTexture(gl.TEXTURE_2D, last_texture); - gl && (last_active_texture !== null) && gl.activeTexture(last_active_texture); - gl && gl.disableVertexAttribArray(g_AttribLocationPosition); - gl && gl.disableVertexAttribArray(g_AttribLocationUV); - gl && gl.disableVertexAttribArray(g_AttribLocationColor); - gl && (last_array_buffer !== null) && gl.bindBuffer(gl.ARRAY_BUFFER, last_array_buffer); - gl && (last_element_array_buffer !== null) && gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, last_element_array_buffer); - gl && (last_blend_equation_rgb !== null && last_blend_equation_alpha !== null) && gl.blendEquationSeparate(last_blend_equation_rgb, last_blend_equation_alpha); - gl && (last_blend_src_rgb !== null && last_blend_src_alpha !== null && last_blend_dst_rgb !== null && last_blend_dst_alpha !== null) && gl.blendFuncSeparate(last_blend_src_rgb, last_blend_src_alpha, last_blend_dst_rgb, last_blend_dst_alpha); - gl && (last_enable_blend ? gl.enable(gl.BLEND) : gl.disable(gl.BLEND)); - gl && (last_enable_cull_face ? gl.enable(gl.CULL_FACE) : gl.disable(gl.CULL_FACE)); - gl && (last_enable_depth_test ? gl.enable(gl.DEPTH_TEST) : gl.disable(gl.DEPTH_TEST)); - gl && (last_enable_scissor_test ? gl.enable(gl.SCISSOR_TEST) : gl.disable(gl.SCISSOR_TEST)); - // glPolygonMode(GL_FRONT_AND_BACK, (GLenum)last_polygon_mode[0]); - gl && (last_viewport !== null) && gl.viewport(last_viewport[0], last_viewport[1], last_viewport[2], last_viewport[3]); - gl && (last_scissor_box !== null) && gl.scissor(last_scissor_box[0], last_scissor_box[1], last_scissor_box[2], last_scissor_box[3]); - } - exports_1("RenderDrawData", RenderDrawData); function CreateFontsTexture() { const io = ImGui.GetIO(); // Backup GL state @@ -653,19 +188,6 @@ // Store our identifier io.Fonts.TexID = g_FontTexture || { foo: "bar" }; // console.log("font texture id", g_FontTexture); - if (ctx) { - const image_canvas = document.createElement("canvas"); - image_canvas.width = width; - image_canvas.height = height; - const image_ctx = image_canvas.getContext("2d"); - if (image_ctx === null) { - throw new Error(); - } - const image_data = image_ctx.getImageData(0, 0, width, height); - image_data.data.set(pixels); - image_ctx.putImageData(image_data, 0, 0); - io.Fonts.TexID = image_canvas; - } // Restore modified GL state gl && last_texture && gl.bindTexture(gl.TEXTURE_2D, last_texture); } @@ -743,19 +265,430 @@ setters: [ function (ImGui_1) { ImGui = ImGui_1; + }, + function (PIXI_1) { + PIXI = PIXI_1; + }, + function (U_1) { + U = U_1; } ], execute: function () { clipboard_text = ""; - ImGuiImplPIXI = class ImGuiImplPIXI { - constructor(app, owner) { - this.app = app; - this.owner = owner; + contexts = []; + contextIOs = []; + isFirstWindow = true; + ImGuiImplInternalRenderer = class ImGuiImplInternalRenderer extends PIXI.ObjectRenderer { + constructor(r) { + super(r); + } + render(owner) { + if (!(owner instanceof ImGuiWindow)) + return; + const window = owner; + const io = window.io; + const draw_data = ImGui.GetDrawData(); + if (draw_data === null) { + throw new Error(); + } + gl || console.log(draw_data); + // Avoid rendering when minimized, scale coordinates for retina displays (screen coordinates != framebuffer coordinates) + const fb_width = io.DisplaySize.x * io.DisplayFramebufferScale.x; + const fb_height = io.DisplaySize.y * io.DisplayFramebufferScale.y; + if (fb_width === 0 || fb_height === 0) { + return; + } + draw_data.ScaleClipRects(io.DisplayFramebufferScale); + // Backup GL state + const last_active_texture = gl && gl.getParameter(gl.ACTIVE_TEXTURE) || null; + const last_program = gl && gl.getParameter(gl.CURRENT_PROGRAM) || null; + const last_texture = gl && gl.getParameter(gl.TEXTURE_BINDING_2D) || null; + const last_array_buffer = gl && gl.getParameter(gl.ARRAY_BUFFER_BINDING) || null; + const last_element_array_buffer = gl && gl.getParameter(gl.ELEMENT_ARRAY_BUFFER_BINDING) || null; + // GLint last_polygon_mode[2]; glGetIntegerv(GL_POLYGON_MODE, last_polygon_mode); + const last_viewport = gl && gl.getParameter(gl.VIEWPORT) || null; + const last_scissor_box = gl && gl.getParameter(gl.SCISSOR_BOX) || null; + const last_blend_src_rgb = gl && gl.getParameter(gl.BLEND_SRC_RGB) || null; + const last_blend_dst_rgb = gl && gl.getParameter(gl.BLEND_DST_RGB) || null; + const last_blend_src_alpha = gl && gl.getParameter(gl.BLEND_SRC_ALPHA) || null; + const last_blend_dst_alpha = gl && gl.getParameter(gl.BLEND_DST_ALPHA) || null; + const last_blend_equation_rgb = gl && gl.getParameter(gl.BLEND_EQUATION_RGB) || null; + const last_blend_equation_alpha = gl && gl.getParameter(gl.BLEND_EQUATION_ALPHA) || null; + const last_enable_blend = gl && gl.getParameter(gl.BLEND) || null; + const last_enable_cull_face = gl && gl.getParameter(gl.CULL_FACE) || null; + const last_enable_depth_test = gl && gl.getParameter(gl.DEPTH_TEST) || null; + const last_enable_scissor_test = gl && gl.getParameter(gl.SCISSOR_TEST) || null; + // Setup render state: alpha-blending enabled, no face culling, no depth testing, scissor enabled, polygon fill + gl && gl.enable(gl.BLEND); + gl && gl.blendEquation(gl.FUNC_ADD); + gl && gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA); + gl && gl.disable(gl.CULL_FACE); + gl && gl.disable(gl.DEPTH_TEST); + gl && gl.enable(gl.SCISSOR_TEST); + // glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); + // Setup viewport, orthographic projection matrix + // Our visible imgui space lies from draw_data->DisplayPps (top left) to draw_data->DisplayPos+data_data->DisplaySize (bottom right). DisplayMin is typically (0,0) for single viewport apps. + gl && gl.viewport(0, 0, fb_width, fb_height); + const L = draw_data.DisplayPos.x; + const R = draw_data.DisplayPos.x + draw_data.DisplaySize.x; + const T = draw_data.DisplayPos.y; + const B = draw_data.DisplayPos.y + draw_data.DisplaySize.y; + const ortho_projection = new Float32Array([ + 2.0 / (R - L), 0.0, 0.0, 0.0, + 0.0, 2.0 / (T - B), 0.0, 0.0, + 0.0, 0.0, -1.0, 0.0, + (R + L) / (L - R), (T + B) / (B - T), 0.0, 1.0, + ]); + gl && gl.useProgram(g_ShaderHandle); + gl && gl.uniform1i(g_AttribLocationTex, 0); + gl && g_AttribLocationProjMtx && gl.uniformMatrix4fv(g_AttribLocationProjMtx, false, ortho_projection); + // Render command lists + gl && gl.bindBuffer(gl.ARRAY_BUFFER, g_VboHandle); + gl && gl.enableVertexAttribArray(g_AttribLocationPosition); + gl && gl.enableVertexAttribArray(g_AttribLocationUV); + gl && gl.enableVertexAttribArray(g_AttribLocationColor); + gl && gl.vertexAttribPointer(g_AttribLocationPosition, 2, gl.FLOAT, false, ImGui.ImDrawVertSize, ImGui.ImDrawVertPosOffset); + gl && gl.vertexAttribPointer(g_AttribLocationUV, 2, gl.FLOAT, false, ImGui.ImDrawVertSize, ImGui.ImDrawVertUVOffset); + gl && gl.vertexAttribPointer(g_AttribLocationColor, 4, gl.UNSIGNED_BYTE, true, ImGui.ImDrawVertSize, ImGui.ImDrawVertColOffset); + // Draw + const pos = draw_data.DisplayPos; + const idx_buffer_type = gl && ((ImGui.ImDrawIdxSize === 4) ? gl.UNSIGNED_INT : gl.UNSIGNED_SHORT) || 0; + draw_data.IterateDrawLists((draw_list) => { + gl || console.log(draw_list); + gl || console.log("VtxBuffer.length", draw_list.VtxBuffer.length); + gl || console.log("IdxBuffer.length", draw_list.IdxBuffer.length); + let idx_buffer_offset = 0; + gl && gl.bindBuffer(gl.ARRAY_BUFFER, g_VboHandle); + gl && gl.bufferData(gl.ARRAY_BUFFER, draw_list.VtxBuffer, gl.STREAM_DRAW); + gl && gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, g_ElementsHandle); + gl && gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, draw_list.IdxBuffer, gl.STREAM_DRAW); + draw_list.IterateDrawCmds((draw_cmd) => { + gl || console.log(draw_cmd); + gl || console.log("ElemCount", draw_cmd.ElemCount); + gl || console.log("ClipRect", draw_cmd.ClipRect.x, fb_height - draw_cmd.ClipRect.w, draw_cmd.ClipRect.z - draw_cmd.ClipRect.x, draw_cmd.ClipRect.w - draw_cmd.ClipRect.y); + gl || console.log("TextureId", draw_cmd.TextureId); + if (!gl) { + console.log("i: pos.x pos.y uv.x uv.y col"); + for (let i = 0; i < Math.min(3, draw_cmd.ElemCount); ++i) { + const view = new ImGui.ImDrawVert(draw_list.VtxBuffer.buffer, draw_list.VtxBuffer.byteOffset + i * ImGui.ImDrawVertSize); + console.log(`${i}: ${view.pos[0].toFixed(2)} ${view.pos[1].toFixed(2)} ${view.uv[0].toFixed(5)} ${view.uv[1].toFixed(5)} ${("00000000" + view.col[0].toString(16)).substr(-8)}`); + } + } + if (draw_cmd.UserCallback !== null) { + // User callback (registered via ImDrawList::AddCallback) + draw_cmd.UserCallback(draw_list, draw_cmd); + } + else { + const clip_rect = new ImGui.ImVec4(draw_cmd.ClipRect.x - pos.x, draw_cmd.ClipRect.y - pos.y, draw_cmd.ClipRect.z - pos.x, draw_cmd.ClipRect.w - pos.y); + if (clip_rect.x < fb_width && clip_rect.y < fb_height && clip_rect.z >= 0.0 && clip_rect.w >= 0.0) { + // Apply scissor/clipping rectangle + gl && gl.scissor(clip_rect.x, fb_height - clip_rect.w, clip_rect.z - clip_rect.x, clip_rect.w - clip_rect.y); + // Bind texture, Draw + gl && gl.activeTexture(gl.TEXTURE0); + gl && gl.bindTexture(gl.TEXTURE_2D, draw_cmd.TextureId); + gl && gl.drawElements(gl.TRIANGLES, draw_cmd.ElemCount, idx_buffer_type, idx_buffer_offset); + } + } + idx_buffer_offset += draw_cmd.ElemCount * ImGui.ImDrawIdxSize; + }); + }); + // Restore modified GL state + gl && (last_program !== null) && gl.useProgram(last_program); + gl && (last_texture !== null) && gl.bindTexture(gl.TEXTURE_2D, last_texture); + gl && (last_active_texture !== null) && gl.activeTexture(last_active_texture); + gl && gl.disableVertexAttribArray(g_AttribLocationPosition); + gl && gl.disableVertexAttribArray(g_AttribLocationUV); + gl && gl.disableVertexAttribArray(g_AttribLocationColor); + gl && (last_array_buffer !== null) && gl.bindBuffer(gl.ARRAY_BUFFER, last_array_buffer); + gl && (last_element_array_buffer !== null) && gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, last_element_array_buffer); + gl && (last_blend_equation_rgb !== null && last_blend_equation_alpha !== null) && gl.blendEquationSeparate(last_blend_equation_rgb, last_blend_equation_alpha); + gl && (last_blend_src_rgb !== null && last_blend_src_alpha !== null && last_blend_dst_rgb !== null && last_blend_dst_alpha !== null) && gl.blendFuncSeparate(last_blend_src_rgb, last_blend_src_alpha, last_blend_dst_rgb, last_blend_dst_alpha); + gl && (last_enable_blend ? gl.enable(gl.BLEND) : gl.disable(gl.BLEND)); + gl && (last_enable_cull_face ? gl.enable(gl.CULL_FACE) : gl.disable(gl.CULL_FACE)); + gl && (last_enable_depth_test ? gl.enable(gl.DEPTH_TEST) : gl.disable(gl.DEPTH_TEST)); + gl && (last_enable_scissor_test ? gl.enable(gl.SCISSOR_TEST) : gl.disable(gl.SCISSOR_TEST)); + // glPolygonMode(GL_FRONT_AND_BACK, (GLenum)last_polygon_mode[0]); + gl && (last_viewport !== null) && gl.viewport(last_viewport[0], last_viewport[1], last_viewport[2], last_viewport[3]); + gl && (last_scissor_box !== null) && gl.scissor(last_scissor_box[0], last_scissor_box[1], last_scissor_box[2], last_scissor_box[3]); } }; - exports_1("ImGuiImplPIXI", ImGuiImplPIXI); + gl = null; + app = null; + ImGuiWindow = class ImGuiWindow extends PIXI.Container { + constructor(sizeX, sizeY, update) { + super(); + this.baseTex = new PIXI.BaseRenderTexture({ scaleMode: PIXI.SCALE_MODES.LINEAR, resolution: 1 }); + this.tex = new PIXI.RenderTexture(this.baseTex); + this.surface = new PIXI.Sprite(this.tex); + this.imgui = new PIXI.Sprite(); + if (isFirstWindow) { + this.ctx = contexts[0]; + this.io = contextIOs[0]; + } + else { + this.ctx = ImGui.CreateContext(); + ImGui.SetCurrentContext(this.ctx); + this.io = ImGui.GetIO(); + } + if (!isFirstWindow) { + this.io.Fonts.TexID = contextIOs[0].Fonts.TexID; + } + isFirstWindow = false; + if (typeof (navigator) !== "undefined") { + this.io.ConfigMacOSXBehaviors = navigator.platform.match(/Mac/) !== null; + } + this.io.SetClipboardTextFn = (user_data, text) => { + clipboard_text = text; + // console.log(`set clipboard_text: "${clipboard_text}"`); + if (typeof navigator !== "undefined" && typeof navigator.clipboard !== "undefined") { + // console.log(`clipboard.writeText: "${clipboard_text}"`); + navigator.clipboard.writeText(clipboard_text).then(() => { + // console.log(`clipboard.writeText: "${clipboard_text}" done.`); + }); + } + }; + this.io.GetClipboardTextFn = (user_data) => { + // if (typeof navigator !== "undefined" && typeof (navigator as any).clipboard !== "undefined") { + // console.log(`clipboard.readText: "${clipboard_text}"`); + // (navigator as any).clipboard.readText().then((text: string): void => { + // clipboard_text = text; + // console.log(`clipboard.readText: "${clipboard_text}" done.`); + // }); + // } + // console.log(`get clipboard_text: "${clipboard_text}"`); + return clipboard_text; + }; + this.io.ClipboardUserData = null; + // Setup back-end capabilities flags + this.io.BackendFlags |= ImGui.BackendFlags.HasMouseCursors; // We can honor GetMouseCursor() values (optional) + // Keyboard mapping. ImGui will use those indices to peek into the io.KeyDown[] array. + this.io.KeyMap[ImGui.Key.Tab] = 9; + this.io.KeyMap[ImGui.Key.LeftArrow] = 37; + this.io.KeyMap[ImGui.Key.RightArrow] = 39; + this.io.KeyMap[ImGui.Key.UpArrow] = 38; + this.io.KeyMap[ImGui.Key.DownArrow] = 40; + this.io.KeyMap[ImGui.Key.PageUp] = 33; + this.io.KeyMap[ImGui.Key.PageDown] = 34; + this.io.KeyMap[ImGui.Key.Home] = 36; + this.io.KeyMap[ImGui.Key.End] = 35; + this.io.KeyMap[ImGui.Key.Insert] = 45; + this.io.KeyMap[ImGui.Key.Delete] = 46; + this.io.KeyMap[ImGui.Key.Backspace] = 8; + this.io.KeyMap[ImGui.Key.Space] = 32; + this.io.KeyMap[ImGui.Key.Enter] = 13; + this.io.KeyMap[ImGui.Key.Escape] = 27; + this.io.KeyMap[ImGui.Key.A] = 65; + this.io.KeyMap[ImGui.Key.C] = 67; + this.io.KeyMap[ImGui.Key.V] = 86; + this.io.KeyMap[ImGui.Key.X] = 88; + this.io.KeyMap[ImGui.Key.Y] = 89; + this.io.KeyMap[ImGui.Key.Z] = 90; + contextIOs.push(this.io); + this.update = update; + this.resize(sizeX, sizeY); + this.imgui.pluginName = 'imgui_renderer'; + this.addChild(this.surface); + this.surface.addListener("mousedown", this.mouseDown.bind(this)); + this.surface.addListener("mouseup", this.mouseUp.bind(this)); + app.ticker.add(this.updateInternal.bind(this)); + } + getSizeX() { return this.sizeX; } + getSizeY() { return this.sizeY; } + mouseDown(e) { + this.io.MouseDown[mouse_button_map[0]] = true; + } + mouseUp(e) { + this.io.MouseDown[mouse_button_map[0]] = false; + } + resize(sizeX, sizeY) { + this.sizeX = sizeX; + this.sizeY = sizeY; + this.baseTex.resize(sizeX, sizeY); + this.tex.frame = new PIXI.Rectangle(0, 0, this.baseTex.width, this.baseTex.height); + this.surface.hitArea = this.tex.frame; + } + updateInternal(deltaTime) { + const dt = deltaTime * 1 / (1000 * PIXI.settings.TARGET_FPMS); + ImGui.SetCurrentContext(this.ctx); + if (this.io.WantSaveIniSettings) { + this.io.WantSaveIniSettings = false; + if (typeof (window) !== "undefined") { + window.localStorage.setItem("imgui.ini", ImGui.SaveIniSettingsToMemory()); + } + } + this.io.DisplaySize.x = this.sizeX; + this.io.DisplaySize.y = this.sizeY; + this.io.DisplayFramebufferScale.x = 1; + this.io.DisplayFramebufferScale.y = 1; + this.io.DeltaTime = dt; + const localPos = this.getGlobalPosition(new PIXI.Point()); + this.io.MousePos.x = localPos.x; + this.io.MousePos.y = localPos.y; + if (this.io.WantSetMousePos) { + console.log("TODO: MousePos", this.io.MousePos.x, this.io.MousePos.y); + } + if (typeof (document) !== "undefined") { + if (this.io.MouseDrawCursor) { + document.body.style.cursor = "none"; + } + else { + switch (ImGui.GetMouseCursor()) { + case ImGui.MouseCursor.None: + document.body.style.cursor = "none"; + break; + default: + case ImGui.MouseCursor.Arrow: + document.body.style.cursor = "default"; + break; + case ImGui.MouseCursor.TextInput: + document.body.style.cursor = "text"; + break; // When hovering over InputText, etc. + case ImGui.MouseCursor.ResizeAll: + document.body.style.cursor = "move"; + break; // Unused + case ImGui.MouseCursor.ResizeNS: + document.body.style.cursor = "ns-resize"; + break; // When hovering over an horizontal border + case ImGui.MouseCursor.ResizeEW: + document.body.style.cursor = "ew-resize"; + break; // When hovering over a vertical border or a column + case ImGui.MouseCursor.ResizeNESW: + document.body.style.cursor = "nesw-resize"; + break; // When hovering over the bottom-left corner of a window + case ImGui.MouseCursor.ResizeNWSE: + document.body.style.cursor = "nwse-resize"; + break; // When hovering over the bottom-right corner of a window + case ImGui.MouseCursor.Hand: + document.body.style.cursor = "move"; + break; + } + } + } + // Gamepad navigation mapping [BETA] + for (let i = 0; i < this.io.NavInputs.length; ++i) { + this.io.NavInputs[i] = 0.0; + } + if (this.io.ConfigFlags & ImGui.ConfigFlags.NavEnableGamepad) { + // Update gamepad inputs + const gamepads = (typeof (navigator) !== "undefined" && typeof (navigator.getGamepads) === "function") ? navigator.getGamepads() : []; + for (let i = 0; i < gamepads.length; ++i) { + const gamepad = gamepads[i]; + if (!gamepad) { + continue; + } + const buttons_count = gamepad.buttons.length; + const axes_count = gamepad.axes.length; + const MAP_BUTTON = function (NAV_NO, BUTTON_NO) { + if (!gamepad) { + return; + } + if (buttons_count > BUTTON_NO && gamepad.buttons[BUTTON_NO].pressed) + this.io.NavInputs[NAV_NO] = 1.0; + }; + const MAP_ANALOG = function (NAV_NO, AXIS_NO, V0, V1) { + if (!gamepad) { + return; + } + let v = (axes_count > AXIS_NO) ? gamepad.axes[AXIS_NO] : V0; + v = (v - V0) / (V1 - V0); + if (v > 1.0) + v = 1.0; + if (this.io.NavInputs[NAV_NO] < v) + this.io.NavInputs[NAV_NO] = v; + }; + // TODO: map input based on vendor and product id + // https://developer.mozilla.org/en-US/docs/Web/API/Gamepad/id + const match = gamepad.id.match(/^([0-9a-f]{4})-([0-9a-f]{4})-.*$/); + const match_chrome = gamepad.id.match(/^.*\(.*Vendor: ([0-9a-f]{4}) Product: ([0-9a-f]{4})\).*$/); + const vendor = (match && match[1]) || (match_chrome && match_chrome[1]) || "0000"; + const product = (match && match[2]) || (match_chrome && match_chrome[2]) || "0000"; + switch (vendor + product) { + case "046dc216": // Logitech Logitech Dual Action (Vendor: 046d Product: c216) + MAP_BUTTON(ImGui.NavInput.Activate, 1); // Cross / A + MAP_BUTTON(ImGui.NavInput.Cancel, 2); // Circle / B + MAP_BUTTON(ImGui.NavInput.Menu, 0); // Square / X + MAP_BUTTON(ImGui.NavInput.Input, 3); // Triangle / Y + MAP_ANALOG(ImGui.NavInput.DpadLeft, 4, -0.3, -0.9); // D-Pad Left + MAP_ANALOG(ImGui.NavInput.DpadRight, 4, +0.3, +0.9); // D-Pad Right + MAP_ANALOG(ImGui.NavInput.DpadUp, 5, -0.3, -0.9); // D-Pad Up + MAP_ANALOG(ImGui.NavInput.DpadDown, 5, +0.3, +0.9); // D-Pad Down + MAP_BUTTON(ImGui.NavInput.FocusPrev, 4); // L1 / LB + MAP_BUTTON(ImGui.NavInput.FocusNext, 5); // R1 / RB + MAP_BUTTON(ImGui.NavInput.TweakSlow, 6); // L2 / LT + MAP_BUTTON(ImGui.NavInput.TweakFast, 7); // R2 / RT + MAP_ANALOG(ImGui.NavInput.LStickLeft, 0, -0.3, -0.9); + MAP_ANALOG(ImGui.NavInput.LStickRight, 0, +0.3, +0.9); + MAP_ANALOG(ImGui.NavInput.LStickUp, 1, -0.3, -0.9); + MAP_ANALOG(ImGui.NavInput.LStickDown, 1, +0.3, +0.9); + break; + case "046dc21d": // Logitech Gamepad F310 (STANDARD GAMEPAD Vendor: 046d Product: c21d) + MAP_BUTTON(ImGui.NavInput.Activate, 0); // Cross / A + MAP_BUTTON(ImGui.NavInput.Cancel, 1); // Circle / B + MAP_BUTTON(ImGui.NavInput.Menu, 2); // Square / X + MAP_BUTTON(ImGui.NavInput.Input, 3); // Triangle / Y + MAP_BUTTON(ImGui.NavInput.DpadLeft, 14); // D-Pad Left + MAP_BUTTON(ImGui.NavInput.DpadRight, 15); // D-Pad Right + MAP_BUTTON(ImGui.NavInput.DpadUp, 12); // D-Pad Up + MAP_BUTTON(ImGui.NavInput.DpadDown, 13); // D-Pad Down + MAP_BUTTON(ImGui.NavInput.FocusPrev, 4); // L1 / LB + MAP_BUTTON(ImGui.NavInput.FocusNext, 5); // R1 / RB + MAP_ANALOG(ImGui.NavInput.TweakSlow, 6, +0.3, +0.9); // L2 / LT + MAP_ANALOG(ImGui.NavInput.TweakFast, 7, +0.3, +0.9); // R2 / RT + MAP_ANALOG(ImGui.NavInput.LStickLeft, 0, -0.3, -0.9); + MAP_ANALOG(ImGui.NavInput.LStickRight, 0, +0.3, +0.9); + MAP_ANALOG(ImGui.NavInput.LStickUp, 1, -0.3, -0.9); + MAP_ANALOG(ImGui.NavInput.LStickDown, 1, +0.3, +0.9); + break; + case "2dc86001": // 8Bitdo SN30 Pro 8Bitdo SN30 Pro (Vendor: 2dc8 Product: 6001) + case "2dc86101": // 8Bitdo SN30 Pro (Vendor: 2dc8 Product: 6101) + MAP_BUTTON(ImGui.NavInput.Activate, 1); // Cross / A + MAP_BUTTON(ImGui.NavInput.Cancel, 0); // Circle / B + MAP_BUTTON(ImGui.NavInput.Menu, 4); // Square / X + MAP_BUTTON(ImGui.NavInput.Input, 3); // Triangle / Y + MAP_ANALOG(ImGui.NavInput.DpadLeft, 6, -0.3, -0.9); // D-Pad Left + MAP_ANALOG(ImGui.NavInput.DpadRight, 6, +0.3, +0.9); // D-Pad Right + MAP_ANALOG(ImGui.NavInput.DpadUp, 7, -0.3, -0.9); // D-Pad Up + MAP_ANALOG(ImGui.NavInput.DpadDown, 7, +0.3, +0.9); // D-Pad Down + MAP_BUTTON(ImGui.NavInput.FocusPrev, 6); // L1 / LB + MAP_BUTTON(ImGui.NavInput.FocusNext, 7); // R1 / RB + MAP_BUTTON(ImGui.NavInput.TweakSlow, 8); // L2 / LT + MAP_BUTTON(ImGui.NavInput.TweakFast, 9); // R2 / RT + MAP_ANALOG(ImGui.NavInput.LStickLeft, 0, -0.3, -0.9); + MAP_ANALOG(ImGui.NavInput.LStickRight, 0, +0.3, +0.9); + MAP_ANALOG(ImGui.NavInput.LStickUp, 1, -0.3, -0.9); + MAP_ANALOG(ImGui.NavInput.LStickDown, 1, +0.3, +0.9); + break; + default: // standard gamepad: https://w3c.github.io/gamepad/#remapping + MAP_BUTTON(ImGui.NavInput.Activate, 0); // Cross / A + MAP_BUTTON(ImGui.NavInput.Cancel, 1); // Circle / B + MAP_BUTTON(ImGui.NavInput.Menu, 2); // Square / X + MAP_BUTTON(ImGui.NavInput.Input, 3); // Triangle / Y + MAP_BUTTON(ImGui.NavInput.DpadLeft, 14); // D-Pad Left + MAP_BUTTON(ImGui.NavInput.DpadRight, 15); // D-Pad Right + MAP_BUTTON(ImGui.NavInput.DpadUp, 12); // D-Pad Up + MAP_BUTTON(ImGui.NavInput.DpadDown, 13); // D-Pad Down + MAP_BUTTON(ImGui.NavInput.FocusPrev, 4); // L1 / LB + MAP_BUTTON(ImGui.NavInput.FocusNext, 5); // R1 / RB + MAP_BUTTON(ImGui.NavInput.TweakSlow, 6); // L2 / LT + MAP_BUTTON(ImGui.NavInput.TweakFast, 7); // R2 / RT + MAP_ANALOG(ImGui.NavInput.LStickLeft, 0, -0.3, -0.9); + MAP_ANALOG(ImGui.NavInput.LStickRight, 0, +0.3, +0.9); + MAP_ANALOG(ImGui.NavInput.LStickUp, 1, -0.3, -0.9); + MAP_ANALOG(ImGui.NavInput.LStickDown, 1, +0.3, +0.9); + break; + } + } + } + ImGui.NewFrame(); + this.update(dt); + ImGui.EndFrame(); + ImGui.Render(); + app.renderer.render(this.imgui, this.tex); + } + }; + exports_1("ImGuiWindow", ImGuiWindow); canvas = null; - exports_1("gl", gl = null); + //export let gl: WebGL2RenderingContext | null = null; g_ShaderHandle = null; g_VertHandle = null; g_FragHandle = null; @@ -767,7 +700,6 @@ g_VboHandle = null; g_ElementsHandle = null; g_FontTexture = null; - exports_1("ctx", ctx = null); prev_time = 0; // MouseEvent.button // A number representing a given button: diff --git a/src/imgui_impl.js.map b/src/imgui_impl.js.map index 6d2bb7c..68bf7e0 100644 --- a/src/imgui_impl.js.map +++ b/src/imgui_impl.js.map @@ -1 +1 @@ -{"version":3,"file":"imgui_impl.js","sourceRoot":"","sources":["imgui_impl.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"imgui_impl.js","sourceRoot":"","sources":["imgui_impl.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/src/imgui_impl.ts b/src/imgui_impl.ts index b19b8d7..332fd14 100644 --- a/src/imgui_impl.ts +++ b/src/imgui_impl.ts @@ -5,7 +5,9 @@ let clipboard_text: string = ""; +const contexts: ImGui.ImGuiContext[] = []; const contextIOs: ImGui.ImGuiIO[] = []; +let isFirstWindow: boolean = true; class ImGuiImplInternalRenderer extends PIXI.ObjectRenderer { @@ -15,8 +17,11 @@ } render(owner: PIXI.DisplayObject): void { + if (!(owner instanceof ImGuiWindow)) return; - const io: ImGui.ImGuiIO = ImGui.GetIO(); + const window: ImGuiWindow = owner as ImGuiWindow; + + const io: ImGui.ImGuiIO = window.io; const draw_data: ImGui.ImDrawData = ImGui.GetDrawData(); if (draw_data === null) { throw new Error(); } @@ -161,7 +166,7 @@ export class ImGuiWindow extends PIXI.Container { public readonly ctx: ImGui.ImGuiContext; - private readonly io: ImGui.ImGuiIO; + public readonly io: ImGui.ImGuiIO; private sizeX: number; private sizeY: number; public getSizeX(): number { return this.sizeX; } @@ -177,9 +182,80 @@ constructor(sizeX: number, sizeY: number, update: (dt: number) => void) { super(); - this.ctx = ImGui.CreateContext(); - ImGui.SetCurrentContext(this.ctx); - this.io = ImGui.GetIO(); + + if (isFirstWindow) + { + this.ctx = contexts[0]; + this.io = contextIOs[0]; + } + else + { + this.ctx = ImGui.CreateContext(); + ImGui.SetCurrentContext(this.ctx); + this.io = ImGui.GetIO(); + } + + + if (!isFirstWindow) + { + this.io.Fonts.TexID = contextIOs[0].Fonts.TexID; + } + + isFirstWindow = false; + + if (typeof(navigator) !== "undefined") { + this.io.ConfigMacOSXBehaviors = navigator.platform.match(/Mac/) !== null; + } + + this.io.SetClipboardTextFn = (user_data: any, text: string): void => { + clipboard_text = text; + // console.log(`set clipboard_text: "${clipboard_text}"`); + if (typeof navigator !== "undefined" && typeof (navigator as any).clipboard !== "undefined") { + // console.log(`clipboard.writeText: "${clipboard_text}"`); + (navigator as any).clipboard.writeText(clipboard_text).then((): void => { + // console.log(`clipboard.writeText: "${clipboard_text}" done.`); + }); + } + }; + this.io.GetClipboardTextFn = (user_data: any): string => { + // if (typeof navigator !== "undefined" && typeof (navigator as any).clipboard !== "undefined") { + // console.log(`clipboard.readText: "${clipboard_text}"`); + // (navigator as any).clipboard.readText().then((text: string): void => { + // clipboard_text = text; + // console.log(`clipboard.readText: "${clipboard_text}" done.`); + // }); + // } + // console.log(`get clipboard_text: "${clipboard_text}"`); + return clipboard_text; + }; + this.io.ClipboardUserData = null; + + // Setup back-end capabilities flags + this.io.BackendFlags |= ImGui.BackendFlags.HasMouseCursors; // We can honor GetMouseCursor() values (optional) + + // Keyboard mapping. ImGui will use those indices to peek into the io.KeyDown[] array. + this.io.KeyMap[ImGui.Key.Tab] = 9; + this.io.KeyMap[ImGui.Key.LeftArrow] = 37; + this.io.KeyMap[ImGui.Key.RightArrow] = 39; + this.io.KeyMap[ImGui.Key.UpArrow] = 38; + this.io.KeyMap[ImGui.Key.DownArrow] = 40; + this.io.KeyMap[ImGui.Key.PageUp] = 33; + this.io.KeyMap[ImGui.Key.PageDown] = 34; + this.io.KeyMap[ImGui.Key.Home] = 36; + this.io.KeyMap[ImGui.Key.End] = 35; + this.io.KeyMap[ImGui.Key.Insert] = 45; + this.io.KeyMap[ImGui.Key.Delete] = 46; + this.io.KeyMap[ImGui.Key.Backspace] = 8; + this.io.KeyMap[ImGui.Key.Space] = 32; + this.io.KeyMap[ImGui.Key.Enter] = 13; + this.io.KeyMap[ImGui.Key.Escape] = 27; + this.io.KeyMap[ImGui.Key.A] = 65; + this.io.KeyMap[ImGui.Key.C] = 67; + this.io.KeyMap[ImGui.Key.V] = 86; + this.io.KeyMap[ImGui.Key.X] = 88; + this.io.KeyMap[ImGui.Key.Y] = 89; + this.io.KeyMap[ImGui.Key.Z] = 90; + contextIOs.push(this.io); this.update = update; this.resize(sizeX, sizeY); @@ -225,7 +301,6 @@ this.io.DeltaTime = dt; - // TODO global mouse pos to local const localPos: PIXI.Point = this.getGlobalPosition(new PIXI.Point()); this.io.MousePos.x = localPos.x; this.io.MousePos.y = localPos.y; @@ -519,52 +594,31 @@ export function Init(_app: PIXI.Application): void { // Setup Dear ImGui binding ImGui.IMGUI_CHECKVERSION(); + ImGui.CreateContext(); + ImGui.StyleColorsLight(); + + contexts.push(ImGui.GetCurrentContext()); + contextIOs.push(ImGui.GetIO()); + contextIOs[0].Fonts.AddFontDefault(); PIXI.Renderer.registerPlugin("imgui_renderer", U.fromConstructor(ImGuiImplInternalRenderer)); - const io = ImGui.GetIO(); if (typeof(window) !== "undefined") { ImGui.LoadIniSettingsFromMemory(window.localStorage.getItem("imgui.ini") || ""); } - if (typeof(navigator) !== "undefined") { - io.ConfigMacOSXBehaviors = navigator.platform.match(/Mac/) !== null; - } - if (typeof(document) !== "undefined") { document.body.addEventListener("copy", document_on_copy); document.body.addEventListener("cut", document_on_cut); document.body.addEventListener("paste", document_on_paste); } - io.SetClipboardTextFn = (user_data: any, text: string): void => { - clipboard_text = text; - // console.log(`set clipboard_text: "${clipboard_text}"`); - if (typeof navigator !== "undefined" && typeof (navigator as any).clipboard !== "undefined") { - // console.log(`clipboard.writeText: "${clipboard_text}"`); - (navigator as any).clipboard.writeText(clipboard_text).then((): void => { - // console.log(`clipboard.writeText: "${clipboard_text}" done.`); - }); - } - }; - io.GetClipboardTextFn = (user_data: any): string => { - // if (typeof navigator !== "undefined" && typeof (navigator as any).clipboard !== "undefined") { - // console.log(`clipboard.readText: "${clipboard_text}"`); - // (navigator as any).clipboard.readText().then((text: string): void => { - // clipboard_text = text; - // console.log(`clipboard.readText: "${clipboard_text}" done.`); - // }); - // } - // console.log(`get clipboard_text: "${clipboard_text}"`); - return clipboard_text; - }; - io.ClipboardUserData = null; - if (typeof(window) !== "undefined") { window.addEventListener("gamepadconnected", window_on_gamepadconnected); window.addEventListener("gamepaddisconnected", window_on_gamepaddisconnected); } + app = _app; gl = (app.renderer as any).gl; canvas = app.view; @@ -579,31 +633,6 @@ canvas.addEventListener("wheel", canvas_on_wheel); } - // Setup back-end capabilities flags - io.BackendFlags |= ImGui.BackendFlags.HasMouseCursors; // We can honor GetMouseCursor() values (optional) - - // Keyboard mapping. ImGui will use those indices to peek into the io.KeyDown[] array. - io.KeyMap[ImGui.Key.Tab] = 9; - io.KeyMap[ImGui.Key.LeftArrow] = 37; - io.KeyMap[ImGui.Key.RightArrow] = 39; - io.KeyMap[ImGui.Key.UpArrow] = 38; - io.KeyMap[ImGui.Key.DownArrow] = 40; - io.KeyMap[ImGui.Key.PageUp] = 33; - io.KeyMap[ImGui.Key.PageDown] = 34; - io.KeyMap[ImGui.Key.Home] = 36; - io.KeyMap[ImGui.Key.End] = 35; - io.KeyMap[ImGui.Key.Insert] = 45; - io.KeyMap[ImGui.Key.Delete] = 46; - io.KeyMap[ImGui.Key.Backspace] = 8; - io.KeyMap[ImGui.Key.Space] = 32; - io.KeyMap[ImGui.Key.Enter] = 13; - io.KeyMap[ImGui.Key.Escape] = 27; - io.KeyMap[ImGui.Key.A] = 65; - io.KeyMap[ImGui.Key.C] = 67; - io.KeyMap[ImGui.Key.V] = 86; - io.KeyMap[ImGui.Key.X] = 88; - io.KeyMap[ImGui.Key.Y] = 89; - io.KeyMap[ImGui.Key.Z] = 90; CreateDeviceObjects(); } @@ -635,12 +664,6 @@ } } -export function NewFrame(time: number): void { -} - -export function RenderDrawData(draw_data: ImGui.ImDrawData | null = ImGui.GetDrawData()): void { -} - export function CreateFontsTexture(): void { const io = ImGui.GetIO(); diff --git a/src/main.js b/src/main.js index 053077a..b99a6d3 100644 --- a/src/main.js +++ b/src/main.js @@ -8,11 +8,10 @@ step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; - var ImGui_Impl, ImGui, imgui_js_1, imgui_js_2, PIXI, U, ctx, currentCtx, clearColor, ImGuiRenderer, windowOpen, text; + var ImGui_Impl, imgui_impl_1, ImGui, imgui_js_1, imgui_js_2, PIXI, U, clearColor, windowOpen, text; var __moduleName = context_1 && context_1.id; function main() { return __awaiter(this, void 0, void 0, function* () { - PIXI.Renderer.registerPlugin("imgui_renderer", U.fromConstructor(ImGuiRenderer)); console.log("main()"); yield ImGui.default(); window.requestAnimationFrame(init); @@ -33,61 +32,36 @@ app.view.style.bottom = "0px"; app.view.style.width = "100%"; app.view.style.height = "100%"; - // Setup Dear ImGui binding - ImGui.IMGUI_CHECKVERSION(); - for (var i = 0; i < 2; i++) { - let newCtx = ImGui.CreateContext(); - ImGui.SetCurrentContext(newCtx); - const io = ImGui.GetIO(); - io.ConfigFlags |= ImGui.ConfigFlags.NavEnableKeyboard; // Enable Keyboard Controls - // Setup style - ImGui.StyleColorsLight(); - ImGui_Impl.Init(app.view); - ctx.push(newCtx); - } - ImGui.SetCurrentContext(ctx[0]); + // Setup style + ImGui.StyleColorsLight(); + ImGui_Impl.Init(app); app.ticker.add((deltaTime) => { const dt = deltaTime * 1 / (1000 * PIXI.settings.TARGET_FPMS); - ImGui_Impl.NewFrame(dt); - ImGui.NewFrame(); - update(app, dt); - ImGui.EndFrame(); - ImGui.Render(); app.render(); }); - const imguiLayer = new PIXI.Sprite(); - imguiLayer.pluginName = "imgui_renderer"; - app.stage.addChild(imguiLayer); let resizeFunc = function () { app.renderer.resize(window.innerWidth, window.innerHeight); }; + const imgui = new imgui_impl_1.ImGuiWindow(400, 400, update); + app.stage.addChild(imgui); window.onresize = resizeFunc; resizeFunc(); - window.onkeydown = keyDown; } - function keyDown() { - currentCtx = (currentCtx + 1) % ctx.length; - ImGui.SetCurrentContext(ctx[currentCtx]); - } - function update(app, timeElapsed) { + function update(timeElapsed) { ImGui.SetNextWindowPos(new imgui_js_2.ImVec2(0, 0)); ImGui.SetNextWindowSize(new imgui_js_2.ImVec2(600, 400), ImGui.ImGuiCond.Always); - ImGui.Begin("Test Window " + currentCtx, (_ = windowOpen) => windowOpen = _, 0); - if (currentCtx == 0) { - if (ImGui.Button("Add Text")) { - text += "A"; - } - ImGui.Text(text); + ImGui.Begin("Test Window"); + if (ImGui.Button("Add Text")) { + text += "A"; } - else { - ImGui.Text("Another context"); - } + ImGui.Text(text); ImGui.End(); } return { setters: [ function (ImGui_Impl_1) { ImGui_Impl = ImGui_Impl_1; + imgui_impl_1 = ImGui_Impl_1; }, function (ImGui_1) { ImGui = ImGui_1; @@ -102,17 +76,7 @@ } ], execute: function () { - ctx = []; - currentCtx = 0; clearColor = new imgui_js_1.ImVec4(0.7, 0.9, 1, 1); - ImGuiRenderer = class ImGuiRenderer extends PIXI.ObjectRenderer { - constructor(r) { - super(r); - } - render(notUsed) { - ImGui_Impl.RenderDrawData(ImGui.GetDrawData()); - } - }; windowOpen = true; text = "text"; /* diff --git a/src/main.js.map b/src/main.js.map index 8828029..141ef8b 100644 --- a/src/main.js.map +++ b/src/main.js.map @@ -1 +1 @@ -{"version":3,"file":"main.js","sourceRoot":"","sources":["main.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"main.js","sourceRoot":"","sources":["main.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/src/imgui_impl.js b/src/imgui_impl.js index 3fdd928..a611a08 100644 --- a/src/imgui_impl.js +++ b/src/imgui_impl.js @@ -1,6 +1,6 @@ -System.register(["imgui-js"], function (exports_1, context_1) { +System.register(["imgui-js", "pixi.js", "./utils"], function (exports_1, context_1) { "use strict"; - var ImGui, clipboard_text, ImGuiImplPIXI, canvas, gl, g_ShaderHandle, g_VertHandle, g_FragHandle, g_AttribLocationTex, g_AttribLocationProjMtx, g_AttribLocationPosition, g_AttribLocationUV, g_AttribLocationColor, g_VboHandle, g_ElementsHandle, g_FontTexture, ctx, prev_time, mouse_button_map; + var ImGui, PIXI, U, clipboard_text, contexts, contextIOs, isFirstWindow, ImGuiImplInternalRenderer, gl, app, ImGuiWindow, canvas, g_ShaderHandle, g_VertHandle, g_FragHandle, g_AttribLocationTex, g_AttribLocationProjMtx, g_AttribLocationPosition, g_AttribLocationUV, g_AttribLocationColor, g_VboHandle, g_ElementsHandle, g_FontTexture, prev_time, mouse_button_map; var __moduleName = context_1 && context_1.id; function document_on_copy(event) { if (event.clipboardData) { @@ -30,193 +30,118 @@ console.log("Gamepad disconnected at index %d: %s.", event.gamepad.index, event.gamepad.id); } function canvas_on_blur(event) { - const io = ImGui.GetIO(); - io.KeyCtrl = false; - io.KeyShift = false; - io.KeyAlt = false; - io.KeySuper = false; - for (let i = 0; i < io.KeysDown.length; ++i) { - io.KeysDown[i] = false; - } - for (let i = 0; i < io.MouseDown.length; ++i) { - io.MouseDown[i] = false; + for (var io of contextIOs) { + io.KeyCtrl = false; + io.KeyShift = false; + io.KeyAlt = false; + io.KeySuper = false; + for (let i = 0; i < io.KeysDown.length; ++i) { + io.KeysDown[i] = false; + } + for (let i = 0; i < io.MouseDown.length; ++i) { + io.MouseDown[i] = false; + } } } function canvas_on_keydown(event) { // console.log(event.type, event.key, event.keyCode); - const io = ImGui.GetIO(); - io.KeyCtrl = event.ctrlKey; - io.KeyShift = event.shiftKey; - io.KeyAlt = event.altKey; - io.KeySuper = event.metaKey; - ImGui.IM_ASSERT(event.keyCode >= 0 && event.keyCode < ImGui.IM_ARRAYSIZE(io.KeysDown)); - io.KeysDown[event.keyCode] = true; - // forward to the keypress event - if ( /*io.WantCaptureKeyboard ||*/event.key === "Tab") { - event.preventDefault(); + for (var io of contextIOs) { + io.KeyCtrl = event.ctrlKey; + io.KeyShift = event.shiftKey; + io.KeyAlt = event.altKey; + io.KeySuper = event.metaKey; + ImGui.IM_ASSERT(event.keyCode >= 0 && event.keyCode < ImGui.IM_ARRAYSIZE(io.KeysDown)); + io.KeysDown[event.keyCode] = true; + // forward to the keypress event + if ( /*io.WantCaptureKeyboard ||*/event.key === "Tab") { + event.preventDefault(); + } } } function canvas_on_keyup(event) { // console.log(event.type, event.key, event.keyCode); - const io = ImGui.GetIO(); - io.KeyCtrl = event.ctrlKey; - io.KeyShift = event.shiftKey; - io.KeyAlt = event.altKey; - io.KeySuper = event.metaKey; - ImGui.IM_ASSERT(event.keyCode >= 0 && event.keyCode < ImGui.IM_ARRAYSIZE(io.KeysDown)); - io.KeysDown[event.keyCode] = false; - if (io.WantCaptureKeyboard) { - event.preventDefault(); + for (var io of contextIOs) { + io.KeyCtrl = event.ctrlKey; + io.KeyShift = event.shiftKey; + io.KeyAlt = event.altKey; + io.KeySuper = event.metaKey; + ImGui.IM_ASSERT(event.keyCode >= 0 && event.keyCode < ImGui.IM_ARRAYSIZE(io.KeysDown)); + io.KeysDown[event.keyCode] = false; + if (io.WantCaptureKeyboard) { + event.preventDefault(); + } } } function canvas_on_keypress(event) { // console.log(event.type, event.key, event.keyCode); - const io = ImGui.GetIO(); - io.AddInputCharacter(event.charCode); - if (io.WantCaptureKeyboard) { - event.preventDefault(); + for (var io of contextIOs) { + io.AddInputCharacter(event.charCode); + if (io.WantCaptureKeyboard) { + event.preventDefault(); + } } } - function canvas_on_pointermove(event) { - const io = ImGui.GetIO(); - const devicePixelRatio = window.devicePixelRatio || 1; - io.MousePos.x = event.offsetX * devicePixelRatio; - io.MousePos.y = event.offsetY * devicePixelRatio; - if (io.WantCaptureMouse) { - event.preventDefault(); - } - } - function canvas_on_pointerdown(event) { - const io = ImGui.GetIO(); - const devicePixelRatio = window.devicePixelRatio || 1; - io.MousePos.x = event.offsetX * devicePixelRatio; - io.MousePos.y = event.offsetY * devicePixelRatio; - io.MouseDown[mouse_button_map[event.button]] = true; - // if (io.WantCaptureMouse) { - // event.preventDefault(); - // } - } function canvas_on_contextmenu(event) { - const io = ImGui.GetIO(); - if (io.WantCaptureMouse) { - event.preventDefault(); - } - } - function canvas_on_pointerup(event) { - const io = ImGui.GetIO(); - io.MouseDown[mouse_button_map[event.button]] = false; - if (io.WantCaptureMouse) { - event.preventDefault(); + for (var io of contextIOs) { + if (io.WantCaptureMouse) { + event.preventDefault(); + } } } function canvas_on_wheel(event) { - const io = ImGui.GetIO(); - let scale = 1.0; - switch (event.deltaMode) { - case event.DOM_DELTA_PIXEL: - scale = 0.01; - break; - case event.DOM_DELTA_LINE: - scale = 0.2; - break; - case event.DOM_DELTA_PAGE: - scale = 1.0; - break; - } - io.MouseWheelH = event.deltaX * scale; - io.MouseWheel = -event.deltaY * scale; // Mouse wheel: 1 unit scrolls about 5 lines text. - if (io.WantCaptureMouse) { - event.preventDefault(); + for (var io of contextIOs) { + let scale = 1.0; + switch (event.deltaMode) { + case event.DOM_DELTA_PIXEL: + scale = 0.01; + break; + case event.DOM_DELTA_LINE: + scale = 0.2; + break; + case event.DOM_DELTA_PAGE: + scale = 1.0; + break; + } + io.MouseWheelH = event.deltaX * scale; + io.MouseWheel = -event.deltaY * scale; // Mouse wheel: 1 unit scrolls about 5 lines text. + if (io.WantCaptureMouse) { + event.preventDefault(); + } } } - function Init(value) { - const io = ImGui.GetIO(); + function Init(_app) { + // Setup Dear ImGui binding + ImGui.IMGUI_CHECKVERSION(); + ImGui.CreateContext(); + ImGui.StyleColorsLight(); + contexts.push(ImGui.GetCurrentContext()); + contextIOs.push(ImGui.GetIO()); + contextIOs[0].Fonts.AddFontDefault(); + PIXI.Renderer.registerPlugin("imgui_renderer", U.fromConstructor(ImGuiImplInternalRenderer)); if (typeof (window) !== "undefined") { ImGui.LoadIniSettingsFromMemory(window.localStorage.getItem("imgui.ini") || ""); } - if (typeof (navigator) !== "undefined") { - io.ConfigMacOSXBehaviors = navigator.platform.match(/Mac/) !== null; - } if (typeof (document) !== "undefined") { document.body.addEventListener("copy", document_on_copy); document.body.addEventListener("cut", document_on_cut); document.body.addEventListener("paste", document_on_paste); } - io.SetClipboardTextFn = (user_data, text) => { - clipboard_text = text; - // console.log(`set clipboard_text: "${clipboard_text}"`); - if (typeof navigator !== "undefined" && typeof navigator.clipboard !== "undefined") { - // console.log(`clipboard.writeText: "${clipboard_text}"`); - navigator.clipboard.writeText(clipboard_text).then(() => { - // console.log(`clipboard.writeText: "${clipboard_text}" done.`); - }); - } - }; - io.GetClipboardTextFn = (user_data) => { - // if (typeof navigator !== "undefined" && typeof (navigator as any).clipboard !== "undefined") { - // console.log(`clipboard.readText: "${clipboard_text}"`); - // (navigator as any).clipboard.readText().then((text: string): void => { - // clipboard_text = text; - // console.log(`clipboard.readText: "${clipboard_text}" done.`); - // }); - // } - // console.log(`get clipboard_text: "${clipboard_text}"`); - return clipboard_text; - }; - io.ClipboardUserData = null; if (typeof (window) !== "undefined") { window.addEventListener("gamepadconnected", window_on_gamepadconnected); window.addEventListener("gamepaddisconnected", window_on_gamepaddisconnected); } - if (typeof (window) !== "undefined") { - if (value instanceof (HTMLCanvasElement)) { - value = value.getContext("webgl2", { alpha: false }) || value.getContext("2d"); - } - if (value instanceof (WebGL2RenderingContext)) { - canvas = value.canvas; - exports_1("gl", gl = value); - } - if (value instanceof (CanvasRenderingContext2D)) { - canvas = value.canvas; - exports_1("ctx", ctx = value); - } - } + app = _app; + gl = app.renderer.gl; + canvas = app.view; if (canvas !== null) { canvas.style.touchAction = "none"; // Disable browser handling of all panning and zooming gestures. canvas.addEventListener("blur", canvas_on_blur); canvas.addEventListener("keydown", canvas_on_keydown); canvas.addEventListener("keyup", canvas_on_keyup); canvas.addEventListener("keypress", canvas_on_keypress); - canvas.addEventListener("pointermove", canvas_on_pointermove); - canvas.addEventListener("pointerdown", canvas_on_pointerdown); canvas.addEventListener("contextmenu", canvas_on_contextmenu); - canvas.addEventListener("pointerup", canvas_on_pointerup); canvas.addEventListener("wheel", canvas_on_wheel); } - // Setup back-end capabilities flags - io.BackendFlags |= ImGui.BackendFlags.HasMouseCursors; // We can honor GetMouseCursor() values (optional) - // Keyboard mapping. ImGui will use those indices to peek into the io.KeyDown[] array. - io.KeyMap[ImGui.Key.Tab] = 9; - io.KeyMap[ImGui.Key.LeftArrow] = 37; - io.KeyMap[ImGui.Key.RightArrow] = 39; - io.KeyMap[ImGui.Key.UpArrow] = 38; - io.KeyMap[ImGui.Key.DownArrow] = 40; - io.KeyMap[ImGui.Key.PageUp] = 33; - io.KeyMap[ImGui.Key.PageDown] = 34; - io.KeyMap[ImGui.Key.Home] = 36; - io.KeyMap[ImGui.Key.End] = 35; - io.KeyMap[ImGui.Key.Insert] = 45; - io.KeyMap[ImGui.Key.Delete] = 46; - io.KeyMap[ImGui.Key.Backspace] = 8; - io.KeyMap[ImGui.Key.Space] = 32; - io.KeyMap[ImGui.Key.Enter] = 13; - io.KeyMap[ImGui.Key.Escape] = 27; - io.KeyMap[ImGui.Key.A] = 65; - io.KeyMap[ImGui.Key.C] = 67; - io.KeyMap[ImGui.Key.V] = 86; - io.KeyMap[ImGui.Key.X] = 88; - io.KeyMap[ImGui.Key.Y] = 89; - io.KeyMap[ImGui.Key.Z] = 90; CreateDeviceObjects(); } exports_1("Init", Init); @@ -227,14 +152,10 @@ canvas.removeEventListener("keydown", canvas_on_keydown); canvas.removeEventListener("keyup", canvas_on_keyup); canvas.removeEventListener("keypress", canvas_on_keypress); - canvas.removeEventListener("pointermove", canvas_on_pointermove); - canvas.removeEventListener("pointerdown", canvas_on_pointerdown); canvas.removeEventListener("contextmenu", canvas_on_contextmenu); - canvas.removeEventListener("pointerup", canvas_on_pointerup); canvas.removeEventListener("wheel", canvas_on_wheel); } - exports_1("gl", gl = null); - exports_1("ctx", ctx = null); + app = null; canvas = null; if (typeof (window) !== "undefined") { window.removeEventListener("gamepadconnected", window_on_gamepadconnected); @@ -247,392 +168,6 @@ } } exports_1("Shutdown", Shutdown); - function NewFrame(time) { - const io = ImGui.GetIO(); - if (io.WantSaveIniSettings) { - io.WantSaveIniSettings = false; - if (typeof (window) !== "undefined") { - window.localStorage.setItem("imgui.ini", ImGui.SaveIniSettingsToMemory()); - } - } - const w = canvas && canvas.width || 640; - const h = canvas && canvas.height || 480; - const display_w = gl && gl.drawingBufferWidth || w; - const display_h = gl && gl.drawingBufferHeight || h; - io.DisplaySize.x = w; - io.DisplaySize.y = h; - io.DisplayFramebufferScale.x = w > 0 ? (display_w / w) : 0; - io.DisplayFramebufferScale.y = h > 0 ? (display_h / h) : 0; - const dt = time - prev_time; - prev_time = time; - io.DeltaTime = dt / 1000; - if (io.WantSetMousePos) { - console.log("TODO: MousePos", io.MousePos.x, io.MousePos.y); - } - if (typeof (document) !== "undefined") { - if (io.MouseDrawCursor) { - document.body.style.cursor = "none"; - } - else { - switch (ImGui.GetMouseCursor()) { - case ImGui.MouseCursor.None: - document.body.style.cursor = "none"; - break; - default: - case ImGui.MouseCursor.Arrow: - document.body.style.cursor = "default"; - break; - case ImGui.MouseCursor.TextInput: - document.body.style.cursor = "text"; - break; // When hovering over InputText, etc. - case ImGui.MouseCursor.ResizeAll: - document.body.style.cursor = "move"; - break; // Unused - case ImGui.MouseCursor.ResizeNS: - document.body.style.cursor = "ns-resize"; - break; // When hovering over an horizontal border - case ImGui.MouseCursor.ResizeEW: - document.body.style.cursor = "ew-resize"; - break; // When hovering over a vertical border or a column - case ImGui.MouseCursor.ResizeNESW: - document.body.style.cursor = "nesw-resize"; - break; // When hovering over the bottom-left corner of a window - case ImGui.MouseCursor.ResizeNWSE: - document.body.style.cursor = "nwse-resize"; - break; // When hovering over the bottom-right corner of a window - case ImGui.MouseCursor.Hand: - document.body.style.cursor = "move"; - break; - } - } - } - // Gamepad navigation mapping [BETA] - for (let i = 0; i < io.NavInputs.length; ++i) { - io.NavInputs[i] = 0.0; - } - if (io.ConfigFlags & ImGui.ConfigFlags.NavEnableGamepad) { - // Update gamepad inputs - const gamepads = (typeof (navigator) !== "undefined" && typeof (navigator.getGamepads) === "function") ? navigator.getGamepads() : []; - for (let i = 0; i < gamepads.length; ++i) { - const gamepad = gamepads[i]; - if (!gamepad) { - continue; - } - const buttons_count = gamepad.buttons.length; - const axes_count = gamepad.axes.length; - const MAP_BUTTON = function (NAV_NO, BUTTON_NO) { - if (!gamepad) { - return; - } - if (buttons_count > BUTTON_NO && gamepad.buttons[BUTTON_NO].pressed) - io.NavInputs[NAV_NO] = 1.0; - }; - const MAP_ANALOG = function (NAV_NO, AXIS_NO, V0, V1) { - if (!gamepad) { - return; - } - let v = (axes_count > AXIS_NO) ? gamepad.axes[AXIS_NO] : V0; - v = (v - V0) / (V1 - V0); - if (v > 1.0) - v = 1.0; - if (io.NavInputs[NAV_NO] < v) - io.NavInputs[NAV_NO] = v; - }; - // TODO: map input based on vendor and product id - // https://developer.mozilla.org/en-US/docs/Web/API/Gamepad/id - const match = gamepad.id.match(/^([0-9a-f]{4})-([0-9a-f]{4})-.*$/); - const match_chrome = gamepad.id.match(/^.*\(.*Vendor: ([0-9a-f]{4}) Product: ([0-9a-f]{4})\).*$/); - const vendor = (match && match[1]) || (match_chrome && match_chrome[1]) || "0000"; - const product = (match && match[2]) || (match_chrome && match_chrome[2]) || "0000"; - switch (vendor + product) { - case "046dc216": // Logitech Logitech Dual Action (Vendor: 046d Product: c216) - MAP_BUTTON(ImGui.NavInput.Activate, 1); // Cross / A - MAP_BUTTON(ImGui.NavInput.Cancel, 2); // Circle / B - MAP_BUTTON(ImGui.NavInput.Menu, 0); // Square / X - MAP_BUTTON(ImGui.NavInput.Input, 3); // Triangle / Y - MAP_ANALOG(ImGui.NavInput.DpadLeft, 4, -0.3, -0.9); // D-Pad Left - MAP_ANALOG(ImGui.NavInput.DpadRight, 4, +0.3, +0.9); // D-Pad Right - MAP_ANALOG(ImGui.NavInput.DpadUp, 5, -0.3, -0.9); // D-Pad Up - MAP_ANALOG(ImGui.NavInput.DpadDown, 5, +0.3, +0.9); // D-Pad Down - MAP_BUTTON(ImGui.NavInput.FocusPrev, 4); // L1 / LB - MAP_BUTTON(ImGui.NavInput.FocusNext, 5); // R1 / RB - MAP_BUTTON(ImGui.NavInput.TweakSlow, 6); // L2 / LT - MAP_BUTTON(ImGui.NavInput.TweakFast, 7); // R2 / RT - MAP_ANALOG(ImGui.NavInput.LStickLeft, 0, -0.3, -0.9); - MAP_ANALOG(ImGui.NavInput.LStickRight, 0, +0.3, +0.9); - MAP_ANALOG(ImGui.NavInput.LStickUp, 1, -0.3, -0.9); - MAP_ANALOG(ImGui.NavInput.LStickDown, 1, +0.3, +0.9); - break; - case "046dc21d": // Logitech Gamepad F310 (STANDARD GAMEPAD Vendor: 046d Product: c21d) - MAP_BUTTON(ImGui.NavInput.Activate, 0); // Cross / A - MAP_BUTTON(ImGui.NavInput.Cancel, 1); // Circle / B - MAP_BUTTON(ImGui.NavInput.Menu, 2); // Square / X - MAP_BUTTON(ImGui.NavInput.Input, 3); // Triangle / Y - MAP_BUTTON(ImGui.NavInput.DpadLeft, 14); // D-Pad Left - MAP_BUTTON(ImGui.NavInput.DpadRight, 15); // D-Pad Right - MAP_BUTTON(ImGui.NavInput.DpadUp, 12); // D-Pad Up - MAP_BUTTON(ImGui.NavInput.DpadDown, 13); // D-Pad Down - MAP_BUTTON(ImGui.NavInput.FocusPrev, 4); // L1 / LB - MAP_BUTTON(ImGui.NavInput.FocusNext, 5); // R1 / RB - MAP_ANALOG(ImGui.NavInput.TweakSlow, 6, +0.3, +0.9); // L2 / LT - MAP_ANALOG(ImGui.NavInput.TweakFast, 7, +0.3, +0.9); // R2 / RT - MAP_ANALOG(ImGui.NavInput.LStickLeft, 0, -0.3, -0.9); - MAP_ANALOG(ImGui.NavInput.LStickRight, 0, +0.3, +0.9); - MAP_ANALOG(ImGui.NavInput.LStickUp, 1, -0.3, -0.9); - MAP_ANALOG(ImGui.NavInput.LStickDown, 1, +0.3, +0.9); - break; - case "2dc86001": // 8Bitdo SN30 Pro 8Bitdo SN30 Pro (Vendor: 2dc8 Product: 6001) - case "2dc86101": // 8Bitdo SN30 Pro (Vendor: 2dc8 Product: 6101) - MAP_BUTTON(ImGui.NavInput.Activate, 1); // Cross / A - MAP_BUTTON(ImGui.NavInput.Cancel, 0); // Circle / B - MAP_BUTTON(ImGui.NavInput.Menu, 4); // Square / X - MAP_BUTTON(ImGui.NavInput.Input, 3); // Triangle / Y - MAP_ANALOG(ImGui.NavInput.DpadLeft, 6, -0.3, -0.9); // D-Pad Left - MAP_ANALOG(ImGui.NavInput.DpadRight, 6, +0.3, +0.9); // D-Pad Right - MAP_ANALOG(ImGui.NavInput.DpadUp, 7, -0.3, -0.9); // D-Pad Up - MAP_ANALOG(ImGui.NavInput.DpadDown, 7, +0.3, +0.9); // D-Pad Down - MAP_BUTTON(ImGui.NavInput.FocusPrev, 6); // L1 / LB - MAP_BUTTON(ImGui.NavInput.FocusNext, 7); // R1 / RB - MAP_BUTTON(ImGui.NavInput.TweakSlow, 8); // L2 / LT - MAP_BUTTON(ImGui.NavInput.TweakFast, 9); // R2 / RT - MAP_ANALOG(ImGui.NavInput.LStickLeft, 0, -0.3, -0.9); - MAP_ANALOG(ImGui.NavInput.LStickRight, 0, +0.3, +0.9); - MAP_ANALOG(ImGui.NavInput.LStickUp, 1, -0.3, -0.9); - MAP_ANALOG(ImGui.NavInput.LStickDown, 1, +0.3, +0.9); - break; - default: // standard gamepad: https://w3c.github.io/gamepad/#remapping - MAP_BUTTON(ImGui.NavInput.Activate, 0); // Cross / A - MAP_BUTTON(ImGui.NavInput.Cancel, 1); // Circle / B - MAP_BUTTON(ImGui.NavInput.Menu, 2); // Square / X - MAP_BUTTON(ImGui.NavInput.Input, 3); // Triangle / Y - MAP_BUTTON(ImGui.NavInput.DpadLeft, 14); // D-Pad Left - MAP_BUTTON(ImGui.NavInput.DpadRight, 15); // D-Pad Right - MAP_BUTTON(ImGui.NavInput.DpadUp, 12); // D-Pad Up - MAP_BUTTON(ImGui.NavInput.DpadDown, 13); // D-Pad Down - MAP_BUTTON(ImGui.NavInput.FocusPrev, 4); // L1 / LB - MAP_BUTTON(ImGui.NavInput.FocusNext, 5); // R1 / RB - MAP_BUTTON(ImGui.NavInput.TweakSlow, 6); // L2 / LT - MAP_BUTTON(ImGui.NavInput.TweakFast, 7); // R2 / RT - MAP_ANALOG(ImGui.NavInput.LStickLeft, 0, -0.3, -0.9); - MAP_ANALOG(ImGui.NavInput.LStickRight, 0, +0.3, +0.9); - MAP_ANALOG(ImGui.NavInput.LStickUp, 1, -0.3, -0.9); - MAP_ANALOG(ImGui.NavInput.LStickDown, 1, +0.3, +0.9); - break; - } - } - } - } - exports_1("NewFrame", NewFrame); - function RenderDrawData(draw_data = ImGui.GetDrawData()) { - const io = ImGui.GetIO(); - if (draw_data === null) { - throw new Error(); - } - gl || ctx || console.log(draw_data); - // Avoid rendering when minimized, scale coordinates for retina displays (screen coordinates != framebuffer coordinates) - const fb_width = io.DisplaySize.x * io.DisplayFramebufferScale.x; - const fb_height = io.DisplaySize.y * io.DisplayFramebufferScale.y; - if (fb_width === 0 || fb_height === 0) { - return; - } - draw_data.ScaleClipRects(io.DisplayFramebufferScale); - // Backup GL state - const last_active_texture = gl && gl.getParameter(gl.ACTIVE_TEXTURE) || null; - const last_program = gl && gl.getParameter(gl.CURRENT_PROGRAM) || null; - const last_texture = gl && gl.getParameter(gl.TEXTURE_BINDING_2D) || null; - const last_array_buffer = gl && gl.getParameter(gl.ARRAY_BUFFER_BINDING) || null; - const last_element_array_buffer = gl && gl.getParameter(gl.ELEMENT_ARRAY_BUFFER_BINDING) || null; - // GLint last_polygon_mode[2]; glGetIntegerv(GL_POLYGON_MODE, last_polygon_mode); - const last_viewport = gl && gl.getParameter(gl.VIEWPORT) || null; - const last_scissor_box = gl && gl.getParameter(gl.SCISSOR_BOX) || null; - const last_blend_src_rgb = gl && gl.getParameter(gl.BLEND_SRC_RGB) || null; - const last_blend_dst_rgb = gl && gl.getParameter(gl.BLEND_DST_RGB) || null; - const last_blend_src_alpha = gl && gl.getParameter(gl.BLEND_SRC_ALPHA) || null; - const last_blend_dst_alpha = gl && gl.getParameter(gl.BLEND_DST_ALPHA) || null; - const last_blend_equation_rgb = gl && gl.getParameter(gl.BLEND_EQUATION_RGB) || null; - const last_blend_equation_alpha = gl && gl.getParameter(gl.BLEND_EQUATION_ALPHA) || null; - const last_enable_blend = gl && gl.getParameter(gl.BLEND) || null; - const last_enable_cull_face = gl && gl.getParameter(gl.CULL_FACE) || null; - const last_enable_depth_test = gl && gl.getParameter(gl.DEPTH_TEST) || null; - const last_enable_scissor_test = gl && gl.getParameter(gl.SCISSOR_TEST) || null; - // Setup render state: alpha-blending enabled, no face culling, no depth testing, scissor enabled, polygon fill - gl && gl.enable(gl.BLEND); - gl && gl.blendEquation(gl.FUNC_ADD); - gl && gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA); - gl && gl.disable(gl.CULL_FACE); - gl && gl.disable(gl.DEPTH_TEST); - gl && gl.enable(gl.SCISSOR_TEST); - // glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); - // Setup viewport, orthographic projection matrix - // Our visible imgui space lies from draw_data->DisplayPps (top left) to draw_data->DisplayPos+data_data->DisplaySize (bottom right). DisplayMin is typically (0,0) for single viewport apps. - gl && gl.viewport(0, 0, fb_width, fb_height); - const L = draw_data.DisplayPos.x; - const R = draw_data.DisplayPos.x + draw_data.DisplaySize.x; - const T = draw_data.DisplayPos.y; - const B = draw_data.DisplayPos.y + draw_data.DisplaySize.y; - const ortho_projection = new Float32Array([ - 2.0 / (R - L), 0.0, 0.0, 0.0, - 0.0, 2.0 / (T - B), 0.0, 0.0, - 0.0, 0.0, -1.0, 0.0, - (R + L) / (L - R), (T + B) / (B - T), 0.0, 1.0, - ]); - gl && gl.useProgram(g_ShaderHandle); - gl && gl.uniform1i(g_AttribLocationTex, 0); - gl && g_AttribLocationProjMtx && gl.uniformMatrix4fv(g_AttribLocationProjMtx, false, ortho_projection); - // Render command lists - gl && gl.bindBuffer(gl.ARRAY_BUFFER, g_VboHandle); - gl && gl.enableVertexAttribArray(g_AttribLocationPosition); - gl && gl.enableVertexAttribArray(g_AttribLocationUV); - gl && gl.enableVertexAttribArray(g_AttribLocationColor); - gl && gl.vertexAttribPointer(g_AttribLocationPosition, 2, gl.FLOAT, false, ImGui.ImDrawVertSize, ImGui.ImDrawVertPosOffset); - gl && gl.vertexAttribPointer(g_AttribLocationUV, 2, gl.FLOAT, false, ImGui.ImDrawVertSize, ImGui.ImDrawVertUVOffset); - gl && gl.vertexAttribPointer(g_AttribLocationColor, 4, gl.UNSIGNED_BYTE, true, ImGui.ImDrawVertSize, ImGui.ImDrawVertColOffset); - // Draw - const pos = draw_data.DisplayPos; - const idx_buffer_type = gl && ((ImGui.ImDrawIdxSize === 4) ? gl.UNSIGNED_INT : gl.UNSIGNED_SHORT) || 0; - draw_data.IterateDrawLists((draw_list) => { - gl || ctx || console.log(draw_list); - gl || ctx || console.log("VtxBuffer.length", draw_list.VtxBuffer.length); - gl || ctx || console.log("IdxBuffer.length", draw_list.IdxBuffer.length); - let idx_buffer_offset = 0; - gl && gl.bindBuffer(gl.ARRAY_BUFFER, g_VboHandle); - gl && gl.bufferData(gl.ARRAY_BUFFER, draw_list.VtxBuffer, gl.STREAM_DRAW); - gl && gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, g_ElementsHandle); - gl && gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, draw_list.IdxBuffer, gl.STREAM_DRAW); - draw_list.IterateDrawCmds((draw_cmd) => { - gl || ctx || console.log(draw_cmd); - gl || ctx || console.log("ElemCount", draw_cmd.ElemCount); - gl || ctx || console.log("ClipRect", draw_cmd.ClipRect.x, fb_height - draw_cmd.ClipRect.w, draw_cmd.ClipRect.z - draw_cmd.ClipRect.x, draw_cmd.ClipRect.w - draw_cmd.ClipRect.y); - gl || ctx || console.log("TextureId", draw_cmd.TextureId); - if (!gl && !ctx) { - console.log("i: pos.x pos.y uv.x uv.y col"); - for (let i = 0; i < Math.min(3, draw_cmd.ElemCount); ++i) { - const view = new ImGui.ImDrawVert(draw_list.VtxBuffer.buffer, draw_list.VtxBuffer.byteOffset + i * ImGui.ImDrawVertSize); - console.log(`${i}: ${view.pos[0].toFixed(2)} ${view.pos[1].toFixed(2)} ${view.uv[0].toFixed(5)} ${view.uv[1].toFixed(5)} ${("00000000" + view.col[0].toString(16)).substr(-8)}`); - } - } - if (draw_cmd.UserCallback !== null) { - // User callback (registered via ImDrawList::AddCallback) - draw_cmd.UserCallback(draw_list, draw_cmd); - } - else { - const clip_rect = new ImGui.ImVec4(draw_cmd.ClipRect.x - pos.x, draw_cmd.ClipRect.y - pos.y, draw_cmd.ClipRect.z - pos.x, draw_cmd.ClipRect.w - pos.y); - if (clip_rect.x < fb_width && clip_rect.y < fb_height && clip_rect.z >= 0.0 && clip_rect.w >= 0.0) { - // Apply scissor/clipping rectangle - gl && gl.scissor(clip_rect.x, fb_height - clip_rect.w, clip_rect.z - clip_rect.x, clip_rect.w - clip_rect.y); - // Bind texture, Draw - gl && gl.activeTexture(gl.TEXTURE0); - gl && gl.bindTexture(gl.TEXTURE_2D, draw_cmd.TextureId); - gl && gl.drawElements(gl.TRIANGLES, draw_cmd.ElemCount, idx_buffer_type, idx_buffer_offset); - if (ctx) { - ctx.save(); - ctx.beginPath(); - ctx.rect(clip_rect.x, clip_rect.y, clip_rect.z - clip_rect.x, clip_rect.w - clip_rect.y); - ctx.clip(); - const idx = ImGui.ImDrawIdxSize === 4 ? - new Uint32Array(draw_list.IdxBuffer.buffer, draw_list.IdxBuffer.byteOffset + idx_buffer_offset) : - new Uint16Array(draw_list.IdxBuffer.buffer, draw_list.IdxBuffer.byteOffset + idx_buffer_offset); - for (let i = 0; i < draw_cmd.ElemCount; i += 3) { - const i0 = idx[i + 0]; - const i1 = idx[i + 1]; - const i2 = idx[i + 2]; - const v0 = new ImGui.ImDrawVert(draw_list.VtxBuffer.buffer, draw_list.VtxBuffer.byteOffset + i0 * ImGui.ImDrawVertSize); - const v1 = new ImGui.ImDrawVert(draw_list.VtxBuffer.buffer, draw_list.VtxBuffer.byteOffset + i1 * ImGui.ImDrawVertSize); - const v2 = new ImGui.ImDrawVert(draw_list.VtxBuffer.buffer, draw_list.VtxBuffer.byteOffset + i2 * ImGui.ImDrawVertSize); - const i3 = idx[i + 3]; - const i4 = idx[i + 4]; - const i5 = idx[i + 5]; - const v3 = new ImGui.ImDrawVert(draw_list.VtxBuffer.buffer, draw_list.VtxBuffer.byteOffset + i3 * ImGui.ImDrawVertSize); - const v4 = new ImGui.ImDrawVert(draw_list.VtxBuffer.buffer, draw_list.VtxBuffer.byteOffset + i4 * ImGui.ImDrawVertSize); - const v5 = new ImGui.ImDrawVert(draw_list.VtxBuffer.buffer, draw_list.VtxBuffer.byteOffset + i5 * ImGui.ImDrawVertSize); - let quad = true; - let minmin = v0; - let minmax = v0; - let maxmin = v0; - let maxmax = v0; - for (const v of [v1, v2, v3, v4, v5]) { - let found = false; - if (v.pos[0] <= minmin.pos[0] && v.pos[1] <= minmin.pos[1]) { - minmin = v; - found = true; - } - if (v.pos[0] <= minmax.pos[0] && v.pos[1] >= minmax.pos[1]) { - minmax = v; - found = true; - } - if (v.pos[0] >= maxmin.pos[0] && v.pos[1] <= maxmin.pos[1]) { - maxmin = v; - found = true; - } - if (v.pos[0] >= maxmax.pos[0] && v.pos[1] >= maxmax.pos[1]) { - maxmax = v; - found = true; - } - if (!found) { - quad = false; - } - } - quad = quad && (minmin.pos[0] === minmax.pos[0]); - quad = quad && (maxmin.pos[0] === maxmax.pos[0]); - quad = quad && (minmin.pos[1] === maxmin.pos[1]); - quad = quad && (minmax.pos[1] === maxmax.pos[1]); - if (quad) { - if (minmin.uv[0] < 0.01 && minmin.uv[1] < 0.01) { - // one vertex color - ctx.beginPath(); - ctx.rect(minmin.pos[0], minmin.pos[1], maxmax.pos[0] - minmin.pos[0], maxmax.pos[1] - minmin.pos[1]); - ctx.fillStyle = `rgba(${v0.col[0] >> 0 & 0xff}, ${v0.col[0] >> 8 & 0xff}, ${v0.col[0] >> 16 & 0xff}, ${(v0.col[0] >> 24 & 0xff) / 0xff})`; - ctx.fill(); - } - else { - // no vertex color - const image = draw_cmd.TextureId; - ctx.drawImage(image, minmin.uv[0] * image.width, minmin.uv[1] * image.height, (maxmax.uv[0] - minmin.uv[0]) * image.width, (maxmax.uv[1] - minmin.uv[1]) * image.height, minmin.pos[0], minmin.pos[1], maxmax.pos[0] - minmin.pos[0], maxmax.pos[1] - minmin.pos[1]); - // ctx.beginPath(); - // ctx.rect(minmin.pos[0], minmin.pos[1], maxmax.pos[0] - minmin.pos[0], maxmax.pos[1] - minmin.pos[1]); - // ctx.strokeStyle = "yellow"; - // ctx.stroke(); - } - i += 3; - } - else { - // one vertex color, no texture - ctx.beginPath(); - ctx.moveTo(v0.pos[0], v0.pos[1]); - ctx.lineTo(v1.pos[0], v1.pos[1]); - ctx.lineTo(v2.pos[0], v2.pos[1]); - ctx.closePath(); - ctx.fillStyle = `rgba(${v0.col[0] >> 0 & 0xff}, ${v0.col[0] >> 8 & 0xff}, ${v0.col[0] >> 16 & 0xff}, ${(v0.col[0] >> 24 & 0xff) / 0xff})`; - ctx.fill(); - } - } - ctx.restore(); - } - } - } - idx_buffer_offset += draw_cmd.ElemCount * ImGui.ImDrawIdxSize; - }); - }); - // Restore modified GL state - gl && (last_program !== null) && gl.useProgram(last_program); - gl && (last_texture !== null) && gl.bindTexture(gl.TEXTURE_2D, last_texture); - gl && (last_active_texture !== null) && gl.activeTexture(last_active_texture); - gl && gl.disableVertexAttribArray(g_AttribLocationPosition); - gl && gl.disableVertexAttribArray(g_AttribLocationUV); - gl && gl.disableVertexAttribArray(g_AttribLocationColor); - gl && (last_array_buffer !== null) && gl.bindBuffer(gl.ARRAY_BUFFER, last_array_buffer); - gl && (last_element_array_buffer !== null) && gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, last_element_array_buffer); - gl && (last_blend_equation_rgb !== null && last_blend_equation_alpha !== null) && gl.blendEquationSeparate(last_blend_equation_rgb, last_blend_equation_alpha); - gl && (last_blend_src_rgb !== null && last_blend_src_alpha !== null && last_blend_dst_rgb !== null && last_blend_dst_alpha !== null) && gl.blendFuncSeparate(last_blend_src_rgb, last_blend_src_alpha, last_blend_dst_rgb, last_blend_dst_alpha); - gl && (last_enable_blend ? gl.enable(gl.BLEND) : gl.disable(gl.BLEND)); - gl && (last_enable_cull_face ? gl.enable(gl.CULL_FACE) : gl.disable(gl.CULL_FACE)); - gl && (last_enable_depth_test ? gl.enable(gl.DEPTH_TEST) : gl.disable(gl.DEPTH_TEST)); - gl && (last_enable_scissor_test ? gl.enable(gl.SCISSOR_TEST) : gl.disable(gl.SCISSOR_TEST)); - // glPolygonMode(GL_FRONT_AND_BACK, (GLenum)last_polygon_mode[0]); - gl && (last_viewport !== null) && gl.viewport(last_viewport[0], last_viewport[1], last_viewport[2], last_viewport[3]); - gl && (last_scissor_box !== null) && gl.scissor(last_scissor_box[0], last_scissor_box[1], last_scissor_box[2], last_scissor_box[3]); - } - exports_1("RenderDrawData", RenderDrawData); function CreateFontsTexture() { const io = ImGui.GetIO(); // Backup GL state @@ -653,19 +188,6 @@ // Store our identifier io.Fonts.TexID = g_FontTexture || { foo: "bar" }; // console.log("font texture id", g_FontTexture); - if (ctx) { - const image_canvas = document.createElement("canvas"); - image_canvas.width = width; - image_canvas.height = height; - const image_ctx = image_canvas.getContext("2d"); - if (image_ctx === null) { - throw new Error(); - } - const image_data = image_ctx.getImageData(0, 0, width, height); - image_data.data.set(pixels); - image_ctx.putImageData(image_data, 0, 0); - io.Fonts.TexID = image_canvas; - } // Restore modified GL state gl && last_texture && gl.bindTexture(gl.TEXTURE_2D, last_texture); } @@ -743,19 +265,430 @@ setters: [ function (ImGui_1) { ImGui = ImGui_1; + }, + function (PIXI_1) { + PIXI = PIXI_1; + }, + function (U_1) { + U = U_1; } ], execute: function () { clipboard_text = ""; - ImGuiImplPIXI = class ImGuiImplPIXI { - constructor(app, owner) { - this.app = app; - this.owner = owner; + contexts = []; + contextIOs = []; + isFirstWindow = true; + ImGuiImplInternalRenderer = class ImGuiImplInternalRenderer extends PIXI.ObjectRenderer { + constructor(r) { + super(r); + } + render(owner) { + if (!(owner instanceof ImGuiWindow)) + return; + const window = owner; + const io = window.io; + const draw_data = ImGui.GetDrawData(); + if (draw_data === null) { + throw new Error(); + } + gl || console.log(draw_data); + // Avoid rendering when minimized, scale coordinates for retina displays (screen coordinates != framebuffer coordinates) + const fb_width = io.DisplaySize.x * io.DisplayFramebufferScale.x; + const fb_height = io.DisplaySize.y * io.DisplayFramebufferScale.y; + if (fb_width === 0 || fb_height === 0) { + return; + } + draw_data.ScaleClipRects(io.DisplayFramebufferScale); + // Backup GL state + const last_active_texture = gl && gl.getParameter(gl.ACTIVE_TEXTURE) || null; + const last_program = gl && gl.getParameter(gl.CURRENT_PROGRAM) || null; + const last_texture = gl && gl.getParameter(gl.TEXTURE_BINDING_2D) || null; + const last_array_buffer = gl && gl.getParameter(gl.ARRAY_BUFFER_BINDING) || null; + const last_element_array_buffer = gl && gl.getParameter(gl.ELEMENT_ARRAY_BUFFER_BINDING) || null; + // GLint last_polygon_mode[2]; glGetIntegerv(GL_POLYGON_MODE, last_polygon_mode); + const last_viewport = gl && gl.getParameter(gl.VIEWPORT) || null; + const last_scissor_box = gl && gl.getParameter(gl.SCISSOR_BOX) || null; + const last_blend_src_rgb = gl && gl.getParameter(gl.BLEND_SRC_RGB) || null; + const last_blend_dst_rgb = gl && gl.getParameter(gl.BLEND_DST_RGB) || null; + const last_blend_src_alpha = gl && gl.getParameter(gl.BLEND_SRC_ALPHA) || null; + const last_blend_dst_alpha = gl && gl.getParameter(gl.BLEND_DST_ALPHA) || null; + const last_blend_equation_rgb = gl && gl.getParameter(gl.BLEND_EQUATION_RGB) || null; + const last_blend_equation_alpha = gl && gl.getParameter(gl.BLEND_EQUATION_ALPHA) || null; + const last_enable_blend = gl && gl.getParameter(gl.BLEND) || null; + const last_enable_cull_face = gl && gl.getParameter(gl.CULL_FACE) || null; + const last_enable_depth_test = gl && gl.getParameter(gl.DEPTH_TEST) || null; + const last_enable_scissor_test = gl && gl.getParameter(gl.SCISSOR_TEST) || null; + // Setup render state: alpha-blending enabled, no face culling, no depth testing, scissor enabled, polygon fill + gl && gl.enable(gl.BLEND); + gl && gl.blendEquation(gl.FUNC_ADD); + gl && gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA); + gl && gl.disable(gl.CULL_FACE); + gl && gl.disable(gl.DEPTH_TEST); + gl && gl.enable(gl.SCISSOR_TEST); + // glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); + // Setup viewport, orthographic projection matrix + // Our visible imgui space lies from draw_data->DisplayPps (top left) to draw_data->DisplayPos+data_data->DisplaySize (bottom right). DisplayMin is typically (0,0) for single viewport apps. + gl && gl.viewport(0, 0, fb_width, fb_height); + const L = draw_data.DisplayPos.x; + const R = draw_data.DisplayPos.x + draw_data.DisplaySize.x; + const T = draw_data.DisplayPos.y; + const B = draw_data.DisplayPos.y + draw_data.DisplaySize.y; + const ortho_projection = new Float32Array([ + 2.0 / (R - L), 0.0, 0.0, 0.0, + 0.0, 2.0 / (T - B), 0.0, 0.0, + 0.0, 0.0, -1.0, 0.0, + (R + L) / (L - R), (T + B) / (B - T), 0.0, 1.0, + ]); + gl && gl.useProgram(g_ShaderHandle); + gl && gl.uniform1i(g_AttribLocationTex, 0); + gl && g_AttribLocationProjMtx && gl.uniformMatrix4fv(g_AttribLocationProjMtx, false, ortho_projection); + // Render command lists + gl && gl.bindBuffer(gl.ARRAY_BUFFER, g_VboHandle); + gl && gl.enableVertexAttribArray(g_AttribLocationPosition); + gl && gl.enableVertexAttribArray(g_AttribLocationUV); + gl && gl.enableVertexAttribArray(g_AttribLocationColor); + gl && gl.vertexAttribPointer(g_AttribLocationPosition, 2, gl.FLOAT, false, ImGui.ImDrawVertSize, ImGui.ImDrawVertPosOffset); + gl && gl.vertexAttribPointer(g_AttribLocationUV, 2, gl.FLOAT, false, ImGui.ImDrawVertSize, ImGui.ImDrawVertUVOffset); + gl && gl.vertexAttribPointer(g_AttribLocationColor, 4, gl.UNSIGNED_BYTE, true, ImGui.ImDrawVertSize, ImGui.ImDrawVertColOffset); + // Draw + const pos = draw_data.DisplayPos; + const idx_buffer_type = gl && ((ImGui.ImDrawIdxSize === 4) ? gl.UNSIGNED_INT : gl.UNSIGNED_SHORT) || 0; + draw_data.IterateDrawLists((draw_list) => { + gl || console.log(draw_list); + gl || console.log("VtxBuffer.length", draw_list.VtxBuffer.length); + gl || console.log("IdxBuffer.length", draw_list.IdxBuffer.length); + let idx_buffer_offset = 0; + gl && gl.bindBuffer(gl.ARRAY_BUFFER, g_VboHandle); + gl && gl.bufferData(gl.ARRAY_BUFFER, draw_list.VtxBuffer, gl.STREAM_DRAW); + gl && gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, g_ElementsHandle); + gl && gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, draw_list.IdxBuffer, gl.STREAM_DRAW); + draw_list.IterateDrawCmds((draw_cmd) => { + gl || console.log(draw_cmd); + gl || console.log("ElemCount", draw_cmd.ElemCount); + gl || console.log("ClipRect", draw_cmd.ClipRect.x, fb_height - draw_cmd.ClipRect.w, draw_cmd.ClipRect.z - draw_cmd.ClipRect.x, draw_cmd.ClipRect.w - draw_cmd.ClipRect.y); + gl || console.log("TextureId", draw_cmd.TextureId); + if (!gl) { + console.log("i: pos.x pos.y uv.x uv.y col"); + for (let i = 0; i < Math.min(3, draw_cmd.ElemCount); ++i) { + const view = new ImGui.ImDrawVert(draw_list.VtxBuffer.buffer, draw_list.VtxBuffer.byteOffset + i * ImGui.ImDrawVertSize); + console.log(`${i}: ${view.pos[0].toFixed(2)} ${view.pos[1].toFixed(2)} ${view.uv[0].toFixed(5)} ${view.uv[1].toFixed(5)} ${("00000000" + view.col[0].toString(16)).substr(-8)}`); + } + } + if (draw_cmd.UserCallback !== null) { + // User callback (registered via ImDrawList::AddCallback) + draw_cmd.UserCallback(draw_list, draw_cmd); + } + else { + const clip_rect = new ImGui.ImVec4(draw_cmd.ClipRect.x - pos.x, draw_cmd.ClipRect.y - pos.y, draw_cmd.ClipRect.z - pos.x, draw_cmd.ClipRect.w - pos.y); + if (clip_rect.x < fb_width && clip_rect.y < fb_height && clip_rect.z >= 0.0 && clip_rect.w >= 0.0) { + // Apply scissor/clipping rectangle + gl && gl.scissor(clip_rect.x, fb_height - clip_rect.w, clip_rect.z - clip_rect.x, clip_rect.w - clip_rect.y); + // Bind texture, Draw + gl && gl.activeTexture(gl.TEXTURE0); + gl && gl.bindTexture(gl.TEXTURE_2D, draw_cmd.TextureId); + gl && gl.drawElements(gl.TRIANGLES, draw_cmd.ElemCount, idx_buffer_type, idx_buffer_offset); + } + } + idx_buffer_offset += draw_cmd.ElemCount * ImGui.ImDrawIdxSize; + }); + }); + // Restore modified GL state + gl && (last_program !== null) && gl.useProgram(last_program); + gl && (last_texture !== null) && gl.bindTexture(gl.TEXTURE_2D, last_texture); + gl && (last_active_texture !== null) && gl.activeTexture(last_active_texture); + gl && gl.disableVertexAttribArray(g_AttribLocationPosition); + gl && gl.disableVertexAttribArray(g_AttribLocationUV); + gl && gl.disableVertexAttribArray(g_AttribLocationColor); + gl && (last_array_buffer !== null) && gl.bindBuffer(gl.ARRAY_BUFFER, last_array_buffer); + gl && (last_element_array_buffer !== null) && gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, last_element_array_buffer); + gl && (last_blend_equation_rgb !== null && last_blend_equation_alpha !== null) && gl.blendEquationSeparate(last_blend_equation_rgb, last_blend_equation_alpha); + gl && (last_blend_src_rgb !== null && last_blend_src_alpha !== null && last_blend_dst_rgb !== null && last_blend_dst_alpha !== null) && gl.blendFuncSeparate(last_blend_src_rgb, last_blend_src_alpha, last_blend_dst_rgb, last_blend_dst_alpha); + gl && (last_enable_blend ? gl.enable(gl.BLEND) : gl.disable(gl.BLEND)); + gl && (last_enable_cull_face ? gl.enable(gl.CULL_FACE) : gl.disable(gl.CULL_FACE)); + gl && (last_enable_depth_test ? gl.enable(gl.DEPTH_TEST) : gl.disable(gl.DEPTH_TEST)); + gl && (last_enable_scissor_test ? gl.enable(gl.SCISSOR_TEST) : gl.disable(gl.SCISSOR_TEST)); + // glPolygonMode(GL_FRONT_AND_BACK, (GLenum)last_polygon_mode[0]); + gl && (last_viewport !== null) && gl.viewport(last_viewport[0], last_viewport[1], last_viewport[2], last_viewport[3]); + gl && (last_scissor_box !== null) && gl.scissor(last_scissor_box[0], last_scissor_box[1], last_scissor_box[2], last_scissor_box[3]); } }; - exports_1("ImGuiImplPIXI", ImGuiImplPIXI); + gl = null; + app = null; + ImGuiWindow = class ImGuiWindow extends PIXI.Container { + constructor(sizeX, sizeY, update) { + super(); + this.baseTex = new PIXI.BaseRenderTexture({ scaleMode: PIXI.SCALE_MODES.LINEAR, resolution: 1 }); + this.tex = new PIXI.RenderTexture(this.baseTex); + this.surface = new PIXI.Sprite(this.tex); + this.imgui = new PIXI.Sprite(); + if (isFirstWindow) { + this.ctx = contexts[0]; + this.io = contextIOs[0]; + } + else { + this.ctx = ImGui.CreateContext(); + ImGui.SetCurrentContext(this.ctx); + this.io = ImGui.GetIO(); + } + if (!isFirstWindow) { + this.io.Fonts.TexID = contextIOs[0].Fonts.TexID; + } + isFirstWindow = false; + if (typeof (navigator) !== "undefined") { + this.io.ConfigMacOSXBehaviors = navigator.platform.match(/Mac/) !== null; + } + this.io.SetClipboardTextFn = (user_data, text) => { + clipboard_text = text; + // console.log(`set clipboard_text: "${clipboard_text}"`); + if (typeof navigator !== "undefined" && typeof navigator.clipboard !== "undefined") { + // console.log(`clipboard.writeText: "${clipboard_text}"`); + navigator.clipboard.writeText(clipboard_text).then(() => { + // console.log(`clipboard.writeText: "${clipboard_text}" done.`); + }); + } + }; + this.io.GetClipboardTextFn = (user_data) => { + // if (typeof navigator !== "undefined" && typeof (navigator as any).clipboard !== "undefined") { + // console.log(`clipboard.readText: "${clipboard_text}"`); + // (navigator as any).clipboard.readText().then((text: string): void => { + // clipboard_text = text; + // console.log(`clipboard.readText: "${clipboard_text}" done.`); + // }); + // } + // console.log(`get clipboard_text: "${clipboard_text}"`); + return clipboard_text; + }; + this.io.ClipboardUserData = null; + // Setup back-end capabilities flags + this.io.BackendFlags |= ImGui.BackendFlags.HasMouseCursors; // We can honor GetMouseCursor() values (optional) + // Keyboard mapping. ImGui will use those indices to peek into the io.KeyDown[] array. + this.io.KeyMap[ImGui.Key.Tab] = 9; + this.io.KeyMap[ImGui.Key.LeftArrow] = 37; + this.io.KeyMap[ImGui.Key.RightArrow] = 39; + this.io.KeyMap[ImGui.Key.UpArrow] = 38; + this.io.KeyMap[ImGui.Key.DownArrow] = 40; + this.io.KeyMap[ImGui.Key.PageUp] = 33; + this.io.KeyMap[ImGui.Key.PageDown] = 34; + this.io.KeyMap[ImGui.Key.Home] = 36; + this.io.KeyMap[ImGui.Key.End] = 35; + this.io.KeyMap[ImGui.Key.Insert] = 45; + this.io.KeyMap[ImGui.Key.Delete] = 46; + this.io.KeyMap[ImGui.Key.Backspace] = 8; + this.io.KeyMap[ImGui.Key.Space] = 32; + this.io.KeyMap[ImGui.Key.Enter] = 13; + this.io.KeyMap[ImGui.Key.Escape] = 27; + this.io.KeyMap[ImGui.Key.A] = 65; + this.io.KeyMap[ImGui.Key.C] = 67; + this.io.KeyMap[ImGui.Key.V] = 86; + this.io.KeyMap[ImGui.Key.X] = 88; + this.io.KeyMap[ImGui.Key.Y] = 89; + this.io.KeyMap[ImGui.Key.Z] = 90; + contextIOs.push(this.io); + this.update = update; + this.resize(sizeX, sizeY); + this.imgui.pluginName = 'imgui_renderer'; + this.addChild(this.surface); + this.surface.addListener("mousedown", this.mouseDown.bind(this)); + this.surface.addListener("mouseup", this.mouseUp.bind(this)); + app.ticker.add(this.updateInternal.bind(this)); + } + getSizeX() { return this.sizeX; } + getSizeY() { return this.sizeY; } + mouseDown(e) { + this.io.MouseDown[mouse_button_map[0]] = true; + } + mouseUp(e) { + this.io.MouseDown[mouse_button_map[0]] = false; + } + resize(sizeX, sizeY) { + this.sizeX = sizeX; + this.sizeY = sizeY; + this.baseTex.resize(sizeX, sizeY); + this.tex.frame = new PIXI.Rectangle(0, 0, this.baseTex.width, this.baseTex.height); + this.surface.hitArea = this.tex.frame; + } + updateInternal(deltaTime) { + const dt = deltaTime * 1 / (1000 * PIXI.settings.TARGET_FPMS); + ImGui.SetCurrentContext(this.ctx); + if (this.io.WantSaveIniSettings) { + this.io.WantSaveIniSettings = false; + if (typeof (window) !== "undefined") { + window.localStorage.setItem("imgui.ini", ImGui.SaveIniSettingsToMemory()); + } + } + this.io.DisplaySize.x = this.sizeX; + this.io.DisplaySize.y = this.sizeY; + this.io.DisplayFramebufferScale.x = 1; + this.io.DisplayFramebufferScale.y = 1; + this.io.DeltaTime = dt; + const localPos = this.getGlobalPosition(new PIXI.Point()); + this.io.MousePos.x = localPos.x; + this.io.MousePos.y = localPos.y; + if (this.io.WantSetMousePos) { + console.log("TODO: MousePos", this.io.MousePos.x, this.io.MousePos.y); + } + if (typeof (document) !== "undefined") { + if (this.io.MouseDrawCursor) { + document.body.style.cursor = "none"; + } + else { + switch (ImGui.GetMouseCursor()) { + case ImGui.MouseCursor.None: + document.body.style.cursor = "none"; + break; + default: + case ImGui.MouseCursor.Arrow: + document.body.style.cursor = "default"; + break; + case ImGui.MouseCursor.TextInput: + document.body.style.cursor = "text"; + break; // When hovering over InputText, etc. + case ImGui.MouseCursor.ResizeAll: + document.body.style.cursor = "move"; + break; // Unused + case ImGui.MouseCursor.ResizeNS: + document.body.style.cursor = "ns-resize"; + break; // When hovering over an horizontal border + case ImGui.MouseCursor.ResizeEW: + document.body.style.cursor = "ew-resize"; + break; // When hovering over a vertical border or a column + case ImGui.MouseCursor.ResizeNESW: + document.body.style.cursor = "nesw-resize"; + break; // When hovering over the bottom-left corner of a window + case ImGui.MouseCursor.ResizeNWSE: + document.body.style.cursor = "nwse-resize"; + break; // When hovering over the bottom-right corner of a window + case ImGui.MouseCursor.Hand: + document.body.style.cursor = "move"; + break; + } + } + } + // Gamepad navigation mapping [BETA] + for (let i = 0; i < this.io.NavInputs.length; ++i) { + this.io.NavInputs[i] = 0.0; + } + if (this.io.ConfigFlags & ImGui.ConfigFlags.NavEnableGamepad) { + // Update gamepad inputs + const gamepads = (typeof (navigator) !== "undefined" && typeof (navigator.getGamepads) === "function") ? navigator.getGamepads() : []; + for (let i = 0; i < gamepads.length; ++i) { + const gamepad = gamepads[i]; + if (!gamepad) { + continue; + } + const buttons_count = gamepad.buttons.length; + const axes_count = gamepad.axes.length; + const MAP_BUTTON = function (NAV_NO, BUTTON_NO) { + if (!gamepad) { + return; + } + if (buttons_count > BUTTON_NO && gamepad.buttons[BUTTON_NO].pressed) + this.io.NavInputs[NAV_NO] = 1.0; + }; + const MAP_ANALOG = function (NAV_NO, AXIS_NO, V0, V1) { + if (!gamepad) { + return; + } + let v = (axes_count > AXIS_NO) ? gamepad.axes[AXIS_NO] : V0; + v = (v - V0) / (V1 - V0); + if (v > 1.0) + v = 1.0; + if (this.io.NavInputs[NAV_NO] < v) + this.io.NavInputs[NAV_NO] = v; + }; + // TODO: map input based on vendor and product id + // https://developer.mozilla.org/en-US/docs/Web/API/Gamepad/id + const match = gamepad.id.match(/^([0-9a-f]{4})-([0-9a-f]{4})-.*$/); + const match_chrome = gamepad.id.match(/^.*\(.*Vendor: ([0-9a-f]{4}) Product: ([0-9a-f]{4})\).*$/); + const vendor = (match && match[1]) || (match_chrome && match_chrome[1]) || "0000"; + const product = (match && match[2]) || (match_chrome && match_chrome[2]) || "0000"; + switch (vendor + product) { + case "046dc216": // Logitech Logitech Dual Action (Vendor: 046d Product: c216) + MAP_BUTTON(ImGui.NavInput.Activate, 1); // Cross / A + MAP_BUTTON(ImGui.NavInput.Cancel, 2); // Circle / B + MAP_BUTTON(ImGui.NavInput.Menu, 0); // Square / X + MAP_BUTTON(ImGui.NavInput.Input, 3); // Triangle / Y + MAP_ANALOG(ImGui.NavInput.DpadLeft, 4, -0.3, -0.9); // D-Pad Left + MAP_ANALOG(ImGui.NavInput.DpadRight, 4, +0.3, +0.9); // D-Pad Right + MAP_ANALOG(ImGui.NavInput.DpadUp, 5, -0.3, -0.9); // D-Pad Up + MAP_ANALOG(ImGui.NavInput.DpadDown, 5, +0.3, +0.9); // D-Pad Down + MAP_BUTTON(ImGui.NavInput.FocusPrev, 4); // L1 / LB + MAP_BUTTON(ImGui.NavInput.FocusNext, 5); // R1 / RB + MAP_BUTTON(ImGui.NavInput.TweakSlow, 6); // L2 / LT + MAP_BUTTON(ImGui.NavInput.TweakFast, 7); // R2 / RT + MAP_ANALOG(ImGui.NavInput.LStickLeft, 0, -0.3, -0.9); + MAP_ANALOG(ImGui.NavInput.LStickRight, 0, +0.3, +0.9); + MAP_ANALOG(ImGui.NavInput.LStickUp, 1, -0.3, -0.9); + MAP_ANALOG(ImGui.NavInput.LStickDown, 1, +0.3, +0.9); + break; + case "046dc21d": // Logitech Gamepad F310 (STANDARD GAMEPAD Vendor: 046d Product: c21d) + MAP_BUTTON(ImGui.NavInput.Activate, 0); // Cross / A + MAP_BUTTON(ImGui.NavInput.Cancel, 1); // Circle / B + MAP_BUTTON(ImGui.NavInput.Menu, 2); // Square / X + MAP_BUTTON(ImGui.NavInput.Input, 3); // Triangle / Y + MAP_BUTTON(ImGui.NavInput.DpadLeft, 14); // D-Pad Left + MAP_BUTTON(ImGui.NavInput.DpadRight, 15); // D-Pad Right + MAP_BUTTON(ImGui.NavInput.DpadUp, 12); // D-Pad Up + MAP_BUTTON(ImGui.NavInput.DpadDown, 13); // D-Pad Down + MAP_BUTTON(ImGui.NavInput.FocusPrev, 4); // L1 / LB + MAP_BUTTON(ImGui.NavInput.FocusNext, 5); // R1 / RB + MAP_ANALOG(ImGui.NavInput.TweakSlow, 6, +0.3, +0.9); // L2 / LT + MAP_ANALOG(ImGui.NavInput.TweakFast, 7, +0.3, +0.9); // R2 / RT + MAP_ANALOG(ImGui.NavInput.LStickLeft, 0, -0.3, -0.9); + MAP_ANALOG(ImGui.NavInput.LStickRight, 0, +0.3, +0.9); + MAP_ANALOG(ImGui.NavInput.LStickUp, 1, -0.3, -0.9); + MAP_ANALOG(ImGui.NavInput.LStickDown, 1, +0.3, +0.9); + break; + case "2dc86001": // 8Bitdo SN30 Pro 8Bitdo SN30 Pro (Vendor: 2dc8 Product: 6001) + case "2dc86101": // 8Bitdo SN30 Pro (Vendor: 2dc8 Product: 6101) + MAP_BUTTON(ImGui.NavInput.Activate, 1); // Cross / A + MAP_BUTTON(ImGui.NavInput.Cancel, 0); // Circle / B + MAP_BUTTON(ImGui.NavInput.Menu, 4); // Square / X + MAP_BUTTON(ImGui.NavInput.Input, 3); // Triangle / Y + MAP_ANALOG(ImGui.NavInput.DpadLeft, 6, -0.3, -0.9); // D-Pad Left + MAP_ANALOG(ImGui.NavInput.DpadRight, 6, +0.3, +0.9); // D-Pad Right + MAP_ANALOG(ImGui.NavInput.DpadUp, 7, -0.3, -0.9); // D-Pad Up + MAP_ANALOG(ImGui.NavInput.DpadDown, 7, +0.3, +0.9); // D-Pad Down + MAP_BUTTON(ImGui.NavInput.FocusPrev, 6); // L1 / LB + MAP_BUTTON(ImGui.NavInput.FocusNext, 7); // R1 / RB + MAP_BUTTON(ImGui.NavInput.TweakSlow, 8); // L2 / LT + MAP_BUTTON(ImGui.NavInput.TweakFast, 9); // R2 / RT + MAP_ANALOG(ImGui.NavInput.LStickLeft, 0, -0.3, -0.9); + MAP_ANALOG(ImGui.NavInput.LStickRight, 0, +0.3, +0.9); + MAP_ANALOG(ImGui.NavInput.LStickUp, 1, -0.3, -0.9); + MAP_ANALOG(ImGui.NavInput.LStickDown, 1, +0.3, +0.9); + break; + default: // standard gamepad: https://w3c.github.io/gamepad/#remapping + MAP_BUTTON(ImGui.NavInput.Activate, 0); // Cross / A + MAP_BUTTON(ImGui.NavInput.Cancel, 1); // Circle / B + MAP_BUTTON(ImGui.NavInput.Menu, 2); // Square / X + MAP_BUTTON(ImGui.NavInput.Input, 3); // Triangle / Y + MAP_BUTTON(ImGui.NavInput.DpadLeft, 14); // D-Pad Left + MAP_BUTTON(ImGui.NavInput.DpadRight, 15); // D-Pad Right + MAP_BUTTON(ImGui.NavInput.DpadUp, 12); // D-Pad Up + MAP_BUTTON(ImGui.NavInput.DpadDown, 13); // D-Pad Down + MAP_BUTTON(ImGui.NavInput.FocusPrev, 4); // L1 / LB + MAP_BUTTON(ImGui.NavInput.FocusNext, 5); // R1 / RB + MAP_BUTTON(ImGui.NavInput.TweakSlow, 6); // L2 / LT + MAP_BUTTON(ImGui.NavInput.TweakFast, 7); // R2 / RT + MAP_ANALOG(ImGui.NavInput.LStickLeft, 0, -0.3, -0.9); + MAP_ANALOG(ImGui.NavInput.LStickRight, 0, +0.3, +0.9); + MAP_ANALOG(ImGui.NavInput.LStickUp, 1, -0.3, -0.9); + MAP_ANALOG(ImGui.NavInput.LStickDown, 1, +0.3, +0.9); + break; + } + } + } + ImGui.NewFrame(); + this.update(dt); + ImGui.EndFrame(); + ImGui.Render(); + app.renderer.render(this.imgui, this.tex); + } + }; + exports_1("ImGuiWindow", ImGuiWindow); canvas = null; - exports_1("gl", gl = null); + //export let gl: WebGL2RenderingContext | null = null; g_ShaderHandle = null; g_VertHandle = null; g_FragHandle = null; @@ -767,7 +700,6 @@ g_VboHandle = null; g_ElementsHandle = null; g_FontTexture = null; - exports_1("ctx", ctx = null); prev_time = 0; // MouseEvent.button // A number representing a given button: diff --git a/src/imgui_impl.js.map b/src/imgui_impl.js.map index 6d2bb7c..68bf7e0 100644 --- a/src/imgui_impl.js.map +++ b/src/imgui_impl.js.map @@ -1 +1 @@ -{"version":3,"file":"imgui_impl.js","sourceRoot":"","sources":["imgui_impl.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"imgui_impl.js","sourceRoot":"","sources":["imgui_impl.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/src/imgui_impl.ts b/src/imgui_impl.ts index b19b8d7..332fd14 100644 --- a/src/imgui_impl.ts +++ b/src/imgui_impl.ts @@ -5,7 +5,9 @@ let clipboard_text: string = ""; +const contexts: ImGui.ImGuiContext[] = []; const contextIOs: ImGui.ImGuiIO[] = []; +let isFirstWindow: boolean = true; class ImGuiImplInternalRenderer extends PIXI.ObjectRenderer { @@ -15,8 +17,11 @@ } render(owner: PIXI.DisplayObject): void { + if (!(owner instanceof ImGuiWindow)) return; - const io: ImGui.ImGuiIO = ImGui.GetIO(); + const window: ImGuiWindow = owner as ImGuiWindow; + + const io: ImGui.ImGuiIO = window.io; const draw_data: ImGui.ImDrawData = ImGui.GetDrawData(); if (draw_data === null) { throw new Error(); } @@ -161,7 +166,7 @@ export class ImGuiWindow extends PIXI.Container { public readonly ctx: ImGui.ImGuiContext; - private readonly io: ImGui.ImGuiIO; + public readonly io: ImGui.ImGuiIO; private sizeX: number; private sizeY: number; public getSizeX(): number { return this.sizeX; } @@ -177,9 +182,80 @@ constructor(sizeX: number, sizeY: number, update: (dt: number) => void) { super(); - this.ctx = ImGui.CreateContext(); - ImGui.SetCurrentContext(this.ctx); - this.io = ImGui.GetIO(); + + if (isFirstWindow) + { + this.ctx = contexts[0]; + this.io = contextIOs[0]; + } + else + { + this.ctx = ImGui.CreateContext(); + ImGui.SetCurrentContext(this.ctx); + this.io = ImGui.GetIO(); + } + + + if (!isFirstWindow) + { + this.io.Fonts.TexID = contextIOs[0].Fonts.TexID; + } + + isFirstWindow = false; + + if (typeof(navigator) !== "undefined") { + this.io.ConfigMacOSXBehaviors = navigator.platform.match(/Mac/) !== null; + } + + this.io.SetClipboardTextFn = (user_data: any, text: string): void => { + clipboard_text = text; + // console.log(`set clipboard_text: "${clipboard_text}"`); + if (typeof navigator !== "undefined" && typeof (navigator as any).clipboard !== "undefined") { + // console.log(`clipboard.writeText: "${clipboard_text}"`); + (navigator as any).clipboard.writeText(clipboard_text).then((): void => { + // console.log(`clipboard.writeText: "${clipboard_text}" done.`); + }); + } + }; + this.io.GetClipboardTextFn = (user_data: any): string => { + // if (typeof navigator !== "undefined" && typeof (navigator as any).clipboard !== "undefined") { + // console.log(`clipboard.readText: "${clipboard_text}"`); + // (navigator as any).clipboard.readText().then((text: string): void => { + // clipboard_text = text; + // console.log(`clipboard.readText: "${clipboard_text}" done.`); + // }); + // } + // console.log(`get clipboard_text: "${clipboard_text}"`); + return clipboard_text; + }; + this.io.ClipboardUserData = null; + + // Setup back-end capabilities flags + this.io.BackendFlags |= ImGui.BackendFlags.HasMouseCursors; // We can honor GetMouseCursor() values (optional) + + // Keyboard mapping. ImGui will use those indices to peek into the io.KeyDown[] array. + this.io.KeyMap[ImGui.Key.Tab] = 9; + this.io.KeyMap[ImGui.Key.LeftArrow] = 37; + this.io.KeyMap[ImGui.Key.RightArrow] = 39; + this.io.KeyMap[ImGui.Key.UpArrow] = 38; + this.io.KeyMap[ImGui.Key.DownArrow] = 40; + this.io.KeyMap[ImGui.Key.PageUp] = 33; + this.io.KeyMap[ImGui.Key.PageDown] = 34; + this.io.KeyMap[ImGui.Key.Home] = 36; + this.io.KeyMap[ImGui.Key.End] = 35; + this.io.KeyMap[ImGui.Key.Insert] = 45; + this.io.KeyMap[ImGui.Key.Delete] = 46; + this.io.KeyMap[ImGui.Key.Backspace] = 8; + this.io.KeyMap[ImGui.Key.Space] = 32; + this.io.KeyMap[ImGui.Key.Enter] = 13; + this.io.KeyMap[ImGui.Key.Escape] = 27; + this.io.KeyMap[ImGui.Key.A] = 65; + this.io.KeyMap[ImGui.Key.C] = 67; + this.io.KeyMap[ImGui.Key.V] = 86; + this.io.KeyMap[ImGui.Key.X] = 88; + this.io.KeyMap[ImGui.Key.Y] = 89; + this.io.KeyMap[ImGui.Key.Z] = 90; + contextIOs.push(this.io); this.update = update; this.resize(sizeX, sizeY); @@ -225,7 +301,6 @@ this.io.DeltaTime = dt; - // TODO global mouse pos to local const localPos: PIXI.Point = this.getGlobalPosition(new PIXI.Point()); this.io.MousePos.x = localPos.x; this.io.MousePos.y = localPos.y; @@ -519,52 +594,31 @@ export function Init(_app: PIXI.Application): void { // Setup Dear ImGui binding ImGui.IMGUI_CHECKVERSION(); + ImGui.CreateContext(); + ImGui.StyleColorsLight(); + + contexts.push(ImGui.GetCurrentContext()); + contextIOs.push(ImGui.GetIO()); + contextIOs[0].Fonts.AddFontDefault(); PIXI.Renderer.registerPlugin("imgui_renderer", U.fromConstructor(ImGuiImplInternalRenderer)); - const io = ImGui.GetIO(); if (typeof(window) !== "undefined") { ImGui.LoadIniSettingsFromMemory(window.localStorage.getItem("imgui.ini") || ""); } - if (typeof(navigator) !== "undefined") { - io.ConfigMacOSXBehaviors = navigator.platform.match(/Mac/) !== null; - } - if (typeof(document) !== "undefined") { document.body.addEventListener("copy", document_on_copy); document.body.addEventListener("cut", document_on_cut); document.body.addEventListener("paste", document_on_paste); } - io.SetClipboardTextFn = (user_data: any, text: string): void => { - clipboard_text = text; - // console.log(`set clipboard_text: "${clipboard_text}"`); - if (typeof navigator !== "undefined" && typeof (navigator as any).clipboard !== "undefined") { - // console.log(`clipboard.writeText: "${clipboard_text}"`); - (navigator as any).clipboard.writeText(clipboard_text).then((): void => { - // console.log(`clipboard.writeText: "${clipboard_text}" done.`); - }); - } - }; - io.GetClipboardTextFn = (user_data: any): string => { - // if (typeof navigator !== "undefined" && typeof (navigator as any).clipboard !== "undefined") { - // console.log(`clipboard.readText: "${clipboard_text}"`); - // (navigator as any).clipboard.readText().then((text: string): void => { - // clipboard_text = text; - // console.log(`clipboard.readText: "${clipboard_text}" done.`); - // }); - // } - // console.log(`get clipboard_text: "${clipboard_text}"`); - return clipboard_text; - }; - io.ClipboardUserData = null; - if (typeof(window) !== "undefined") { window.addEventListener("gamepadconnected", window_on_gamepadconnected); window.addEventListener("gamepaddisconnected", window_on_gamepaddisconnected); } + app = _app; gl = (app.renderer as any).gl; canvas = app.view; @@ -579,31 +633,6 @@ canvas.addEventListener("wheel", canvas_on_wheel); } - // Setup back-end capabilities flags - io.BackendFlags |= ImGui.BackendFlags.HasMouseCursors; // We can honor GetMouseCursor() values (optional) - - // Keyboard mapping. ImGui will use those indices to peek into the io.KeyDown[] array. - io.KeyMap[ImGui.Key.Tab] = 9; - io.KeyMap[ImGui.Key.LeftArrow] = 37; - io.KeyMap[ImGui.Key.RightArrow] = 39; - io.KeyMap[ImGui.Key.UpArrow] = 38; - io.KeyMap[ImGui.Key.DownArrow] = 40; - io.KeyMap[ImGui.Key.PageUp] = 33; - io.KeyMap[ImGui.Key.PageDown] = 34; - io.KeyMap[ImGui.Key.Home] = 36; - io.KeyMap[ImGui.Key.End] = 35; - io.KeyMap[ImGui.Key.Insert] = 45; - io.KeyMap[ImGui.Key.Delete] = 46; - io.KeyMap[ImGui.Key.Backspace] = 8; - io.KeyMap[ImGui.Key.Space] = 32; - io.KeyMap[ImGui.Key.Enter] = 13; - io.KeyMap[ImGui.Key.Escape] = 27; - io.KeyMap[ImGui.Key.A] = 65; - io.KeyMap[ImGui.Key.C] = 67; - io.KeyMap[ImGui.Key.V] = 86; - io.KeyMap[ImGui.Key.X] = 88; - io.KeyMap[ImGui.Key.Y] = 89; - io.KeyMap[ImGui.Key.Z] = 90; CreateDeviceObjects(); } @@ -635,12 +664,6 @@ } } -export function NewFrame(time: number): void { -} - -export function RenderDrawData(draw_data: ImGui.ImDrawData | null = ImGui.GetDrawData()): void { -} - export function CreateFontsTexture(): void { const io = ImGui.GetIO(); diff --git a/src/main.js b/src/main.js index 053077a..b99a6d3 100644 --- a/src/main.js +++ b/src/main.js @@ -8,11 +8,10 @@ step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; - var ImGui_Impl, ImGui, imgui_js_1, imgui_js_2, PIXI, U, ctx, currentCtx, clearColor, ImGuiRenderer, windowOpen, text; + var ImGui_Impl, imgui_impl_1, ImGui, imgui_js_1, imgui_js_2, PIXI, U, clearColor, windowOpen, text; var __moduleName = context_1 && context_1.id; function main() { return __awaiter(this, void 0, void 0, function* () { - PIXI.Renderer.registerPlugin("imgui_renderer", U.fromConstructor(ImGuiRenderer)); console.log("main()"); yield ImGui.default(); window.requestAnimationFrame(init); @@ -33,61 +32,36 @@ app.view.style.bottom = "0px"; app.view.style.width = "100%"; app.view.style.height = "100%"; - // Setup Dear ImGui binding - ImGui.IMGUI_CHECKVERSION(); - for (var i = 0; i < 2; i++) { - let newCtx = ImGui.CreateContext(); - ImGui.SetCurrentContext(newCtx); - const io = ImGui.GetIO(); - io.ConfigFlags |= ImGui.ConfigFlags.NavEnableKeyboard; // Enable Keyboard Controls - // Setup style - ImGui.StyleColorsLight(); - ImGui_Impl.Init(app.view); - ctx.push(newCtx); - } - ImGui.SetCurrentContext(ctx[0]); + // Setup style + ImGui.StyleColorsLight(); + ImGui_Impl.Init(app); app.ticker.add((deltaTime) => { const dt = deltaTime * 1 / (1000 * PIXI.settings.TARGET_FPMS); - ImGui_Impl.NewFrame(dt); - ImGui.NewFrame(); - update(app, dt); - ImGui.EndFrame(); - ImGui.Render(); app.render(); }); - const imguiLayer = new PIXI.Sprite(); - imguiLayer.pluginName = "imgui_renderer"; - app.stage.addChild(imguiLayer); let resizeFunc = function () { app.renderer.resize(window.innerWidth, window.innerHeight); }; + const imgui = new imgui_impl_1.ImGuiWindow(400, 400, update); + app.stage.addChild(imgui); window.onresize = resizeFunc; resizeFunc(); - window.onkeydown = keyDown; } - function keyDown() { - currentCtx = (currentCtx + 1) % ctx.length; - ImGui.SetCurrentContext(ctx[currentCtx]); - } - function update(app, timeElapsed) { + function update(timeElapsed) { ImGui.SetNextWindowPos(new imgui_js_2.ImVec2(0, 0)); ImGui.SetNextWindowSize(new imgui_js_2.ImVec2(600, 400), ImGui.ImGuiCond.Always); - ImGui.Begin("Test Window " + currentCtx, (_ = windowOpen) => windowOpen = _, 0); - if (currentCtx == 0) { - if (ImGui.Button("Add Text")) { - text += "A"; - } - ImGui.Text(text); + ImGui.Begin("Test Window"); + if (ImGui.Button("Add Text")) { + text += "A"; } - else { - ImGui.Text("Another context"); - } + ImGui.Text(text); ImGui.End(); } return { setters: [ function (ImGui_Impl_1) { ImGui_Impl = ImGui_Impl_1; + imgui_impl_1 = ImGui_Impl_1; }, function (ImGui_1) { ImGui = ImGui_1; @@ -102,17 +76,7 @@ } ], execute: function () { - ctx = []; - currentCtx = 0; clearColor = new imgui_js_1.ImVec4(0.7, 0.9, 1, 1); - ImGuiRenderer = class ImGuiRenderer extends PIXI.ObjectRenderer { - constructor(r) { - super(r); - } - render(notUsed) { - ImGui_Impl.RenderDrawData(ImGui.GetDrawData()); - } - }; windowOpen = true; text = "text"; /* diff --git a/src/main.js.map b/src/main.js.map index 8828029..141ef8b 100644 --- a/src/main.js.map +++ b/src/main.js.map @@ -1 +1 @@ -{"version":3,"file":"main.js","sourceRoot":"","sources":["main.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"main.js","sourceRoot":"","sources":["main.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/src/main.ts b/src/main.ts index 0d51084..8f9c178 100644 --- a/src/main.ts +++ b/src/main.ts @@ -1,4 +1,5 @@ import * as ImGui_Impl from "./imgui_impl"; +import { ImGuiWindow } from "./imgui_impl"; import * as ImGui from "imgui-js"; import { ImGuiIO } from "imgui-js" import { ImVec4 } from "imgui-js"; @@ -34,90 +35,42 @@ app.view.style.width = "100%"; app.view.style.height = "100%"; - for (var i = 0; i < 2; i++) - { - let newCtx: ImGui.ImGuiContext = ImGui.CreateContext(); - - ImGui.SetCurrentContext(newCtx); - const io: ImGuiIO = ImGui.GetIO(); - io.ConfigFlags |= ImGui.ConfigFlags.NavEnableKeyboard; // Enable Keyboard Controls - - // Setup style - ImGui.StyleColorsLight(); - - ImGui_Impl.Init(this); - } + ImGui_Impl.Init(app); app.ticker.add( (deltaTime: number) => { const dt: number = deltaTime * 1 / (1000 * PIXI.settings.TARGET_FPMS); - ImGui_Impl.NewFrame(dt); - ImGui.NewFrame(); - - update(app, dt); - - ImGui.EndFrame(); - ImGui.Render(); - app.render(); } ); - const imguiLayer:PIXI.Sprite = new PIXI.Sprite(); - imguiLayer.pluginName = "imgui_renderer"; - - app.stage.addChild(imguiLayer); let resizeFunc = function() { app.renderer.resize(window.innerWidth, window.innerHeight); }; + const imgui: ImGuiWindow = new ImGuiWindow(400, 400, update); + app.stage.addChild(imgui); + window.onresize = resizeFunc; resizeFunc(); - - window.onkeydown = keyDown; -} - -function keyDown() -{ - currentCtx = (currentCtx + 1) % ctx.length; - ImGui.SetCurrentContext(ctx[currentCtx]); -} - -class ImGuiRenderer extends PIXI.ObjectRenderer -{ - constructor(r: PIXI.Renderer) - { - super(r); - } - render(notUsed: PIXI.DisplayObject): void - { - ImGui_Impl.RenderDrawData(ImGui.GetDrawData()); - } } let windowOpen: boolean = true; let text: string = "text"; -function update(app: PIXI.Application, timeElapsed: number): void +function update(timeElapsed: number): void { ImGui.SetNextWindowPos(new ImVec2(0, 0)); ImGui.SetNextWindowSize(new ImVec2(600, 400), ImGui.ImGuiCond.Always); - ImGui.Begin("Test Window " + currentCtx, (_ = windowOpen) => windowOpen = _, 0); - if (currentCtx == 0) + ImGui.Begin("Test Window"); + if (ImGui.Button("Add Text")) { - if (ImGui.Button("Add Text")) - { - text += "A"; - } - ImGui.Text(text); + text += "A"; } - else - { - ImGui.Text("Another context"); - } + ImGui.Text(text); ImGui.End(); }