-
Notifications
You must be signed in to change notification settings - Fork 26
/
todo.txt
345 lines (232 loc) · 12.6 KB
/
todo.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
zig 0.14:
- if sliceAsBytes/bytesAsSlice includes sentinel, then need to update our use
- if @src() gained a module field, then include it in the hash
check zig std lib for bytesAsSlice alignment - should it always aligncast?
figure out what we get when pressing fn-up/down on mac
- do we just get page_up/page_down?
textEntry doesn't need its own scroll_to_cursor
textEntryNumber example - show how to initialize with number and write back if the number validates?
consolidate touch editing selection
raylib backend
- directly call glfw.waitEventsTimeout?
- events
- instead of useTex, preload (or use raylib's) a 1x1 white texture
- use raylib's default shader (have to give up premultiplied alpha)
- on mac, two-finger scrolling in the demo window a lot hangs?
- enable by default
new theme fields
build needs an option to select backend?
touch dragging should probably not work when the size of the stuff inside the scroll area is less than the scroll area's size?
- otherwise you get lots of meaningless off-the-edge scrolling
README needs a section on themes
- and how the new fields interact
web-test: need to enlarge all the fonts, not just adwaita?
maybe toasts subwindow need some kind of outline?
FlexWidget
- layout widget that lays out children on a row by row (or col by col) basis
- add flex as option for reorderable example
test ability to scroll_drag on a touch screen - do we need a curtain area around the edge of the scrollarea/screen where touch events will cause a scroll drag?
web backend
- on phone chrome entering characters works, but backspace first removes characters from the keyboard buffer before we get them removed, something to do with IME
web backend clipboard
- ideally we should preventDefault on copy/paste events, then be able to access the clipboard
navigator.clipboard.readText().then(function (text) {
console.log("read: " + text);
});
maybe expand should be a f32 instead of bool
- could express "want this to take up 1/3 of the space"
- could function as weights for BoxWidget
text rendering:
- investigate if with stb_truetype we can align horizontally to pixels?
- see if the vertical weirdness is global, maybe a canvas size thing? Does it happen in the SDL demo?
zig.news writeup for how to do a build.zig step with a zig function
add cursors to examples (row of buttons or something one for each cursor)
UI scaling on Windows (and browsers) causes fonts to look blurry, maybe if snap to pixels is true, we round to nearest font size and then don't adjust for target_fraction?
firefox mouse-over menu items causes them to flicker?
- only the top level items File, Edit, not ones inside a floating menu
if textLayout is doing touch editing and gets a mouse down event, it should end touch editing
touch editing - when a paste or text insertion happens, toggle off the touch editing
colorspace conversions (see issue)
switch options font selection to the same scheme as colors
on hidpi display, selecting a bunch of text leaves small gaps noticeable in the selection background
- only if the text is added char by char
textLayout/textEntry touch editing:
- floating context needs smarter positioning if it can't go above the widget
touch pinch zoom (window? subwindow?) - integrated with ScrollContainer?
paned should have an "autopos" mode where when not collapsed it will use the expand of the children to determine split
- this way you can have the split automatically be not 50/50
textEntry key updown (shift-updown for textLayout) needs to be fixed to be able to do another updown each frame
- probably should always record a rect position for selection start/cursor/end
- figure out where cursor is from updown_pt from last frame
- from there determine new cursor point and store for next frame
- can we not check sel_mouse_down_pt = null and other stuff for each key?
see if we can get the mach backend working again
- maybe just use the glfw part of mach?
- can we also get it working in a browser?
don't use box for slider, use WidgetData directly? Other widgets?
should box do something intelligent about dividing space if snap_to_pixels is on?
add hyperlink functionality to textLayout
add more keyboard shortcuts to textEntry
- select all
- home
- end
- pgup/pgdown
touch scrolling velocity should be based on how far the finger has moved in the last bit of time (not how much it moved in the last event)
need a button for sizing/rotation for icon and raster that works continuously while you hold it down
- add option to Button where when in the down position it keeps refreshing
add FlexLayoutWidget
- doesn't have independent min height/width (works like textLayout)
- start with no expand, and only left->right top->bottom
if using standalone, should be able to draw using SDL stuff into a widget
- so base window needs to not delay rendering so you can render ontop of widget backgrounds
when new events come in, we assign the focus id, but probably shouldn't once we see a focus mouse event
need a strategy for activating paste from a menu, because the widget will lose focus when the menu is activated
- when the menu gets focus, maybe it saves the previous focus id?
- then when the paste menu item is clicked, it can send focus back to saved id
- also need to synthesize an event so that widget processes a paste
add inertia to scrolling
- if the scrollContainer has more intertia scrolling to do, then it should eat all pointer events, because we don't want any pointer events going to children if the scrolling is still happening
switch from my freetype fork to Mach's
scaling:
- when we are at 125% on linux x11 gnome, then the fonts look bad?
- test on Windows
- test on Mac
change BoxWidget to take InitOptions
change MenuWidget to take InitOptions
- also should take parentSubwindowId
popupSet - can this be done as a static var inside PopupWidget?
send updates to tinyvg
maybe builtin button should record multiple clicks?
- helps in low framerate situations
demo:
- add uses of animate
icon browser: when clicking an icon, copy the buttonIcon line of code and show a toast
- can the demo have more of these kind of "click to copy the code" things?
look into why mouse events seem delayed when using vsync
- try only calling SDL_PollEvent (or pump events) once per frame? (and using peep events to actually get the events)
unify Widget and WidgetData somehow?
TextLayout support for large documents
- need a function to say "we are skipping a bunch of bytes" (might be useful for code folding as well)
- addTextDone needs to not always set cursor because there might be lots of text remaining that we aren't rendering
get mach example working again
- MachBackend should save the passed allocator
add alpha to Options as well and multiply it by the theme alpha
example toast that includes "undo"
add disabled to options so the seek forward/backward icons can be grayed out?
- need to add ability to gray out things too (alpha to options?)
- is disabled just a visual thing?
- can still tab/click on it?
- when disabled, can't tab to that thing?
- if focused and disabled, call tabIndexNext
can't format {d:02} needs {d:0>2}?
add backend function to allow screensaver
audit backends for how to use them on top of an existing app
separate background and border drawing:
- embed a convex polygon triangulator? Will need for arbitrary pathing in any case
- can draw border by walking along both arcs in parallel trying to keep the angle of the line between the points alternating around 45 deg
cross-widget dragging (for stuff like docking)
- dragPreStart and dragStart take a ?[]const u8 ("_dock")
- dragging also takes a ?[]const u8
- will return the point if either widget has mouse capture or string matches
- widgets that only do mouse capture dragging can pass null
- other widgets have to coordinate via the string
- need to be able to call dragging outside of processing events so you can change appearance if the drag you are interested in is happening
for normal animations should be able to do a wrapper widget
- can animate from 0 to min_size (gotten from deinit)
- can deanimate from current size to 0
- floating windows are different since they aren't in the normal flow
- need a special wrapper for them which doesn't insert itself into the heirarchy just adjusts values
look into logging, how to use it in general and how to use it for gui stuff?
- const scope_name = std.log.scoped(.whatever);
- Then define a log function with the appropriate signature in your root file?
- maybe can use WidgetData.init to help with logging or debug mode?
how can I get mach to not build all it's stuff when I'm compiling an sdl example?
- need for it to do the work in a build step rather than when the build step is being made
-Dtarget=wasm32-freestanding-none
mach-test: no tab key?
linux mach-test: moving GUI Demo window around lags
more docs
- tabindex
- seamless animations
start making real demo() contents
- document stuff inside there?
- following dear imgui demo
- Basic Widgets
- radio
- hold-repeat buttons
- tooltips
- dropdown selection
- mouse cursors
- gravity
- themes
Tooltips:
- wrapper around thing you want the tooltip for
- floating windows similar to popup
- popup has 3-4 states:
- ready (on first frame where the mouse pointer is above the rect, go to
showing)
- timer (could go here and wait for timer)
- showing (tooltip popup shows, go to off if the mouse pointer is not
above rect)
- off (go to ready on a frame where the mouse pointer is off our rect)
var ttw = ToolTipWidget.init...
- if (ttw.active()) |p| {
// p is the point of the mouse when the tooltip was activated
var ttp = TooltipPopupWidget.init... (pass in TooltipWidget's screenrect, optionally previous ttp if nested)
// ttp
ttp.install();
// tooltip contents
ttp.deinit();
// ttp.deinit() checks:
- if we have a live nested ttp, we stay alive
- if the current mouse pointer is not above ttp OR the passed in ttw screenrect, we stay alive
- if staying alive and we have a ttp parent, tell that parent we are live
}
test what happens if std.time.nanoTimestamp() jumps backwards or forwards
- if backwards just a tiny bit, stay on frame_time_ns?
- if backwards more (or forwards a lot), reset frame_time_ns and also shift any animations?
- check begin() and beginWait()
text input support in mach
clipboard support in mach
xstart and ystart for textSize
kerning
- check how sdl_ttf does it
popup needs to align it's text with the label that popped it
- take a flag for whether it's popping updown or sideways, then adjust x or y to account for border and padding
switch to adwaita default font?
mach: do clipping in the shader?
premultiplied alpha for all textures (and vertices from PathStroke/Fill?)
- also font glyphs
- what is SDL_rendergeometry doing?
when we have a widget that has captured the mouse, need to capture the mouse in the underlying window system so click-dragging works even when the mouse pointer goes outside the window
some visual indication of non-focused windows
- maybe change focus color inside?
hover and highlight properties need to propogate down to children so that icons can draw properly in buttons where the button is highlighted but not the icon directly?
- maybe as part of the Options struct?
dialog
- maybe a flag on floatingwindow?
- have a separate function that does the nextWindowCleanup
- always call in deinit, but also user can call that and get result if the user pressed esc
- are there other things a user could press?
- rss textentry should bubble up the enter that it doesn't process so the dialog can record that it should "submit"
- maybe always bubble up dialog-related key presses?
maybe use stb_truetype or whatever so we don't need sdl_ttf?
- translate-c is failing for a few of the functions
- could make separate repo just like stb_image
change cursorlayout from top-to-bottom to left-to-right with optional extra floating widgets that get routed around
- save info for each line
- size and baseline offset
- height is max of (height of items without baseline) and max of (max of baselines, max of underhangs) of items with baselines
- if new size/baseline is different, cueFrame()
- replace menubar horizontal box with textlayout so that lots of menus will wrap
baseline alignment
- maybe only inside TextLayout?
- vertical alignment needs additional .baseline
- rectFor provides baseline float offset from top of rect
- minSize needs to send baseline offset
- PlaceIn honors .baseline alignment
make Alt do special stuff with the menubar
scroll widget when stuff is being added/deleted
- lock to top if there previously
- scroll to bottom if there previously
- otherwise scroll to widget that was in the middle?