cfillion / reaimgui Goto Github PK
View Code? Open in Web Editor NEWReaScript binding and REAPER backend for the Dear ImGui toolkit.
Home Page: https://forum.cockos.com/showthread.php?t=250419
License: GNU Lesser General Public License v3.0
ReaScript binding and REAPER backend for the Dear ImGui toolkit.
Home Page: https://forum.cockos.com/showthread.php?t=250419
License: GNU Lesser General Public License v3.0
Linux 5.11.0-49-lowlatency #55-Ubuntu SMP PREEMPT Wed Jan 12 18:18:31 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
Reaper 6.44, sws-2.12.1.3-Linux-x86_64
I see some troubles of unicode rendering. At the first glance I thought this is a problem of the selected font, but tests with Cyrillic font (as from python as from lua) showed it is not a matter.
Later I thought it is connected to the way strings has to be packed for the C-interface. In the reapy
project, we've made hacks of original reaper_python
for correct working of various strings and pointers. But, as far as I tried (not very long) — I didn't succeed with the problem.
As long as I can see it is not a issue of reascript itself, as Russian characters in the track name are visible as from ReaConsole as from the print statements (in the track manager example), but not in ImGui window.
So, at the moment, I think the problem is on the ReaImGui
side. Later I'll try to make a minimal working unicode text example with JS_*
API to test whether some characters can be drawn or not.
I'll carefully say Reaper and SWELL
leaks some points of unicode support, generally, in Chinese symbols. But Russian works well.
The code below uses wrap I'm preparing, but It does exactly the same as original python port.
import reapy as reaper
ctx = reaper.ImGui.CreateContext('My script')
size = 25
font = reaper.ImGui.CreateFont('/home/levitanus/Загрузки/fonts/Montserrat/Montserrat-Light.ttf', size)
reaper.ImGui.AttachFont(ctx, font)
click_count, text = 0, '(例子) - chineeze, (рыба) russian'
def frame():
global click_count, text
if reaper.ImGui.Button(ctx, 'Click me!'):
click_count = click_count + 1
if click_count % 2 == 1:
reaper.ImGui.SameLine(ctx)
reaper.ImGui.Text(ctx, 'hello dear imgui!')
rv, text = reaper.ImGui.InputText(ctx, 'text input', text, 1024 * 2)
def loop():
reaper.ImGui.PushFont(ctx, font)
reaper.ImGui.SetNextWindowSize(
ctx, 400, 80, reaper.ImGui.Cond_FirstUseEver()
)
visible, open = reaper.ImGui.Begin(ctx, 'My script', True)
if visible:
frame()
reaper.ImGui.End(ctx)
reaper.ImGui.PopFont(ctx)
if open:
reaper.defer(loop)
else:
reaper.ImGui.DestroyContext(ctx)
reaper.defer(loop)
The following Python code fails with the following errors:
sys.path.append(RPR_GetResourcePath() + "/Scripts/ReaTeam Extensions/API")
from imgui_python import *
ctx = ImGui_CreateContext("Font test")
font = ImGui_CreateFont("sans-serif", 15)
ImGui_Attach(ctx, font)
def loop():
ImGui_PushFont(ctx, font)
visible, is_open = ImGui_Begin(ctx, "Font test", True)
if visible:
ImGui_Text(ctx, "Hello, world!")
ImGui_End(ctx)
ImGui_PopFont(ctx)
if is_open:
RPR_defer("loop()")
RPR_defer("loop()")
If the PushFont/PopFont calls are commented out, the code succeeds, but without the custom font.
For comparison, the following Lua code works:
ctx = reaper.ImGui_CreateContext("Font test")
font = reaper.ImGui_CreateFont("sans-serif", 15)
reaper.ImGui_Attach(ctx, font)
function loop()
reaper.ImGui_PushFont(ctx, font)
visible, is_open = reaper.ImGui_Begin(ctx, "Font test", true)
if visible then
reaper.ImGui_Text(ctx, "Hello, world!")
reaper.ImGui_End(ctx)
end
reaper.ImGui_PopFont(ctx)
if is_open then
reaper.defer(loop)
end
end
reaper.defer(loop)
Thanks for this project!
Dave
Didn't you think of bringing the reaper theme colors to the defaults on imgui load, as you did with docking?
I always feel imgui original colors a bit alien. And also think of implementing a sort of such an option in the wrap around your library now. Just a bit aware of making the same calls twice, if it is in your roadmap.
Running any ReaImGui script in 0.8.2 or higher, with these two DPI settings, fails with the following ReaImGui backend error message:
Unsupported HiDPI mode: select "Multimonitor aware v2" in Preferences > General > Adavanced UI/system settings.
On my Windows 11 system with two mixed resolution monitors (2160p/1440p), the only settings that scale both REAPERs interface, extensions like HeDa Track Inspector, and VST plugins, is to set the REAPER.exe DPI compatibility to "System (Enhanced)" and REAPERs own HDPI mode in Advanced UI settings to "Multimonitor aware (recommended)". Setting this to "V2 (experimental)" as the error message suggests does cure the ReaImGui issue but reintroduces scaling problems elsewhere in REAPER.
Rolling back to version 0.8.1 solves this issue, so it looks related to this change made in 0.8.2:
I'm not sure if this is blocking the "multi-monitor (recommended)" setting inadvertently or if there is a necessity for v2 to run newer ReaImGui.
Cheers!
I'm not sure what the matter, but it looks like some mesa capability leak: at least I've faces the same troubles with several modern OpenGL games. When ReaImGui is opened and docked — Reaper window starts to flicker and within any action it starts to be completely black.
Sometimes I see the same glitches on the main workstation with GTX970 on the board, but they are quite rare.
As I understand, the bug independent of the script language: I've faced issue with my own script and demo.lua
. Then I've started from working hello_world.eel
, by porting it to python and adding more and more complex widgets. Finally, I've found that the docker is an issue.
P.S. I've also tried to use some gaming tricks like overriding MESA_GL_VERSION_OVERRIDE=\d.\d
without success.
System info:
Reaper 6.47, SWS 2.12.1.3, ImGui 0.5.10
uname -a
Linux levitanus-laptop 5.11.0-49-generic #55-Ubuntu SMP Wed Jan 12 17:36:34 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
levitanus@levitanus-laptop:~$ lspci -k 00:00.0 Host bridge: Advanced Micro Devices, Inc. [AMD] Family 15h (Models 10h-1fh) Processor Root Complex
Subsystem: Advanced Micro Devices, Inc. [AMD] Family 15h (Models 10h-1fh) Processor Root Complex
00:01.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Richland [Radeon HD 8550G]
Subsystem: Acer Incorporated [ALI] Richland [Radeon HD 8550G]
Kernel driver in use: radeon
Kernel modules: radeon
00:01.1 Audio device: Advanced Micro Devices, Inc. [AMD/ATI] Trinity HDMI Audio Controller
Subsystem: Advanced Micro Devices, Inc. [AMD/ATI] Trinity HDMI Audio Controller
Kernel driver in use: snd_hda_intel
Kernel modules: snd_hda_intel
00:02.0 PCI bridge: Advanced Micro Devices, Inc. [AMD] Family 15h (Models 10h-1fh) Processor Root Port
Kernel driver in use: pcieport
00:10.0 USB controller: Advanced Micro Devices, Inc. [AMD] FCH USB XHCI Controller (rev 09)
Subsystem: Acer Incorporated [ALI] FCH USB XHCI Controller
Kernel driver in use: xhci_hcd
Kernel modules: xhci_pci
00:11.0 SATA controller: Advanced Micro Devices, Inc. [AMD] FCH SATA Controller [AHCI mode]
Subsystem: Acer Incorporated [ALI] FCH SATA Controller [AHCI mode]
Kernel driver in use: ahci
Kernel modules: ahci
00:12.0 USB controller: Advanced Micro Devices, Inc. [AMD] FCH USB OHCI Controller (rev 11)
Subsystem: Acer Incorporated [ALI] FCH USB OHCI Controller
Kernel driver in use: ohci-pci
00:12.2 USB controller: Advanced Micro Devices, Inc. [AMD] FCH USB EHCI Controller (rev 11)
Subsystem: Acer Incorporated [ALI] FCH USB EHCI Controller
Kernel driver in use: ehci-pci
00:13.0 USB controller: Advanced Micro Devices, Inc. [AMD] FCH USB OHCI Controller (rev 11)
Subsystem: Acer Incorporated [ALI] FCH USB OHCI Controller
Kernel driver in use: ohci-pci
00:13.2 USB controller: Advanced Micro Devices, Inc. [AMD] FCH USB EHCI Controller (rev 11)
Subsystem: Acer Incorporated [ALI] FCH USB EHCI Controller
Kernel driver in use: ehci-pci
00:14.0 SMBus: Advanced Micro Devices, Inc. [AMD] FCH SMBus Controller (rev 16)
Subsystem: Acer Incorporated [ALI] FCH SMBus Controller
Kernel modules: i2c_piix4, sp5100_tco
00:14.2 Audio device: Advanced Micro Devices, Inc. [AMD] FCH Azalia Controller (rev 01)
Subsystem: Acer Incorporated [ALI] FCH Azalia Controller
Kernel driver in use: snd_hda_intel
Kernel modules: snd_hda_intel
00:14.3 ISA bridge: Advanced Micro Devices, Inc. [AMD] FCH LPC Bridge (rev 11)
Subsystem: Acer Incorporated [ALI] FCH LPC Bridge
00:14.4 PCI bridge: Advanced Micro Devices, Inc. [AMD] FCH PCI Bridge (rev 40)
00:14.7 SD Host controller: Advanced Micro Devices, Inc. [AMD] FCH SD Flash Controller
Subsystem: Acer Incorporated [ALI] FCH SD Flash Controller
Kernel driver in use: sdhci-pci
Kernel modules: sdhci_pci
00:15.0 PCI bridge: Advanced Micro Devices, Inc. [AMD] Hudson PCI to PCI bridge (PCIE port 0)
Kernel driver in use: pcieport
00:15.1 PCI bridge: Advanced Micro Devices, Inc. [AMD] Hudson PCI to PCI bridge (PCIE port 1)
Kernel driver in use: pcieport
00:18.0 Host bridge: Advanced Micro Devices, Inc. [AMD] Family 15h (Models 10h-1fh) Processor Function 0
00:18.1 Host bridge: Advanced Micro Devices, Inc. [AMD] Family 15h (Models 10h-1fh) Processor Function 1
00:18.2 Host bridge: Advanced Micro Devices, Inc. [AMD] Family 15h (Models 10h-1fh) Processor Function 2
00:18.3 Host bridge: Advanced Micro Devices, Inc. [AMD] Family 15h (Models 10h-1fh) Processor Function 3
Kernel driver in use: k10temp
Kernel modules: k10temp
00:18.4 Host bridge: Advanced Micro Devices, Inc. [AMD] Family 15h (Models 10h-1fh) Processor Function 4
00:18.5 Host bridge: Advanced Micro Devices, Inc. [AMD] Family 15h (Models 10h-1fh) Processor Function 5
01:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Mars [Radeon HD 8670A/8670M/8750M / R7 M370]
Subsystem: Acer Incorporated [ALI] Mars [Radeon HD 8670A/8670M/8750M]
Kernel driver in use: radeon
Kernel modules: radeon, amdgpu
03:00.0 Ethernet controller: Qualcomm Atheros QCA8171 Gigabit Ethernet (rev 13)
Subsystem: Acer Incorporated [ALI] QCA8171 Gigabit Ethernet
Kernel driver in use: alx
Kernel modules: alx
03:00.1 SD Host controller: Qualcomm Atheros Device 3010 (rev 13)
Subsystem: Acer Incorporated [ALI] Device 080f
Kernel driver in use: sdhci-pci
Kernel modules: sdhci_pci
04:00.0 Network controller: Qualcomm Atheros AR9462 Wireless Network Adapter (rev 01)
Subsystem: Foxconn International, Inc. AR9462 Wireless Network Adapter
Kernel driver in use: ath9k
Kernel modules: ath9k
Hi,
First thank you so much for this amazing project.
I was playing around with the Python bindings. I just run the example https://github.com/cfillion/reaimgui/blob/master/examples/track_manager.py and came across this syntax error.
File "/Applications/Reaper/Scripts/ReaTeam Extensions/API/imgui_python.py", line 3045
def ImGui_MenuItem(ctx, label, shortcutInOptional = None, p_selectedInOut, enabledInOptional = None):
^
SyntaxError: non-default argument follows default argument
I have been able to fix my local imgui_python.py
module and it seems to work. If I knew how that module is generated I'd make a PR but unfortunately I have zero c++ knowledge.
Cheers
For Mac users this should be more efficient and fast
Could hello_world_legacy.eel
be also provided, which would work on older REAPER versions like 5.xx?
Do older REAPER versions simply do not expose in EEL2 runtime environment functions from extensions and it has been fixed only recently?
Can it be shown how extension_api()
should be used in this script?
BTW Great idea to bring Dear ImGui to REAPER!
Configuring my VS Code settings like this was the only way I could manage to get it compiled (though that's probably something on my end) 😅
Might be useful for other folks? When you configure like this, you can just click the "build" button from the CMake extension inside of VS Code 👍
Requires ms-vscode.cmake-tools
: https://marketplace.visualstudio.com/items?itemName=ms-vscode.cmake-tools
{
"cmake.sourceDirectory": "${workspaceFolder}",
"cmake.generator": "Ninja",
"cmake.environment": {
"VCPKG_ROOT": "C:\\Users\\rayga\\projects\\vcpkg",
"VCPKG_DEFAULT_TRIPLET": "x64-windows-static"
},
// Values passed here are equivalent to "-DCMAKE_" flags
"cmake.configureSettings": {
"CMAKE_BUILD_TYPE": "Debug",
"CMAKE_EXPORT_COMPILE_COMMANDS": 1,
"CMAKE_TOOLCHAIN_FILE": "C:\\Users\\rayga\\Projects\\vcpkg\\scripts\\buildsystems\\vcpkg.cmake"
}
}
As mentioned here, ReaImGui shows empty windows if the ui_scale is set to something different from 1.0.
Though I can work around this issue by leaving it at 1.0 and set UI scaling in the Reaper preferences, Reaper does not scale the fonts with that and sucks ATM when defining larger font sizes in libSwell.config. The only "good" way to have a properly scaled UI in Reaper appears to be setting ui_scale in reaper.ini.
This is how it looks on my system:
So I kindly request ReaImGui to make proper use of the ui_scale value.
In my environment, the mouse pointer target is off as shown here and does not work properly.
Screencast:
This seems to occur in a multi-display environment.
It did not occur in a single display laptop environment.
What should I do?
Environment:
Found this snippet from the imgui author that is fairly recent + undocumented in source -- seems like it could be useful in the exception handler in context.cpp
:
ocornut/imgui#1651 (comment)
ocornut/imgui@9712bff
catch (const imgui_error& e) {
char message[1024];
snprintf(message, sizeof(message), "ImGui assertion failed: %s\n", e.what());
ShowConsoleMsg(
message); // cannot use ReaScriptError unless called by a script
// no recovery, just destroy the context
m_window->endFrame();
m_fontAtlas->Locked = false; // don't assert again when destroying the atlas
m_inFrame = false; // don't call endFrame again from the destructor
delete this;
}
With the calls translated for ReaScript's console, I think it would be something like this?
const void RecoverFromUiContextErrors(bool verbose) {
ImGuiContext& g = *GImGui;
while (g.CurrentWindowStack.Size > 0) {
#ifdef IMGUI_HAS_TABLE
while (g.CurrentTable && (g.CurrentTable->OuterWindow == g.CurrentWindow ||
g.CurrentTable->InnerWindow == g.CurrentWindow)) {
if (verbose)
ShowConsoleMsg("Recovered from missing EndTable() call.");
ImGui::EndTable();
}
#endif
while (g.CurrentTabBar != NULL) {
if (verbose)
ShowConsoleMsg("Recovered from missing EndTabBar() call.");
ImGui::EndTabBar();
}
while (g.CurrentWindow->DC.TreeDepth > 0) {
if (verbose)
ShowConsoleMsg("Recovered from missing TreePop() call.");
ImGui::TreePop();
}
while (g.GroupStack.Size >
g.CurrentWindow->DC.StackSizesOnBegin.SizeOfGroupStack) {
if (verbose)
ShowConsoleMsg("Recovered from missing EndGroup() call.");
ImGui::EndGroup();
}
while (g.CurrentWindow->IDStack.Size > 1) {
if (verbose)
ShowConsoleMsg("Recovered from missing PopID() call.");
ImGui::PopID();
}
while (g.ColorStack.Size >
g.CurrentWindow->DC.StackSizesOnBegin.SizeOfColorStack) {
if (verbose) {
ShowConsoleMsg(
strcat((char*)"Recovered from missing PopStyleColor() for ",
ImGui::GetStyleColorName(g.ColorStack.back().Col)));
}
ImGui::PopStyleColor();
}
while (g.StyleVarStack.Size >
g.CurrentWindow->DC.StackSizesOnBegin.SizeOfStyleVarStack) {
if (verbose)
ShowConsoleMsg("Recovered from missing PopStyleVar().");
ImGui::PopStyleVar();
}
while (g.FocusScopeStack.Size >
g.CurrentWindow->DC.StackSizesOnBegin.SizeOfFocusScopeStack) {
if (verbose)
ShowConsoleMsg("Recovered from missing PopFocusScope().");
ImGui::PopFocusScope();
}
if (g.CurrentWindowStack.Size == 1) {
IM_ASSERT(g.CurrentWindow->IsFallbackWindow);
break;
}
if (g.CurrentWindow->Flags & ImGuiWindowFlags_ChildWindow) {
if (verbose)
ShowConsoleMsg("Recovered from missing EndChild() call.");
ImGui::EndChild();
} else {
if (verbose)
ShowConsoleMsg("Recovered from missing End() call.");
ImGui::End();
}
}
}
} // namespace ImGuiContextUtils
Hey,
I see you include WDL and reaper-sdk as git submodules. Any intentions to convert them into meson wraps? This way it would be very easy for other projects to use these sdks with the meson build system :-).
I noticed, that there are more use-cases, when I need different field format, rather the same. The example above demostrates the exact use-case for such things: the fields in color picker are differentely named.
I don't suffer from this now, but in the context of the issue, i feel it also important…
I'm working on rust bindings, and, generally, everything works. But several constants are still not loaded, while the most part of the API is.
I can not say, I suffer from this right now, but I'm interested, what can be matter. Loading happens after all user plugins are initialized.
Arch Linux x86-64
, ReaImGui 0.8.1
(I just grab the latest release for bindings generation)
Here is the list:
can not load constant: ImGui_ConfigFlags_NavNoCaptureKeyboard
Can not load constant: ImGui_ConfigVar_DockingNoSplit
Can not load constant: ImGui_ConfigVar_DockingTransparentPayload
Can not load constant: ImGui_ConfigVar_DockingWithShift
Can not load constant: ImGui_ConfigVar_DragClickToInputText
Can not load constant: ImGui_ConfigVar_Flags
Can not load constant: ImGui_ConfigVar_HoverDelayNormal
Can not load constant: ImGui_ConfigVar_HoverDelayShort
Can not load constant: ImGui_ConfigVar_InputTextCursorBlink
Can not load constant: ImGui_ConfigVar_InputTextEnterKeepActive
Can not load constant: ImGui_ConfigVar_InputTrickleEventQueue
Can not load constant: ImGui_ConfigVar_KeyRepeatDelay
Can not load constant: ImGui_ConfigVar_KeyRepeatRate
Can not load constant: ImGui_ConfigVar_MacOSXBehaviors
Can not load constant: ImGui_ConfigVar_MouseDoubleClickMaxDist
Can not load constant: ImGui_ConfigVar_MouseDoubleClickTime
Can not load constant: ImGui_ConfigVar_MouseDragThreshold
Can not load constant: ImGui_ConfigVar_ViewportsNoDecoration
Can not load constant: ImGui_ConfigVar_WindowsMoveFromTitleBarOnly
Can not load constant: ImGui_ConfigVar_WindowsResizeFromEdges
Can not load constant: ImGui_HoveredFlags_DelayNormal
Can not load constant: ImGui_HoveredFlags_DelayShort
Can not load constant: ImGui_HoveredFlags_NoNavOverride
Can not load constant: ImGui_HoveredFlags_NoSharedDelay
Can not load constant: ImGui_Key_0
Can not load constant: ImGui_Key_1
Can not load constant: ImGui_Key_2
Can not load constant: ImGui_Key_3
Can not load constant: ImGui_Key_4
Can not load constant: ImGui_Key_5
Can not load constant: ImGui_Key_6
Can not load constant: ImGui_Key_7
Can not load constant: ImGui_Key_8
Can not load constant: ImGui_Key_9
Can not load constant: ImGui_Key_A
Can not load constant: ImGui_Key_Apostrophe
Can not load constant: ImGui_Key_B
Can not load constant: ImGui_Key_Backslash
Can not load constant: ImGui_Key_Backspace
Can not load constant: ImGui_Key_C
Can not load constant: ImGui_Key_CapsLock
Can not load constant: ImGui_Key_Comma
Can not load constant: ImGui_Key_D
Can not load constant: ImGui_Key_Delete
Can not load constant: ImGui_Key_DownArrow
Can not load constant: ImGui_Key_E
Can not load constant: ImGui_Key_End
Can not load constant: ImGui_Key_Enter
Can not load constant: ImGui_Key_Equal
Can not load constant: ImGui_Key_Escape
Can not load constant: ImGui_Key_F
Can not load constant: ImGui_Key_F1
Can not load constant: ImGui_Key_F10
Can not load constant: ImGui_Key_F11
Can not load constant: ImGui_Key_F12
Can not load constant: ImGui_Key_F2
Can not load constant: ImGui_Key_F3
Can not load constant: ImGui_Key_F4
Can not load constant: ImGui_Key_F5
Can not load constant: ImGui_Key_F6
Can not load constant: ImGui_Key_F7
Can not load constant: ImGui_Key_F8
Can not load constant: ImGui_Key_F9
Can not load constant: ImGui_Key_G
Can not load constant: ImGui_Key_GraveAccent
Can not load constant: ImGui_Key_H
Can not load constant: ImGui_Key_Home
Can not load constant: ImGui_Key_I
Can not load constant: ImGui_Key_Insert
Can not load constant: ImGui_Key_J
Can not load constant: ImGui_Key_K
Can not load constant: ImGui_Key_Keypad0
Can not load constant: ImGui_Key_Keypad1
Can not load constant: ImGui_Key_Keypad2
Can not load constant: ImGui_Key_Keypad3
Can not load constant: ImGui_Key_Keypad4
Can not load constant: ImGui_Key_Keypad5
Can not load constant: ImGui_Key_Keypad6
Can not load constant: ImGui_Key_Keypad7
Can not load constant: ImGui_Key_Keypad8
Can not load constant: ImGui_Key_Keypad9
Can not load constant: ImGui_Key_KeypadAdd
Can not load constant: ImGui_Key_KeypadDecimal
Can not load constant: ImGui_Key_KeypadDivide
Can not load constant: ImGui_Key_KeypadEnter
Can not load constant: ImGui_Key_KeypadEqual
Can not load constant: ImGui_Key_KeypadMultiply
Can not load constant: ImGui_Key_KeypadSubtract
Can not load constant: ImGui_Key_L
Can not load constant: ImGui_Key_LeftAlt
Can not load constant: ImGui_Key_LeftArrow
Can not load constant: ImGui_Key_LeftBracket
Can not load constant: ImGui_Key_LeftCtrl
Can not load constant: ImGui_Key_LeftShift
Can not load constant: ImGui_Key_LeftSuper
Can not load constant: ImGui_Key_M
Can not load constant: ImGui_Key_Menu
Can not load constant: ImGui_Key_Minus
Can not load constant: ImGui_Key_N
Can not load constant: ImGui_Key_NumLock
Can not load constant: ImGui_Key_O
Can not load constant: ImGui_Key_P
Can not load constant: ImGui_Key_PageDown
Can not load constant: ImGui_Key_PageUp
Can not load constant: ImGui_Key_Pause
Can not load constant: ImGui_Key_Period
Can not load constant: ImGui_Key_PrintScreen
Can not load constant: ImGui_Key_Q
Can not load constant: ImGui_Key_R
Can not load constant: ImGui_Key_RightAlt
Can not load constant: ImGui_Key_RightArrow
Can not load constant: ImGui_Key_RightBracket
Can not load constant: ImGui_Key_RightCtrl
Can not load constant: ImGui_Key_RightShift
Can not load constant: ImGui_Key_RightSuper
Can not load constant: ImGui_Key_S
Can not load constant: ImGui_Key_ScrollLock
Can not load constant: ImGui_Key_Semicolon
Can not load constant: ImGui_Key_Slash
Can not load constant: ImGui_Key_Space
Can not load constant: ImGui_Key_T
Can not load constant: ImGui_Key_Tab
Can not load constant: ImGui_Key_U
Can not load constant: ImGui_Key_UpArrow
Can not load constant: ImGui_Key_V
Can not load constant: ImGui_Key_W
Can not load constant: ImGui_Key_X
Can not load constant: ImGui_Key_Y
Can not load constant: ImGui_Key_Z
Can not load constant: ImGui_Mod_Alt
Can not load constant: ImGui_Mod_Ctrl
Can not load constant: ImGui_Mod_None
Can not load constant: ImGui_Mod_Shift
Can not load constant: ImGui_Mod_Shortcut
Can not load constant: ImGui_Mod_Super
Can not load constant: ImGui_Key_MouseLeft
Can not load constant: ImGui_Key_MouseMiddle
Can not load constant: ImGui_Key_MouseRight
Can not load constant: ImGui_Key_MouseWheelX
Can not load constant: ImGui_Key_MouseWheelY
Can not load constant: ImGui_Key_MouseX1
Can not load constant: ImGui_Key_MouseX2
Can not load constant: ImGui_InputTextFlags_EscapeClearsAll
That is how I load them:
Key_MouseRight: unsafe {
match plugin_context
.GetFunc(c_str_macro::c_str!("ImGui_Key_MouseRight").as_ptr())
.is_null()
{
true => {
eprintln!("Can not load constant: {}", "ImGui_Key_MouseRight");
None
}
false => Some((ConstLoader {
f: std::mem::transmute(
plugin_context
.GetFunc(c_str_macro::c_str!("ImGui_Key_MouseRight").as_ptr()),
),
}
.f)()),
}
},
ConstLoader
is just a container for C-function type:
struct ConstLoader {
f: extern "C" fn() -> i32,
}
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.