Skip to content

Commit 7b9f143

Browse files
committed
Automatically dereference struct fields
This is an experiment to see if we can avoid having to call unsafe_load() all the time.
1 parent 41313a4 commit 7b9f143

26 files changed

+15779
-773
lines changed

demo/demo.jl

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ function official_demo(; engine=nothing)
1515

1616
# Enable docking and multi-viewport
1717
io = CImGui.GetIO()
18-
io.ConfigFlags = unsafe_load(io.ConfigFlags) | CImGui.ImGuiConfigFlags_DockingEnable
19-
io.ConfigFlags = unsafe_load(io.ConfigFlags) | CImGui.ImGuiConfigFlags_ViewportsEnable
18+
io.ConfigFlags = io.ConfigFlags | CImGui.ImGuiConfigFlags_DockingEnable
19+
io.ConfigFlags = io.ConfigFlags | CImGui.ImGuiConfigFlags_ViewportsEnable
2020

2121
# Setup Dear ImGui style
2222
CImGui.StyleColorsDark()
@@ -30,7 +30,7 @@ function official_demo(; engine=nothing)
3030
# - The fonts will be rasterized at a given size (w/ oversampling) and stored into a texture when calling `CImGui.Build()`/`GetTexDataAsXXXX()``, which `ImGui_ImplXXXX_NewFrame` below will call.
3131
# - Read 'fonts/README.txt' for more instructions and details.
3232
fonts_dir = joinpath(@__DIR__, "..", "fonts")
33-
fonts = unsafe_load(CImGui.GetIO().Fonts)
33+
fonts = CImGui.GetIO().Fonts
3434
# default_font = CImGui.AddFontDefault(fonts)
3535
# CImGui.AddFontFromFileTTF(fonts, joinpath(fonts_dir, "Cousine-Regular.ttf"), 15)
3636
# CImGui.AddFontFromFileTTF(fonts, joinpath(fonts_dir, "DroidSans.ttf"), 16)
@@ -65,7 +65,7 @@ function official_demo(; engine=nothing)
6565

6666
CImGui.SameLine()
6767
CImGui.Text("counter = $counter")
68-
CImGui.Text(@sprintf("Application average %.3f ms/frame (%.1f FPS)", 1000 / unsafe_load(CImGui.GetIO().Framerate), unsafe_load(CImGui.GetIO().Framerate)))
68+
CImGui.Text(@sprintf("Application average %.3f ms/frame (%.1f FPS)", 1000 / CImGui.GetIO().Framerate, CImGui.GetIO().Framerate))
6969

7070
CImGui.End()
7171
end

