New in version 1.8.0

Released 3 days ago

Please remember to uno clean your projects after upgrading Fuse.


  • Lots of improvements to the new Sketch importer
    • Coincidentally leading to a number of bug fixes for vector rendering :)
  • New feature for argument passing from UX to FuseJS models
  • SafeEdgePanel for creating iPhone X compatible layouts
  • Thumbnail support and faster photo preview in CameraView
  • And a lot of bug fixes all around!
Fuse Studio
  • Sketch import

    • New menu option Project/Sketch import to select which Sketch files to import symbols from.
    • Opacity on layers now translate to opacity on the resulting ux panel
    • Fixed a bug where shadows where flipped in the X-direction in UX compared to Sketch
    • Shadow mode set to PerPixel in UX to yield the expected result
    • Shadows on texts in Sketch now supported
    • Warn about not supporting inner shadows in UX
    • Fixed a bug where shapes split into multiple parts by scissoring where ignored
    • Set TextWrapping mode to Wrap on all texts in UX for better default behavior
    • Multiple text styles on one text object in Sketch now gives warning when generating UX
  • You can now filter custom classes in components view

  • Improved the performance of the log view

  • Added a file dialog for browsing for FileSource of an Image

  • Fixed a bug that caused comments to be removed when dragging into an element

  • Fixed issue where introducing an ux:Property would in some cases report Member 'EmulatePropertyChanged' could not be found on object of type 'Uno.UX.PropertyObject' in preview.

  • If Fuse Studio is unable to open devices.json for editing, an error message is now displayed. Previously, this could cause Fuse Studio to crash.

  • Added SafeEdgePanel to assist in creating iPhone X capable layouts.
  • Fixed a defect that performed layout with a 0 density on Android at startup
Vector Drawing
  • Fixed a defect in partial line drawing in Preview that resulted in a spurious line being drawn. This happened when the partial curve overlapped the end of the path data.
  • Fixed a defect that prevented a single-segment, horizontal or vertical, line from rendering in Path with StretchMode="Uniform" (the default StretchMode).
  • Fixed a defect that prevented a Path with a single horizontal or vertical line from rendering in Preview (DotNet).
  • Fixed the width of strokes in Preview (DotNet). They were too small on devices with a density other than 1.
  • Fixed a Preview/DotNet rendering defect that resulted from unclosed paths in Path.Data.
  • Fixed Android strokes to use the correct cap and join instead of always being Butt and Bevel.
  • Fixed bug where setting Data on a Path could end up not rendering inside a NativeViewHost on iOS
  • Fixed a Grid defect that resulted in some cells not calculating the correct layout size.
  • Grid now detects a common invalid configuration and emits an error. This may trigger on projects that currently work, but are relying on undefined/broken behavior.
Instance / Each
  • Added IsEnabled to allow conditional instantion of templates in Instance
  • Added Match to pick a specific template
  • Added Defaults to limit default instances, useful when using bindings to match criteria
  • Added support for passing arguments from UX to the model constructor using the ModelArgs attribute.
  • Improved the JavaScript model and object support on EdgeNavigator.
    • EdgeNavigator.Pages functions like PageControl.Pages, binding model data to templated pages.
    • Set IsRouterOutlet="true" to enable Router functionality.
Internal APIs
  • The following protected internal members have been made just internal, as they refer to internal types and weren't meant to be available to derived types:
    • Fuse.Controls.TextInputControl.Editor
    • Fuse.Controls.TextInputControl.TextInputControl(TextEdit)
    • Fuse.Physics.ForceFieldTrigger.SetForce(Body, float)
    • Fuse.Physics.ForceFieldEventTrigger.OnTriggered(Body)
    • Fuse.Controls.TextControl._textRenderer
  • Fixed a defect in the default metric mode of Grid that could result in incorrect layout calculations, in particular if putting a Grid inside a StackPanel with auto columns.
  • Added isSelected function for determine selection status within an expression
  • Added Size and Height to Element as an alternate way to control the layout. This is useful for some animation and binding situations.
  • Added Restore option Forward to allow animating forward to return to rest state
