Changelog History
-
v0.7.0 Changes
January 01, 2021Highlights
- ๐ Text improvements:
TextLayout
type ([#1182]) and rich text support ([#1245]) - The
Formatter
trait provides more flexible handling of conversions between values and their textual representations. ([#1377])
โ Added
- ๐ 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)- 0๏ธโฃ 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])
๐ Changed
- ๐ 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]) - 0๏ธโฃ 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])
๐ Deprecated
- ๐ Parse widget (replaced with
Formatter
trait) ([#1377] by [@cmyr])
โ Removed
Scale::from_dpi
,Scale::dpi_x
, andScale::dpi_y
. ([#1042] by [@xStrom])Scale::to_px
andScale::to_dp
. ([#1075] by [@ForLoveOfCats])
๐ Fixed
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])
Visual
TextBox
stroke remains inside itspaint_rect
. ([#1007] by [@jneem])
๐ Docs
- โ 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])
Examples
- 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])
๐ง Maintenance
- ๐ 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])
Outside News
- ๐ Text improvements:
-
v0.6.0 Changes
June 01, 2020Highlights
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.
-
v0.5.0 Changes
April 01, 2020๐ Last release without a changelog :(
-
v0.4.0
December 28, 2019 -
v0.3.2
November 05, 2019 -
v0.3.1
November 04, 2019 -
v0.3.0
November 02, 2019 -
v0.1.1
November 02, 2018 -
v0.1.0 Changes
November 02, 2018๐ [Unreleased]: https://github.com/linebender/druid/compare/v0.7.0...master