- Added new
egui_mobius_components
crate, a collection of reusable UI components for the egui_mobius framework - Added EventLogger component:
- Terminal-like widget for logging events with different severity levels
- Supports rich text formatting with customizable colors
- Thread-safe implementation compatible with the egui_mobius signal/slot architecture
- Support for categorizing logs by sender type and custom log styles
- Built-in timestamping and filtering capabilities
- Complete with examples that demonstrate usage in multi-threaded environments
- Added
logger_component
example that demonstrates the use of the EventLogger component
- Enhanced the workspace structure to include the new components crate
- Updated the prelude pattern across all crates for more consistent imports
- Fixed release tools to correctly handle workspace inheritance in Cargo.toml files
- Updated formatting in platform.banner module for clippy compliance
-- Added new feature, ReactiveWidgetRef, with Weak references that facilitates using components in a more retained-style manner or modular composition. This will cut down on the use of Arc and clone inside of a reactive widget. -- Added example "reactive_slider" to demonstrate the use of ReactiveWidgetRef.
-- New MobiusWidget trait, along with MobiusWidgetReactive, MobiusWidgetSlot, MobiusWidgetSignal allowing for dynamic composition of widgets in an ecapsulated context providing greater flexibiity to egui_mobius overall. Each widget can have a Dynamic, Signal, or Slot attached to it. -- Added an example "mobius-widget" to the examples to illustrate the use of this new composition style
-- Example masonry-reactive
demonstrating egui_mobius_reactive integrating with masonry
from xilem
-- Added appropriate README.md in the example; highlighting the versatility of egui_mobius_reactive
-- Added reactive_math for easier handling of math operation involving Derived and Dynamic
-- Updated the examples for reactive and clock_reactive
- Modified readme.md to reflect the evolving focus on egui_mobius_reactive and the async runtime
- Updated the getting started description
- Added links to the new egui_mobius_template repository
- Added new MobiusReactive runtime, enabling an async runtime for egui_mobius, runtime.rs
- Added start_async method on Slot type, updated in slot.rs
- Changed the clock_reactive example to be fully reactive + async, by making use of new MobiusRuntime
- Updated docstrings in lib.rs for egui_mobius_reactive, better description and example
- Clippy lint issues in types.rs & styled_buttons.rs
- Added Dynamic to reactive system - replacing the
Value<T>
type that was in the reactive system to avoid confusion with theValue
type in egui_mobius crate - Updated all downstream tests and examples to use
Dynamic<T>
- Added
From<Derived<T>>
implementation forDynamic<T>
to allow conversion fromDerived<T>
toDynamic<T>
- Updated
ValueExt::on_change
doctests to include proper imports and delays to ensure callback execution.
- Created clock_reactive example, which is the same functionality of clock_async
- Features of clock_reactive include smaller code base and reactive state management
- Provides counterpoint to the clock_async example
- Added
Debug
implementation forValue<T>
whereT
implementsDebug
. - Added missing
cargo doc
-style comments toValue
andDerived
modules, including examples for methods likeon_change
,new
,get
, andset
. - Added comprehensive tests for
Value
andDerived
to ensure thread safety and callback functionality. - Added
From<Derived<T>>
implementation forValue<T>
to allow conversion fromDerived<T>
toValue<T>
.
- Updated
ValueExt::on_change
doctests to include proper imports and delays to ensure callback execution.
- Fixed doctest failures in
Value
andDerived
caused by missing imports and incorrect module paths.
- Added
Default
implementation forReactiveList<T>
to simplify initialization. - Introduced
type Subscribers
alias to improve readability and reduce type complexity in the reactive system. - Added Clippy fixes for redundant closures and complex type definitions.
- Enhanced
ReactiveValue
trait with improved examples and documentation forsubscribe
andas_any
methods. - Added comprehensive tests for
ReactiveList
andValue
to ensure thread safety and callback functionality.
- Refactored
ReactiveList
to usetype Subscribers
for managing callback subscribers, improving code clarity. - Simplified
subscribe
method inReactiveValue
by removing redundant closures. - Improved documentation for
ReactiveList
andValue
with clearer examples and explanations. - Updated
on_change
andsubscribe
methods to ensure proper thread-safe callback execution.
- Fixed Clippy warnings related to redundant closures and complex type definitions.
- Fixed
Default
implementation forReactiveList<T>
to ensure proper trait bounds (Clone + Send + Sync + 'static
) are enforced. - Resolved doctest failures in
ReactiveList
andValue
caused by missing imports and incorrect module paths. - Fixed potential deadlock issues in
ReactiveList
by ensuring proper lock handling innotify_subscribers
.
- Added comprehensive
Debug
implementation forValue<T>
whereT
implementsDebug
. - Added missing
cargo doc
-style comments toValue
andDerived
modules, including examples for methods likeon_change
,new
,get
, andset
.
- Updated
ValueExt::on_change
doctests to include proper imports and delays to ensure callback execution. - Replaced
Into<Value<T>>
implementation forDerived<T>
withFrom<Derived<T>>
for better adherence to Rust best practices. - Improved documentation for
ValueExt
andDerived
to clarify usage and provide working examples.
- Fixed unresolved import issues in
ValueExt
doctests by correcting the module paths. - Fixed assertion failures in
ValueExt::on_change
doctests by adding appropriate delays to ensure callback execution. - Fixed doctest failures caused by missing imports and incorrect module paths.
- Added new reactive example showcasing:
- Thread-safe state sharing pattern
- Comprehensive AsyncDispatcher usage
- Change toml files for examples so they can be run from the root crate
- Updated reactive example to use
Value::set()
for proper change notification - Updated reactive example documentation with clearer usage instructions
- Fixed ownership issues in reactive system doc tests
- Fixed logo image not displaying on crates.io by using absolute GitHub URL
- Improved reactive system documentation with clearer examples
- Fixed doctest issues in egui_mobius_reactive
- Fixed reactive update timing in examples
- New
egui_mobius_reactive
crate for thread-safe reactive state management - Comprehensive documentation for reactive system
- Updated reactive example to use
Value::set()
for proper change notification - Improved example documentation with clearer usage instructions
- Removed duplicate reactive.rs from core crate (now in egui_mobius_reactive)
- Added comprehensive module-level documentation for factory.rs
- Updated lib.rs documentation to reflect reactive system move to egui_mobius_reactive crate
- Enhanced core documentation with real-world examples:
- Added thread-safe state sharing pattern with signal-slot example
- Added comprehensive AsyncDispatcher usage pattern
- Fixed doubled value not updating in reactive example by using proper update method
- example "reactive":
- Reactive example showcasing context and method chaining
- Renamed
ReactiveCtx
toSignalRegistry
for better clarity - Added
Default
implementation forSignalRegistry
- Enhanced reactive example documentation with detailed threaded runtime info
- Fixed ownership issues in reactive system doc tests
- example "reactive":
- Reactive example showcasing context and method chaining
- example/clock_async:
- Buffer size control in control panel
- VecDeque for log storage (replaces Vec)
- LoggerPanel::new with buffer size parameter
- New subscriber example showcasing signal-slot pattern with real-time data visualization
- IDE settings to .gitignore
- Removed edition2024 feature flag (now stabilized in Rust 1.85)
- Improved code quality in subscriber example:
- Added Default implementations
- Fixed clippy warnings
- Removed unused imports
- Renamed "Green Event" button to "Custom Event 2"
- Unified Custom Event buttons to use same logging color
- Added RUN/STOP button logging color selection
- Consolidated dispatching functionality in
dispatching
module - Removed old Dispatcher implementation from factory.rs
- Enhanced documentation for signal-slot creation
- Text color customization for StyledButton
- Default implementation for StyledButton
- Simplified widget test framework by removing egui_kittest dependency
- Removed custom winit crate in favor of standard implementation
- Integration test files
- Custom winit crate and egui_kittest dependencies
- New ButtonColors struct to separate button appearance from log colors
- Unified RUN/STOP log color in LogColors
- Default implementation for StatefulButton
- Improved UI responsiveness with better lock management
- Enhanced button layout and padding
- Separated button appearance colors from log colors
- Removed deprecated derive macros in favor of Signal/Slot pattern
- Lock contention issues in clock_async example
- Button color synchronization between UI and logs
- Deprecated derive macros and associated code
macros.rs
module
- Simplified Signal/Slot API by removing channel number requirement
- Improved ergonomics of create_signal_slot function
- Removed deprecated as_command_derive dependency
- Updated all examples to use new Signal/Slot API
- Formally deprecated
AsCommand
macro with warning messages - Enhanced documentation for Signal/Slot pattern as the recommended approach
- Removed deprecated
as_command_derive
crate
- Updated to egui 0.31.1 and egui_plot 0.31.0
- Standardized workspace dependencies for egui ecosystem crates
- Deprecated
AsCommand
macro in favor of Signal/Slot pattern with AsyncDispatcher
- Version mismatches between egui and egui_taffy
- Color imports in realtime_plot example
- New clock_async example showcasing:
- Thread-aware slot system with background clock generation
- Comprehensive event logging with proper thread separation
- Taffy layout integration for responsive UI
- Interactive controls (slider and combo box)
- Updated to egui 0.30.0
- Added Taffy layout support
- Improved README with detailed example documentation
- Logger panel layout in clock_async example
- Version mismatch in realtime_plot example
- Initial support for async operations
- Enhanced thread safety features
- Improved signal-slot system
- Better error handling
All notable changes to egui_mobius will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Thread-aware slot system with true hybrid sync/async operation
- Type-safe message passing between UI and background threads
- Qt-inspired signal-slot architecture
- Value for thread-safe state management
- Support for background operations with clean thread separation
- AsyncDispatcher with Tokio runtime integration
- Comprehensive example suite demonstrating core features
- Evolved to a complete application development platform
- Enhanced state management with automatic UI updates
- Improved thread safety and message ordering
- Legacy examples moved to
deprecated
branch
- Internal development version
- Added initial async support
- Enhanced dispatcher system
- First internal development version
- Basic signal-slot implementation
- Initial UI integration with egui
- Enhanced logging and debugging capabilities
- Additional widget templates
- Performance optimizations
- Extended documentation and tutorials
- 0.3.x: Initial public releases
- 0.3.0-alpha.x: Pre-release versions
- 0.3.0: First stable release
- 0.3.x: Bug fixes and minor improvements
- 0.4.0+: Feature additions
- 1.0.0: Production-ready release