All notable changes to this project are documented in this file.
- Fixed Ctrl+Backspace/Ctrl+Del not deleting words in text input elements.
modnow works on any numeric type, not only integers.- Minimum rust version is now 1.60
- The "backend-gl-*" Rust crate features for configuring the GL renderer have been split up into "eventloop-winit/x11/wayland" and "renderer-femtovg". The old names are still available for compatibility.
Button: Add acheckableproperty that turns the button into a toggle button. Use the newcheckedproperty to query whether the toggle button is pressed down or not.- Added support for
slint::Window::set_positionandslint::Window::positionto set and get the placement of the window on the screen. - Added
slint::Window::scale_factor()as getter to read the system device pixel ratio. - Added support for
slint::Window::set_sizeandslint::Window::sizeto set and get the size of the window on the screen. - Added
slint::Window::dispatch_pointer_eventandslint::PointerEventto be able to manually send a mouse or touch event to a window. - Added
animation-tick()
0.2.5 - 2022-07-06
- Interpreter: Implement
TryFrom<Value>instead ofTryInto for Value(#1258)
- Added the Model Adapters
FilterModelandMapModel. - Added
@radial-gradient(circle, ...) - Added
read-onlyproperty toTextInput,TextEditandLineEdit. - VSCode extension can be installed as a web extension. (eg, from https://vscode.dev)
- LSP: completion of
@macros - LSP: completion of element that require an import
- Basic accessibility support using the
accessible-properties
- GL backend: Fixed animation sometimes not starting from input event (#1255)
- C++ fix compilation when writing to the model data
- Fix mouse exit events not triggered by scrolling a Flickable (#1107)
0.2.4 - 2022-05-09
- Fixed crash when opening a native (Qt) ComboBox
0.2.3 - 2022-05-09
- Fixed crashes with the Qt backend in release mode. (#1230)
- Fixed panic when drop-shadow is used in a ListView (#1233)
- Fixed combining a brush and a color to always convert to brush, to avoid loosing gradient information (#1235)
- Fixed properties not having the right default value when set by some states (#1237)
- Fixed properties with multiples aliases, and default values.
- Enable fontdb's fontconfig feature to fix finding some fonts (#1240)
0.2.2 - 2022-05-04
- On wasm, the input event are handled via a hidden
<input>element, allowing the keyboard to show on mobile platform - The size of the window is kept when reloading a window in the preview (instead of being reset to the preferred size)
- Minimum rust version is now 1.59
- Support for keyboard focus with the tab key
- Support more keyboard shortcut in the editing element
- Added
From<&str>andFrom<SharedString>toStandardListViewItemto make creation and modification ofStandardListView's models easier. - Added
on_close_requestedfunction toWindowto register callbacks that are emitted when the user tries to close a window. - Added
VecModel::set_vecto replace the entire contents with new data. - Added a
cache-rendering-hintboolean property that can be applied to any element, to hint to the renderer that it should cache the element and its children into a cached layer. This may speed up rendering of complex sub-trees if they rarely change. - The
brighterandlighterfunctions also work on values of type brush. - Added a
resetfunction to C++'sModel, Rust'sModelNotifyand JS'sModelPeer - Added a
row_data_trackedfunction toModelExt(an extension to the Model trait)
- Fixed application of the
opacityproperty evenly to child elements (#725). - Windows: Fixed font lookup of strings including several scripts (eg, containing asian characters)
- Fixed PopupWindow in a repeater (#1113, #1132)
- LSP: do not always resize the preview window to its preferred each time the code is modified
0.2.1 - 2022-03-10
- C++ interpreter API: added a
Value::Value(int)constructor - Global singletons in
.slintfiles may now refer to other global singletons - Added
input-typeproperty toTextInputandLineEditthat allows for characters to be replaced in password fields - The
SpinBoxwidget now handles up and down key events
TouchArea::has-hoveris now properly set to false when the mouse leaves the window- Fixed some cases of panics with 'Constant property being changed'
- Fixed
Flickableanimation - Better compilation error when selecting unknown styles
- Fixed duplicated key event for some keys (such as tab) with the GL backend
- Improved property optimizations by inlining some bindings and remove more unused properties
0.2.0 - 2022-02-10
This version changes some APIs in incompatible ways. For details how to migrate your application code, see the C++ migration guide
as well as the Rust migration guide for the sixtyfps crate and for the
slint-interpreter crate.
- Minimum rust version is now 1.56
- C++ compiler requires C++20
- In the C++ interpreter API
std::spanis used for callbacks arguments, instead ofsixtyfps::Slice Model::row_datawill now return aOption<T>/std::optional<T>instead of a plainT.Model::model_trackerno longer has a default implementation.- The deprecated methods
Model::attach_peerandModelNotify::attachwere removed. - The interpreter does not differentiate anymore between
Value::ArrayandValue::Modeleverything is aValue::Model, which now contains aModelRc - In Rust,
slint::SharedPixelBufferandslint::SharedImageBuffernow use au32instead ofusizeforwidth,heightandstride. - In Rust and C++,
slint::Image::size()now returns an integer size type. sixtyfps::interpreter::CallCallbackErrorwas renamed toslint::interpreter::InvokeCallbackError- Some deprecation warning in .60 became hard errors
- Replace
ModelHandlewithModelRc slint::interpreter::ComponentInstancein Rust now implementsslint::ComponentHandle. This removessixtyfps_interpreter::WeakComponentInstancein favor ofslint_interpreter::Weak<slint_interpreter::ComponentInstance>.- For the Rust API crate, the Rust Interpreter API crate, the
backend-gl,x11, andwaylandfeatures were renamed tobackend-gl-all,backend-gl-x11, andbackend-gl-wayland. - For the C++ CMake interface, the
SIXTYFPS_BACKEND_GL,SIXTYFPS_FEATURE_X11, andSIXTYFPS_FEATURE_WAYLANDoptions were renamed toSLINT_BACKEND_GL_ALL,SLINT_FEATURE_BACKEND_GL_X11, andSLINT_FEATURE_BACKEND_GL_WAYLAND. - The animation
loop-countproperty was replaced byiteration-count(which is the same asloop-countplus one)
TextEdit::font-sizeandLineEdit::font-sizehave been added to control the size of these widgets.- Added
slint::Window::set_rendering_notifierto get a callback before and after a new frame is being rendered. - Added
slint::Window::request_redraw()to schedule redrawing of the window contents.
- Models initialized from arrays are now also mutable when run in the interpreter.
- Fixed compilation error when accessing object members of array through the array index syntax
0.1.6 - 2022-01-21
- Breaking: The internal key code for the keys left, right, home and end
has changed. This was undocumented, but if you were handling this in the
FocusScopeevent, these keys will now be ignored. Use theKeys.LeftArrowand other code exposed in theKeysnamespace instead. - For
sixtyfps::Timer(C++ and Rust), it's now possible to callrestart()after a timer has been stopped previously by callingstop(). - Property access in
.60was optimized by doing more constant propagation.
- Color names can now be accessed through the
Colorsnamespace (in.60). - Math function are now available through the
Mathnamespace (in.60). TouchAreagained amouse-cursorproperty to change the mouse cursor.- C++: Added
SIXTYFPS_VERSION_MAJOR/SIXTYFPS_VERSION_MINOR/SIXTYFPS_VERSION_PATCHversion macros. - More special keyboard key codes are provided in the
FocusScope, and special keys are handled start(),stop(),running()and a default constructor for C++sixtyfps::Timer- Added math functions
log, andpow. - Property animations now have a
delayproperty, which will delay the start of the animation. Use this to create sequential animations. - Rust: Added
sixtyfps::VecModel::insert(&self, index, value). - C++: Added
sixtyfps::VecModel::insert(index, value). - Added ability to access elements of a model with the
[index]syntax.
- Memory leak in C++.
- Native style: Colors are updated automatically when the Windowing system switches to and from dark mode (#687)
- Ctrl/Command+X in text fields copies the selected text to the clipboard and deletes it (cut).
- Improved native ComboBox look.
- Fixed panics or compilation error when using two way bindings on global properties.
0.1.5 - 2021-11-24
- The sixtyfps compiler no longer "inline" all the elements, resulting in faster compilation time and smaller binaries.
- Implemented basic constant propagation in the sixtyfps compiler
- The Slider's changed callback was not being called with the fluent style (#621).
- Fixed compilation error in C++'s
sixtyfps::blocking_invoke_from_main_loopwhen the callable returnsvoid(#623). - Improve rendering quality on High-DPI screens on Windows when using Qt.
- Fixed linking errors when selecting the native style on Windows with C++.
- Fixed the maximization button in the window decoration when a window has a fixed size.
0.1.4 - 2021-10-22
- The TouchArea now grabs the mouse for every button instead of just the left button.
- The ScrollView's default viewport size is no longer hardcoded to 1000px but depends on the contents.
- In Rust, the
sixtyfps::Modeltrait deprecates theattach_peerfunction in favor ofmodel_tracker, where all you need to do is return a reference to yoursixtyfps::ModelNotifyfield.
- Enable support for compressed SVG (.svgz).
- Viewer: added possibility to set shell callback handler with
--on <callback> <handler>. - It is now possible to query the length of a model with
.length.
- Fixed the
PointerEvent.kindalways being down. LineEdit.has-hocuswith the native style
0.1.3 - 2021-10-06
- Due to changes in the build system, the C++ build now requires CMake >= 3.19.
- Fluent style: The Slider and ScrollBar now updates as the mouse moves.
- Parentheses around callable expression is now deprecated.
- Naming a callback without calling it is now a hard error instead of producing error in the generated code.
- New
no-frameproperty of aWindowwhich changes it to borderless/frameless - sixtyfps-compiler and slint-viewer can read the .60 file content from stdin by passing
- - slint-viewer gained ability to read or save the property values to a json file with
--save-dataand--load-data - New
StandardButtonwidget - New
Dialogelement sixtyfps::Imagehas now apath()accessor function in Rust and C++ to access the optional path of the file on disk that's backing the image.- New
movedandpointer-eventcallback inTouchArea - New
AboutSixtyFPSwidget
- Fixed panic when using
TabWidgetwithTextelements and the native style. - Fixed panic when calling
hide()on asixtyfps::Windowfrom within a callback triggered by keyboard/mouse input when using the GL backend. - Rust: The implementation of
ModelModel::set_row_datanow forward the call to the inner model
0.1.2 - 2021-09-09
- Apply the default text color from the style for the
colorofTextandTextInputelements, to contrast correctly with the application ofWindow'sbackgroundproperty. - LineEdit scrolls to keep the cursor visible
- The
clickedcallbacks are now only emitted if the release event is within the TouchArea's geometry - parentheses around the condition are no longer needed in
ifelements:if condition : Foo { ... }
- One can now set an alias from the root to a global callback
- It is now possible to access properties and callback of exported global objects from the native code (#96)
- C++ API:
blocking_invoke_from_event_loop: a blocking version ofinvoke_from_event_loop - TextInput can support multiple line by setting single-line to false
- The CMake integration now allows enabling/disabling SixtyFPS library features, such as Wayland support or the dynamic run-time interpreter.
- Added
image-renderingproperty to Image to control how the image is scaled TextEditwidget- Support for semantic tokens in LSP
- The interpreter API correctly return an error instead of panicking when setting properties or calling callbacks that don't exist
- The
has-hoverproperty is correctly reset the false when releasing the mouse outside the touch area
0.1.1 - 2021-08-19
- Fixed lookup scope when resolving model expression in
fororifconstructs: theselfelement now refers to the correct element instead of the root. - Rust: default to the native style if Qt is available
- Rust: deprecated
SharedVector::as_slice_mut(). UseSharedVector::make_mut_slice()instead. - The default non-native widget style is now the new "fluent" style.
- The internal normalization of identifiers is using
-instead of_, this is an internal change, but it can be seen in error messages. When listing properties the identifiers are preserved. For fields in structures they are normalized. - Show a compilation error when there are duplicated element ids.
- The
clipproperty can now be any expression.
ComboBoxnow has aselectedcallback.Windownow has aniconproperty.- Added
sixtyfps::Weak::upgrade_in_event_loopin the Rust API. - Added
sixtyfps::Model::as_any()in the Rust API. - Added conversion between
sixtyfps::Imageandsixtyfps::interpreter::Valuein the C++ API. - Properties of type
angleanddurationare allowed in the public API. - Every element now has a
visibleproperty. Slidernow has achangedcallback.- Added
TabWidgetwidget. - Rust:
sixtyfps::Imagecan now be constructed from image data provided bysixtyfps::SharedPixelBuffer. This enables integrating with other low-level software rendering or the the popular Rust image crate. - VSCode extension: added an option to specify command line arguments for the LSP.
- GridLayout cells with colspan and rowspan respect properly their constraints.
- Don't panic when replacing programmatically text in a
TextInputand then editing it. - The default height of elements in a ListView no longer defaults to 100%.
- Fixed support for
*=and/=on types with unit such as length. - Don't panic when using a self assignment operator on an invalid type - this produces a compiler error instead.
- Fixed angle conversion for values specified in radians, gradians and turns.
- Fixed SharedVector sometimes not allocating big enough storage.
0.1.0 - 2021-06-30
- Layouts are now conceptually their own elements, meaning that the
xandyproperties of items within layouts are relative to the layout and no longer to the parent element of layouts. - The default spacing and padding of layouts is now 0 instead of being specific to the style.
There are now
HorizontalBox,VerticalBox,GridBoxwidgets which have default spacing and padding. - Setting the window
heightandwidthproperties results in a fixed size. Thepreferred-widthandpreferred-heightproperty can be used to set the initial size and the window remains resizable by the user, if the window manager permits. - Binding loops are now detected at compile-time instead of panic at runtime.
- The
viewerbinary was renamed toslint-viewerand is now available viacargo installfrom crates.io. - The layout properties
minimum-width,maximum-height, etc. were renamed to a shorter versionmin-width,max-height. The old names are still supported as a deprecated alias.
- Warnings are now shown in the online code editor.
sixtyfps::invoke_from_event_loopwas added to the C++ and Rust APIs, to run a function in the UI thread from any thread.sixtyfps::run_event_loop()andsixtyfps::quit_event_loop()were added to the Rust and C++ APIs to start and quit the main event loop.zproperty on items.- The type in two-way bindings can now be omitted.
- It's possible to declare aliases for callbacks (
callback clicked <=> other.clicked;) abs()function to get the absolute value- The root element of an
iforforcan be given a name (if (condition) name := Rectangle {}) sixtyfps::Imageis a new type in the public Rust and C++ API to load images from a path.- The width and height of images is now accessible via the
widthorheightof animagetype property in .60 files (some-image.source.width)
- Fixed Mouse wheel to work on the
Flickableelement and derivatives. - Fixed generated C++ code on Windows.
- Calling
debug(...)no longer breaks the LSP. ComponentDefinition::propertiesonly exposes public properties as documented.- Many more bugfixes
0.0.6 - 2021-04-27
Rectangle::colorwas deprecated and replaced byRectangle::background, same forWindow::colorPath::fill-colorwas renamed tofill, andPath::stroke-colorwas renamed tostroke, which are now brushes instead of color- Many other color property became brush in order to support gradients
- the
resourcetype was renamed toimage - Calling a callback is done from C++/Rust with
invoke_<name>instead ofcall_<name>
@linear-gradientcan be used to have gradients on rectangle and pathsImage::colorizeallows to apply a color filter on image0can be converted to anything with units- Support power of unit in intermediate expression. (eg:
3px * width / heightis now supported but used to be an error) - Support for
else if - The path fill rule can now be specified using
Path::fill-rule. - Support for
letter-spacinginText/TextInputelements. rgb()/rgba()- Layout in Flickable
- LSP server with Live Preview and basic auto completion
- The viewer tool gained the
--auto-reloadargument Window.default-font-weight- Added
opacityproperty that can be applied to elements - Added
clipproperty in Rectangle, including clipping for rounded rectangle - API to load dynamically .60 files from C++ and Rust, including a way to embed sixtyfps widgets in Qt applications
- Preferred size in Layouts
- Math functions such as
sin,cos,sqrt, ... - New printer demo design
- Ability to load custom fonts using
importstatements
Image::image-fit'scoverandcontainsvariant are fixed to match the CSS spec- Flickable without scrollbar
- Multiplying and dividing different units.
- Many more bugfixes
0.0.5 - 2021-01-29
- Renamed "signal" to "callback"
- And calling a callback is done from C++/Rust with
call_<name>instead ofemit_<name> - Renamed "SharedArray" to "SharedVector" in the C++/Rust API
- Renamed Slider min and max property to minimum and maximum
- The graphics rendering backend was changed to use femtovg or Qt
- Renamed
initial-focustoforward-focusas focus related property on elements - The "align-" prefix was removed from
TextHorizontalAlignmentandTextVerticalAlignment. Either changealign-lefttoleftor qualify withTextHorizontalAlignment.left. img!"..."is replaced by@image-url("...")$childrenis replaced by@children
titleproperty to the Window elementcolorproperty to the Window elementmaximum/minimumproperties to theSpinBox- strings can contain escape codes
FocusScopeto handle key eventsreturnstatementsTextword wrap and elidedrop-shadow-*properties (limited toRectangleat the moment)Color.brighter/Color.darkerWindow.default-font-familyandWindow.default-font-size
0.0.4 - 2020-12-14
- Changed Rust
build.rsAPI to use an opaque compiler configuration type - With Rust, image resources are embedded in the binary by default.
- Updated winit version
- Updated Neon Version
- Fixed animations sometimes stopping mid-way.
- Fixed rendering of C++ components
- Fixed disabled widgets
0.0.3 - 2020-12-09
- In C++, the generated component is now wrapped by a
ComponentHandlesmart pointer that acts likestd::shared_ptr. New instances are created usingT::create(). - In Rust, the generated component implements
Cloneand acts like anRc.sixtyfps::Weakcan be used to hold weak references. ARGBColorwas renamedRgbaColorwidth andheight` of some builtin elements now default to 100% of the parent element.
- Allow dashes in identifiers (#52)
- VerticalLayout / HorizontalLayout
- Placeholder text in
LineEdit - global components (#96)
ClipelementComboBoxelementPopupWindowelementImageelement: New source-clip-{x, y, width, height} propertiessixtyfps::Timerin Rust API- Transitions are now implemented
round/ceil/floor/mod/max/min/cubic-bezierfunctions- Signals can have return a value
has_hoverproperty inTouchAreafont-weightproperty on Textviewbox-x/y/width/heightandclipproperties forPath
0.0.2 - 2020-10-22
- Default to the native style in the
viewer, if available. - Changed the name of the common logical pixel unit from
lxtopx. The less often used physical pixel has now thephxsuffix.
- Add support for more keyboard shortcuts to
TextInput. - Added a
current_itemtoStandardListView. - API cleanup in sixtyfps-node
- Fix occasional hang when navigating in
TextInputfields with the cursor keys. - Fix access to aliased properties from within
forandifexpressions. - Fix
ScrollViewbeing scrollable when it shouldn't. - Fix appearance of natively styled scrollbars.
- Allow converting an object type to another even if it is missing some properties.
- Add missing frame drawing around
ScrollView. - Fix Clipping in scroll views in WASM builds.
- Fix resizing of
ListView. - Many more bugfixes
0.0.1 - 2020-10-13
- Initial release.