Repository navigation
Releases
Releases · sachahjkl/gui_toolkit
gui_toolkit 0.98.1
Fixed
- A lazy column lets its view move by less than a pixel: the item the view is on was kept in its place by its rect, rounded to whole pixels; that error, read as a move of the content, put a view moving by less than a pixel a frame (a slow glide, the wheel's click just past its dead zone) back where it was every few frames, and it did not move. Its place is now read where the layout put it, not rounded.
gui_toolkit 0.98.0
Fixed
- Instance buffers go back down after a peak: the draw context's instance list and the renderer's instance buffer (D3D11, and WebGPU's tables) are no longer kept at the size of the largest frame ever drawn; after
render.SHRINK_FRAMESframes in a row that used less than1/render.SHRINK_RATIOof them, they shrink to what is drawn (render.shrink_due). - Text outside the clip makes no instance: a glyph placed in screen pixels and wholly outside the clip rectangle is no longer drawn (nothing recorded in a picture: it is replayed elsewhere). Text drawn again in strips, as a find in page paints the letters of its matches, made every glyph of the box in every strip: a needle with thousands of matches took 72 MB of instances and 300 MB of buffers in one frame.
gui_toolkit 0.97.0
Changed
ui.find_sweep(breaking): a find in a lazy column reads the column a slice of items at each frame (FIND_SWEEP_ITEMS), from the top down, instead of building all of it in one frame: a long document no longer freezes the window when a needle rests. It returns the items this build makes for it, given toui.lazy_begin(sweep = ...)(waslazy_begin(all = find_sweep())); the text of the scope around the items (the column's own boxes, before them and after them) is read too, in reading order. Until a sweep ends, what the last one found stands;ui.find_progresssays how far it is, andfind_countwhilefind_pendingis what it has read so far. A match not counted yet has the index -1.
gui_toolkit 0.96.0
Added
ui.press_hand: the press held on one box goes on on another, with what it keeps (ui.press_data), for a gesture whose item is built in another place while it lasts: a tab dragged out of a list into a grid of pinned ones, whose boxes have other parents, stays one drag.
gui_toolkit 0.95.0
Added
- Contrast:
ui.luminanceandui.contrast(WCAG's ratio),ui.to_oklch/ui.from_oklchfor linear colours, andui.readable(fg, ground, ratio): the colour moved along its OKLCH lightness, its hue and chroma kept, only as far as it must to read on the ground (lighter on a dark one, darker on a light one). - The system's light / dark, on Windows too, and when it changes:
platform.dark_mode_preferred()reads Windows' app mode (AppsUseLightTheme) as it read the portal and GTK on Linux;platform.color_scheme_serial()moves when the choice may have changed (WM_SETTINGCHANGE "ImmersiveColorSet", the portal's SettingChanged): an app that follows the system compares one integer a frame.
gui_toolkit 0.94.0
Changed
- Selected text reads on its selection: the selected part of a selectable box's text (labels, paragraphs, rich paragraphs) is painted again over the selection in the theme's new
"selection text"colour (by default the text's). A faint text, a dimmed run, was lost on the selection's colour.
gui_toolkit 0.93.0
Changed
- The wheel scrolls as the system says: a notch moves
platform.wheel_lines()lines (Windows' setting, lines per notch, characters across; three on Linux), eachui.WHEEL_LINE_PX(100/3 logical px, a browser's line) at the window's scale, in whole pixels; where the system says a page, a page less a line. Every view scrolls byui.wheel_step(box, axis), text fields too. Before, a notch was 4 em of the box's font whatever the setting.
Fixed
- A tab is drawn as space:
font.TAB_SPACES(4) spaces wide, the same wherever it is (measured as shown), with a space's glyph. Fonts have no glyph for it: it was drawn as a missing one (a box) in code and in tools' output.
gui_toolkit 0.92.0
Added
host.host_adopt, hooksstillandafter_frame,Host.times: a window and a renderer an application made in its own order of start become a host; a window whose picture would not change is not built; what a program does between two frames goes after the picture; the last picture's draw and present times.
Removed
ui.Reorderandui.reorder_frameare gone: the drag of a reordered list is kept on the press of the item's box (ui.press_data) and ends with it (the button went up, the box went, the user left the window). The procedures take the item's box key in place of a^Reorderand an id:reorder_begin(item, moved, threshold, press, slot),reorder_dragging(item),reorder_item_pos(item, slot, pointer, lo, hi, rate)(its animation keyed by the item's box too). Lists whose items share ids drag apart, the box's key being its list's.ui.Dock.heldis gone:ui.dock_held(&d)asks the press whether the left button holds one of the dock's controls (a tab or a floating panel's title, a handle, a floating panel's corner). It keeps nothing, so it ends with the press (the release, the box held going, the user leaving the window) and says the same at any time of the frame. Writeui.dock_held(&app.dock)whereapp.dock.heldwas read.
gui_toolkit 0.91.0
Added
ui.lazy_pin,ui.lazy_pinned: the view stays on an item, a given distance into it, placed after each layout whatever grows around it; what the last layout found of it says when it has settled.- ui.press_data: what a gesture keeps lives on its press: the zero T when the press began, the same while it lasts, gone when it ends by whatever way (release, its box gone, the user leaving the window). A press of the same box again, even in one batch of input, starts from zero.
- ui.window_clipboard_get, ui.window_clipboard_set: Build_Params' clipboard procedures for the system's clipboard of the build's window, so a program no longer needs a global to reach its window.
- platform.events_waiting: whether a window has something for its next poll_events, without waiting. A loop of several windows asks each before it sleeps, because the poll of one window of the thread takes the others' messages.
- host: a window as an object, above ui and render. host_open, host_frame (pace, input, resize, builds, picture, present), host_close, and hosts_wait / hosts_due / hosts_frame for several windows on one renderer. Hooks cover what a rich application's frame does of its own: params, input, builds (several in a frame: host_build), hold (no picture this frame), after_build, before_input, dragging, rest_frame. It keeps the orders that matter: input is read with the renderer given back, a step of a resize is that window's alone, buffers keep the monitor's size, and only the first window is paced. examples/hello and examples/todo use it; the way by hand is unchanged.
- render.surface_scope: surface_use until the end of the calling scope, so a frame on a second window cannot forget to go back.
- ui.view_limit, ui.view_reveal, ui.view_reveal_offset, ui.view_jump, ui.view_shift: the verbs of a scroll box's view, for code that wrote view_off, view_target and view_anim by hand. view_reveal says whether the target moved, so a caller decides on scrollbar_reveal itself; view_shift keeps a glide under way and leaves a target at the top there.
Changed
- A lazy column looks each item up once per build, in one map: an item's height is noted after the layout that placed it.
- Splitters, dialog grips, floating panel corners, range sliders: what their drag starts from is kept on the press (ui.press_data), not in the State's one drag payload. ui.drag_store and ui.drag_load stay, for gestures that read an earlier press (panes).
- render.Window_Target: what is one window's is now a struct of its own, included by using in Renderer and Surface, and Wgpu_Window on the WebGPU side; surface_use exchanges them whole, so a new window field needs no list. Field access is unchanged, except that Surface.gen and Surface.space_epoch are now Surface.swap_gen and Surface.swap_space, and Surface.wgpu_backing is a ^Wgpu_Window.
- A row taller than its view keeps its top: ui.list, menus, reorder_offset, the focus and the accessibility reveal now follow the rule ui.vlist had, instead of showing the row's bottom.
- A box's name and text: copied as they are at each build, without going through the formatter.
Fixed
- WebGPU second windows: a window's frame format now goes with it through surface_use, as its offscreen target does on Direct3D 11.
- Scrolling: dragging a scroll bar's thumb or stepping a long menu ends a glide under way, which could pull the view back for a frame; a ui.vlist whose rows moved during a glide no longer starts the glide over.
gui_toolkit 0.90.0
Added
render.surface_initunder_children: a composition surface below the window's child windows. A web view moved into a window with a composition surface stayed hidden behind it.