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_handle
onDelegateCtx
(#1526 by @Maan2003)AppLauncher::localization_resources
to use custom l10n resources. ([#1528] by [@edwin0cheng])
- Updated to x11rb 0.8.0. ([#1519] by @psychon)
- Text improvements:
TextLayout
type (#1182) and rich text support (#1245) - The
Formatter
trait 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_CANCELLED
andSAVE_PANEL_CANCELLED
commands. (#1061 by @cmyr)- Export
Image
andImageData
by default. (#1011 by @covercash2) - Re-export
druid_shell::Scalable
underdruid
namespace. (#1075 by @ForLoveOfCats) TextBox
now supports ctrl and shift hotkeys. (#1076 by @vkahl)ScrollComponent
for ease of adding consistent, customized, scrolling behavior to a widget. (#1107 by @ForLoveOfCats)- Selection text color to textbox. (#1093 by @sysint64)
BoxConstraints::UNBOUNDED
constant. (#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
ignore
attribute. (#1133 by @jneem) request_update
inEventCtx
. (#1128 by @raphlinus)ExtEventSink
s can now be obtained from widget methods. (#1152 by @jneem)- 'Scope' widget to allow encapsulation of reactive state. (#1151 by @rjwittams)
Ref
lens that appliesAsRef
and thus allow indexing arrays. (#1171 by @finnerale)Command::to
andCommand::target
to set and get a commands target. (#1185 by @finnerale)Menu
commands can now choose a custom target. (#1185 by @finnerale)Movement::StartOfDocument
,Movement::EndOfDocument
. (#1092 by @sysint64)TextLayout
type simplifies drawing text (#1182 by @cmyr)- Added support for custom mouse cursors (#1183 by @jneem)
- Implementation of
Data
trait fori128
andu128
primitive data types. (#1214 by @koutoftimer) LineBreaking
enum allows configuration of label line-breaking (#1195 by @cmyr)TextAlignment
support inTextLayout
andLabel
(#1210 by @cmyr)UpdateCtx
getsenv_changed
andenv_key_changed
methods (#1207 by @cmyr)Button::from_label
to construct aButton
with a providedLabel
. (#1226 by @ForLoveOfCats)- Lens: Added Unit lens for type erased / display only widgets that do not need data. (#1232 by @rjwittams)
WindowLevel
to 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)
RawLabel
widget displays textData
. (#1252 by @cmyr)- 'Tabs' widget allowing static and dynamic tabbed layouts. (#1160 by @rjwittams)
RichText
andAttribute
types for creating rich text (#1255 by @cmyr)request_timer
can 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_color
andTextBox::set_text_color
(#1320 by @cmyr)Checkbox::set_text
to update the label. (#1346 by @finnerale)Event::should_propagate_to_hidden
andLifecycle::should_propagate_to_hidden
to determine whether an event should be sent to hidden widgets (e.g. inTabs
orEither
). (#1351 by @andrewhickman)set_cursor
can be called in theupdate
method. (#1361 by @jneem)WidgetPod::is_initialized
to check if a widget has receivedWidgetAdded
. (#1259 by @finnerale)TextBox::with_text_alignment
andTextBox::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
Formatter
trait ([#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_scale
toScale::new
, andScale
methodsscale_x
/scale_y
tox
/y
. (#1042 by @xStrom)- Major rework of keyboard event handling. (#1049 by @raphlinus)
Container::rounded
takesKeyOrValue<f64>
instead off64
. (#1054 by @binomial0)request_anim_frame
no longer invalidates the entire window. (#1057 by @jneem)- Use new Piet text api (#1143 by @cmyr)
Env::try_get
(and related methods) return aResult
instead of anOption
. (#1172 by @cmyr)lens!
macro to use move semantics for the index. (#1171 by @finnerale)Env
storesArc<str>
instead ofString
(#1173 by @cmyr)- Replaced uses of
Option<Target>
with the newTarget::Auto
. (#1185 by @finnerale) - Moved
Target
parameter fromsubmit_command
toCommand::new
andCommand::to
. (#1185 by @finnerale) Movement::RightOfLine
toMovement::NextLineBreak
, andMovement::LeftOfLine
toMovement::PrecedingLineBreak
. (#1092 by @sysint64)AnimFrame
was moved fromlifecycle
toevent
(#1155 by @jneem)- Renamed
ImageData
toImageBuf
and moved it todruid_shell
(#1183 by @jneem) - Contexts'
text()
methods return&mut PietText
instead of cloning (#1205 by @cmyr) - Window construction: WindowDesc decomposed to PendingWindow and WindowConfig to allow for sub-windows and reconfiguration. ([#1235] by @rjwittams)
LocalizedString
andLabelText
useArcStr
instead of String (#1245 by @cmyr)LensWrap
widget moved into widget module (#1251 by @cmyr)Delegate::command
now returnsHandled
, notbool
(#1298 by @jneem)TextBox
selects 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
Cursor
API has changed to a stateful one (#1433 by @jneem) - Part of the
SAVE_FILE
command is nowSAVE_FILE_AS
(#1463 by @jneem)
- Parse widget (replaced with
Formatter
trait) ([#1377] by @cmyr)
Scale::from_dpi
,Scale::dpi_x
, andScale::dpi_y
. (#1042 by @xStrom)Scale::to_px
andScale::to_dp
. (#1075 by @ForLoveOfCats)
ClipBox
should 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)
Data
derive now works when type param bounds are defined. (#1058 by @chris-zen)- Ensure that
update
is called after all commands. (#1062 by @jneem) - X11: Support idle callbacks. (#1072 by @jneem)
- GTK: Don't interrupt
KeyEvent.repeat
when 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)
EnvScope
now also updates theEnv
duringWidget::lifecycle
. (#1100 by @finnerale)WidgetExt::debug_widget_id
anddebug_paint_layout
now also apply to the widget they are called on. (#1100 by @finnerale)- X11: Fix X11 errors caused by destroyed windows. (#1103 by @jneem)
ViewSwitcher
now 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::Image
now 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::Either
using 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
Either
not 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::WidgetAdded
is the first thing a widget sees. (#1259 by @finnerale) - Fix a missed call to
CloseClipboard
on Windows. (#1410 by @andrewhickman) - WidgetPod: change not laid out
debug_panic
to warning (#1441 by @Maan2003)
- Added a book chapter about resolution independence. (#913 by @xStrom)
- Added documentation for the
Image
widget. (#1018 by @covercash2) - Fixed a link in
druid::command
documentation. (#1008 by @covercash2) - Fixed broken links in
druid::widget::Container
documentation. ([#1357] by [@StarfightLP])
- Specify feature requirements in a standard way. (#1050 by @xStrom)
- Added
event_viewer
example (#1326 by @cmyr) - Rename
ext_event
toasync_event
. ([#1401] by @JAicewizard)
- Standardized web targeting terminology. (#1013 by @xStrom)
- X11: Ported the X11 backend to
x11rb
. (#1025 by @jneem) - Add
debug_panic
macro 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)
im
feature, withData
support for theim
crate collections. (#924 by @cmyr)im::Vector
support for theList
widget. (#940 by @xStrom)TextBox
can receiveEditAction
commands. (#814 by @cmyr)Split::min_splitter_area(f64)
to add padding around the splitter bar. (#738 by @xStrom)- Published
druid::text
module. (#816 by @cmyr) InternalEvent::MouseLeave
signalling the cursor left the window. (#821 by @teddemunnik)InternalEvent::RouteTimer
to route timer events. (#831 by @sjoshid)children_changed
now always includes layout and paint request. (#839 by @xStrom)request_paint_rect
for partial invalidation. (#817 by @jneem)- Window title can be any
LabelText
(such as a simpleString
). (#869 by @cmyr) Label::with_font
andset_font
. (#785 by @thecodewarrior)MouseEvent
now has afocus
field which istrue
with window focusing left clicks on macOS. (#842 by @xStrom)MouseButtons
toMouseEvent
to track which buttons are being held down during an event. (#843 by @xStrom)Env
andKey
gained methods for inspecting anEnv
at runtime (#880 by @Zarenor)WinHandler::scale
method to inform of scale changes. (#904 by @xStrom)WidgetExt::debug_widget_id
, for displaying widget ids on hover. (#876 by @cmyr)LifeCycle::Size
event to inform widgets that their size changed. (#953 by @xStrom)FileDialogOptions
methodsdefault_name
,name_label
,title
,button_text
,packages_as_directories
,force_starting_directory
. (#960 by @xStrom)Button::dynamic
constructor. (#963 by @totsteps)Spinner
widget to represent loading states. (#1003 by @futurepaul)
- Renamed
WidgetPod
methods:paint
topaint_raw
,paint_with_offset
topaint
,paint_with_offset_always
topaint_always
. (#980 by @totsteps) - Renamed
Event::MouseMoved
toMouseMove
. (#825 by @teddemunnik) - Renamed
Split
constructors toSplit::rows
andcolumns
. (#738 by @xStrom) - Replaced
NEW_WINDOW
,SET_MENU
andSHOW_CONTEXT_MENU
commands with methods onEventCtx
andDelegateCtx
. (#931 by @finnerale) - Replaced
Command::one_shot
and::take_object
with aSingleUse
payload wrapper type. (#959 by @finnerale) Command
andSelector
have been reworked and are now statically typed, similarly toEnv
andKey
. (#993 by @finnerale)AppDelegate::command
now receives aTarget
instead of a&Target
. (#909 by @xStrom)SHOW_WINDOW
andCLOSE_WINDOW
commands now only useTarget
to determine the affected window. (#928 by @finnerale)- Global
Application
associated 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_size
no longer includes padding. (#738 by @xStrom)has_focus
no longer returns false positives. (#819 by @xStrom)WidgetPod::set_layout_rect
now requiresLayoutCtx
, data andEnv
. (#841 by @xStrom)request_timer
usesDuration
instead ofInstant
. (#847 by @finnerale)Event::Wheel
now contains aMouseEvent
structure. (#895 by @teddemunnik)- The
WindowHandle::get_dpi
method got replaced byWindowHandle::get_scale
. (#904 by @xStrom) - The
WinHandler::size
method now gets aSize
in display points. (#904 by @xStrom) - Standardized the type returned by the contexts'
text
methods. (#996 by @cmyr) ViewSwitcher
usesData
type 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
LifeCycleCtx
toEvent::FocusChanged
. (#878 by @cmyr) - Propagate
Event::FocusChanged
to focus gaining widgets as well. (#819 by @xStrom) - Routing
LifeCycle::FocusChanged
to 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
FileDialogOptions
select_directories
andmulti_selection
set. (#960 by @xStrom) - X11: Support mouse scrolling. (#961 by @jneem)
Painter
now 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::quit
now quits the run loop instead of killing the process. (#763 by @xStrom) - macOS:
Event::HotChanged
is properly generated with multiple windows. (#907 by @xStrom) - macOS: The application menu is now immediately interactable after launch. (#994 by @xStrom)
- macOS/GTK:
MouseButton::X1
andMouseButton::X2
clicks 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
Split
accuracy. (#738 by @xStrom) - Built-in widgets no longer stroke outside their
paint_rect
. (#861 by @jneem) Switch
toggles 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
Painter
andController
. (#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_event
andidentity
. (#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::event
to improve readability and performance of more complex logic. (#1001 by @xStrom) - Renamed
BaseState
toWidgetState
(#969 by @cmyr) - Fixed test harness crashing on failure. (#984 by @xStrom)
- GTK: Refactored
Application
to 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 :(