You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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
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 ComboBox shutdown crash when destroying a focused drop-down
Fix keyboard focus gained events reporting the new widget instead of the previous focused widget
Preserve keyboard focus in modal dialogs when clicking outside them
Exclude right and bottom edges from widget hit testing to match rendered bounds and prevent adjacent widgets from
sharing clickable boundary pixels
Fix reparenting not updating inherited visibility and enabled state
Fix child popups with disabled ancestors intercepting mouse input
Fix MenuControl losing item names when switching to separator skins
Fix LayerItem not restoring layer nodes for overlapped descendants when reparenting a widget as a child
Fix RotatingSkin ignoring subskin position offsets and render-target scale changes; respect render-target origin
offsets in RotatingSkin and PolygonalSkin
Fix PolygonalSkin retaining stale geometry after clearing points or supplying a single point or duplicate-only
points
Fix PolygonalSkin vertex buffer overruns when clipping sharp joins and invalid geometry at line reversals
Simplify rotation, clipping and shared coordinate conversion; make RotatingSkin draw only populated triangles
Fix bounds checks in ImageBox::deleteItemFrame
Fix ImageBox selection indices when inserting or deleting items and refresh the displayed image when deleting the
selected item
Move texture_utility::getTextureSize into RenderManager so its size cache is tied to the renderer lifetime,
fixing textures not being recreated after renderer reinitialization
Fix Canvas texture destruction leaving stale references and queued updates; respect disabled texture management
during deferred resizing and preserve content update requests when reallocating
Fix XML partial stream reads, failed-save reporting and stale error diagnostics; return null for missing XML roots
Fix DataStream read counts at EOF and preserve position and state in size queries
Fix Version comparisons to order major, minor and patch components correctly
Preserve public API and RTTI visibility in non-Windows static builds, fixing runtime type-check failures on macOS
Platforms
New VulkanPlatform (MYGUI_RENDERSYSTEM=10): shader support, RTT textures, FilterNone and DPI scale
New OsgPlatform for OpenSceneGraph (MYGUI_RENDERSYSTEM=11): shader support, custom osg::Drawable rendering
with pooled VBOs
All platforms now use standard Porter-Duff alpha blending (dst_a = src_a + dst_a * (1 - src_a))
Make DataManager::getDataListNames and getDataPath no longer required in DataManager implementations; they are
still used internally by most platforms and by demos/tools
Ogre/OgreNext: fix texture parameters not being set
Ogre: fix GLSL shader loading with Ogre versions older than 14.3
Ogre: preserve partial read/write texture updates and normalize loaded image formats and channel order for readback
and saving
Ogre: fix reuse and ownership of existing textures, texture recreation and combined render-target/read/write usage;
stop advertising unknown pixel formats
OgreNext: implement texture read locks for picking
OgreNext: fix nested RTT
OgreNext: fix Metal rendering and preserve vertex and indirect buffers across multiple updates within a frame
OgreNext: fix texture lifecycle, read/write locks and pixel-format conversion
OpenGL3: fix odd-width texture uploads and readback buffer overruns; preserve host pixel-transfer state and bindings
OpenGL3: fix PBO support detection in core contexts and uploads to file-loaded textures; preserve existing pixels in
read/write locks, including render-target textures, and fix interleaved locks and read-lock lifetime reporting
OpenGL3: improve sustained texture upload performance using orphaned and mapped pixel buffer objects
OpenGL3: isolate GUI drawing from inherited raster settings and restore host rendering state, including when rendering
throws; retain support for explicitly setting GUI wireframe inside render callbacks
OpenGL3: fix nested render targets and preserve host framebuffer bindings, viewport and clear colour
OpenGL: fix odd-width RGB and luminance texture transfers and readback buffer overruns; preserve host pixel-transfer
state and bindings, and validate texture dimensions and allocation sizes
OpenGL: recognize core and ARB/EXT PBO support and fix uploads to file-loaded textures; preserve existing pixels in
read/write locks, fix interleaved locks and read-lock reporting, and release outstanding locks when destroying textures
OpenGL: isolate fixed-function GUI drawing from inherited shaders, texture units, texture matrices and raster settings;
restore host state even when rendering throws, while retaining explicit GUI wireframe support
OpenGL: fix nested render targets, preserve host framebuffer and renderbuffer bindings, and check framebuffer completeness
OpenGL: stop advertising unsupported pixel formats and luminance render targets
DirectX9: use dynamic discard vertex buffers, release them on device loss and recreate them after device restoration
DirectX9: fix texture read/write locks, row-pitch handling and render-target readback
DirectX9: preserve render targets, viewport and host scene ownership during nested RTT
DirectX11: check vertex-buffer map failures and retry allocation when no buffer exists
DirectX11: implement texture read and read/write locks, including GPU-rendered pixels, with correct row-pitch handling
DirectX11: fix combined render-target/read/write usage, texture usage reporting and render-target cleanup on recreation
OpenGLES: fix texture read/write locks, interleaved updates, transfer sizing and array cleanup; preserve host
pixel-store state and use core ES 3 PBO uploads with framebuffer readback
OpenGLES: normalize texture channel order for uploaded and rendered images, and support ES 3 luminance textures
OpenGLES: isolate GUI rendering from inherited raster/sampler state and restore host bindings, including on exceptions
OpenGLES: fix render-target dimensions, nested target restoration and custom-shader orientation; resolve replaced shaders
per texture and request an ES 3 context before creating the SDL window
Vulkan: retain vertex storage until recorded commands retire, reuse completed allocations and check map failures;
submit RTT work asynchronously and wait before command reuse or destruction
Demos
Add browser demos built with Emscripten using the Ogre backend (pure OpenGLES also
tested), combined into a single WebAssembly application with a demo selector and high-DPI support
Add widget rotation demo
Handle SDL_QUIT in apps
Fix DPI scaling in demos and tools on macOS Retina displays
Fix Ogre application shutdown destroying the render window twice
Fix OgreNext application window resizing on Linux
Make all custom RTTLayer implementations respect DPI scale
Fix unreachable code in Demo_GraphView and deprecated skin usage in its resources
Move interactive tests to AdvancedDemos as Demo_<Feature>, controlled by MYGUI_BUILD_ADVANCED_DEMOS (ON by
default)
Tools
Share CLI argument parsing for tools in SdlBaseManager
LayoutEditor: always save the latest layout format, upgrade recognized deprecated properties and preserve unknown
properties
Fix missing editor fonts when FreeType is disabled
Infrastructure
Expand engine and platform test coverage with shared test utilities; keep UnitTests fully automated and enable MYGUI_BUILD_UNITTESTS by default
Run CTest in native and Emscripten CI builds, including platform tests for Linux/Ogre, Linux/OgreNext, Linux/OpenGL3,
Linux/Vulkan, macOS/OpenGL3, Windows/DirectX11 and browser/OpenGLES
Add AddressSanitizer and UndefinedBehaviorSanitizer CI checks, plus Clang source-based coverage reports and a badge
Add --screenshot capture for demos/tools and compare_screenshots.py reference comparisons with cross-renderer
tolerance; make screenshot timing deterministic and fix Ogre captures of hidden windows
Propagate the C++17 requirement to consumers of the MyGUI CMake target
Generate resources.xml beside executables for multi-configuration builds
Fix Linux builds with X11 and older OpenGL headers; propagate required GL extension prototypes through the OpenGL,
OpenGL3 and OpenGLES CMake targets
Use OgreNext CMake package config instead of PkgConfig
Fix Emscripten build
Remove bundled doxygen.exe binary from Wrappers (#317)