Skip to content

Releases

gui_toolkit 0.98.1

Choose a tag to compare

@sachahjkl sachahjkl released this 07 Nov 22:34
v0.98.1
300891a

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

Choose a tag to compare

@sachahjkl sachahjkl released this 07 Nov 22:14
v0.98.0
2f03446

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_FRAMES frames in a row that used less than 1/render.SHRINK_RATIO of 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

Choose a tag to compare

@sachahjkl sachahjkl released this 07 Nov 21:40
v0.97.0
1ea92e1

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 to ui.lazy_begin(sweep = ...) (was lazy_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_progress says how far it is, and find_count while find_pending is what it has read so far. A match not counted yet has the index -1.

gui_toolkit 0.96.0

Choose a tag to compare

@sachahjkl sachahjkl released this 07 Nov 15:34
v0.96.0
3e9d4e5

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

Choose a tag to compare

@sachahjkl sachahjkl released this 07 Nov 15:31
v0.95.0
8952b5a

Added

  • Contrast: ui.luminance and ui.contrast (WCAG's ratio), ui.to_oklch / ui.from_oklch for linear colours, and ui.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

Choose a tag to compare

@sachahjkl sachahjkl released this 07 Nov 14:24
v0.94.0
308b033

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

Choose a tag to compare

@sachahjkl sachahjkl released this 07 Nov 13:45
v0.93.0
aaf0a17

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), each ui.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 by ui.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

Choose a tag to compare

@sachahjkl sachahjkl released this 07 Nov 11:53
v0.92.0
22b8aff

Added

  • host.host_adopt, hooks still and after_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.Reorder and ui.reorder_frame are 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 ^Reorder and 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.held is 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. Write ui.dock_held(&app.dock) where app.dock.held was read.

gui_toolkit 0.91.0

Choose a tag to compare

@sachahjkl sachahjkl released this 07 Nov 09:54
v0.91.0
9952fef

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

Choose a tag to compare

@sachahjkl sachahjkl released this 06 Nov 21:33
v0.90.0
cf0ead3

Added

  • render.surface_init under_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.