mygui v3.5.2
Permanent link:
cppdashboard.dev/r/2026/10/mygui-v3-5-2Fast, flexible and simple GUI.
Release notes
### Release highlights - **Unit tests and stability:** extensive new core and platform tests, CI coverage and sanitizer checks, with improved handling of many edge cases in widget behavior and rendering - Add widget rotation with matching hit testing and clipping - Add Vulkan and OpenSceneGraph rendering backends, plus [browser demos built with Emscripten](https://mygui.info/demos/) ### Compatibility - Remove `UString::asWStr_c_str` and `asUTF32_c_str`; use `asWStr` and `asUTF32` instead. `asWStr` now returns an independent `std::wstring` by value, so retain the returned string when using its `c_str` pointer. `asUTF8_c_str` remains available - Remove legacy .txt language resource and user-tag support; migrate these files to XML - Deprecate `RotatingSkin`; use `Widget::setRotation` and `Widget::setRotationCenter` instead - Deprecate `texture_utility::getTextureSize`; use `RenderManager::getTextureSize` instead ### Core - Add base widget rotation support with updated hit testing, clipping and coordinate conversion; add `Widget::setRotation` and `getRotation` - Add `Widget::eventChangeAbsoluteCoord` for absolute position or size changes, including ancestor movement, alignment and reparenting - Add `InputManager::setDoubleClickTime` and `getDoubleClickTime` - Add `setItemHeight`, `getItemHeight` and `ItemHeight` property to `ListBox`, `ComboBox` and `MultiListBox` for runtime row resizing - Add owning `DataManager::getDataHolder`; make `DataStreamHolder` non-copyable and non-movable - Add `IDataStream::readAll` and `readAllText` helpers to read all remaining bytes from a stream - Reimplement `UString` using `std::u32string` and UTF8-CPP; indices count Unicode code points. This also improves internal text handling speed by avoiding extra 8/16/32 conversions - Optimize delegate invocation and subscription handling, and fix callback lifetime issues during nested dispatch, mutation, exceptions and event destruction - Skip unchanged values in several widget setters to avoid redundant layout and render updates - Fix out-of-bounds reads in `TextIterator` when text ends with an unescaped '#' - Fix `EditBox::getTextSelectionLength` returning an underflowed value for reverse selections and inactive selection - Fix `EditBox` left-side maximum-length truncation dropping a trailing literal '#' - Ignore empty and out-of-range `EditBox` colour intervals and clamp oversized lengths - Fix `TextIterator::cutMaxLengthFromBeginning` reading past incomplete colour tags - Make `EditBox` password mode single-line, disabling multiline mode with a warning when both are requested - Fix FreeType and MSDF fonts bypassing the configured substitute for unsupported characters and regenerating incorrect glyphs after texture invalidation - Fix newly added `MultiListBox` columns not inheriting the current scroll position - Fix `MultiListBox` row indices not being cleared when removing the last column, allowing the list to be reused - Fix an empty `ListBox` accepting nonzero scrolling - Fix resizing `ListBox` exposing a reused row without refreshing its selected appearance - Fix removing an offscreen selected `ListBox` item selecting a visible neighbour without repainting it - Fix inserting a `ListBox` item before the visible rows leaving too few row widgets for subsequent pixel scrolling - Fix `ScrollView` scrollbar visibility, ranges and thumb sizes using stale viewport dimensions after scrollbars appear or disappear - Fix `ScrollView`, `EditBox` and `ItemBox` keeping scrollbars visible after `setVisibleVScroll(false)` or `setVisibleHScroll(false)` when content still overflows - Fix `TabControl` header scrolling not accounting for navigation button space in layout-based skins, leaving the target tab hidden - Fix hovering over an inactive `MenuBar` stealing keyboard focus from other widgets (#282) - Fix `ComboBox` drop-downs and `MenuControl` submenus not following ancestor movement - Fix…
Share this resource