Device and window()
  • Marked several types internal that should not have been public: SystemUI and related types
  • Changed ClientPanel to use Padding instead of panels.
  • Added window() function to get device UI borders: safeMargins, staticMargins and experimental deviceMargins. This will allow developing for devices with extended border areas such as the iPhone X
  • Added Device global to query platform details, such as Device.isIOS and Device.isAndroid
  • Removed the RelativeToKeyboardMode relative translation. This was undocumented and did not appear to work correctly, or do something useful. To move relative to device controls you can now use window().safeMargins and window().staticMargins
  • Fixed Keyframe to allow expressions on the property values.
  • A Simple or Auto SwipeGesture will no longer automatically activate at the halfway point, whereas a Active gesture will. To get the old default behavior, which is considered a defect, use Threshold="0.5".
  • Added a SwipeGesture.Threshold to configure the automatic activation distnace.
Image loading errors
  • Added more info to the messages reported on failure during image loading.
  • Marked NativeMember.Context as Obsolete. Either use passed-down Context, or dispatch to ThreadWorker instead.
Uno compiler
  • Exposing internal types through protected members is now a compilation error, to match C#'s behavior. Some code may need to be updated, for instance by making the exposed type public or the member internal.
  • Fixed a bug that resulted in a crash at startup during the construction of Uno's runtime type information when using certain (rare) combinations of generic types.
UX Compiler
  • Fixed a codegen bug where property bindings to properties with generic type arguments (such as LetFloat) would generate invalid Uno code.
  • Made the following types internal. They were never meant to be exposed in the first place, and shouldn't be used:
    • Uno.Net.Http.AbsolutePathParser
    • Uno.Net.Http.HashParser
    • Uno.Net.Http.HostInfo
    • Uno.Net.Http.HostInfoParser
    • Uno.Net.Http.QueryParser
    • Uno.Net.Http.SchemeParserResult
    • Uno.Net.Http.SchemeParserResult
    • Uno.Net.Http.UserInfoParser
    • Uno.Net.Http.UriScheme
    • Uno.Net.Http.UriSchemeType
  • Introduced Uri.Fragment.
  • Marked Uri.Hash as obsolete. Use Uri.Fragment instead.
  • Marked Uri.GetQueryParameters() as obsolete. Use Query.Substring(1).Split('&') instead.
  • Marked Uri.Combine(string, string) as obsolete. Use String.Format("{0}/{1}, baseUri.TrimEnd(new char[] { '/' }, uri.TrimStart(new char[] { '/' }))" instead.
  • Marked Uri.Combine(string, string) as obsolete. Use Uri(Uri, string).OriginalString instead.
  • Marked Uri.Encode as obsolete. Use Uri.EscapeDataString(string) instead.
  • Marked Uri.Decode as obsolete. Use Uri.UnescapeDataString(string) instead.
  • Marked public versions of ConcurrentDictionary.Add(TKey, TValue) and ConcurrentDictionary.Remove(TKey) as obsolete. Use IDictionary-versions instead.
  • Marked public versions of ConcurrentDictionary.GetEnumerator() as obsolete. Use IEnumerable-versions instead.
  • Marked public versions of ConcurrentDictionary.Keys and ConcurrentDictionary.Values as obsolete. Use IDictionary-versions instead.
  • Removed obosolete methods from Uno.Color. These has been obsolete since Uno 0.46:
    • Uno.Color.ToRgb24(float3)
    • Uno.Color.ToRgba32(float4)
    • Uno.Color.FromRgb24(int3)
    • Uno.Color.FromRgb24(uint)
    • Uno.Color.FromRgba32(int4)
    • Uno.Color.FromRgba32(uint)
    • Uno.Color.ToHex(int3)
    • Uno.Color.ToHex(int4)
  • Fixed a code-generator bug where long-literals that were larger than int.MaxValue, but smaller than uint.MaxValue accidentally got sign-extended.
  • Fixed a code-generator bug where shifts on unsigned values accidentally got sign-extended.
  • Fixed issue where saving captured photos on iOS did not include EXIF data
  • Added ability to save thumbnails of captured photos.
  • Add <PhotoPreview />, a class that enableds a fast-path for previewing captured photos inside a <NativeViewHost />