All Versions
12
Latest Version
Avg Release Cycle
37 days
Latest Release
885 days ago

Changelog History
Page 1

  • v0.1.5 Changes

    November 24, 2021

    ๐Ÿ”„ Changed

    • 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

    ๐Ÿ›  Fixed

    • 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_loop when the callable returns void (#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.
  • v0.1.4 Changes

    October 22, 2021

    ๐Ÿ”„ Changed

    • 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::Model trait deprecates the attach_peer function in favor of model_tracker, where all you need to do is return a reference to your sixtyfps::ModelNotify field.

    โž• Added

    • 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

    • Fixed the PointerEvent.kind always being down.
    • LineEdit.has-hocus with the native style
  • v0.1.3 Changes

    October 06, 2021

    ๐Ÿ”„ Changed

    • 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.

    โž• Added

    • New no-frame property of a Window which changes it to borderless/frameless
    • sixtyfps-compiler and sixtyfps-viewer can read the .60 file content from stdin by passing -
    • sixtyfps-viewer gained ability to read or save the property values to a json file with --save-data and --load-data
    • New StandardButton widget
    • New Dialog element
    • sixtyfps::Image has now a path() accessor function in Rust and C++ to access the optional path of the file on disk that's backing the image.
    • New moved and pointer-event callback in TouchArea
    • New AboutSixtyFPS widget

    ๐Ÿ›  Fixed

    • Fixed panic when using TabWidget with Text elements and the native style.
    • Fixed panic when caling hide() on a sixtyfps::Window from within a callback triggered by keyboard/mouse input when using the GL backend.
    • Rust: The implementation of ModelModel::set_row_data now forward the call to the inner model
  • v0.1.2 Changes

    September 09, 2021

    ๐Ÿ”„ Changed

    • Apply the default text color from the style for the color of Text and TextInput elements, to contrast correctly with the application of Window's background property.
    • LineEdit scrolls to keep the cursor visible
    • The clicked callbacks are now only emitted if the release event is within the TouchArea's geometry
    • parentheses around the condition are no longer needed in if elements: if condition : Foo { ... }

    โž• Added

    • 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 of invoke_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-rendering property to Image to control how the image is scaled
    • TextEdit widget
    • Support for semantic tokens in LSP

    ๐Ÿ›  Fixed

    • The interpreter API correctly return an error instead of panicking when setting properties or calling callbacks that don't exist
    • The has-hover property is correctly reset the false when releasing the mouse outside the touch area
  • v0.1.1 Changes

    August 19, 2021

    ๐Ÿ”„ Changed

    • Fixed lookup scope when resolving model expression in for or if constructs: the self element 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(). Use SharedVector::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 clip property can now be any expression.

    โž• Added

    • ComboBox now has a selected callback.
    • Window now has an icon property.
    • Added sixtyfps::Weak::upgrade_in_event_loop in the Rust API.
    • Added sixtyfps::Model::as_any() in the Rust API.
    • Added conversion between sixtyfps::Image and sixtyfps::interpreter::Value in the C++ API.
    • Properties of type angle and duration are allowed in the public API.
    • Every element now has a visible property.
    • Slider now has a changed callback.
    • Added TabWidget widget.
    • Rust: sixtyfps::Image can now be constructed from image data provided by sixtyfps::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.

    ๐Ÿ›  Fixed

    • GridLayout cells with colspan and rowspan respect properly their constraints.
    • Don't panic when replacing programmatically text in a TextInput and 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.
  • v0.1.0 Changes

    June 30, 2021

    ๐Ÿ”„ Changed

    • Layouts are now conceptually their own elements, meaning that the x and y properties 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, GridBox widgets which have default spacing and padding.
    • Setting the window height and width properties results in a fixed size. The preferred-width and preferred-height property 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 viewer binary was renamed to sixtyfps-viewer and is now available via cargo install from crates.io.
    • The layout properties minimum-width, maximum-height, etc. were renamed to a shorter version min-width, max-height. The old names are still supported as a deprecated alias.

    โž• Added

    • Warnings are now shown in the online code editor.
    • sixtyfps::invoke_from_event_loop was added to the C++ and Rust APIs, to run a function in the UI thread from any thread.
    • sixtyfps::run_event_loop() and sixtyfps::quit_event_loop() were added to the Rust and C++ APIs to start and quit the main event loop.
    • z property 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 if or for can be given a name (if (condition) name := Rectangle {})
    • sixtyfps::Image is 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 widthor height of an image type property in .60 files (some-image.source.width)

    ๐Ÿ›  Fixed

    • Fixed Mouse wheel to work on the Flickable element and derivatives.
    • Fixed generated C++ code on Windows.
    • Calling debug(...) no longer breaks the LSP.
    • ComponentDefinition::properties only exposes public properties as documented.
    • Many more bugfixes
  • v0.0.6 Changes

    April 27, 2021

    ๐Ÿ”„ Changed

    • Rectangle::color was deprecated and replaced by Rectangle::background, same for Window::color
    • Path::fill-color was renamed to fill, and Path::stroke-color was renamed to stroke, which are now brushes instead of color
    • Many other color property became brush in order to support gradients
    • the resource type was renamed to image
    • Calling a callback is done from C++/Rust with invoke_<name> instead of call_<name>

    โž• Added

    • @linear-gradient can be used to have gradients on rectangle and paths
    • Image::colorize allows to apply a color filter on image
    • 0 can be converted to anything with units
    • Support power of unit in intermediate expression. (eg: 3px * width / height is 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-spacing in Text/TextInput elements.
    • rgb() / rgba()
    • Layout in Flickable
    • LSP server with Live Preview and basic auto completion
    • The viewer tool gained the --auto-reload argument
    • Window.default-font-weight
    • Added opacity property that can be applied to elements
    • Added clip property 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 import statements

    ๐Ÿ›  Fixed

    • Image::image-fit's cover and contains variant are fixed to match the CSS spec
    • Flickable without scrollbar
    • Multiplying and dividing different units.
    • Many more bugfixes
  • v0.0.5 Changes

    January 29, 2021

    ๐Ÿ”„ Changed

    • Renamed "signal" to "callback"
    • And calling a callback is done from C++/Rust with call_<name> instead of emit_<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-focus to forward-focus as focus related property on elements
    • The "align-" prefix was removed from TextHorizontalAlignment and TextVerticalAlignment. Either change align-left to left or qualify with TextHorizontalAlignment.left.
    • img!"..." is replaced by @image-url("...")
    • $children is replaced by @children

    โž• Added

    • title property to the Window element
    • color property to the Window element
    • maximum/minimum properties to the SpinBox
    • strings can contain escape codes
    • FocusScope to handle key events
    • return statements
    • Text word wrap and elide
    • drop-shadow-* properties (limited to Rectangle at the moment)
    • Color.brighter / Color.darker
    • Window.default-font-family and Window.default-font-size
  • v0.0.4 Changes

    December 14, 2020

    ๐Ÿ”„ Changed

    • Changed Rust build.rs API 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

    • Fixed animations sometimes stopping mid-way.
    • Fixed rendering of C++ components
    • Fixed disabled widgets
  • v0.0.3 Changes

    December 09, 2020

    ๐Ÿ”„ Changed

    • In C++, the generated component is now wrapped by a ComponentHandle smart pointer that acts like std::shared_ptr. New instances are created using T::create().
    • In Rust, the generated component implements Clone and acts like an Rc. sixtyfps::Weak can be used to hold weak references.
    • ARGBColor was renamed RgbaColor
    • width andheight` of some builtin elements now default to 100% of the parent element.

    โž• Added

    • Allow dashes in identifiers (#52)
    • VerticalLayout / HorizontalLayout
    • Placeholder text in LineEdit
    • global components (#96)
    • Clip element
    • ComboBox element
    • PopupWindow element
    • Image element: New source-clip-{x, y, width, height} properties
    • sixtyfps::Timer in Rust API
    • Transitions are now implemented
    • round/ceil/floor/mod/max/min/cubic-bezier functions
    • Signals can have return a value
    • has_hover property in TouchArea
    • font-weight property on Text
    • viewbox-x/y/width/height and clip properties for Path