Releases: brisklib/brisk
Releases · brisklib/brisk
Brisk v0.10.0
Added
- Universal binary support for macOS.
- Non-realtime mode for
WidgetTree. - WebP animation support.
toNumberfunction.- New way to modify and notify.
- Support for optionals in bindings.
Widget::enabledproperty.FixedFormatterclass that acts as a value formatter.- More
Valueoperators. - 7GUIs tasks: counter, timer, temperature, booker, CRUD.
Changed
- Documentation updated.
OffscreenCanvasis now reusable.CheckBoxanimation updated.uiSchedulermoved to the Core module.- Register built-in fonts in widget constructor.
- Adjusted standard palette colors.
- Optimization: Skip rasterization if transparent.
- Optimized
blendRow. - Various
Canvasoptimizations. - Make
"_Text"literals translatable. - Adjust style of
TextEditorwhen disabled. BindableCallback: non-strict argument types.ListBox: clicking outside items resets selection.
Fixed
Canvas: subpixel settings.- Minor fixes to the
Dashboardexample. - Invalidate widget on scroll.
- Corrected
Disabledstate for most widgets.
Brisk v0.9.8
Added
- Supported nested menus and improved menu accessibility
- Introduced
ListBoxwidget - Added new example: WebGPU demo
- Added new example: Dashboard
- Supported rendering UI to an offscreen buffer
- Added option to skip frames when no UI changes occur
- Enabled access to the WebGPU API from Brisk applications
- Introduced
WebGpuWidgetfor displaying 3D content within a widget - Implemented automatic signed distance field optimizations for
Canvas - Enabled application-wide shortcut support
- Added
LinearGradientandRadialGradientclasses - Added new example: Rendering to an external window
- Added new example: Rendering GUI to an external window
- Added new example: Splash screen
- Introduced texture blur functionality
- Enabled measurement of GPU execution time
- Improved uniform scaling support in
Matrix - Enabled drawing rectangles with individual border radii
- Introduced shadow spread and shadow offset properties
- Enabled retrieval of native texture from
Image - Added ability to create a render device for a specific display
- Enabled retrieval of the display associated with a window
- Added support for premultiplying alpha during decoding
- Introduced component actions
- Added
Widget::selectedproperty - Added style variables for focus frame and hint
- Provided full support for
Lengthdebug visualization - Added
_fmtuser-defined literal for string formatting - Added a safe nullable pointer wrapper
- Added
cpuUsagefunction - Allowed use of a custom
mainfunction - Supported reversed subpixel order
- Allowed disabling RTTI for Brisk
- Allowed disabling exceptions for Brisk
- Added app- and vendor-specific folders to the
DefaultFolderenum
Changed
- Updated documentation for improved clarity and completeness.
- Refactored
SIMD<>for better optimization. - Made D3D11 backend optional on Win32 when WebGPU is enabled.
- Changed
ImageRenderTargetto use BGRA color format (previously RGBA). - Updated
Gradientto use premultiplied colors. - Set
ColorWas the default color type. - Made
Gradienta stack-allocated object. - Removed
RawCanvasin favor of usingCanvasuniversally. - Added new renderer debug visualization.
- Improved angle gradient antialiasing at the 360°/0° boundary.
- Updated Google Dawn to version 7080.
- Optimized window rendering.
- Refactored color spaces for better consistency.
- Optimized texture blitting.
- Made
InputQueueexplicitly stored inWidgetTree. - Enabled receiving non-client mouse clicks.
- Improved focus handling: if a widget does not accept focus, the first descendant that does is selected.
- Split
overflowproperty intooverflowScrollandcontentOverflow. - Removed the following classes and functions:
PerformanceStatisticsDeferredCallbackthreadScheduler
Fixed
- Reduced blinking when closing a modal window.
- Preserved order in
VisualGroup. - Fixed widget border rendering issues.
- Corrected
incbin.hfor 32-bit Windows ABI compatibility. - Allowed closing component windows from any thread.
- Ensured both host and target tools are built during cross-compilation.
- Prevented window centering unless its size is changed.
Renamed
- C++
- Standardized capitalization for abbreviations, treating them as normal words (e.g.,
HTTPResponse→HttpResponse). GUIApplicationtoGuiApplicationandGUIWindowtoGuiWindow.separateRenderThreadtoseparateUiThread.Palette::light_greentoPalette::lightGreenand similar color names.ItemListtoMenu.BindingObjecttoBindableObject.KeyCode::Kp*toKeyCode::Num*.Os*HandletoNative*Handle.setMinimumMaximumSizetosetMinimumMaximumSizes.wordWrapfunction totextWordWrap.
- Standardized capitalization for abbreviations, treating them as normal words (e.g.,
- CMake
APPLE_BUNDLEtoAPPLE_BUNDLE_ID.
- Directories
- Some directories were also renamed to reflect changes in class naming. If you encounter issues with pulling updates, clone the repository into a separate directory.
Brisk v0.9.7
Bug fixes for the 0.9.6 release:
- Updated ICU data loading code to resolve issues on macOS ARM64.
- Fixed a WebGPU memory leak.
- Ensured the D3D11 render context is flushed after every batch.
- Increased the minimum required CMake version to 3.22.
- Fixed
imageResize.
❗ indicates a breaking change.
Added
- Added support for SVG fonts🖋️💻.
- Added support for color emojis🔤😊.
- Resource bundling has been rewritten from scratch. Apps can now override Brisk resources, such as supplying their own fonts.
- Support for viewport-relative units (vw/vh/vmax/vmin)
- ❗ Buffered GUI mode has been introduced. The GUI is rendered to an offscreen texture, tracking the updated rectangles each frame. The texture is then blitted to the screen, significantly improving performance in cases where GUI updates are infrequent. This mode can be switched off for a specific window or globally.
- Lucide icons have been updated to latest version.
- Ability to override
ItemListvisible property. WidgetTreecan now be used without aGUIWindowandInputQueue.- New algorithm for shadow rendering by Evan Wallace.
- A new
ColorWtype has been introduced, capable of storing extended-range sRGB values in a compact form. storeWidgetfunction to store the weak pointer to the widget to an external variable during tree building.string_viewversions of thetrim,ltrimandrtrimfunctions.BRISK_ASSUMEmacro that maps to__builtin_assumeon supported compilers.SVGImage::renderToto render to an existingImage.- Resources are now packed into a binary using the
.incbinassembly instruction on supported compilers for improved performance. - HTML SAX parser added.
- Very basic HTML support in the
Textwidget viatextOption = TextOptions::HTML. - Stateless functions in
Canvasclass. - Added the ability to select the internationalization implementation: basic or ICU-based. Apps can now choose the implementation without rebuilding the Brisk binaries.
- Visual tests for widgets.
Changed
- ❗ A new implementation of widget clipping has been introduced. Widget painting can now be clipped to the parent's bounds, the parent's clip rectangle, or the widget's own bounds.
- ❗
DialogComponent::resultis now aPropertyinstead of a plain field.
Useresult.get()to retrieve the boolean value or rely on implicit conversion.
The same applies to thevalue,prompt,text, andiconfields in derived dialogs. - ❗
buttonColorhas been renamed tomainColor. - ❗ The
layoutOptionsproperty of theTextwidget has been renamed totextOptions, and theLayoutOptionstype is nowTextOptions. - ❗ The
createWindowfunction should now be overridden instead ofmakeWindowto use a custom window class for the component. - ❗ A new
isHintVisibleproperty controls whether the widget's hint is visible. - ❗ The
descriptionproperty has been removed in favor of thehintproperty. - ❗ New font size default (12 pixels).
- ❗ The
reflectionstatic field is now used to store field information (previouslyReflection). - ❗ Style variables (e.g.,
selectedColor) are now indexed by string hash instead of a linear index, making it easier to create custom variables. ComboBoxandPopupBoxmouse interaction fixes.ImplicitContextis now convertible tobool.- The descender value of Lucide icons has been adjusted to improve their alignment within text.
- The
KnobandSlidercolors can be changed by assigning theselectedColorstyle variable. Hover and pressed styles are preserved. Showcaseapp updated.- The
ReflectionOfutility class has been introduced to provide reflection information for external types. - ❗ Shell-related functions moved to the
Shellclass:Shell::showMessage,Shell::openURLInBrowser,Shell::showDialog, etc. - ❗ Clipboard-related functions moved to the
Clipboardclass:Resources::getText, etc. - ❗ Resource-related functions moved to the
Resourcesclass:Resources::load, etc. - ❗
InplacePtrandPossiblySharedtypes are removed. - ❗
uiThreadhas been renamed touiSchedulerto matchmainScheduler. - ❗
std::optionalandstd::nulloptare no more included in Brisk namespaces. Use full qualified names instead. - ❗ File IO functions now use
uint64_tinstead ofuintmax_t. - ❗ Several renames have been made to ensure style consistency (
bytes→Bytes,bytes_view→BytesView). - ❗
Bytes,BytesView, and other related types now usestd::byteinstead ofuint8_t. - ❗ The lifetime of
BindingObjectis now accessed via thelifetimefunction. Replace occurrences ofm_lifetimewithlifetime()in your code. - ❗ Font name constants moved to the
Fontclass:Fonts::Monospace→Font::Monospace. - Documentation files have been updated.
- ❗ Fonts are now set by their names, not IDs. Examples:
fontFamily = "Lato",Font{"Noto", 16}. - Performance optimizations.
- New
WrapAnywhereflag inTextOptions. - ❗ Aliases to
stdtypes removed.
Fixed
- Numerous fixes and improvements.
BRISK_SCRIPTS_DIRis now cached inCMakeCache.txt, resolving issues when Brisk is included usingadd_subdirectory.Rectangle::emptyhas been fixed to returntruefor{INT_MAX, INT_MAX, INT_MIN, INT_MIN}.BackStrikedTextnow uses opacity for painting.- Fixed contrast ratio calculation, ensuring that light text color is preferred on certain backgrounds.
findIntegralTypefixes.- Brisk now supports spaces around commas in the font list ("Lato, Noto").
Brisk v0.9.6
❗ indicates a breaking change.
Added
- Added support for SVG fonts🖋️💻.
- Added support for color emojis🔤😊.
- Resource bundling has been rewritten from scratch. Apps can now override Brisk resources, such as supplying their own fonts.
- Support for viewport-relative units (vw/vh/vmax/vmin)
- ❗ Buffered GUI mode has been introduced. The GUI is rendered to an offscreen texture, tracking the updated rectangles each frame. The texture is then blitted to the screen, significantly improving performance in cases where GUI updates are infrequent. This mode can be switched off for a specific window or globally.
- Lucide icons have been updated to latest version.
- Ability to override
ItemListvisible property. WidgetTreecan now be used without aGUIWindowandInputQueue.- New algorithm for shadow rendering by Evan Wallace.
- A new
ColorWtype has been introduced, capable of storing extended-range sRGB values in a compact form. storeWidgetfunction to store the weak pointer to the widget to an external variable during tree building.string_viewversions of thetrim,ltrimandrtrimfunctions.BRISK_ASSUMEmacro that maps to__builtin_assumeon supported compilers.SVGImage::renderToto render to an existingImage.- Resources are now packed into a binary using the
.incbinassembly instruction on supported compilers for improved performance. - HTML SAX parser added.
- Very basic HTML support in the
Textwidget viatextOption = TextOptions::HTML. - Stateless functions in
Canvasclass. - Added the ability to select the internationalization implementation: basic or ICU-based. Apps can now choose the implementation without rebuilding the Brisk binaries.
- Visual tests for widgets.
Changed
- ❗ A new implementation of widget clipping has been introduced. Widget painting can now be clipped to the parent's bounds, the parent's clip rectangle, or the widget's own bounds.
- ❗
DialogComponent::resultis now aPropertyinstead of a plain field.
Useresult.get()to retrieve the boolean value or rely on implicit conversion.
The same applies to thevalue,prompt,text, andiconfields in derived dialogs. - ❗
buttonColorhas been renamed tomainColor. - ❗ The
layoutOptionsproperty of theTextwidget has been renamed totextOptions, and theLayoutOptionstype is nowTextOptions. - ❗ The
createWindowfunction should now be overridden instead ofmakeWindowto use a custom window class for the component. - ❗ A new
isHintVisibleproperty controls whether the widget's hint is visible. - ❗ The
descriptionproperty has been removed in favor of thehintproperty. - ❗ New font size default (12 pixels).
- ❗ The
reflectionstatic field is now used to store field information (previouslyReflection). - ❗ Style variables (e.g.,
selectedColor) are now indexed by string hash instead of a linear index, making it easier to create custom variables. ComboBoxandPopupBoxmouse interaction fixes.ImplicitContextis now convertible tobool.- The descender value of Lucide icons has been adjusted to improve their alignment within text.
- The
KnobandSlidercolors can be changed by assigning theselectedColorstyle variable. Hover and pressed styles are preserved. Showcaseapp updated.- The
ReflectionOfutility class has been introduced to provide reflection information for external types. - ❗ Shell-related functions moved to the
Shellclass:Shell::showMessage,Shell::openURLInBrowser,Shell::showDialog, etc. - ❗ Clipboard-related functions moved to the
Clipboardclass:Resources::getText, etc. - ❗ Resource-related functions moved to the
Resourcesclass:Resources::load, etc. - ❗
InplacePtrandPossiblySharedtypes are removed. - ❗
uiThreadhas been renamed touiSchedulerto matchmainScheduler. - ❗
std::optionalandstd::nulloptare no more included in Brisk namespaces. Use full qualified names instead. - ❗ File IO functions now use
uint64_tinstead ofuintmax_t. - ❗ Several renames have been made to ensure style consistency (
bytes→Bytes,bytes_view→BytesView). - ❗
Bytes,BytesView, and other related types now usestd::byteinstead ofuint8_t. - ❗ The lifetime of
BindingObjectis now accessed via thelifetimefunction. Replace occurrences ofm_lifetimewithlifetime()in your code. - ❗ Font name constants moved to the
Fontclass:Fonts::Monospace→Font::Monospace. - Documentation files have been updated.
- ❗ Fonts are now set by their names, not IDs. Examples:
fontFamily = "Lato",Font{"Noto", 16}. - Performance optimizations.
- New
WrapAnywhereflag inTextOptions. - ❗ Aliases to
stdtypes removed.
Fixed
- Numerous fixes and improvements.
BRISK_SCRIPTS_DIRis now cached inCMakeCache.txt, resolving issues when Brisk is included usingadd_subdirectory.Rectangle::emptyhas been fixed to returntruefor{INT_MAX, INT_MAX, INT_MIN, INT_MIN}.BackStrikedTextnow uses opacity for painting.- Fixed contrast ratio calculation, ensuring that light text color is preferred on certain backgrounds.
findIntegralTypefixes.- Brisk now supports spaces around commas in the font list ("Lato, Noto").
Brisk v0.9.5
What's Changed
Full Changelog: v0.9.4...v0.9.5
Brisk v0.9.4
This is a bug-fix release that includes improvements to exception safety, memory alignment, and the resolution of several bugs.
Brisk v0.9.3
What's Changed
- Updated the showcase demo app with additional features
- Fixed screenshot capture issues caused by nested event loops
- Added
""_TextUDL as an alias fornew Text{""} - Introduced a
transformfunction that accepts multipleValues and a lambda - Refactored package building process
- Reduced the size of release binaries
- Expanded and improved documentation
- Updated CxxDox to the latest version
- Enabled testing of demo app building in GitHub Actions
- Disabled inlining enforcement in debug mode
- Applied layout fixes
- Prevented letter spacing from disabling kerning
- Refactored
TextEditorandPagescomponents - Added properties for
ScrollBox - Various fixes and general improvements
Full Changelog: v0.9.2...v0.9.3
Brisk v0.9.2
What's Changed
Added
- New
BRISK_ICUCMake option to control ICU inclusion - Added support for multiline text editors
- Added
wordWrapproperty for theTextwidget to control word breaking - Added
dynamicFocusproperty for theItemwidget - Added support for *-windows-static vcpkg triplets
- New
fontFeaturesproperty - Enhanced OS dialogs (file and folder dialogs, message boxes)
- Updated vcpkg to 2024.09.23
- Wayland support for Linux
- Temporarily disabling style transitions
Changed
- Updated example projects
- Optimized dependency size
- Improved Linux support
- Major update to the font engine
- Improved text rendering
- Enhanced
.natvissupport - Stylesheet updates
- Documentation improvements
- Text widget: improved caching
- vcpkg: Use Clang if available
Fixed
- Fixed
trimfunction - Fixed
drawImagecoordinates - Fixed WebP reading issues
- Fixed selected state behavior
- Improved keyboard focus behavior
- Various performance optimizations
Full Changelog: v0.9.1...v0.9.2
Brisk v0.9.1 (alpha)
See https://docs.brisklib.com/ for the documentation.
Key Features and Updates
Modular Components
-
Core Module:
- String Manipulation: UTF support for versatile string handling.
- Data Compression & Cryptography: Basic cryptographic functions and data compression support.
- Reflection and Serialization: Reflection support for runtime type inspection and JSON serialization.
- App-Global Settings & Threading: Manages global settings and threading with multi-thread-safe bindings.
-
Graphics Module:
- Color & Geometry Support: Native color spaces and geometry types for UI element positioning and transformations.
- SVG Rasterization & Image Processing: SVG rendering and basic image manipulation functions.
- Font Handling: Advanced text shaping using HarfBuzz and support for font caching, improving rendering speed.
-
Window Module:
- Clipboard & Native Dialogs: OS-level clipboard access and support for native file dialogs.
- Display Information: Access to monitor/display information for responsive design.
-
GUI Module:
- CSS-Like Flex Layout & Styling: Flexbox-inspired layout engine with support for stylesheets, enabling CSS-style inheritance of properties.
- Drag-and-Drop: Drag-and-drop support for interactivity.
- Binding Support: Supports data binding with transform functions for enhanced reactivity.
-
Widgets Module:
- UI Components: Initial set of widgets includes buttons, sliders, text editors, lists, toggles, combo boxes, progress bars, and more.
- Layouts: CSS flex-style layout support for responsive designs.
- Text Editor: LTR and RTL text support in text editors for multilingual editing capabilities.
Platform & Backend Support
- Platform Support:
- Windows, macOS, and Linux platforms with partial support for widgets and graphics, and alpha support for the window system.
- Graphics Backend Support:
- Windows: D3D11, D3D12, and WebGPU.
- macOS: Metal and WebGPU.
- Linux: Vulkan and OpenGL.
Development Requirements
- C++20 Compiler: Requires a C++20-compatible compiler (MSVC 2022, Clang, XCode, GCC).
- Dependency Management: Uses
vcpkgfor simplified dependency management across platforms.
Known Issues & Limitations
- Documentation: The documentation is in progress and may not reflect the latest updates; developers are encouraged to refer to the code examples provided.
- API Stability: API may experience breaking changes as we refine the design and improve functionality.
Example Projects
Refer to the examples directory and the brisk-helloworld repository for a minimal demonstration of the Brisk library’s capabilities.
Licensing
- GPL v2.0 or Commercial License: Brisk is available under the GPL v2.0 license for open-source use. A commercial license is also available for proprietary applications.
For feedback, contributions, or commercial licensing inquiries, please contact us at [email protected].