Library

mygui v3.5.2

Versionv3.5.2
RepositoryMyGUI/mygui ↗
Stars★ 850
Released2026-10-08

Fast, 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


Discovered 2026-10-09 Source GitHub Archive 2026-10 →