- Safety: Marked
BitmapBundle::from_ptr_owned()asunsafe(#134) - Gallery: Added separator and Exit tool to gallery toolbar
- Build: Added macOS aarch64-to-x86_64 cross-compilation CI job
- Local Fork Support: Made it possible to use a local fork of wxWidgets with wxDragon
- Fixed taskbar icon event handling on GTK
- Fixed
WindowHandleinvalidation and added regression test - Fixed gallery page addition order and Treebook title spacing
- wxApp Methods: Added many new wxApp methods including
set_top_window,get_top_window,is_main_loop_running,exit_main_loop,set_exit_on_frame_delete,get_exit_on_frame_delete,set_app_name,get_app_name,set_app_display_name,get_app_display_name,set_vendor_name,get_vendor_name,set_vendor_display_name,get_vendor_display_name - BitmapToggleButton XRC: Added BitmapToggleButton support in XRC macro
- Fixed truncated string getters across widgets (StyledTextCtrl, TreeListCtrl, WebView) that could return corrupted text
- Auto cleanup DDE connections on Windows to prevent resource leaks
- wxGrid: Wrapped wxGrid widget with full event support wired into the Rust event system
- wxMDIParentFrame/wxMDIChildFrame: Added MDI (Multiple Document Interface) support
- wxPrinter/wxPrintout: Added printing support with printing dialogs
- wxStdDialogButtonSizer: Wrapped wxStdDialogButtonSizer for standard dialog button layouts
- wxAccessible: Added accessibility support wrapper
- wxSound: Added wxSound for WAV playback
- wxGrid: Added additional grid functions beyond initial wrapping
- wxIPC: Refined wxServer/wxClient/wxConn to use DDE on Windows and TCP on Linux/macOS
- wxTopLevelWindow: Added
RequestUserAttentionwrapper
- Fixed
get_valueand related functions returning null bytes in the middle of strings
- BitmapToggleButton: Added BitmapToggleButton widget
- wxConfig: Added wxConfig wrapper for persistent configuration storage
- wxUIActionSimulator: Added UI automation support for testing
- wxSingleInstanceChecker: Added single instance application support
- wxIPC: Added inter-process communication support
- AboutBox: Added AboutBox dialog and
Button::set_default()
- Menu/MenuBar: Added
find_item(), full menu item insertion and removal wrappers - ListBox: Added
set_string(),ensure_visible(), andinsert()methods - CheckListBox/Choice/ComboBox: Added
insert()method - AuiNotebook: Wrapped missing functions
- TreeCtrl: Added missing tree control functions
- wxLocale/wxUILocale: Added comprehensive locale support including
find_language_info()and language name lookup - MSWDisableComposited: Added Windows-specific composited rendering control
- Fixed issue #109
- Fixed cross-platform integer type conversion compatibility
- Fixed various clippy warnings
- Added static CRT linking support for MSVC targets
- Fixed zigbuild linking with proper libc++ for C++ runtime symbols
- Improved Linux CI build compatibility
- Wrap wxTranslations
- Implement escape handling API for dialog
- Use thread-local registry to track window handle, avoid double-free
- Widget Copy Trait: Implemented
Copytrait for all widgets- All widgets now implement
Copy, eliminating the need to clone widgets before using them in closures - Simplifies event handler code by allowing direct widget usage without explicit cloning
- All widgets now implement
- WebView Widget: Added WebView widget with Edge/WebView2 backend support for Windows
- Added Edge/WebView2 backend support for modern Windows rendering
- Auto-switch zoom type to Layout when WebView backend is IE
- Disable zoom in/out for IE backend
- Cross-platform WebView support with backend selection via enum
-
DPI Awareness: Apply DIP (Device Independent Pixels) awareness when converting wxPoint and wxSize
-
TextCtrl: Added
set_insertion_point_end()method for convenient cursor positioning at end of text -
Drag and Drop Improvements:
- Fixed Drag-N-Drop closures memory leakage
- Refined TextDropTarget implementation
- Refined FileDropTarget implementation
- Refined gauge logic in gallery example for better demonstration
- Improved development workflow with default features enabled in wxdragon crate
- Added wxUSE_NO_MANIFEST=1 flag for better Windows compatibility
- Fixed Tool::on_click event handling for Linux platform
- Resolved cross-platform issues with tool events (EVT_TOOL)
- Renamed ScrollEvent to ScrollEventType and ScrollEventData to ScrollEvent for better clarity
- Removed unused ScrollEvents trait implementation from Slider widget
- Added dedicated Slider::on_slider method for slider-specific event handling
- Enhanced simple_xrc_test and neat_demo examples with improved code organization
- Enhanced Linux compatibility for tool events and window icons
- Improved cross-platform consistency for event handling
- Added cross-compiling support from Linux to Windows
- Added MenuBar::enable_item & MenuBar::is_item_enabled
- Added Menu::enable_item & Menu::is_item_enabled
- Added Point::DEFAULT_POSITION & Size::DEFAULT_SIZE constants
- Added TreeCtrl::expand method
- Added WxWidget::process_menu_command & WxWidget::post_menu_command methods
- Added CustomDataViewTreeModel::item_added
- Added DataViewCtrl::set_sorting_column method
- Refactored wxDragon::Menu
- Improved CustomDataViewTreeModel
- Fixed taskbar issues in macOS
- Fixed popup_menu issue in menu_events_demo example
- Fixed DataViewEventData::get_position
- Completed neat_demo example
- Refined menu_events_demo, dataviewtree, and dark_mode_demo examples
- Renamed dataview example to dataviewtree
- Renamed TreeViewEventHandler to DataViewTreeEventHandler
- Renamed DataViewEvent to DataViewEventType
- Renamed DataViewEventData to DataViewEvent
- Dialog Icon Support: Added
set_icon()method to Dialog widget for setting window icons
- Calendar Widget: Fixed double adding month issue in calendar widget
- Build System: Fixed wxWidgets source path issue in CMakeLists.txt
-
DataViewModel Trait Simplification: Simplified the DataViewModel trait for better usability
-
Memory Management Improvements: Enhanced reference counting and memory safety
- Corrected reference count handling for DataViewListModel struct
- Implemented Weak reference usage in event closures to ensure proper Drop behavior
- Prevents memory leaks by ensuring proper cleanup of DataView-related objects
-
DataView Virtual List Refinements: Multiple improvements to CustomDataViewVirtualListModel
- Cleaned up WxdCustomDataViewVirtualListModel C++ class implementation
- Removed unnecessary callback_data field for simplified architecture
- Refined CustomDataViewVirtualListModel struct for better performance
-
API Improvements: Enhanced existing APIs for better developer experience
- Renamed
VariantType::to_type_stringtoVariantType::as_strfor Rust conventions
- Renamed
-
Build System Enhancements: Improved build reliability and developer experience
- Enhanced SHA256 verification for downloaded wxWidgets zip archives
- Improved wxWidgets search path handling in C++ projects
- Better resource file detection (wx.rc) for gallery example
-
neat_demo: Added new comprehensive example showcasing wxDragon features
- Demonstrates modern UI patterns and best practices
- Clean, minimal example for getting started with wxDragon
-
Gallery & Menu Events: Refined gallery and menu_events_demo examples
- Improved DataView virtual tab demonstration
- Enhanced example code quality and documentation
- Better resource file handling
- Build System: Various build system improvements and fixes
- Code Quality: General code refinements and cleanups
- App Events Trait with macOS Implementation: Added comprehensive application event handling system
-
Build System Improvements: Major refactoring of the build system for better maintainability
- Now downloads wxWidgets as a zip archive during build
-
DataViewItem API Enhancement: Improved DataViewItem functionality
- Added
is_ok()method for validity checking - Added
get_id()method for retrieving item identifiers - Better item state management
- Added
-
Code Quality Improvements: Enhanced code maintainability and safety
- Removed
lazy_staticdependency in favor of modern alternatives - Fixed potential memory leak in
wxDragon::main - Refactored
argc&argvhandling for better memory safety - Refined
wxd_Mainfunction implementation - Removed unsafe calls from user code where possible
- Cleaned up unused code and dependencies
- Removed
-
DataViewTreeModel Implementation: Added comprehensive tree model support for DataView controls
- Full implementation of hierarchical data models
- Enhanced DataView functionality with tree-based data structures
- Type Safety: Improved type handling throughout the codebase
- Using
Option<T>instead of-1sentinel values for better type safety - Enhanced null-safety patterns
- Using
- Build Configuration: Streamlined build process
- Gallery Example Updates: Improved gallery example presentation
- ✅ Enhanced macOS Support: Full application event handling support
- ✅ Improved Windows GNU Support: Better cross-compilation from macOS
- ✅ Linux: All improvements fully compatible
- Implement From and Into Bitmap for NullBitmap
- DataViewCtrl Context Menu Support: Added context menu event support for DataViewCtrl
- Implemented
on_item_context_menuevent handler for DataViewCtrl - Added DataViewEventData
get_positionmethod for retrieving context menu position - Enhanced DataViewCtrl integration with menu_events_demo example
- Improved event handling for DataView controls with position information
- Implemented
-
Event System: Fixed WXDEventTypeCEnum issue with negative value handling
- Added a negative value to WXDEventTypeCEnum for proper event type representation
- Resolved event enum discriminant issues across platforms
- Fixed EventType enum cross-platform compatibility issues
-
Popup Menu Fix: Fixed WxWidget::popup_menu method implementation
- Corrected duplicate popup_menu implementation issues
- Improved popup menu behavior across different widget types
- Enhanced menu positioning and context menu support
-
DataViewItem Architecture: Refactored struct wxd_DataViewItem_t and related functionality
- Improved DataViewItem internal structure for better memory management
- Enhanced DataView event data handling
- Added DataViewEventData to prelude module for easier access
-
Bitmap Support: Added NullBitmap support for better null bitmap handling
- Provides a safe way to represent and check for null bitmaps
- Improves bitmap-related API consistency
- Development Guidelines: Added copilot-instructions.md for project development guidance
- Provides coding standards and best practices for contributors
- Documents architectural patterns and design decisions
- Widget Traits Organization: Embedded WindowEvents and MenuEvents trait implementations into widget_traits
- Improved trait implementation structure for better organization
- Enhanced widget trait system with embedded event handling capabilities
- Popup Menu: Fixed duplicate popup_menu implementation
- Resolved code duplication issue in popup menu functionality
- Ensured consistent popup menu behavior across widgets
-
TreeListCtrl Widget: Added TreeListCtrl widget for hierarchical data display with column support
- Combines tree structure with list/table functionality
- Enhanced tree control with column-based data display
- Advanced hierarchical data management capabilities
-
Menu Event Handlers: Added comprehensive menu event handling system
- Enhanced menu system with event handler support
- Improved menu interaction and callback functionality
- Better menu event management across the framework
-
SearchAnchor Functionality: Added SearchAnchor support for text search operations
- Added SearchAnchor call and binding implementation
- Enhanced text search capabilities in text controls
- Improved text navigation and search functionality
-
TextCtrl Selection Management: Enhanced TextCtrl with comprehensive selection methods
- Added GetSelection/SetSelection methods for text selection control
- Added SelectAll method for complete text selection
- Added GetStringSelection method for retrieving selected text content
- Improved text manipulation and selection handling
-
StyledTextCtrl Text Wrapping: Added text wrapping functionality to StyledTextCtrl
- Added SetWrapMode/GetWrapMode methods for configurable text wrapping
- Enhanced text display with flexible wrapping options
- Improved code editor functionality with wrap mode control
-
Focus Management: Enhanced focus handling for widgets
- Added AcceptsFocusFromKeyboard method for keyboard focus control
- Added SetCanFocus method for focus behavior configuration
- Improved widget focus management and accessibility
-
SystemOptions Integration: Added SystemOptions support for system-level configuration
- Enhanced system configuration access through SystemOptions
- Better integration with wxWidgets system options
- Improved cross-platform system setting management
-
SpinCtrl Initial Values: Fixed SpinCtrl and SpinCtrlDouble initial value handling issues
- Corrected widget initialization problems with spin controls
- Improved default value handling for numeric input controls
- Enhanced spin control reliability and consistency
-
Code Generation Issues: Resolved const_generator compilation and functionality issues
- Fixed constant generation problems affecting build process
- Improved cross-platform constant handling
- Enhanced build system reliability
- @mjfs - SearchAnchor functionality and improvements
-
ComboBox Text Manipulation: Added comprehensive text manipulation functions for ComboBox widget
- Added text insertion, deletion, selection and manipulation methods
- Enhanced ComboBox API with text editing capabilities
- Improved ComboBox usability for dynamic text content
-
TabCtrl Widget Functions: Added extensive TabCtrl functionality for tab management
- Enhanced tab control operations and management
- Added comprehensive tab manipulation methods
- Improved TabCtrl widget capabilities
-
Event Data Modifier State: Added modifier state checking in event data
- Enhanced event handling with keyboard modifier detection
- Improved event system with modifier key state information
- Better support for keyboard shortcuts and modifier combinations
-
Widget Builder Improvements: Enhanced widget builders with better initialization options
- Added
ChoiceBuilder::with_selection()method for initial selection setting - Added
CheckBoxBuilder::with_value()method for initial checkbox state - Improved builder pattern consistency across widgets
- Added
-
Cross-Platform Event Enum: Fixed EventType enum cross-platform compatibility issues
- Resolved enum discriminant inconsistencies between platforms
- Applied bitflags to EventType for better type safety
- Fixed compilation errors with Rust compiler v1.90.0
-
Windows ComboBox Compatibility: Fixed compilation errors for new ComboBox functions on Windows
- Resolved Windows-specific build issues with ComboBox text functions
- Improved cross-platform compatibility for ComboBox widget
-
Widget Initial Values: Fixed SpinCtrl and CheckBox initial value issues
- Corrected widget initialization problems
- Improved default value handling for form controls
- Dialog Builder: Added Dialog builder to support creating generic dialog directly
- Enables creating custom dialogs with builder pattern
- Provides direct access to generic dialog functionality
- Simplifies custom dialog creation workflow
- Virtual List Refinements: Refined virtual list implementation
- Improved virtual list performance and stability
- Enhanced virtual list behavior consistency
- Better handling of edge cases in virtual list operations
- DataViewTreeCtrl Clear Columns: Added
clear_columns()method to DataViewTreeCtrl for removing all columns at once- Enables dynamic column management for data view controls
- Useful for rebuilding column layouts or clearing view state
- Issue #42: Fixed reported issue in the codebase
- @mjfs - Issue fix and improvements
- WxWidget Freeze/Thaw Support: Added freeze() and thaw() methods to WxWidget trait for improved performance during bulk updates
- Prevents flicker and improves responsiveness when making multiple UI changes
- Automatically suspends window redraws until thaw() is called
- Useful for bulk operations like populating large lists or complex layout changes
- Frame Widget Enhancement: Added access to internal window in Frame widget
- Enables advanced window manipulation and integration with platform-specific APIs
- Provides access to underlying wxWindow for specialized operations
- Keyboard Event Support: Added GetUnicodeKey() method to keyboard events
- Better Unicode character handling in key events
- Improved international keyboard support
- Window API Extensions: Added wxWindow::GetHandle() method for native window handle access
- Enables integration with platform-specific windowing systems
- Provides access to HWND on Windows, NSWindow on macOS, GtkWidget on Linux
- TextCtrl Position Visibility: Fixed wxd_Window_IsPositionVisible() implementation for TextCtrl
- Corrected position visibility checking for text controls
- Improved text control scrolling and positioning behavior
- Code Quality: Resolved cargo clippy warnings and formatting issues
- Improved code consistency and maintainability
- Enhanced build process reliability
- @Merisy-Thing - Freeze/Thaw functionality
- @lologor - Window handle API and Frame enhancements
- Fix "stc,xrc,aui" features build on windows and linux, add github CI to verify the cross-platform feature-enabled build
- Wrap wxSimpleBook with xrc support
- Add more functions to various widgets ListBox .delete .popup_menu .set_string_selection Menu: selected event .on_selected Notebook .remove_page AppProgressIndicator
Contributed by @Merisy-Thing
- Fix show notification on windows will block quit, use wxGenericNotificationMessage on windows instead of native one
- Refine cmake script, contributed by @ssrlive
- Incorrect font constants mapping issue
- Abnormal high CPU usage reported by issue #30
- Add Event::set_can_veto
- Add Frame::close(force:bool)
- Update to wxWidgets 3.3.1
- Fix event.veto doesn't work reported by issue #21
- Improve prebuilt library handling with fixed target folder
Add event.can_veto() and event.veto().
Try fix linux build error, provide compact util to dealing with different glib versions.
Fix linux build error reported via issue #12
- TaskBarIcon Widget: Added comprehensive system tray/taskbar icon widget with full cross-platform support
- Platform-Aware Implementation: Intelligent platform detection for optimal user experience
- Windows: Shows in system tray (notification area) with full event support
- macOS: Shows in dock or menu bar (CustomStatusItem) with native click behavior
- Linux: Shows in system tray with GTK backend integration (varies by desktop environment)
- Icon Type Management: Flexible icon type configuration with
TaskBarIconTypeenumDefault: Platform-appropriate default behavior (CustomStatusItem on macOS, Dock elsewhere)Dock: Traditional dock icon placement (typically macOS dock)CustomStatusItem: Menu bar/system tray placement (macOS menu bar, Windows system tray)
- Automatic Popup Menus: Native popup menu functionality using wxWidgets'
CreatePopupMenu()overrideset_popup_menu()andget_popup_menu()methods for menu management- Automatic menu display when taskbar icon is clicked (platform-specific behavior)
- Menu creates copies for wxWidgets ownership while preserving original template
- Event Handling System: Comprehensive event system with platform-specific conditional compilation
- Menu events handled directly by TaskBarIcon via
on_menu()method (not routed to parent frame) - Cross-platform basic events: left click, double-click (Windows/Linux only)
- Windows-specific events: mouse movement, right-click, balloon tooltips with proper conditional compilation
- Platform events gracefully degrade on unsupported platforms (return
wxEVT_NULL)
- Menu events handled directly by TaskBarIcon via
- Builder Pattern Integration: Full wxDragon builder pattern with fluent API
with_icon_type(),with_icon(),with_icon_bundle(),with_tooltip()configuration methods- Immediate icon setting during construction for streamlined initialization
- Platform-Aware Implementation: Intelligent platform detection for optimal user experience
- Cross-Platform FFI Layer: Enhanced C++ binding layer with robust platform detection
- TaskBarIcon C++ Class: Custom
wxdTaskBarIconclass extendingwxTaskBarIconwith automatic popup menu support - Platform-Specific Icon Type Mapping: Intelligent default icon type selection based on platform capabilities
- Event Type Safety: Enhanced event mapping with individual constant checking to prevent compilation errors
- Memory Management: Proper menu copying and ownership handling for wxWidgets integration
- TaskBarIcon C++ Class: Custom
- Menu System Integration: Enhanced Menu widget with TaskBarIcon-specific functionality
- Added
from_ptr()method to Menu for FFI pointer conversion support - Seamless integration between TaskBarIcon popup menus and existing menu event handling
- Added
- Build System Robustness: Improved cross-platform compilation with conditional event support
- Windows Cross-Compilation: Fixed TaskBarIcon event constants availability checking
- Conditional Compilation: Platform-specific event mapping with graceful fallback for unavailable events
- FFI Constant Generation: Enhanced constant generation across all platforms (GTK, MSW, OSX)
- Enhanced Cross-Platform Compatibility: Full TaskBarIcon support across all wxDragon target platforms
- ✅ Windows (MSVC/MinGW): Complete system tray support with balloon tooltips and full event system
- ✅ macOS: Native menu bar integration with CustomStatusItem support and automatic popup menus
- ✅ Linux (GTK): System tray integration with desktop environment compatibility
- ✅ Cross-Compilation: Fixed Windows cross-compilation from macOS with proper event constant handling
- Windows Cross-Compilation: Fixed critical compilation errors when building for Windows targets
- Resolved
wxEVT_TASKBAR_*undefined symbol errors by adding proper conditional compilation guards - Enhanced event mapping to check individual event constants rather than assuming platform availability
- Fixed event type mapping to gracefully handle missing event constants with
wxEVT_NULLfallback
- Resolved
- FFI Constant Mapping: Corrected TaskBarIcon type constant values across all platforms
- Fixed incorrect FFI constant values that were causing icon type mismapping
- Ensured consistent constant values:
WXD_TBI_DEFAULT_TYPE: 0,WXD_TBI_DOCK: 1,WXD_TBI_CUSTOM_STATUSITEM: 2 - Validated constant mapping across all platform-specific constant files (GTK, MSW, OSX)
- taskbar_demo: New comprehensive example demonstrating complete TaskBarIcon functionality
- Full popup menu creation with multiple menu items (Open, Settings, About, Exit)
- Automatic popup menu display when clicking the taskbar icon
- Menu event handling with status updates and application control
- Icon creation using ArtProvider with fallback bitmap support
- Cross-platform icon visibility verification and error handling
- Demonstrates proper TaskBarIcon lifecycle management and cleanup
- C++ Implementation: Advanced TaskBarIcon C++ wrapper with virtual method override
- Custom
wxdTaskBarIconclass extendingwxTaskBarIconwithCreatePopupMenu()override - Automatic menu copying system preserving item properties (enabled state, checkable status)
- Platform-aware icon type selection with conditional compilation support
- Custom
- Event Architecture: Sophisticated event handling system with platform-specific feature detection
- Conditional compilation guards for platform-specific TaskBarIcon events
- Event type safety with individual constant availability checking
- Graceful degradation for unsupported events returning
wxEVT_NULL
- Memory Safety: Enhanced memory management patterns for TaskBarIcon lifecycle
- Special Drop implementation preserving system tray icon visibility
- Proper menu template management without affecting original menu references
- Safe FFI pointer handling with comprehensive null pointer checks
- Added new
TaskBarIconwidget with complete builder pattern support - Added
TaskBarIconTypeenum for platform-aware icon type configuration - Enhanced
Menuwidget withfrom_ptr()method for TaskBarIcon integration - Added TaskBarIcon-specific event handling methods with platform conditional compilation
- All new APIs follow wxDragon's established patterns for memory safety and cross-platform compatibility
- No breaking changes - all additions are backward compatible
- TaskBarIcon Usage: New TaskBarIcon widget provides modern system tray integration
- Cross-Platform Behavior: TaskBarIcon automatically adapts to platform conventions (menu bar on macOS, system tray on Windows/Linux)
- Event Handling: TaskBarIcon menu events are handled by the icon itself, not parent windows
- Build Compatibility: Enhanced build system ensures successful compilation across all supported platforms
- Enhanced Virtual List System: Major refactoring with comprehensive bug fixes and performance improvements
- New Cache Algorithm: Introduced progressive measurement cache system with LRU eviction (100-item limit)
- Horizontal Layout Support: Complete implementation of horizontal virtual list layout mode
- Items arranged horizontally (columns) with proper width calculation
- Text wrapping and natural flow measurement for horizontal text content
- Seamless switching between vertical and horizontal modes
- Two-Pass Measurement System: Implemented sophisticated measurement approach for consistent positioning
- PASS 1: Determine potentially visible items using cache-first approach
- PASS 2: Measure only confirmed visible items to avoid position inconsistencies
- Eliminates measurement window shifting that caused item overlap issues
- Virtual List Critical Issues: Resolved multiple severe rendering and interaction problems
- Vertical Mode Overlap Fix: Fixed items overlapping in vertical mode due to improper panel positioning
- Newly created panels are now hidden until properly positioned to prevent visual artifacts
- Corrected initial panel sizing to use proper dimensions instead of temporary placeholder sizes
- Mouse Wheel vs Scrollbar Coordination: Fixed synchronization issues between different scroll methods
- Implemented boundary-based end-of-list detection instead of aggressive ratio-based triggers
- Mouse wheel scrolling now uses the same safety padding logic as scrollbar dragging
- Eliminated false triggers when scrolling near the end of content
- Last Item Clipping Resolution: Fixed persistent clipping of the final item when scrolling to the end
- Added configurable safety padding (20px default) to ensure last item full visibility
- Enhanced end-of-list positioning logic with fresh measurement integration
- Applied consistent safety padding across both scrollbar dragging and mouse wheel scrolling
- Scroll Position Consistency: Resolved scroll position coordination problems between input methods
- Fixed mouse wheel becoming non-functional after scrollbar drag to end
- Implemented directional scroll detection to prevent infinite positioning loops
- Enhanced total content size synchronization with proper padding coordination
- Vertical Mode Overlap Fix: Fixed items overlapping in vertical mode due to improper panel positioning
- virtual_list_demo: Enhanced example with comprehensive testing scenarios
- Demonstrates both vertical and horizontal layout modes
- Includes edge case testing (scrolling to end, rapid scrolling)
- Shows proper configuration usage and error handling patterns
- Enhanced cross-platform virtual list performance for all supported platforms:
- ✅ Linux: Improved GTK backend virtual list rendering
- ✅ macOS: Enhanced Cocoa virtual list performance
- ✅ Windows MSVC/MinGW: Optimized Windows virtual list behavior
- Consistent virtual list behavior and performance across all platforms
- Added configurable parameters in
VirtualListInternalParams - Enhanced virtual list configuration options for performance tuning
- All changes are backward compatible - no breaking changes to existing API
- New configuration parameters use sensible defaults for existing code
- Existing Virtual Lists: All existing virtual list implementations will automatically benefit from bug fixes and performance improvements
- Configuration: New configuration parameters use optimal defaults; no changes required for existing code
- Performance: Users may notice improved responsiveness and eliminated visual artifacts in virtual list scrolling
-
Universal Widget Casting System: Added comprehensive runtime widget type determination and casting for all 41 wxDragon widgets
- Type-safe casting with
window.as_widget::<T>()method using wxWidgets RTTI (GetClassName) - Zero performance overhead with O(1) string comparison and graceful failure handling
- Complete coverage for all widget types: basic widgets (Button, TextCtrl), advanced widgets (TreeCtrl, DataView), container widgets (Frame, Notebook), and specialized widgets (ActivityIndicator, Calendar)
- Automatic macro-based implementation for 37 standard widgets plus manual implementations for 4 complex widgets (Frame, SplitterWindow, CommandLinkButton, ScrolledWindow)
- Enables powerful dynamic UI manipulation and significantly improves developer experience for complex applications
- Type-safe casting with
-
Windows 7 Target Support: Added comprehensive Windows 7 compatible wxWidgets library support with pre-built binaries
- Official Target Detection: Native support for official Windows 7 Rust targets (
i686-win7-windows-msvc,x86_64-win7-windows-msvc) - Environment Variable Override:
WXDRAGON_TARGET_OVERRIDEsupport for manual Windows 7 library selection - Pre-built Libraries: Complete wxWidgets 3.3.0 libraries for both 32-bit and 64-bit Windows 7 targets
- Build System Integration: Enhanced build.rs with TARGET environment variable detection and fallback mechanisms
- Cross-Architecture Support: Full support for both i686 (32-bit) and x86_64 (64-bit) Windows 7 architectures
- Usage Examples:
- Direct:
cargo build --target i686-win7-windows-msvc(when target is available) - Override:
WXDRAGON_TARGET_OVERRIDE=i686-win7-windows-msvc cargo build --target i686-pc-windows-msvc
- Direct:
- Official Target Detection: Native support for official Windows 7 Rust targets (
-
Enhanced Virtual List Example: Added comprehensive
virtual_list_demoexample showcasing advanced DataView usage- Adaptive pooling system for efficient large dataset handling
- Configuration-driven virtual list management
- Demonstrates best practices for virtual list implementations with thousands of items
- Advanced error handling and item context management
-
Improved C++ String Handling: Fixed GetLabel/GetString API consistency across all widgets
- Enhanced RichTextCtrl: GetValue, GetRange, GetSelectedText methods
- Enhanced StyledTextCtrl: GetText, GetSelectedText, GetLineText methods
- Enhanced CommandEvent: GetString method
- Unified copy_wxstring_to_buffer pattern for consistent string handling across all widgets
-
wxWidgets Build Workflow: Comprehensive build system for Windows 7 pre-built libraries
- Automated GitHub Actions workflow for building Windows 7 compatible wxWidgets libraries
- Support for both debug and release configurations for i686 and x86_64 architectures
- Proper library organization with vc_lib (32-bit) and vc_x64_lib (64-bit) directory structures
- Enhanced version information and Windows 7 compatibility metadata in distributed packages
-
Widget Casting Infrastructure: Added comprehensive macro system for universal widget casting
impl_widget_cast!macro for automatic casting implementation across standard widgets- Manual casting implementations for complex widget patterns (tuple structs, composition patterns)
- Enhanced window base functionality with GetClassName support for reliable type verification
-
Build System Improvements: Enhanced cross-platform build compatibility
- TARGET environment variable detection for official Windows 7 targets
- Fallback logic maintaining backward compatibility with existing target detection
- Improved library directory detection with architecture-specific handling
- Enhanced setup_linking function with consistent artifact name resolution
-
FFI Layer Extensions: Expanded C++ binding layer for new functionality
- Enhanced window management API with GetClassName for widget type identification
- Improved string handling functions across all widget types
- Better memory management for string operations and widget casting
- ✅ Windows 7 Compatibility: Full support for Windows 7 (32-bit and 64-bit) with dedicated pre-built libraries
- ✅ Enhanced Windows MSVC: Improved Windows MSVC build support with proper library organization
- ✅ Cross-Platform Widget Casting: Universal widget casting works consistently across Linux, macOS, and Windows
- ✅ Build System Robustness: Enhanced build reliability across all supported platforms
- virtual_list_demo: New comprehensive example demonstrating advanced virtual list functionality
- Showcases adaptive pooling for handling large datasets efficiently
- Demonstrates configuration-driven virtual list management
- Includes error handling and best practices for virtual list implementations
- Added
as_widget::<T>()method to all widgets viaWxWidgettrait for runtime type casting - Enhanced window module with GetClassName functionality for type identification
- All new APIs follow wxDragon's established patterns for memory safety and type consistency
- No breaking changes - all additions are backward compatible
- Windows 7 Users: Can now use dedicated Windows 7 targets for better compatibility
- Widget Casting: Existing code continues to work unchanged; new casting functionality is purely additive
- Build System: Enhanced target detection is transparent to existing users
-
RichTextCtrl Widget: Added comprehensive RichTextCtrl widget for advanced rich text editing
- Full-featured rich text control with formatting capabilities (bold, italic, underline)
- Color support for both text and background colors with selection-based and range-based methods
- Complete file operations with native file dialogs (RTF and TXT format support)
- Comprehensive API with 600+ lines of Rust bindings covering text manipulation, styling, and formatting
- Support for undo/redo operations, clipboard integration (cut, copy, paste)
- Advanced text selection and manipulation features
- Seamless integration with gallery example showcasing all functionality
- XRC support for loading RichTextCtrl from XML resource files
-
Generic Scrolling Trait (WxScrollable): Implemented comprehensive scrolling functionality for multiple widgets
- Generic
WxScrollabletrait following the same inheritance pattern asWxWidgettrait - Universal scrolling methods:
show_position(),scroll_into_view(),is_position_visible(),get_last_position() - Cross-platform compatibility with intelligent widget detection (TextCtrl, RichTextCtrl, StyledTextCtrl)
- Applied to key scrollable widgets: RichTextCtrl, TextCtrl, ListCtrl, TreeCtrl, ScrolledWindow, StyledTextCtrl
- Enables auto-scroll functionality perfect for log display and content navigation
- Type-safe position-based scrolling with fallback mechanisms for different widget types
- Generic
-
Enhanced Gallery Example: Significantly expanded gallery with comprehensive RichText demonstration
- Rich text editing with formatting buttons (bold, italic, underline, font size control)
- Color manipulation tools (text color, background color, reset functionality)
- Professional file operations using native file dialogs with proper error handling
- Scrolling demonstrations with auto-scroll for log-like behavior
- Real-time status updates showing cursor position and selection information
- Advanced text manipulation showcasing the full power of RichTextCtrl
-
File Dialog Integration: Enhanced file operations throughout examples
- Proper save/load functionality with native file dialogs supporting multiple formats
- Smart file type detection based on file extensions
- Error handling with user-friendly status messages
- Support for both RTF (rich text format) and TXT (plain text) files
-
Event System Enhancement: Extended event system for rich text functionality
- Added comprehensive RichText event constants (261-264) for stylesheet and content events
- Enhanced event mapping in C++ layer with proper feature guards
- Improved conditional compilation system for optional richtext feature
-
C++ API Extensions: Added extensive C++ binding layer for rich text and scrolling
- 75+ exported RichText functions covering all major functionality
- Cross-platform scrolling implementations with intelligent widget detection
- Enhanced window management with scrolling function additions
- Proper memory management and error handling in C++ layer
-
Feature System: Improved optional feature compilation
- RichText functionality properly gated behind
richtextfeature flag - Conditional compilation throughout codebase for better modularity
- Enhanced CMakeLists.txt with richtext conditional compilation support
- RichText functionality properly gated behind
-
API Exports: Enhanced public API structure
- Added
WxScrollabletrait to prelude for easy access - Improved module organization with dedicated scrollable functionality
- Enhanced widget trait implementations following established patterns
- Added
- Enhanced Gallery: Major improvements to the gallery example
- New comprehensive RichText tab with full functionality demonstration
- Updated imports and dependencies for modern wxDragon patterns
- Improved user interface and interaction patterns
- Enhanced cross-platform compatibility for all supported platforms:
- ✅ Linux: Full RichText and scrolling support with GTK backend
- ✅ macOS: Complete rich text functionality with native file dialogs
- ✅ Windows MSVC/MinGW: Full feature parity across all Windows builds
- Consistent behavior and performance across all platforms
- Added new
scrollablemodule with comprehensive scrolling trait - Extended
widgetsmodule with RichTextCtrl implementation - Enhanced
eventsystem with rich text event support - All new APIs follow wxDragon's established patterns for memory safety and type consistency
- No breaking changes - all additions are backward compatible
-
Linux PIE Compatibility: Enhanced Position Independent Executable (PIE) compilation support for modern Linux distributions
- Replaced unreliable PIE detection with standard
CMAKE_POSITION_INDEPENDENT_CODE ONapproach - Always enables position independent code on Linux for maximum compatibility
- Resolves
relocation R_X86_64_32 against .rodata can not be used when making a PIE objectcompilation errors - Uses standard CMake methodology for handling position-independent compilation
- Impact: Fixes build failures on PIE-enabled Linux distributions (Ubuntu 17.04+, Debian 9+, Fedora 23+)
- Replaced unreliable PIE detection with standard
-
32-bit Windows MSVC Support: Added comprehensive support for 32-bit Windows MSVC builds (
i686-pc-windows-msvc)- Platform Detection: Enhanced build script to support both
"x86"and"i686"architecture naming variants- Fixed
Unsupported target platform: windows-x86-msvcerror in CI environments - Added dual architecture support throughout all platform detection functions
- Unified artifact matching logic for consistent 32-bit target handling
- Fixed
- C++ Calling Convention: Fixed calling convention mismatch in
wxListCompareFunctionfor 32-bit Windows- Replaced
WXDLLEXPORTwithwxCALLBACKmacro for proper calling convention - Ensures
__stdcallon 32-bit Windows,__cdeclon 64-bit Windows - Resolves C2664 compilation errors:
cannot convert argument 1 from 'int (__cdecl *)' to 'wxListCtrlCompare'
- Replaced
- Library Directory Detection: Enhanced prebuilt library detection for 32-bit Windows packages
- Added fallback logic from
vc_x86_lib/tovc_lib/directory structure - Accommodates actual 32-bit package structure using generic
vc_lib/directories - Maintains proper debug library suffix handling (
dsuffix for debug builds)
- Added fallback logic from
- 32-bit Literal Compatibility: Fixed literal overflow in
treectrl.rsfor 32-bit targets- Replaced hardcoded 64-bit literal
0x8000_0000_0000_0000with architecture-agnostic(usize::MAX / 2) - Prevents compilation errors when
usizeis 32-bit on Windows x86 targets - Maintains identical functionality across all architectures
- Replaced hardcoded 64-bit literal
- Platform Detection: Enhanced build script to support both
- ✅ Enhanced Linux Compatibility: Improved PIE support for all modern Linux distributions
- ✅ New Windows 32-bit Support: Full
i686-pc-windows-msvctarget support added - ✅ CI Integration: GitHub Actions now supports 32-bit Windows MSVC builds
- ✅ Cross-Architecture: Unified support for both
"x86"and"i686"architecture detection
- Simplified Linux CMake configuration by removing complex PIE detection logic
- Enhanced Windows build system with robust architecture variant handling
- Improved cross-platform consistency in platform detection and library management
- Maintains backward compatibility while adding support for new target configurations
- XRC Style Registration: Fixed critical bug where
wxBORDER_THEMEand other border styles were not recognized in XRC files- Fixed
WxdPlatformAwareStaticBitmapHandlerconstructor to properly callAddWindowStyles() - Resolved "XRC error: unknown style flag 'wxBORDER_THEME'" errors when using border styles in StaticBitmap widgets
- All standard window border styles now work correctly in XRC files:
wxBORDER_THEME,wxBORDER_SIMPLE,wxBORDER_SUNKEN,wxBORDER_RAISED,wxBORDER_STATIC,wxBORDER_NONE - Root Cause: wxDragon's custom StaticBitmap XRC handler wasn't registering style constants at runtime
- Impact: Affects all platforms when using StaticBitmap widgets with border styles in XRC files
- Breaking: No breaking changes - this is a pure bug fix that enables previously broken functionality
- Fixed
- ✅ macOS: Confirmed
wxBORDER_THEMEnow works correctly in XRC files - ✅ Windows: Border styles now properly recognized in XRC StaticBitmap widgets
- ✅ Linux: Full XRC border style support restored
- Enhanced
WxdPlatformAwareStaticBitmapHandlerto follow standard wxWidgets XRC handler patterns - Added proper style registration in handler constructor following wxWidgets best practices
- Maintains platform-aware StaticBitmap functionality while fixing XRC compatibility
- No performance impact - style registration occurs once during handler initialization
-
WindowStyle Enum: Added comprehensive WindowStyle enum according to wxWidgets 3.3.0 standards
- 20 standard window style flags: Border, Child, ClipChildren, ClipSiblings, Disabled, Group, Maximize, MaximizeBox, Minimize, MinimizeBox, Overlapped, Popup, SysMenu, TabStop, ThickFrame, Visible, VScroll, and more
- Type-safe bit flag operations using wxDragon's widget_style_enum macro
- Convenient style aliases: CHILD_WINDOW, ICONIC, SIZE_BOX, TILED for backward compatibility
- Default style set to Overlapped for standard window behavior
-
Window Style Management API: Added comprehensive window style management methods to WxWidget trait
set_style(style: WindowStyle)- Set window style flags with type safetyset_style_raw(style: i64)- Set raw style flags for advanced usage scenariosget_style_raw() -> i64- Get current window style flags as raw valuehas_style(style: WindowStyle) -> bool- Check if specific style flags are setadd_style(style: WindowStyle)- Add styles while preserving existing onesremove_style(style: WindowStyle)- Remove specific styles without affecting others- Support for combined styles using bitwise OR operator (
|)
-
C++ API Extensions: Added window style management functions to the C API layer
wxd_Window_SetWindowStyle(window, style)- Set window style implementationwxd_Window_GetWindowStyle(window) -> i64- Get window style implementation- Enhanced wxd_window_base.h with comprehensive style management support
-
Constants Generation: Extended const_extractor tool with window style constants
- Added 20+ window style constants to const_extractor for cross-platform compatibility
- Generated WXDWS* constants for all supported platforms (GTK, MSW, OSX)
- Ensured consistent constant values across different operating systems
- Enhanced CMakeLists.txt and Makefile for const_extractor improvements
-
API Exports: Added WindowStyle enum to public API exports
- WindowStyle exported in prelude for convenient access
- Full integration with existing wxDragon patterns and conventions
- Comprehensive documentation with usage examples and platform notes
-
Documentation: Added extensive documentation for WindowStyle and related methods
- Detailed API documentation with practical usage examples
- Platform-specific behavior notes and style combination warnings
- Clear guidance on mutually exclusive styles (e.g., Child vs Popup)
-
Example Enhancement: Updated examples to demonstrate WindowStyle functionality
- Enhanced window_features_test example with style management demonstrations
- Updated simple example with improved UI structure using Panel and proper styling
- Enhanced cross-platform window style constant generation for all supported platforms:
- ✅ Linux (GTK): Full window style constant support with proper GTK mappings
- ✅ Windows (MSW): Complete Windows-specific style constant generation
- ✅ macOS (OSX): Native macOS window style constants with Cocoa compatibility
- Unified constant generation system ensuring consistent behavior across platforms
- Added new WindowStyle enum with comprehensive flag variants
- Extended WxWidget trait with 6 new window style management methods
- All new APIs follow wxDragon's established patterns for memory safety and type safety
- No breaking changes - all additions are backward compatible
-
Linux PIE Compatibility: Fixed Position Independent Executable (PIE) linker errors on modern Linux distributions
- Added automatic PIE detection for Linux builds in CMakeLists.txt
- Checks for
--enable-default-piein GCC compiler flags to detect PIE-enabled systems - Enables
CMAKE_POSITION_INDEPENDENT_CODEwhen PIE is detected - Maintains backward compatibility with non-PIE Linux systems
- Resolves
R_X86_64_32 relocationerrors on Ubuntu 17.04+, Debian 9+, Fedora 23+ - Fixes linker error:
relocation R_X86_64_32 against .rodata can not be used when making a PIE object; recompile with -fPIE
-
macOS arm64 Linking: Fixed critical undefined symbol error for external projects using wxdragon from crates.io
- Resolved
___isPlatformVersionAtLeastundefined symbol error on macOS arm64 with newer Xcode versions (16.4+) - Added clang runtime library linking in build.rs for macOS arm64 builds
- Uses
xcrun --find clangto dynamically locate the correct clang toolchain path - Links
libclang_rt.osx.awhich provides the missing platform version checking symbols - Fixed compatibility with macOS 15.5+ and newer Xcode toolchains
- Removed
.cargo/config.tomlthat was masking the issue in CI testing - Ensures CI accurately represents external project usage scenarios
- Breaking: External projects upgrading to 0.8.2 will now build successfully without requiring special configuration
- Resolved
- ✅ Enhanced Linux Compatibility: Full support for modern Linux distributions with PIE enabled by default
- ✅ Enhanced macOS Compatibility: Full support for macOS 15.5 with Xcode 16.4
- ✅ External Project Support: Verified compatibility when used as a dependency from crates.io
- ✅ CI Accuracy: GitHub Actions now properly tests the same conditions external projects face
-
Comprehensive Cursor API: Added complete cursor management system with full wxWidgets 3.3.0 feature parity
- 28 stock cursor types: Arrow, Hand, Cross, Wait, IBeam, Magnifier, sizing cursors, and more
- Multiple cursor creation methods: stock cursors, file loading, bitmap conversion, raw data
- Global cursor management with set_cursor() and busy cursor with nesting support
- RAII BusyCursor wrapper for automatic cleanup and exception safety
- Platform-aware implementation supporting macOS, Windows, and Linux
- Cursor properties API: hotspot access, validity checking, native handle access
- Per-window cursor management: set/get cursor for individual windows
- Complete memory safety with proper Drop implementation and error handling
-
Dark Mode Support: Added comprehensive dark mode support with wxWidgets 3.3.0+ appearance API
- System appearance detection: detect if system is using dark/light mode
- Application appearance control: set app to Light, Dark, or System mode
- Cross-platform support: full macOS support, Windows 10 v2004+ dark theme support, basic Linux support
- SystemAppearance API with platform-specific appearance name access (e.g., NSAppearanceNameDarkAqua)
- Thread-safe implementation with Send + Sync traits for async applications
- Conditional compilation with wxCHECK_VERSION guards for compatibility
-
Enhanced Window Management: Extended window functionality for modern UI development
- Z-order management: raise() and lower() methods for window layering
- Mouse capture: capture_mouse() and release_mouse() for advanced input handling
- Text measurement: get_text_extent() for precise UI layout calculations
- Integrated cursor management per window instance
-
Cross-Platform Enum Compatibility: Comprehensive enum type system improvements
- Fixed enum discriminant type compatibility across Linux/macOS (isize) and Windows (i32)
- Replaced platform-specific explicit discriminant values with automatic assignment
- Enhanced From implementations with explicit pattern matching for FFI constant mapping
- Improved type safety with proper #[repr(C)] usage for C ABI compatibility
- Consistent FFI constant usage following established patterns
-
FFI Layer Enhancements: Expanded C++ binding layer for new functionality
- Added comprehensive cursor FFI with 16 exported functions
- Added appearance API with platform-aware conditional compilation
- Enhanced window management FFI with z-order and mouse capture functions
- Improved enum constant generation and usage patterns
-
Windows Build Compatibility: Resolved platform-specific build issues
- Fixed Windows cursor constructor compatibility (C2661 compilation errors)
- Corrected platform-specific cursor creation for Windows vs GTK/other platforms
- Windows: Use wxImage-based cursor creation with hotspot options
- GTK: Use raw bits constructor with proper foreground/background color parameters
- Fixed cross-platform enum type mismatches in FFI layer
-
Code Quality: Addressed clippy warnings and improved code standards
- Fixed needless_borrows_for_generic_args warnings in build script
- Removed unnecessary reference operators in function calls
- Improved build script efficiency and clarity
-
dark_mode_demo: New comprehensive example demonstrating dark mode functionality
- System appearance detection and dark mode checking
- Application appearance mode switching (Light, Dark, System)
- Platform-specific appearance information display
- Demonstrates wxWidgets appearance limitations and best practices
-
window_features_test: Enhanced example showcasing cursor and window management
- Comprehensive cursor API demonstration with all 28 stock cursor types
- Window management features: z-order control, mouse capture, text measurement
- RAII BusyCursor usage patterns and cursor property access
- Interactive UI for testing all cursor and window features
- Enhanced cross-platform compatibility for all supported platforms:
- ✅ Linux: Fixed enum type compatibility, cursor constructor issues
- ✅ macOS: Full dark mode support, comprehensive cursor API
- ✅ Windows MSVC: Fixed cursor constructor C2661 errors, enum type issues
- ✅ Windows MinGW: Cross-platform enum compatibility, cursor creation fixes
- Added new modules:
cursor,appearancewith comprehensive APIs - Enhanced
windowmodule with cursor management, z-order, and mouse capture - Extended
appmodule with appearance control functionality - All new APIs follow wxDragon's established patterns for memory safety and error handling
- Pre-built wxWidgets Library Integration: Major build system enhancement with pre-built wxWidgets libraries
- Reduced build times from 20-30 minutes to seconds (99%+ improvement)
- macOS debug/release builds: ~5 seconds
- Windows cross-compilation: ~17 seconds
- Automatic download of pre-built libraries from GitHub releases
- Support for both debug and release configurations
- Maintains full functionality with pre-built libraries
- Cross-Platform Build System: Comprehensive build system improvements for all platforms
- Enhanced Windows MSVC build support with proper Visual Studio integration
- Improved MSYS2/MinGW64 build compatibility with static linking
- Fixed cross-compilation from macOS to Windows
- Unified library naming conventions and paths across platforms
- Complete static linking support for Windows builds with dependency-free executables
- CI/CD Improvements: Extensive GitHub Actions workflow enhancements
- Automated pre-built wxWidgets library generation for all platforms
- Support for both debug and release library builds
- Improved artifact packaging and distribution
- Enhanced build diagnostics and error reporting
- Windows Build Fixes: Resolved multiple Windows-specific build issues
- Fixed MSVC setup.h include path issues and Unicode definitions
- Resolved library placement and organization for Windows builds
- Fixed cmake path detection for cross-platform CI compatibility
- Corrected MSVC runtime linking based on build profile
- Static Linking: Complete static linking implementation for Windows
- Resolved C++ standard library linking conflicts in MSYS2/MinGW64
- Fixed missing std::basic_streambuf symbols
- Added comprehensive static linking flags for all C++ runtime libraries
- GenericStaticBitmap Widget: Added GenericStaticBitmap widget for enhanced cross-platform compatibility
- Platform-aware StaticBitmap handling in XRC files
- Automatic use of wxGenericStaticBitmap on Windows for better rendering consistency
- Native wxStaticBitmap on other platforms for optimal performance
- Seamless integration with existing StaticBitmap API
- Platform-Aware XRC Handling: Enhanced XRC system with platform-specific widget selection
- Intelligent StaticBitmap implementation selection based on target platform
- Improved cross-platform rendering consistency
- Better support for complex UI layouts across different operating systems
- Windows Build: Fixed Windows build compatibility issues
- XRC Integration: Resolved StaticBitmap rendering issues in XRC-loaded interfaces
- Enhanced Build System: Initial groundwork for pre-built library support
- Cross-Platform Improvements: Better support for Windows and cross-compilation scenarios
- Bitmap RGBA Data Extraction: Added
get_rgba_data()method toBitmapfor seamless integration with Rust image processing libraries- Extracts raw RGBA pixel data as
Vec<u8>with 4 bytes per pixel (R, G, B, A) - Data is ordered row by row from top to bottom, left to right within each row
- Handles both alpha and non-alpha bitmaps (non-alpha defaults to fully opaque)
- Perfect for integration with the
imagecrate:image::RgbaImage::from_raw(width, height, rgba_data) - Added comprehensive documentation with usage examples
- Includes proper memory management with C++ allocated data cleanup
- Extracts raw RGBA pixel data as
- FFI Layer: Added
wxd_Bitmap_GetRGBAData()andwxd_Bitmap_FreeRGBAData()C++ functions- Utilizes wxWidgets'
ConvertToImage()and pixel data extraction APIs - Safe memory allocation and deallocation patterns
- Proper alpha channel handling for all bitmap types
- Utilizes wxWidgets'
- MediaCtrl SeekMode: Fixed clippy warning by using
#[derive(Default)]instead of manual implementation
- WxWidget Trait: Added
get_parent()method toWxWidgettrait for accessing parent windows- Returns
Option<Window>-Some(Window)if widget has a parent,Nonefor top-level windows - Enables child widgets to trigger refresh and layout updates on their parent containers
- Improves widget update behavior by allowing proper parent notification
- Returns
- StaticBitmap Refresh Enhancement: Enhanced StaticBitmap methods to refresh parent containers
- Updated
set_scale_mode(),set_bitmap(), andset_bitmap_bundle()to refresh parent instead of self - Ensures immediate visual updates when bitmap content or scaling changes
- Eliminates the need to manually resize windows to see changes
- Updated
- StaticBitmap Scale Mode Support: Added comprehensive scale mode functionality for StaticBitmap widget
- Added
ScaleModeenum with variants:None,Fill,AspectFit, andAspectFill - Added
set_scale_mode()andget_scale_mode()methods to StaticBitmap - Added
with_scale_mode()builder method for convenient scale mode configuration - Enhanced StaticBitmap builder to support scale mode initialization
- Scale modes control how bitmaps are displayed within the control boundaries:
None: Display bitmap at original size (no scaling)Fill: Scale to fill entire control (may change aspect ratio)AspectFit: Scale to fit within control while maintaining aspect ratioAspectFill: Scale to fill control while maintaining aspect ratio (may crop)
- Added
- API Exports: Added
ScaleModeenum to public API exports in prelude and widgets module - FFI Layer: Extended C++ bindings with
wxd_StaticBitmap_SetScaleModeandwxd_StaticBitmap_GetScaleModefunctions - Type Safety: Implemented safe conversion between Rust enum and C++ scale mode constants
- XRC Loading from String: Fixed critical UTF-8 encoding bug in
wxd_XmlResource_LoadFromStringfunction- Corrected memory stream size calculation to use actual UTF-8 byte length instead of Unicode character count
- Fixed truncated XRC data when loading XML with non-ASCII characters (e.g., Chinese characters)
- Resolved "Failed to parse XML document" errors when using wxFormBuilder-generated XRC files
- wxDragon is now fully compatible with wxFormBuilder-generated XRC files without requiring manual cleanup
- DataViewCustomRenderer GetSizeCallback: Enhanced the
GetSizeCallbacksignature to receive both the variant value and default cell size as parameters, making it more practical for content-aware sizing- The callback now has the signature
Fn(&Variant, Size) -> Sizeinstead ofFn() -> Size - Allows renderers to adjust their size based on the actual data content
- The callback now has the signature
- DataView Custom Renderers: Added comprehensive custom renderer support for DataView controls
- Implemented
DataViewCustomRendererwith full editor functionality - Added editor-related APIs for custom DataView rendering with edit capabilities
- Enhanced DataView widget with custom renderer integration
- Added
custom_dataview_rendererexample demonstrating custom rendering functionality
- Implemented
- Feature Gates: Added granular feature flags for better build customization
- Added
webviewfeature flag for WebView widget support - Added
media-ctrlfeature flag for MediaCtrl widget support - Added
stcfeature flag for StyledTextCtrl widget support - Added
xrcfeature flag for XML Resource support - Added
auifeature flag for Advanced User Interface components - Updated examples to use appropriate feature flags
- Added
- Build System Improvements: Enhanced cross-platform build compatibility
- Fixed build failures across all platforms when enabling HTML with both XRC and WebView features
- Improved Linux build stability with build script optimizations
- Enhanced MSVC and MinGW64 build support
- Better CMake configuration for conditional feature compilation
- Widget API Enhancements: Extended widget functionality and API surface
- Enhanced menu system with additional functionality
- Improved toolbar and scrolled window implementations
- Added window-related utility functions
- Cross-Platform Build: Fixed critical build issues affecting all platforms
- Resolved HTML feature conflicts when both XRC and WebView features are enabled
- Fixed Linux-specific build errors in the build script
- Improved build stability for MSVC and MinGW64 toolchains
- DataView Renderer: Fixed implementation issues in custom DataView rendering
- Optimized C++ implementation for better performance
- Improved memory management in custom renderer implementations
- custom_dataview_renderer: New comprehensive example showcasing custom DataView renderer functionality
- Demonstrates custom cell rendering and editing capabilities
- Shows integration with custom data models
- Includes practical use cases for advanced DataView customization
- Enhanced cross-platform compatibility for Linux, Windows (MSVC/MinGW64), and macOS
- Improved feature gate system for platform-specific functionality
- Better conditional compilation support across different build environments
- DataView Event System: Fixed critical issue where
event.get_row()always returned 0 for custom DataView virtual list models- Corrected
wxd_DataViewEvent_GetRowimplementation to use proper wxWidgets 3.2.8 API (GetModel()instead of non-existentGetDataViewCtrl()) - Added support for both
wxDataViewVirtualListModelandwxDataViewIndexListModelrow index conversion - Enhanced fallback mechanism for other model types with proper manual decoding
- Fixed compilation errors by using correct wxWidgets API methods
- Added comprehensive test case in gallery example with double-click row index verification
- Corrected
- Prelude Module: Added
DataViewEventHandlertrait to prelude for easier access to DataView event handling methods- Enables direct usage of methods like
on_item_activated()without explicit trait imports - Improves developer experience for DataView event handling
- Enables direct usage of methods like
- Gallery Example: Enhanced DataView Virtual tab with double-click testing functionality
- Added
on_item_activatedevent handler to demonstrate correct row index reporting - Includes console output showing employee details for clicked rows
- Serves as verification for the DataView event fix
- Added
- Enhanced Idle Event System: Significantly improved idle event support for better async runtime integration
- Added
Event::request_more()andEvent::more_requested()methods for intelligent idle event control - Added
IdleEventstruct with static methodsset_mode()andget_mode()for global idle mode management - Added
IdleModeenum withProcessAllandProcessSpecifiedvariants for fine-grained control - Added
ExtraWindowStyle::ProcessIdleflag for per-window idle event processing control - Enhanced window event handling with proper idle event data structures
- Added
- tokio_async_demo: Added comprehensive example demonstrating async runtime integration
- Shows recommended patterns for tokio channel communication with GUI
- Demonstrates efficient idle event usage with
request_more()for optimal CPU usage - Includes counter updates, status messages, and background task coordination
- Uses
ProcessSpecifiedidle mode with per-window control for maximum efficiency
- Window API: Added extra window style management methods to
WxWidgettraitset_extra_style(),get_extra_style_raw(),has_extra_style()add_extra_style(),remove_extra_style()for fine-grained style control
- FFI Layer: Extended C++ binding with new idle event and window style APIs
- Added idle event control functions in
wxd_event_api.h - Enhanced window base functionality in
wxd_window_base.h - Cross-platform constant generation for idle event modes
- Added idle event control functions in
- Enhanced cross-platform idle event constants for GTK, MSW, and OSX
- Improved async integration compatibility across all supported platforms
- StyledTextCtrl Widget: Added comprehensive StyledTextCtrl widget for advanced text editing
- Full-featured text editor component with syntax highlighting support
- Extensive API with 1600+ lines of Rust bindings
- Support for text styling, markers, indicators, and annotations
- Advanced text manipulation and editor functionality
- CollapsiblePane Widget: Added CollapsiblePane widget for expandable/collapsible content areas
- Configurable expand/collapse behavior
- Integration with layout system for dynamic UI layouts
- Build System Improvements:
- Enhanced static linking support from macOS to Windows via GNU toolchain
- Added Windows manifest embedding for gallery example
- Improved cross-platform build compatibility
- Windows Build: Fixed Windows build by adding missing imm32 library dependency
- Added
simple_stc_testexample demonstrating StyledTextCtrl functionality - Updated gallery example with CollapsiblePane demonstration
- Enhanced custom_widget example documentation with README and GIF demonstration
- Improved Windows build stability and compatibility
- Enhanced cross-compilation support from macOS to Windows
- New Sizer Types:
- WrapSizer: Wrapping sizer with configurable wrapping behavior
WrapSizerFlagenum for controlling wrap behavior
- GridSizer: Basic grid layout sizer with configurable rows, columns, and gaps
- GridBagSizer: Advanced grid layout with position and span control
GBPositionandGBSpantypes for precise grid positioning- Support for item positioning, spanning, and cell size management
- Empty cell size configuration
- WrapSizer: Wrapping sizer with configurable wrapping behavior
- Enhanced Frame Support:
- Added
set_iconfunction for Frame widget to set window icons
- Added
- Enhanced Device Context (DC) Module:
- Added
AutoBufferedPaintDCfor automatic double buffering - Significantly expanded DC functionality with additional drawing methods
- Enhanced DC constants and type definitions
- Added
- Event System Refactoring: Major refactor of the event system to allow multiple bindings to one event
- Improved event handling architecture for better flexibility
- More robust event binding mechanism
- API Cleanup: Cleaned up
lib.rsandprelude.rsfor better organization- Streamlined imports and exports
- Improved public API structure
- MediaCtrl Feature Flag: Enhanced conditional compilation for MediaCtrl event handling
- Better feature flag support for optional components
- Build System Improvements:
- Enhanced CMake configuration
- Better header isolation between wxWidgets and wrapper headers
- Improved cross-platform build support
- Added
wrapsizer_testexample demonstrating WrapSizer functionality - Added
gridsizer_testexample showing GridSizer usage - Added
gridbagsizer_testexample with advanced GridBagSizer positioning - Added
custom_widgetexample showcasing:AutoBufferedPaintDCusage- Custom widget implementation with
anim_fill_button.rs - Pie chart widget implementation with
pie_chart.rs
- Event System Architecture: Complete refactoring to support multiple event bindings
- DC Module Enhancement: Expanded drawing capabilities and constants
- Code Organization: Better module structure and cleaner API surface
- Added XRC (XML Resource) support for loading UI definitions from XML files
- Added Clipboard support with full text, file, and bitmap functionality
- Added Timer widget for scheduled events and callbacks
- Added BitmapBundle support for high-DPI displays and multiple image resolutions
- Added RearrangeList widget for reorderable list controls
- Added new dialog widgets:
- DirDialog for directory selection
- SingleChoiceDialog for single item selection
- MultiChoiceDialog for multiple item selection
- Enhanced Button widget with BitmapBundle support for better image handling
- Enhanced StaticBitmap widget with BitmapBundle support
- Enhanced Toolbar widget with BitmapBundle support for high-DPI icons
- Enhanced ArtProvider with additional functions and capabilities
- Improved cross-compilation support from macOS to Windows
- Unified file naming conventions across the codebase
- Improved data object architecture for clipboard and drag-and-drop operations
- Enhanced build system for better cross-platform compatibility
- Added clipboard_test example demonstrating clipboard functionality
- Added simple_xrc_test example showing XRC usage
- Updated gallery example with new widgets and features
- Added DataViewCtrl support with various components:
- DataViewTreeCtrl for hierarchical data display
- DataViewVirtualListModel for efficient large dataset handling
- Multiple renderer types (text, toggle, progress, bitmap, etc.)
- Added image support for Button widget
- Added ImageList support for Notebook and TreeCtrl
- Added get_bitmap functionality to StaticBitmap widget
- Added more functions to FileDialog
- Comprehensive event system refactoring with three-tier approach:
- Window events common to all widgets
- Category-specific events for related controls
- Widget-specific event handlers
- Added type-safe event data via strongly-typed wrappers
- Added event handlers for checkboxes, choice controls, color pickers and more
- Added more DataView-related functions
- Refactored SizerFlag constants to use enums for better type safety
- Removed all raw pointer constants (*.PTR) in favor of safer alternatives
- Removed libc dependency from wxdragon
- Updated C++ event infrastructure with proper ownership management
- Fixed bitmap issue with DataViewVirtualListModel
- Fixed potential memory leak in variant handling
- Added MediaPlayer widget for audio/video playback
- Added EditableListBox widget
- Added TimePicker widget
- Added NotificationMessage widget
- Added AnimationCtrl widget
- Added various dialog widgets:
- MessageDialog
- FileDialog
- TextEntryDialog
- ColourDialog
- FontDialog
- ProgressDialog
- Added picker controls:
- FilePickerCtrl
- DirPickerCtrl
- FontPickerCtrl
- Added AUI (Advanced User Interface) components:
- AuiMdiParentFrame
- AuiMdiChildFrame
- AuiNotebook
- AuiToolbar
- Added Drag and Drop (DnD) support with full callback implementation
- Added Device Context (DC) related APIs
- Added
app::call_afterfor scheduling work on the main thread
- Added more size-related functions to Window
- Added more functions to ListCtrl
- Added more functions and styles to TextCtrl
- Added more colors and font functions
- Enhanced memory management for Bitmap
- Added enable/disable functions to widgets
- Added general set_font capability to all widgets
- Added sizer.detach and widget.destroy methods
- Added TreeItemData support
- Improved FileDataObject with proper get_filenames implementation
- Added general set_font capability to all widgets
- Refactored TreeCtrl to use unified item_data mechanism
- Refined dialog code for better usability
- Refined ListCtrl implementation
- Applied widget macros to existing widgets for consistent implementation
- Refined constant handling by converting to Rust enums
- Restructured wxdragon.h to use separate modules
- Added Windows theme support
- Improved cross-compilation from macOS to Windows
- Removed RawWxPtr in favor of a more robust approach
- Initial release of wxdragon and wxdragon-sys