The latest published Druid release is 0.7.0 which was released on 2021-01-01. You can find its changes documented below.
- Sub windows: Allow opening windows that share state with arbitrary parts of the widget hierarchy ([#1254] by @rjwittams)
- WindowCloseRequested/WindowDisconnected event when a window is closing ([#1254] by @rjwittams)
- RichTextBuilder (#1520 by @Maan2003)
get_external_handleonDelegateCtx(#1526 by @Maan2003)AppLauncher::localization_resourcesto use custom l10n resources. ([#1528] by [@edwin0cheng])
- Updated to x11rb 0.8.0. ([#1519] by @psychon)
- Text improvements:
TextLayouttype (#1182) and rich text support (#1245) - The
Formattertrait provides more flexible handling of converions between values and their textual representations. ([#1377])
- Windows: Added Screen module to get information about monitors and the screen. (#1037 by @rhzk)
- Added documentation to resizable() and show_titlebar() in WindowDesc. (#1037 by @rhzk)
- Windows: Added internal functions to handle Re-entrancy. (#1037 by @rhzk)
- Windows: WindowDesc: Create window with disabled titlebar, maximized or minimized state, and with position. (#1037 by @rhzk)
- Windows: WindowHandle: Change window state. Toggle titlebar. Change size and position of window. (#1037, #1324 by @rhzk)
- Windows: WindowHandle: Added handle_titlebar(), Allowing a custom titlebar to behave like the OS one. (#1037 by @rhzk)
OPEN_PANEL_CANCELLEDandSAVE_PANEL_CANCELLEDcommands. (#1061 by @cmyr)- Export
ImageandImageDataby default. (#1011 by @covercash2) - Re-export
druid_shell::Scalableunderdruidnamespace. (#1075 by @ForLoveOfCats) TextBoxnow supports ctrl and shift hotkeys. (#1076 by @vkahl)ScrollComponentfor ease of adding consistent, customized, scrolling behavior to a widget. (#1107 by @ForLoveOfCats)- Selection text color to textbox. (#1093 by @sysint64)
BoxConstraints::UNBOUNDEDconstant. (#1126 by [@danieldulaney])- Close requests from the shell can now be intercepted (#1118 by @jneem, #1204 by @psychon, #1238 by @tay64)
- The Lens derive now supports an
ignoreattribute. (#1133 by @jneem) request_updateinEventCtx. (#1128 by @raphlinus)ExtEventSinks can now be obtained from widget methods. (#1152 by @jneem)- 'Scope' widget to allow encapsulation of reactive state. (#1151 by @rjwittams)
Reflens that appliesAsRefand thus allow indexing arrays. (#1171 by @finnerale)Command::toandCommand::targetto set and get a commands target. (#1185 by @finnerale)Menucommands can now choose a custom target. (#1185 by @finnerale)Movement::StartOfDocument,Movement::EndOfDocument. (#1092 by @sysint64)TextLayouttype simplifies drawing text (#1182 by @cmyr)- Added support for custom mouse cursors (#1183 by @jneem)
- Implementation of
Datatrait fori128andu128primitive data types. (#1214 by @koutoftimer) LineBreakingenum allows configuration of label line-breaking (#1195 by @cmyr)TextAlignmentsupport inTextLayoutandLabel(#1210 by @cmyr)UpdateCtxgetsenv_changedandenv_key_changedmethods (#1207 by @cmyr)Button::from_labelto construct aButtonwith a providedLabel. (#1226 by @ForLoveOfCats)- Lens: Added Unit lens for type erased / display only widgets that do not need data. (#1232 by @rjwittams)
WindowLevelto control system window Z order, with Mac and GTK implementations (#1231 by @rjwittams)- WIDGET_PADDING items added to theme and
Flex::with_default_spacer/Flex::add_default_spacer(#1220 by @cmyr) - CONFIGURE_WINDOW command to allow reconfiguration of an existing window. ([#1235] by @rjwittams)
- Added a ClipBox widget for building scrollable widgets (#1248 by @jneem)
RawLabelwidget displays textData. (#1252 by @cmyr)- 'Tabs' widget allowing static and dynamic tabbed layouts. (#1160 by @rjwittams)
RichTextandAttributetypes for creating rich text (#1255 by @cmyr)request_timercan now be called fromLayoutCtx(#1278 by [@Majora320])- TextBox supports vertical movement (#1280 by @cmyr)
- Widgets can specify a baseline, flex rows can align baselines (#1295 by @cmyr)
TextBox::with_text_colorandTextBox::set_text_color(#1320 by @cmyr)Checkbox::set_textto update the label. (#1346 by @finnerale)Event::should_propagate_to_hiddenandLifecycle::should_propagate_to_hiddento determine whether an event should be sent to hidden widgets (e.g. inTabsorEither). (#1351 by @andrewhickman)set_cursorcan be called in theupdatemethod. (#1361 by @jneem)WidgetPod::is_initializedto check if a widget has receivedWidgetAdded. (#1259 by @finnerale)TextBox::with_text_alignmentandTextBox::set_text_alignment(#1371 by @cmyr)- Add default minimum size to
WindowConfig. (#1438 by @colinfruit) - Open and save dialogs send configurable commands. (#1463 by @jneem)
- Windows: Dialogs now respect the parameter passed to
force_starting_directory()(#1452 by @MaximilianKoestler) - Value formatting with the
Formattertrait ([#1377] by @cmyr)
- Windows: Reduced flashing when windows are created on high-dpi displays (#1272 by @rhzk)
- Windows: Improved DPI handling. Druid should now redraw correctly when dpi changes. (#1037 by @rhzk)
- windows: Window created with OS default size if not set. (#1037 by @rhzk)
Scale::from_scaletoScale::new, andScalemethodsscale_x/scale_ytox/y. (#1042 by @xStrom)- Major rework of keyboard event handling. (#1049 by @raphlinus)
Container::roundedtakesKeyOrValue<f64>instead off64. (#1054 by @binomial0)request_anim_frameno longer invalidates the entire window. (#1057 by @jneem)- Use new Piet text api (#1143 by @cmyr)
Env::try_get(and related methods) return aResultinstead of anOption. (#1172 by @cmyr)lens!macro to use move semantics for the index. (#1171 by @finnerale)EnvstoresArc<str>instead ofString(#1173 by @cmyr)- Replaced uses of
Option<Target>with the newTarget::Auto. (#1185 by @finnerale) - Moved
Targetparameter fromsubmit_commandtoCommand::newandCommand::to. (#1185 by @finnerale) Movement::RightOfLinetoMovement::NextLineBreak, andMovement::LeftOfLinetoMovement::PrecedingLineBreak. (#1092 by @sysint64)AnimFramewas moved fromlifecycletoevent(#1155 by @jneem)- Renamed
ImageDatatoImageBufand moved it todruid_shell(#1183 by @jneem) - Contexts'
text()methods return&mut PietTextinstead of cloning (#1205 by @cmyr) - Window construction: WindowDesc decomposed to PendingWindow and WindowConfig to allow for sub-windows and reconfiguration. ([#1235] by @rjwittams)
LocalizedStringandLabelTextuseArcStrinstead of String (#1245 by @cmyr)LensWrapwidget moved into widget module (#1251 by @cmyr)Delegate::commandnow returnsHandled, notbool(#1298 by @jneem)TextBoxselects all contents when tabbed to on macOS (#1283 by @cmyr)- All Image formats are now optional, reducing compile time and binary size by default ([#1340] by @JAicewizard)
- The
CursorAPI has changed to a stateful one (#1433 by @jneem) - Part of the
SAVE_FILEcommand is nowSAVE_FILE_AS(#1463 by @jneem)
- Parse widget (replaced with
Formattertrait) ([#1377] by @cmyr)
Scale::from_dpi,Scale::dpi_x, andScale::dpi_y. (#1042 by @xStrom)Scale::to_pxandScale::to_dp. (#1075 by @ForLoveOfCats)
ClipBoxshould forward events if any child is active, not just the immediate child. (#1448 by @derekdreery)- macOS: Timers not firing during modal loop. (#1028 by @xStrom)
- GTK: Directory selection now properly ignores file filters. (#957 by @xStrom)
- GTK: Don't crash when receiving an external command while a file dialog is visible. (#1043 by @jneem)
Dataderive now works when type param bounds are defined. (#1058 by @chris-zen)- Ensure that
updateis called after all commands. (#1062 by @jneem) - X11: Support idle callbacks. (#1072 by @jneem)
- GTK: Don't interrupt
KeyEvent.repeatwhen releasing another key. (#1081 by @raphlinus) - Floor the origin for the Align widget to avoid blurry borders. (#1091 by @sysint64)
- X11: Set some more common window properties. (#1097 by @psychon)
- X11: Support timers. (#1096 by @psychon)
EnvScopenow also updates theEnvduringWidget::lifecycle. (#1100 by @finnerale)WidgetExt::debug_widget_idanddebug_paint_layoutnow also apply to the widget they are called on. (#1100 by @finnerale)- X11: Fix X11 errors caused by destroyed windows. (#1103 by @jneem)
ViewSwitchernow skips the update after switching widgets. ([#1113] by @finnerale)- Key and KeyOrValue derive Clone (#1119 by @rjwittams)
- Allow submit_command from the layout method in Widgets (#1119 by @rjwittams)
- Allow derivation of lenses for generic types (#1120) by @rjwittams)
- Switch widget: Toggle animation being window refresh rate dependent (#1145 by @ForLoveOfCats)
- Multi-click on Windows, partial fix for #859 (#1157 by @raphlinus)
- Windows: fix crash on resize from incompatible resources ([#1191 by @raphlinus])
- GTK: Related dependencies are now optional, facilitating a pure X11 build. (#1241 by @finnerale)
widget::Imagenow computes the layout correctly when unbound in one direction. (#1189 by @JAicewizard)- TextBox doesn't reset position after unfocused. (#1276 by @sysint64)
- Able to select text in multiple TextBoxes at once. (#1276 by @sysint64)
- The scroll bar now shows when the contents of a scrollable area change size. (#1278 by [@Majora320])
- Fix
widget::Eitherusing the wrong paint insets (#1299 by @andrewhickman) - Various fixes to cross-platform menus (#1306 by @raphlinus)
- Improve Windows 7 DXGI compatibility (#1311 by @raphlinus)
- Fixed
Eithernot passing events to its hidden child correctly. (#1351 by @andrewhickman) - Don't drop events while showing file dialogs (#1302, #1328 by @jneem)
- Ensure that
LifeCycle::WidgetAddedis the first thing a widget sees. (#1259 by @finnerale) - Fix a missed call to
CloseClipboardon Windows. (#1410 by @andrewhickman) - WidgetPod: change not laid out
debug_panicto warning (#1441 by @Maan2003)
- Added a book chapter about resolution independence. (#913 by @xStrom)
- Added documentation for the
Imagewidget. (#1018 by @covercash2) - Fixed a link in
druid::commanddocumentation. (#1008 by @covercash2) - Fixed broken links in
druid::widget::Containerdocumentation. ([#1357] by [@StarfightLP])
- Specify feature requirements in a standard way. (#1050 by @xStrom)
- Added
event_viewerexample (#1326 by @cmyr) - Rename
ext_eventtoasync_event. ([#1401] by @JAicewizard)
- Standardized web targeting terminology. (#1013 by @xStrom)
- X11: Ported the X11 backend to
x11rb. (#1025 by @jneem) - Add
debug_panicmacro for when a backtrace is useful but a panic unnecessary. (#1259 by @finnerale)
0.6.0 - 2020-06-01
@crsaracco got us started and implemented basic support to run druid on bare-metal X11 in #599. Additional features got fleshed out in #894 and #900 by @xStrom and in #920, #961, and #982 by @jneem.
While still incomplete this lays the foundation for running druid on Linux without relying on GTK.
@elrnv continued the work of @tedsta and implemented a mostly complete web backend via WebAssembly (Wasm) in #759 and enabled all druid examples to run in the browser.
While some features like the clipboard, menus or file dialogs are not yet available, all fundamental features are there.
@cmyr continued the work of @jrmuizel and implemented Core Graphics support for Piet in piet#176.
Those changes made it into druid via #905. This means that druid no longer requires cairo on macOS and uses Core Graphics instead.
- Standardized and exposed more methods on more contexts. (#970, #972, #855 by @cmyr, #898 by @finnerale, #954 by @xStrom, #917 by @jneem)
imfeature, withDatasupport for theimcrate collections. (#924 by @cmyr)im::Vectorsupport for theListwidget. (#940 by @xStrom)TextBoxcan receiveEditActioncommands. (#814 by @cmyr)Split::min_splitter_area(f64)to add padding around the splitter bar. (#738 by @xStrom)- Published
druid::textmodule. (#816 by @cmyr) InternalEvent::MouseLeavesignalling the cursor left the window. (#821 by @teddemunnik)InternalEvent::RouteTimerto route timer events. (#831 by @sjoshid)children_changednow always includes layout and paint request. (#839 by @xStrom)request_paint_rectfor partial invalidation. (#817 by @jneem)- Window title can be any
LabelText(such as a simpleString). (#869 by @cmyr) Label::with_fontandset_font. (#785 by @thecodewarrior)MouseEventnow has afocusfield which istruewith window focusing left clicks on macOS. (#842 by @xStrom)MouseButtonstoMouseEventto track which buttons are being held down during an event. (#843 by @xStrom)EnvandKeygained methods for inspecting anEnvat runtime (#880 by @Zarenor)WinHandler::scalemethod to inform of scale changes. (#904 by @xStrom)WidgetExt::debug_widget_id, for displaying widget ids on hover. (#876 by @cmyr)LifeCycle::Sizeevent to inform widgets that their size changed. (#953 by @xStrom)FileDialogOptionsmethodsdefault_name,name_label,title,button_text,packages_as_directories,force_starting_directory. (#960 by @xStrom)Button::dynamicconstructor. (#963 by @totsteps)Spinnerwidget to represent loading states. (#1003 by @futurepaul)
- Renamed
WidgetPodmethods:painttopaint_raw,paint_with_offsettopaint,paint_with_offset_alwaystopaint_always. (#980 by @totsteps) - Renamed
Event::MouseMovedtoMouseMove. (#825 by @teddemunnik) - Renamed
Splitconstructors toSplit::rowsandcolumns. (#738 by @xStrom) - Replaced
NEW_WINDOW,SET_MENUandSHOW_CONTEXT_MENUcommands with methods onEventCtxandDelegateCtx. (#931 by @finnerale) - Replaced
Command::one_shotand::take_objectwith aSingleUsepayload wrapper type. (#959 by @finnerale) CommandandSelectorhave been reworked and are now statically typed, similarly toEnvandKey. (#993 by @finnerale)AppDelegate::commandnow receives aTargetinstead of a&Target. (#909 by @xStrom)SHOW_WINDOWandCLOSE_WINDOWcommands now only useTargetto determine the affected window. (#928 by @finnerale)- Global
Applicationassociated functions are instance methods instead, e.g.Application::global().quit()instead of the oldApplication::quit(). (#763 by @xStrom) Event::Internal(InternalEvent)bundles all internal events. (#833 by @xStrom)- Timer events will only be delivered to the widgets that requested them. (#831 by @sjoshid)
Split::splitter_sizeno longer includes padding. (#738 by @xStrom)has_focusno longer returns false positives. (#819 by @xStrom)WidgetPod::set_layout_rectnow requiresLayoutCtx, data andEnv. (#841 by @xStrom)request_timerusesDurationinstead ofInstant. (#847 by @finnerale)Event::Wheelnow contains aMouseEventstructure. (#895 by @teddemunnik)- The
WindowHandle::get_dpimethod got replaced byWindowHandle::get_scale. (#904 by @xStrom) - The
WinHandler::sizemethod now gets aSizein display points. (#904 by @xStrom) - Standardized the type returned by the contexts'
textmethods. (#996 by @cmyr) ViewSwitcherusesDatatype constraint instead ofPartialEq. ([#1112] by @justinmoon)
- The optional GTK feature for non-Linux platforms. (#611 by @pyroxymat)
Event::HotChanged(false)will be emitted when the cursor leaves the window. (#821 by @teddemunnik)- Keep hot state consistent with mouse position. (#841 by @xStrom)
- Start focus cycling from not-registered-for-focus widgets. (#819 by @xStrom)
- Supply correct
LifeCycleCtxtoEvent::FocusChanged. (#878 by @cmyr) - Propagate
Event::FocusChangedto focus gaining widgets as well. (#819 by @xStrom) - Routing
LifeCycle::FocusChangedto descendant widgets. (#925 by @yrns) - Focus request handling is now predictable with the last request overriding earlier ones. (#948 by @xStrom)
- Open file menu item works again. (#851 by @kindlychung)
- Built-in open and save menu items now show the correct label and submit the right commands. (#930 by @finnerale)
- Wheel events now properly update hot state. (#951 by @xStrom)
- macOS: Support
FileDialogOptions::default_type. (#960 by @xStrom) - macOS: Show the save dialog even with
FileDialogOptionsselect_directoriesandmulti_selectionset. (#960 by @xStrom) - X11: Support mouse scrolling. (#961 by @jneem)
Painternow properly repaints on data change inContainer. (#991 by @cmyr)- Windows: Terminate app when all windows have closed. (#763 by @xStrom)
- Windows: Respect the minimum window size. (#727 by @teddemunnik)
- Windows: Respect resizability. (#712 by @teddemunnik)
- Windows: Capture mouse for drag actions. (#695 by @teddemunnik)
- Windows: Removed flashes of white background at the edge of the window when resizing. (#915 by @xStrom)
- Windows: Reduced chance of white flash when opening a new window. (#916 by @xStrom)
- Windows: Keep receiving mouse events after pressing ALT or F10 when the window has no menu. (#997 by @xStrom)
- macOS:
Application::quitnow quits the run loop instead of killing the process. (#763 by @xStrom) - macOS:
Event::HotChangedis properly generated with multiple windows. (#907 by @xStrom) - macOS: The application menu is now immediately interactable after launch. (#994 by @xStrom)
- macOS/GTK:
MouseButton::X1andMouseButton::X2clicks are now recognized. (#843 by @xStrom) - GTK: Use the system locale. (#798 by @finnerale)
- GTK: Actually close windows. (#797 by @finnerale)
- GTK: Prevent crashing on pop-ups. (#837 by @finnerale)
- GTK: Support disabled menu items. (#897 by @jneem)
- GTK: Support file filters in open/save dialogs. (#903 by @jneem)
- GTK: Support DPI values other than 96. (#904 by @xStrom)
- Improved
Splitaccuracy. (#738 by @xStrom) - Built-in widgets no longer stroke outside their
paint_rect. (#861 by @jneem) Switchtoggles with animation when its data changes externally. (#898 by @finnerale)- Render progress bar correctly. (#949 by @scholtzan)
- Scrollbars animate when the scroll container size changes. (#964 by @xStrom)
- Added example and usage hints to
Env. (#796 by @finnerale) - Added documentation about the usage of bloom filters. (#818 by @xStrom)
- Added book chapters about
PainterandController. (#832 by @cmyr) - Added a changelog containing development since the 0.5 release. (#889 by @finnerale)
- Added goals section to
README.md. (#971 by @finnerale) - Added a section about dependencies to
CONTRIBUTING.md. (#990 by @xStrom) - Updated screenshots in
README.md. (#967 by @xStrom) - Removed references to cairo on macOS. (#943 by @xStrom)
- Added
blocking_function. (#840 by @mastfissh) - Added hot glow option to
multiwin. (#845 by @xStrom) - Reduce the flashing in
ext_eventandidentity. (#782 by @futurepaul) - Fixed menu inconsistency across multiple windows in
multiwin. (#926 by @kindlychung)
- Added rendering tests. (#784 by @fishrockz)
- Added docs generation testing for all features. (#942 by @xStrom)
- Replaced
#[macro_use]with normaluse. (#808 by @totsteps) - Enabled Clippy checks for all targets. (#850 by @xStrom)
- Revamped CI testing to optimize coverage and speed. (#857 by @xStrom)
- Refactored DPI scaling. (#904 by @xStrom)
- Refactored
WidgetPod::eventto improve readability and performance of more complex logic. (#1001 by @xStrom) - Renamed
BaseStatetoWidgetState(#969 by @cmyr) - Fixed test harness crashing on failure. (#984 by @xStrom)
- GTK: Refactored
Applicationto use the new structure. (#892 by @xStrom)
- There are new projects using druid:
- Kondo Save disk space by cleaning unneeded files from software projects.
- jack-mixer A jack client that provides mixing, levels and a 3-band eq.
- kiro-synth An in progress modular sound synthesizer.
0.5.0 - 2020-04-01
Last release without a changelog :(