Note: a lot of programmers talk about UI without mentionning the user even once, as if it was entirely a programming problem. I wonder what we’re leaving off the table when we do that.
- https://gist.github.com/vurtun/65977fcff17e413721dbd1191cda719d Vurtun’s notes about UI
- https://gist.github.com/vurtun/61b6dbf21ef060bcbbd8d1faa88350d9 Vurtun’s experiments
- https://gist.github.com/vurtun/9782db089430167453cff6785b37bb46 other notes by Vurtun
- https://gist.github.com/pervognsen/279156b894c5d04ca73df7afc12a37ee Notes about slate by Per Vognsen
- https://docs.unrealengine.com/latest/INT/Programming/Slate/
- https://docs.unrealengine.com/latest/INT/Engine/UMG/index.html
- https://soundcloud.com/podcastcode/6-dont-make-me-write-ui
- https://blog.johnnovak.net/2016/05/29/cross-platform-gui-toolkit-trainwreck-2016-edition/
- https://handmade.network/forums/t/2260-the_world_needs_a_better_way_to_create_cross_platform_desktop_gui_apps/2
- https://handmade.network/forums/t/2463-application_rendering
- https://nothings.org/gamedev/compositing_tree/ Compositing trees (Sean Barrett)
- http://ourmachinery.com/post/one-draw-call-ui/
- http://ourmachinery.com/post/ui-rendering-using-primitive-buffers/
- https://gist.github.com/pervognsen/75fe0a94ac690780a58fc23a6f354f38
- https://github.com/HotDrink/hotdrink/blob/master/README.md property model
- https://www.youtube.com/watch?v=Xr6dtXw0Ipg Makepad, Rethinking Web UI’s with WebGL - Rik Arends
- https://www.youtube.com/watch?v=Z1qyvQsjK5Y The seminal talk by Casey Muratori that documented the IM UI idea
- https://essence.handmade.network/blogs/p/3435-automatic_ui_layouts_part_1 https://essence.handmade.network/blogs/p/3436-automatic_ui_layouts_part_2 layouts
- https://www.superluminal.eu/2018/10/29/16xaa-font-rendering-using-coverage-masks-part-i/
- https://www.youtube.com/watch?v=ZQ5_u8Lgvyk Reusable components talk by Casey Muratori
- https://docs.microsoft.com/en-us/windows/uwp/design/basics/ overview of microsoft’s concepts around user interfaces
- https://docs.microsoft.com/en-us/windows/uwp/design/basics/commanding-basics
- https://guidebookgallery.org/
- https://sigchi.org/
- https://www.youtube.com/watch?time_continue=6&v=ZZi3I_NCiUk
- https://www.youtube.com/watch?time_continue=904&v=4YTfxresvS8 ECS UI in Rust
- flutter rendering pipeline and layout https://www.youtube.com/watch?v=UUfXWzp0-DU
- https://www.slideshare.net/julienkoenen/how-hard-can-it-be-ui-development-at-keen-games
- https://raphlinus.github.io/rust/graphics/gpu/2019/05/08/modern-2d.html GPU based 2d rendering
- https://www.forkingpaths.dev/posts/23-03-10/rule_based_styling_imgui.html styling, rule based vs style stacks
- input handling, and latency,
- composition,
- dataflow,
- layout,
- painting,
- styling,
- extension,
- resource demands: power draw, cpu cycles
Accessibility is a big issue. How to make your UI Accessible? Usually platform vendors provide APIs to enumerate/navigate/queryh UI elements, extracting some metadata for text-readers and the like.
Multi-viewport UIs: support for multiple windows, multiple displays/monitors with mixed DPI.
Power-draw. (When little of the screen is changing, power-draw should be commensurate with the updated areas. In other word, partial rendering, partial presentation)
Collaboration: support for more than one editing client for multi-user collaboration on the same data.
Responsive layouts and scalable/zoomables UI help users adapt an UI to viewing distances or screen sizes.
Internationalized input methods. (“IME” on windows)
Adaptability to large teams (adding new controls, new assets, new kinds) without contention.
Multi-touch and touch interfaces create many questions: they allow multiple-items to be interacted with at a time (contrary to the pair mouse-keyboard) ; should this be constrained somehow (to only similar items? to only similar items supporting similar interactions? what if more than one person is touching the screen?) ; they also either expect the items to be bigger or the hotzones to be more lenient.
Hi-DPI requires a great deal more pixels to fill. Also what should be the internal units?
Plugin supports: this exposes lots of problematic scenarios when plugins are allowed to hook to the underlying event loop and desktop APIs. For instance imagine dealing with non-DPI aware plugins within a DPI aware process on Windows.
GPU-based rendering:
- how does it affect latency?
- does it fit the type of graphics shown in UI?
Multiple-interactions in one: Very often UI reach a difficulty when we want to select multiple elements and change them all in parallel. Increment/Change more than one element at a time.
Jump-to-ui-element
Consider each quad representing the bounding box of a UI control. The minkowski sum of that quad and a round region of about radius ‘tr’, representing the tolerance radius, depends on the input device (mouse, touch etc…) and represents the collision box between that input device’s center point and the control. In case n>1 controls match, the ambiguity must be resolved. @idea{separating axes test}
In an UI where moving windows or elements is offered to users, it’s nice to satisfy needs for tightly packing those elements. Two options:
- snap (magnetic)
- bump+friction (solids) { allows for putting elements next to each other without them touching each other }
layout transformation :: min/max width, min/max height, fixed size elements, flexible size elements -> sizes per element
constraints go in, traverse the tree, bring out size of elements traversed. tree has row nodes and column nodes. go through fixed size elements first, taking the dimension that match the node type (row => heights, column => widths) apply size in chosen dimension to flexible elements
Sometimes people get confused between these two opposites:
- the product is the user interface,
- the user interface surfaces or allows user interacting with a deeper model or simulation
What remains true is that in the two points of view, data has to be shared across multiple systems, and data ultimately has to be seen and interacted with by the user, and belongs to the user interface.
Some surface level aspects of user interfaces (what people call design):
- structure, sequence
- 2d/3d layout
- chrome, animations
Logic of interactions are difficult to express.
johnnovak.net link is broken. Working URL: https://blog.johnnovak.net/2016/05/29/cross-platform-gui-toolkit-trainwreck-2016-edition/