examples/app_constrained_resize.jl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,14 @@ Create a window with custom resize constraints.
99
"""
1010
global function ShowExampleAppConstrainedResize(p_open::Ref{Bool})
1111
function Square(data::Ptr{ImGuiSizeCallbackData})::Cvoid
12-
desired_size = unsafe_load(data.DesiredSize)
12+
desired_size = data.DesiredSize
1313
max_size = max(desired_size.x, desired_size.y)
1414
data.DesiredSize = ImVec2(max_size, max_size)
1515
end
1616

1717
function Step(data::Ptr{ImGuiSizeCallbackData})::Cvoid
18-
desired_size = data.DesiredSize |> unsafe_load
19-
step::Cfloat = data.UserData |> unsafe_load |> Int
18+
desired_size = data.DesiredSize
19+
step::Cfloat = data.UserData |> Int
2020
size_x = trunc(desired_size.x / step + 0.5) * step
2121
size_y = trunc(desired_size.y / step + 0.5) * step
2222
data.DesiredSize = ImVec2(size_x, size_y)

examples/app_custom_rendering.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,8 +81,8 @@ function ShowExampleAppCustomRendering(p_open::Ref{Bool})
8181

8282
adding_preview = false
8383
CImGui.InvisibleButton("canvas", canvas_size)
84-
mouse_x = unsafe_load(CImGui.GetIO().MousePos.x)
85-
mouse_y = unsafe_load(CImGui.GetIO().MousePos.y)
84+
mouse_x = CImGui.GetIO().MousePos.x
85+
mouse_y = CImGui.GetIO().MousePos.y
8686
mouse_pos_in_canvas = ImVec2(mouse_x - canvas_pos.x, mouse_y - canvas_pos.y)
8787
if adding_line
8888
adding_preview = true

examples/app_simple_overlay.jl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@ function ShowExampleAppSimpleOverlay(p_open::Ref{Bool})
1313
io = CImGui.GetIO()
1414
@cstatic corner=Cint(0) begin
1515
if corner != -1
16-
window_pos_x = corner & 1 != 0 ? unsafe_load(io.DisplaySize).x - DISTANCE : DISTANCE
17-
window_pos_y = corner & 2 != 0 ? unsafe_load(io.DisplaySize).y - DISTANCE : DISTANCE
16+
window_pos_x = corner & 1 != 0 ? io.DisplaySize.x - DISTANCE : DISTANCE
17+
window_pos_y = corner & 2 != 0 ? io.DisplaySize.y - DISTANCE : DISTANCE
1818
window_pos = (window_pos_x, window_pos_y)
1919
window_pos_pivot = (corner & 1 != 0 ? 1.0 : 0.0, corner & 2 != 0 ? 1.0 : 0.0)
2020
CImGui.SetNextWindowPos(window_pos, CImGui.ImGuiCond_Always, window_pos_pivot)
@@ -28,7 +28,7 @@ function ShowExampleAppSimpleOverlay(p_open::Ref{Bool})
2828
CImGui.Text("Simple overlay\n in the corner of the screen.\n (right-click to change position)")
2929
CImGui.Separator()
3030
if CImGui.IsMousePosValid()
31-
CImGui.Text(@sprintf("Mouse Position: (%.1f,%.1f)", unsafe_load(io.MousePos).x, unsafe_load(io.MousePos).y))
31+
CImGui.Text(@sprintf("Mouse Position: (%.1f,%.1f)", io.MousePos.x, io.MousePos.y))
3232
else
3333
CImGui.Text("Mouse Position: <invalid>")
3434
end

examples/demo.jl

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ function julia_demo(; engine=nothing)
1515

1616
# enable docking and multi-viewport
1717
io = CImGui.GetIO()
18-
io.ConfigFlags = unsafe_load(io.ConfigFlags) | CImGui.ImGuiConfigFlags_DockingEnable
19-
io.ConfigFlags = unsafe_load(io.ConfigFlags) | CImGui.ImGuiConfigFlags_ViewportsEnable
18+
io.ConfigFlags = io.ConfigFlags | CImGui.ImGuiConfigFlags_DockingEnable
19+
io.ConfigFlags = io.ConfigFlags | CImGui.ImGuiConfigFlags_ViewportsEnable
2020

2121
# setup Dear ImGui style
2222
CImGui.StyleColorsDark()
@@ -25,7 +25,7 @@ function julia_demo(; engine=nothing)
2525

2626
# When viewports are enabled we tweak WindowRounding/WindowBg so platform windows can look identical to regular ones.
2727
style = Ptr{ImGuiStyle}(CImGui.GetStyle())
28-
if unsafe_load(io.ConfigFlags) & ImGuiConfigFlags_ViewportsEnable == ImGuiConfigFlags_ViewportsEnable
28+
if io.ConfigFlags & ImGuiConfigFlags_ViewportsEnable == ImGuiConfigFlags_ViewportsEnable
2929
style.WindowRounding = 5.0f0
3030
col = CImGui.c_get(style.Colors, CImGui.ImGuiCol_WindowBg)
3131
CImGui.c_set!(style.Colors, CImGui.ImGuiCol_WindowBg, ImVec4(col.x, col.y, col.z, 1.0f0))
@@ -38,7 +38,7 @@ function julia_demo(; engine=nothing)
3838
# - The fonts will be rasterized at a given size (w/ oversampling) and stored into a texture when calling `CImGui.Build()`/`GetTexDataAsXXXX()``, which `ImGui_ImplXXXX_NewFrame` below will call.
3939
# - Read 'fonts/README.txt' for more instructions and details.
4040
fonts_dir = joinpath(@__DIR__, "..", "fonts")
41-
fonts = unsafe_load(CImGui.GetIO().Fonts)
41+
fonts = CImGui.GetIO().Fonts
4242
# default_font = CImGui.AddFontDefault(fonts)
4343
# CImGui.AddFontFromFileTTF(fonts, joinpath(fonts_dir, "Cousine-Regular.ttf"), 15)
4444
# CImGui.AddFontFromFileTTF(fonts, joinpath(fonts_dir, "DroidSans.ttf"), 16)

examples/demo_helper.jl

Lines changed: 28 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ function ShowUserGuide()
2323
CImGui.BulletText("Click and drag on any empty space to move window.")
2424
CImGui.BulletText("TAB/SHIFT+TAB to cycle through keyboard editable fields.")
2525
CImGui.BulletText("CTRL+Click on a slider or drag box to input value as text.")
26-
unsafe_load(CImGui.GetIO().FontAllowUserScaling) && CImGui.BulletText("CTRL+Mouse Wheel to zoom window contents.")
26+
CImGui.GetIO().FontAllowUserScaling && CImGui.BulletText("CTRL+Mouse Wheel to zoom window contents.")
2727
CImGui.BulletText("Mouse Wheel to scroll.")
2828
CImGui.BulletText("While editing text:\n")
2929
CImGui.Indent()
@@ -63,43 +63,43 @@ function ShowAboutWindow(p_open::Ref{Bool})
6363
CImGui.Separator()
6464
CImGui.Text("sizeof(size_t): $(sizeof(Csize_t)), sizeof(ImDrawIdx): $(sizeof(CImGui.ImDrawIdx)), sizeof(ImDrawVert): $(sizeof(CImGui.ImDrawVert))")
6565
CImGui.Separator()
66-
CImGui.Text(@sprintf("io.BackendPlatformName: %s", unsafe_load(io.BackendPlatformName) != C_NULL ? unsafe_string(unsafe_load(io.BackendPlatformName)) : "NULL"))
67-
CImGui.Text(@sprintf("io.BackendRendererName: %s", unsafe_load(io.BackendRendererName) != C_NULL ? unsafe_string(unsafe_load(io.BackendRendererName)) : "NULL"))
68-
CImGui.Text(@sprintf("io.ConfigFlags: 0x%08X", unsafe_load(io.ConfigFlags)))
69-
unsafe_load(io.ConfigFlags) & CImGui.ImGuiConfigFlags_NavEnableKeyboard != 0 && CImGui.Text(" NavEnableKeyboard")
70-
unsafe_load(io.ConfigFlags) & CImGui.ImGuiConfigFlags_NavEnableGamepad != 0 && CImGui.Text(" NavEnableGamepad")
71-
unsafe_load(io.ConfigFlags) & CImGui.ImGuiConfigFlags_NavEnableSetMousePos != 0 && CImGui.Text(" NavEnableSetMousePos")
72-
unsafe_load(io.ConfigFlags) & CImGui.ImGuiConfigFlags_NavNoCaptureKeyboard != 0 && CImGui.Text(" NavNoCaptureKeyboard")
73-
unsafe_load(io.ConfigFlags) & CImGui.ImGuiConfigFlags_NoMouse != 0 && CImGui.Text(" NoMouse")
74-
unsafe_load(io.ConfigFlags) & CImGui.ImGuiConfigFlags_NoMouseCursorChange != 0 && CImGui.Text(" NoMouseCursorChange")
75-
unsafe_load(io.MouseDrawCursor) && CImGui.Text("io.MouseDrawCursor")
76-
unsafe_load(io.ConfigMacOSXBehaviors) && CImGui.Text("io.ConfigMacOSXBehaviors")
77-
unsafe_load(io.ConfigInputTextCursorBlink) && CImGui.Text("io.ConfigInputTextCursorBlink")
78-
unsafe_load(io.ConfigWindowsResizeFromEdges) && CImGui.Text("io.ConfigWindowsResizeFromEdges")
79-
unsafe_load(io.ConfigWindowsMoveFromTitleBarOnly) && CImGui.Text("io.ConfigWindowsMoveFromTitleBarOnly")
80-
CImGui.Text(@sprintf("io.BackendFlags: 0x%08X", unsafe_load(io.BackendFlags)))
81-
unsafe_load(io.BackendFlags) & ImGuiBackendFlags_HasGamepad != 0 && CImGui.Text(" HasGamepad")
82-
unsafe_load(io.BackendFlags) & ImGuiBackendFlags_HasMouseCursors != 0 && CImGui.Text(" HasMouseCursors")
83-
unsafe_load(io.BackendFlags) & ImGuiBackendFlags_HasSetMousePos != 0 && CImGui.Text(" HasSetMousePos")
66+
CImGui.Text(@sprintf("io.BackendPlatformName: %s", io.BackendPlatformName != C_NULL ? unsafe_string(io.BackendPlatformName) : "NULL"))
67+
CImGui.Text(@sprintf("io.BackendRendererName: %s", io.BackendRendererName != C_NULL ? unsafe_string(io.BackendRendererName) : "NULL"))
68+
CImGui.Text(@sprintf("io.ConfigFlags: 0x%08X", io.ConfigFlags))
69+
io.ConfigFlags & CImGui.ImGuiConfigFlags_NavEnableKeyboard != 0 && CImGui.Text(" NavEnableKeyboard")
70+
io.ConfigFlags & CImGui.ImGuiConfigFlags_NavEnableGamepad != 0 && CImGui.Text(" NavEnableGamepad")
71+
io.ConfigFlags & CImGui.ImGuiConfigFlags_NavEnableSetMousePos != 0 && CImGui.Text(" NavEnableSetMousePos")
72+
io.ConfigFlags & CImGui.ImGuiConfigFlags_NavNoCaptureKeyboard != 0 && CImGui.Text(" NavNoCaptureKeyboard")
73+
io.ConfigFlags & CImGui.ImGuiConfigFlags_NoMouse != 0 && CImGui.Text(" NoMouse")
74+
io.ConfigFlags & CImGui.ImGuiConfigFlags_NoMouseCursorChange != 0 && CImGui.Text(" NoMouseCursorChange")
75+
io.MouseDrawCursor && CImGui.Text("io.MouseDrawCursor")
76+
io.ConfigMacOSXBehaviors && CImGui.Text("io.ConfigMacOSXBehaviors")
77+
io.ConfigInputTextCursorBlink && CImGui.Text("io.ConfigInputTextCursorBlink")
78+
io.ConfigWindowsResizeFromEdges && CImGui.Text("io.ConfigWindowsResizeFromEdges")
79+
io.ConfigWindowsMoveFromTitleBarOnly && CImGui.Text("io.ConfigWindowsMoveFromTitleBarOnly")
80+
CImGui.Text(@sprintf("io.BackendFlags: 0x%08X", io.BackendFlags))
81+
io.BackendFlags & ImGuiBackendFlags_HasGamepad != 0 && CImGui.Text(" HasGamepad")
82+
io.BackendFlags & ImGuiBackendFlags_HasMouseCursors != 0 && CImGui.Text(" HasMouseCursors")
83+
io.BackendFlags & ImGuiBackendFlags_HasSetMousePos != 0 && CImGui.Text(" HasSetMousePos")
8484
CImGui.Separator()
8585
# CImGui.Text("io.Fonts: %d fonts, Flags: 0x%08X, TexSize: %d,%d", io.Fonts->Fonts.Size, io.Fonts->Flags, io.Fonts->TexWidth, io.Fonts->TexHeight);
86-
CImGui.Text(@sprintf("io.DisplaySize: %.2f,%.2f", unsafe_load(io.DisplaySize).x, unsafe_load(io.DisplaySize).y))
87-
CImGui.Text(@sprintf("io.DisplayFramebufferScale: %.2f,%.2f", unsafe_load(io.DisplayFramebufferScale).x, unsafe_load(io.DisplayFramebufferScale).y))
86+
CImGui.Text(@sprintf("io.DisplaySize: %.2f,%.2f", io.DisplaySize.x, io.DisplaySize.y))
87+
CImGui.Text(@sprintf("io.DisplayFramebufferScale: %.2f,%.2f", io.DisplayFramebufferScale.x, io.DisplayFramebufferScale.y))
8888
CImGui.Separator()
8989

90-
window_padding = unsafe_load(style.WindowPadding)
90+
window_padding = style.WindowPadding
9191
CImGui.Text(@sprintf("style.WindowPadding: %.2f,%.2f", window_padding.x, window_padding.y))
92-
CImGui.Text(@sprintf("style.WindowBorderSize: %.2f", unsafe_load(style.WindowBorderSize)))
92+
CImGui.Text(@sprintf("style.WindowBorderSize: %.2f", style.WindowBorderSize))
9393

94-
frame_padding = unsafe_load(style.FramePadding)
94+
frame_padding = style.FramePadding
9595
CImGui.Text(@sprintf("style.FramePadding: %.2f,%.2f", frame_padding.x, frame_padding.y))
96-
CImGui.Text(@sprintf("style.FrameRounding: %.2f", unsafe_load(style.FrameRounding)))
97-
CImGui.Text(@sprintf("style.FrameBorderSize: %.2f", unsafe_load(style.FrameBorderSize)))
96+
CImGui.Text(@sprintf("style.FrameRounding: %.2f", style.FrameRounding))
97+
CImGui.Text(@sprintf("style.FrameBorderSize: %.2f", style.FrameBorderSize))
9898

99-
item_spacing = unsafe_load(style.ItemSpacing)
99+
item_spacing = style.ItemSpacing
100100
CImGui.Text(@sprintf("style.ItemSpacing: %.2f,%.2f", item_spacing.x, item_spacing.y))
101101

102-
item_inner_spacing = unsafe_load(style.ItemInnerSpacing)
102+
item_inner_spacing = style.ItemInnerSpacing
103103
CImGui.Text(@sprintf("style.ItemInnerSpacing: %.2f,%.2f", item_inner_spacing.x, item_inner_spacing.y))
104104

105105
copy_to_clipboard && CImGui.LogFinish()

examples/demo_misc.jl

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -24,19 +24,19 @@ function ShowDemoWindowMisc()
2424
if CImGui.CollapsingHeader("Inputs, Navigation & Focus")
2525
io = CImGui.GetIO()
2626

27-
CImGui.Text("WantCaptureMouse: $(unsafe_load(io.WantCaptureMouse))")
28-
CImGui.Text("WantCaptureKeyboard: $(unsafe_load(io.WantCaptureKeyboard))")
29-
CImGui.Text("WantTextInput: $(unsafe_load(io.WantTextInput))")
30-
CImGui.Text("WantSetMousePos: $(unsafe_load(io.WantSetMousePos))")
31-
CImGui.Text("NavActive: $(unsafe_load(io.NavActive)), NavVisible: $(unsafe_load(io.NavVisible))")
27+
CImGui.Text("WantCaptureMouse: $(io.WantCaptureMouse)")
28+
CImGui.Text("WantCaptureKeyboard: $(io.WantCaptureKeyboard)")
29+
CImGui.Text("WantTextInput: $(io.WantTextInput)")
30+
CImGui.Text("WantSetMousePos: $(io.WantSetMousePos)")
31+
CImGui.Text("NavActive: $(io.NavActive), NavVisible: $(io.NavVisible)")
3232

3333
if CImGui.TreeNode("Keyboard, Mouse & Navigation State")
3434
if CImGui.IsMousePosValid()
35-
CImGui.Text("Mouse pos: ($(unsafe_load(io.MousePos).x), $(unsafe_load(io.MousePos).y))")
35+
CImGui.Text("Mouse pos: ($(io.MousePos.x), $(io.MousePos.y))")
3636
else
3737
CImGui.Text("Mouse pos: <INVALID>")
3838
end
39-
CImGui.Text("Mouse delta: ($(unsafe_load(io.MouseDelta).x), $(unsafe_load(io.MouseDelta).y))")
39+
CImGui.Text("Mouse delta: ($(io.MouseDelta.x), $(io.MouseDelta.y))")
4040
CImGui.Text("Mouse down:")
4141
for i = 0:4
4242
dur = CImGui.c_get(io.MouseDownDuration, i)
@@ -62,13 +62,13 @@ function ShowDemoWindowMisc()
6262
CImGui.SameLine()
6363
CImGui.Text("b$i")
6464
end
65-
CImGui.Text(@sprintf("Mouse wheel: %.1f", unsafe_load(io.MouseWheel)))
65+
CImGui.Text(@sprintf("Mouse wheel: %.1f", io.MouseWheel))
6666

6767
key_range = CImGui.ImGuiKey_NamedKey_BEGIN:CImGui.ImGuiKey_NamedKey_END - 1
6868

6969
CImGui.Text("Keys down:")
7070
for i = key_range
71-
key_data = unsafe_load(CImGui.GetKeyData(CImGui.ImGuiKey(i)))
71+
key_data = CImGui.GetKeyData(CImGui.ImGuiKey(i))
7272
dur = key_data.DownDuration
7373
dur 0 || continue
7474
CImGui.SameLine()
@@ -87,7 +87,7 @@ function ShowDemoWindowMisc()
8787
CImGui.SameLine()
8888
CImGui.Text("$i")
8989
end
90-
CImGui.Text(@sprintf("Keys mods: %s%s%s%s", unsafe_load(io.KeyCtrl) ? "CTRL " : "", unsafe_load(io.KeyShift) ? "SHIFT " : "", unsafe_load(io.KeyAlt) ? "ALT " : "", unsafe_load(io.KeySuper) ? "SUPER " : ""))
90+
CImGui.Text(@sprintf("Keys mods: %s%s%s%s", io.KeyCtrl ? "CTRL " : "", io.KeyShift ? "SHIFT " : "", io.KeyAlt ? "ALT " : "", io.KeySuper ? "SUPER " : ""))
9191

9292
navinput_range = CImGui.ImGuiKey_GamepadStart:CImGui.ImGuiKey_GamepadRStickDown
9393

@@ -99,15 +99,15 @@ function ShowDemoWindowMisc()
9999
end
100100
CImGui.Text("NavInputs pressed:")
101101
for i = navinput_range
102-
key_data = unsafe_load(CImGui.GetKeyData(CImGui.ImGuiKey(i)))
102+
key_data = CImGui.GetKeyData(CImGui.ImGuiKey(i))
103103
dur = key_data.DownDuration
104104
dur == 0.0 || continue
105105
CImGui.SameLine()
106106
CImGui.Text("[$i]")
107107
end
108108
CImGui.Text("NavInputs duration:")
109109
for i = navinput_range
110-
key_data = unsafe_load(CImGui.GetKeyData(CImGui.ImGuiKey(i)))
110+
key_data = CImGui.GetKeyData(CImGui.ImGuiKey(i))
111111
dur = key_data.DownDuration
112112
dur 0.0 || continue
113113
CImGui.SameLine()
@@ -199,7 +199,7 @@ function ShowDemoWindowMisc()
199199
# you can request a lower or higher threshold using the second parameter of IsMouseDragging() and GetMouseDragDelta()
200200
value_raw = CImGui.GetMouseDragDelta(0, 0.0)
201201
value_with_lock_threshold = CImGui.GetMouseDragDelta(0)
202-
mouse_delta = unsafe_load(io.MouseDelta)
202+
mouse_delta = io.MouseDelta
203203
CImGui.SameLine()
204204
txt = @sprintf "Raw (%.1f, %.1f), WithLockThresold (%.1f, %.1f), MouseDelta (%.1f, %.1f)" value_raw.x value_raw.y value_with_lock_threshold.x value_with_lock_threshold.y mouse_delta.x mouse_delta.y
205205
CImGui.Text(txt)

0 commit comments

Comments
 (0)