Skip to content

MyGUI 3.5.2

Latest

Choose a tag to compare

@Altren Altren released this 08 Oct 01:13
· 47 commits to master since this release

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

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 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 automatic ProgressBar animation restarting incorrectly
  • 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)