@@ -18,7 +18,7 @@ function show_animation_window(frame_name, window_info, my_tex_id, my_tex_w, my_
18
18
# UI elements
19
19
# grid step int input as slider with range. Min = 1, Max = 64
20
20
CImGui. SliderInt (" Grid step" , window_info[][" grid_step" ], 1 , 64 , " %d" )
21
- CImGui. Text (" Mouse Left: drag to add square,\n Mouse Right: drag to scroll, click for context menu.\n CTRL+Mouse Wheel: zoom" )
21
+ # CImGui.Text("Mouse Left: drag to add square,\nMouse Right: drag to scroll, click for context menu.\nCTRL+Mouse Wheel: zoom")
22
22
selectedPoint1 = length (window_info[][" points" ][]) > 0 ? window_info[][" points" ][][end - 1 ] : ImVec2 (0 ,0 )
23
23
selectedPoint2 = length (window_info[][" points" ][]) > 0 ? window_info[][" points" ][][end ] : ImVec2 (0 ,0 )
24
24
CImGui. Text (" Current selection: x:$(selectedPoint1. x) ,y:$(selectedPoint1. y) w:$(selectedPoint2. x - selectedPoint1. x) ,h:$(selectedPoint2. y - selectedPoint1. y) " )
@@ -47,19 +47,33 @@ function show_animation_window(frame_name, window_info, my_tex_id, my_tex_w, my_
47
47
window_info[][" scrolling" ][] = ImVec2 (max (window_info[][" scrolling" ][]. x, - canvas_max. x), max (window_info[][" scrolling" ][]. y, - canvas_max. y))
48
48
origin = ImVec2 (min (0 , 0 + window_info[][" scrolling" ][]. x), min (0 , 0 + window_info[][" scrolling" ][]. y)) # Lock scrolled origin
49
49
mouse_pos_in_canvas = ImVec2 (unsafe_load (io. MousePos). x - canvas_p0. x, unsafe_load (io. MousePos). y - canvas_p0. y)
50
+ mouse_pos_in_canvas_zoom_adjusted = ImVec2 (floor (mouse_pos_in_canvas. x / window_info[][" zoom_level" ][]), floor (mouse_pos_in_canvas. y / window_info[][" zoom_level" ][]))
51
+ CImGui. Text (" Zoom level: $(window_info[][" zoom_level" ][]) " )
52
+ CImGui. Text (" origin: $(origin. x) , $(origin. y) " )
53
+ CImGui. Text (" Origin divided by zoom: $(origin. x / window_info[][" zoom_level" ][]) , $(origin. y / window_info[][" zoom_level" ][]) " )
54
+ CImGui. Text (" Origin * zoom: $(origin. x * window_info[][" zoom_level" ][]) , $(origin. y * window_info[][" zoom_level" ][]) " )
50
55
CImGui. Text (" Mouse Position: $(mouse_pos_in_canvas. x) , $(mouse_pos_in_canvas. y) " )
51
56
CImGui. Text (" Mouse Pixel: $(floor (mouse_pos_in_canvas. x / window_info[][" zoom_level" ][])) , $(floor (mouse_pos_in_canvas. y / window_info[][" zoom_level" ][])) " )
52
-
53
- mouse_pos_in_canvas_zoom_adjusted = ImVec2 ( floor (mouse_pos_in_canvas . x / window_info[][ " zoom_level " ][] ), floor (mouse_pos_in_canvas . y / window_info[][ " zoom_level " ][]) )
57
+ CImGui . Text ( " Mouse position in canvas adj: $(mouse_pos_in_canvas_zoom_adjusted . x) , $(mouse_pos_in_canvas_zoom_adjusted . y) " )
58
+ CImGui . Text ( " Mouse position in canvas + origin: $(origin . x + mouse_pos_in_canvas_zoom_adjusted . x ) , $(origin . y + mouse_pos_in_canvas_zoom_adjusted . y) " )
54
59
# rounded = ImVec2(round(mouse_pos_in_canvas_zoom_adjusted.x/ window_info[]["zoom_level"][]) * window_info[]["zoom_level"][], round(mouse_pos_in_canvas_zoom_adjusted.y/ window_info[]["zoom_level"][]) * window_info[]["zoom_level"][])
55
60
# Add first and second point
56
61
if is_hovered && ! window_info[][" adding_line" ][] && CImGui. IsMouseClicked (CImGui. ImGuiMouseButton_Left)
57
- push! (window_info[][" points" ][], mouse_pos_in_canvas_zoom_adjusted)
58
- push! (window_info[][" points" ][], mouse_pos_in_canvas_zoom_adjusted)
62
+ if unsafe_load (io. KeyShift)
63
+ push! (window_info[][" points" ][], ImVec2 (mouse_pos_in_canvas_zoom_adjusted. x - round (origin. x* window_info[][" zoom_level" ][]), mouse_pos_in_canvas_zoom_adjusted. y - round (origin. y* window_info[][" zoom_level" ][])))
64
+ push! (window_info[][" points" ][], ImVec2 (mouse_pos_in_canvas_zoom_adjusted. x - round (origin. x* window_info[][" zoom_level" ][]), mouse_pos_in_canvas_zoom_adjusted. y - round (origin. y* window_info[][" zoom_level" ][])))
65
+ else
66
+ push! (window_info[][" points" ][], ImVec2 (mouse_pos_in_canvas_zoom_adjusted. x, mouse_pos_in_canvas_zoom_adjusted. y))
67
+ push! (window_info[][" points" ][], ImVec2 (mouse_pos_in_canvas_zoom_adjusted. x, mouse_pos_in_canvas_zoom_adjusted. y))
68
+ end
59
69
window_info[][" adding_line" ][] = true
60
70
end
61
71
if window_info[][" adding_line" ][]
62
- window_info[][" points" ][][end ] = mouse_pos_in_canvas_zoom_adjusted
72
+ if unsafe_load (io. KeyShift)
73
+ window_info[][" points" ][][end ] = ImVec2 (mouse_pos_in_canvas_zoom_adjusted. x - round (origin. x* window_info[][" zoom_level" ][]), mouse_pos_in_canvas_zoom_adjusted. y - round (origin. y* window_info[][" zoom_level" ][]))
74
+ else
75
+ window_info[][" points" ][][end ] = ImVec2 (mouse_pos_in_canvas_zoom_adjusted. x, mouse_pos_in_canvas_zoom_adjusted. y)
76
+ end
63
77
if is_hovered && ! CImGui. IsMouseDown (CImGui. ImGuiMouseButton_Left)
64
78
window_info[][" points" ][] = [window_info[][" points" ][][end - 1 ], window_info[][" points" ][][end ]] # only keep last two points
65
79
window_info[][" adding_line" ][] = false
@@ -74,30 +88,21 @@ function show_animation_window(frame_name, window_info, my_tex_id, my_tex_w, my_
74
88
75
89
# Zoom
76
90
if is_hovered && unsafe_load (io. KeyCtrl)
77
- window_info[][" zoom_level" ][] += unsafe_load (io. MouseWheel) * 4.0 # * 0.10
78
- window_info[][" zoom_level" ][] = clamp (window_info[][" zoom_level" ][], 1.0 , 50.0 )
91
+ if unsafe_load (io. MouseWheel) == 1.0
92
+ window_info[][" zoom_level" ][] = clamp (window_info[][" zoom_level" ][] * 4 , 1.0 , 50.0 )
93
+ elseif unsafe_load (io. MouseWheel) == - 1.0
94
+ window_info[][" zoom_level" ][] = clamp (window_info[][" zoom_level" ][] / 4 , 1.0 , 50.0 )
95
+ end
79
96
end
80
97
81
98
# Context menu
82
99
drag_delta = CImGui. GetMouseDragDelta (CImGui. ImGuiMouseButton_Right)
83
100
if is_hovered && CImGui. IsMouseReleased (CImGui. ImGuiMouseButton_Right) && drag_delta. x == 0.0 && drag_delta. y == 0.0
84
- CImGui. OpenPopupOnItemClick (" context" )
85
- end
86
- if CImGui. BeginPopup (" context" )
87
- if window_info[][" adding_line" ][]
88
- resize! (window_info[][" points" ][], length (window_info[][" points" ][]) - 2 )
89
- end
90
- window_info[][" adding_line" ][] = false
91
- if CImGui. MenuItem (" Remove one" , " " , false , length (window_info[][" points" ][]) > 0 )
92
- resize! (window_info[][" points" ][], length (window_info[][" points" ][]) - 2 )
93
- end
94
- if CImGui. MenuItem (" Remove all" , " " , false , length (window_info[][" points" ][]) > 0 )
95
- empty! (window_info[][" points" ][])
96
- end
97
- CImGui. EndPopup ()
101
+ # TODO : CImGui.OpenPopupOnItemClick("context-1")
102
+ empty! (window_info[][" points" ][])
98
103
end
99
104
100
- # Draw grid and lines
105
+ # Draw grid and lines -- Keep all draw calls between PushClipRect and PopClipRect
101
106
CImGui. PushClipRect (draw_list, canvas_p0, canvas_p1, true )
102
107
GRID_STEP = window_info[][" grid_step" ][] * window_info[][" zoom_level" ][]
103
108
@@ -107,18 +112,29 @@ function show_animation_window(frame_name, window_info, my_tex_id, my_tex_w, my_
107
112
for y in 0 : GRID_STEP: canvas_sz. y* 10 # TODO : 10 is arbitrary
108
113
CImGui. AddLine (draw_list, ImVec2 (canvas_p0. x, origin. y + canvas_p0. y + y), ImVec2 (canvas_p1. x, origin. y + canvas_p0. y + y), IM_COL32 (200 , 200 , 200 , 40 ))
109
114
end
110
- CImGui. PopClipRect (draw_list)
111
-
112
- CImGui. AddImage (draw_list, my_tex_id, ImVec2 (origin. x + canvas_p0. x, origin. y + canvas_p0. y), ImVec2 (origin. x + (my_tex_w * window_info[][" zoom_level" ][]) + canvas_p0. x, origin. y + (my_tex_h * window_info[][" zoom_level" ][]) + canvas_p0. y), ImVec2 (0 ,0 ), ImVec2 (1 ,1 ), IM_COL32 (255 ,255 ,255 ,255 ))
113
-
114
- # Draw squares with add rect
115
- for n in 1 : 2 : length (window_info[][" points" ][])- 1
116
- p1 = ImVec2 (origin. x + canvas_p0. x + (window_info[][" points" ][][n]. x * window_info[][" zoom_level" ][]), origin. y + canvas_p0. y + (window_info[][" points" ][][n]. y * window_info[][" zoom_level" ][]))
117
- p2 = ImVec2 (origin. x + canvas_p0. x + (window_info[][" points" ][][n+ 1 ]. x * window_info[][" zoom_level" ][]), origin. y + canvas_p0. y + (window_info[][" points" ][][n+ 1 ]. y * window_info[][" zoom_level" ][]))
118
- # scale to zoom level
119
- CImGui. AddRect (draw_list, p1, p2, IM_COL32 (255 , 255 , 0 , 255 ))
120
- end
121
115
116
+ # Draw image that is being inspected
117
+ CImGui. AddImage (draw_list, my_tex_id, ImVec2 (origin. x + canvas_p0. x, origin. y + canvas_p0. y), ImVec2 (origin. x + (my_tex_w * window_info[][" zoom_level" ][]) + canvas_p0. x, origin. y + (my_tex_h * window_info[][" zoom_level" ][]) + canvas_p0. y), ImVec2 (0 ,0 ), ImVec2 (1 ,1 ), IM_COL32 (255 ,255 ,255 ,255 ))
118
+
119
+ # Draw squares with add rect
120
+ for n in 1 : 2 : length (window_info[][" points" ][])- 1
121
+ p1 = ImVec2 (origin. x + canvas_p0. x + (window_info[][" points" ][][n]. x * window_info[][" zoom_level" ][]), origin. y + canvas_p0. y + (window_info[][" points" ][][n]. y * window_info[][" zoom_level" ][]))
122
+ p2 = ImVec2 (origin. x + canvas_p0. x + (window_info[][" points" ][][n+ 1 ]. x * window_info[][" zoom_level" ][]), origin. y + canvas_p0. y + (window_info[][" points" ][][n+ 1 ]. y * window_info[][" zoom_level" ][]))
123
+ # scale to zoom level
124
+ CImGui. AddRect (draw_list, p1, p2, IM_COL32 (255 , 255 , 0 , 255 ))
125
+ end
126
+
127
+ if CImGui. BeginPopup (" context-1" )
128
+ # if window_info[]["adding_line"][]
129
+ # resize!(window_info[]["points"][], length(window_info[]["points"][]) - 2)
130
+ # end
131
+ # window_info[]["adding_line"][] = false
132
+ if CImGui. MenuItem (" Remove all" , " " , false , length (window_info[][" points" ][]) > 0 )
133
+ empty! (window_info[][" points" ][])
134
+ end
135
+ CImGui. EndPopup ()
136
+ end
137
+ CImGui. PopClipRect (draw_list)
122
138
123
139
CImGui. End ()
124
140
0 commit comments