Druid v0.6.0 Release Notes
Release Date: 2020-06-01 // over 4 years ago-
Highlights
X11 backend for druid-shell.
👍 [@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.
🌐 Web backend for druid-shell.
🌐 [@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.
🍎 Using Core Graphics on macOS.
👍 [@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.
➕ Added
- 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])- 🔗 Link to the widget_nursery in README ([#1754] by [@xarvic])
🔄 Changed
- 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])
✂ Removed
- 🐧 The optional GTK feature for non-Linux platforms. ([#611] by [@pyroxymat])
🛠 Fixed
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])
Visual
- 👌 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])
📄 Docs
- ➕ 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])
Examples
- ➕ 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])
🚧 Maintenance
- ➕ 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])
Outside News
- 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.