New in version 0.37.0

Released 4 months ago

Please remember to uno clean your projects after upgrading Fuse.

Highlights
  • Fuse libraries have reached version 1.0! (Fanfare!)
  • Brand new unified user interface!
    • Smoother UX editing experience thanks to less reifying of the preview
    • Locate in editor
    • Rebuild without closing preview
    • Improved error reporting for device preview
  • New vector API for drawing curves, shapes, and simple vector images.
  • ux:Test for unit testing
  • Lots of bug fixes & improvements.
New tooling

Note: Right now you must have a local preview running on your computer in order to also preview on device(s).

Unified UI

Preview, monitor, dashboard, setup and most of the tray has been merged into a new unified Fuse UI. This leads up to more integrated tooling in the future and also helps us get rid of a lot of quirks and issues in the old dashboard. Note: you can still work with the small preview window that you're used to, just click the "Compact View" switch in the top right corner.

Less reifying of the preview when editing UX

Previously, any changes to the UX markup would cause the preview app to reify (reset back to its starting state). We are now able to detect simple changes to the UX and update the preview without reifying. This is a new feature, so if you encounter any problems, or for any other reason want a full reify, use Preview -> Refresh, or Cmd+R / Ctrl+R.

Locate in editor

When you have selection enabled (previously known as "design mode"), you can press Cmdl+Alt+L / Ctrl+Alt+L . If you have your project open in Sublime or Atom your editor will navigate to the ux code for the currently selected element and your editor will get focus. Pressing the same hotkey again switches focus back to Fuse.

Full rebuild without closing preview

Using Preview -> Rebuild or Shift+Cmd+R / Shift+Ctrl+R you can now rebuild your preview app without closing the preview window. This is especially handy if you are writing Uno and foreign code.

Improved error reporting for device preview

Previously, certain errors would never reach the user. Specifically, when trying to preview on device Fuse needs the code to also compile for local preview. If it failed to do so the errors were never reported and you were left staring blankly at the screen, waiting for something to happen. This is now fixed. (If you've ever been told to do fuse host-preview --compile-only, it was because of this issue.)

iOS Backend

Fixed a problem that resulted in "FATAL ERROR: value cannot be null" when building for iOS without having set a development team manually.

Fuse libraries 1.0
Vector drawing

A new vector drawing system has been added to Fuse. This allows drawing of curves, shapes, and simple vector images. - Added Curve which allows drawing of lines and polygons. CurvePoint can be used to bind to JavaScript observables and servers as the basis for drawing line graphs - Reintroduced Path, Ellipse, Star and RegularPolygon. These are all backed by the new vector system. - Added several options to Ellipse to allow drawing wedges, like with Circle - Added Arc for drawing the outside edge of an Ellipse - Added elliptic arc support to Path to support more SVG path data - Removed FitMode.StrokeMaximum and FitMode.ShrinkToStroke as they could not be reliably supported or behave in a reasonable fashion. To fit accounting for stroke use a wrapping panel with padding instead. - Removed Path.ScaleMode as stroke scaling is not supported as it was before - Remove the Fuse.Drawing.Polygons and Fuse.Drawing.Paths packages. Their functionality has been replaced by the new vector system - Fuse.Controls.FillRule has moved to `Fuse.Drawing.FillRule

MapView
  • Fixed a bug causing crashes on iPhone 5s devices when using ShowMyLocation="true"
ImageFill
  • Fixed a bug where the MemoryPolicy given would not be correctly used.
Instance/Each/Deferred
  • Defer="Deferred" on Instance/Each allows the deferred creation of nodes without the need for a Deferred node
  • Deferred now has an implied priority based on the node depth. Items with equal Priority will now be ordered based on tree depth: deeper nodes come first.
  • Changes to the items will now be collected and new items added once per frame. This avoids certain processing bottlenecks. This should not cause any backwards incompatibilties, though the option Defer="Immediate" is available to get the previous behavior.
Page busy
  • A Page will now be busy for the first frame (or two) after it is prepared. This will block the Navigator from starting the transition during those frames, which should improve first frame jerkyness. The PrepareBusy property can be set to None to disable this behaviour.
Text edit controls
  • Fixed the behaviour of placeholder text in the text renderer used when targeting desktop. The placeholder text is now always visible when there is no text in the text control, even when it has focus.
GeoLocation
  • The GeoLocation module no longer throws an exception if there are no listeners to the "error" event when there is an error.
  • Fixed an omission that meant that the old way of listening to GeoLocation events (using GeoLocation.onChanged = ... instead of the recommended EventEmitter GeoLocation.on("changed", ...)) did not work.
Stroke
  • The Stroke will no longer emit property changed events for its Brush unless it is pinned. This is not anticipated to be an issue for any projects.
Fuse.Version
  • A new static Uno class has been introduced, called Fuse.Version. It contains fields for the major, minor and patch-version, as well as a string with the full version number.
Native
  • Add implementation for android.view.TextureView to better support multiple <GraphicsView />'s and <NativeViewHost />'s on Android.
Container
  • In order to fix a memory leak in Container the pre-rooting structure was changed. Children of the container will not be children of the Subtree until rooted. It is not believed this will have any noticable effect; other features, like Trigger, also work this way.
Gestures
  • Extended the ability of gestures at multiple levels in the UI tree to cooperate, or take priority
  • SwipeGesture now has priority over ScrollView, even if in an ancestor node
  • Edge swipes have priority over directional swipes, regardless of the node they are in
  • Removed SwipeType.Continuous as it did not work correctly and wouldn't fulfill the known use-case even if it did. Consider using Auto instead.
  • Deprecated public access to the Scroller class. This is an internal class and should not be used. All functionality is accessible via ScrollView
  • Added SwipeGesture.GesturePriority and ScrollView.GesturePriority to adjust priorities
  • Fixed an issue where a higher level capture where preempt one lower in the UI tree
Visual
  • The then argument to BeginRemoveChild is now an Action<Node> to provide the node to the callback. Add an Node child argument to the callback function.
Fuse.Reactive
  • The interfaces IObservable, ISubscriber and IObserver are no longer public (affects any class that implements them). These were made accidentally public in Fuse 0.36. These need to be internal in order to allow behind-the scenes optimizations going forward.
ImageTools
  • Changed the algorithm for creating new file names for temporary images. Previously this used a date format that caused problems when several images were created in sub-second intervals, breaking custom map marker icons, for instance.
  • Fixed a memory leak that occured when resizing multiple images one after another.
Default Fonts
  • Added the following default-fonts, that can be used like so <Text Font="Bold" FontSize="30">This is some bold text</Text>:
    • Thin
    • Light
    • Regular
    • Medium
    • Bold
    • ThinItalic
    • LightItalic
    • Italic
    • MediumItalic
    • BoldItalic
Fuse.Audio
  • Due to a bug in Mono we have temporarily removed support for PlaySound in preview on OSX.
Add ux:Test support in UX compiler
  • The UX compiler now supports ux:Test, which is similar to ux:Class but generates a bootstrapped test class which can be run with uno test. See docs for details.
Add 'uno sdkmanager'
  • This lets you use Android's new CLI sdkmanager. The old uno android approach is deprecated.
New UX Markup features
  • Introduced <ux:Resources> tag which can be used as the root tag in UX files that contain only ux:Class'es and ux:Global's. This avoids having to use a "dummy panel" to encapsulate such resources.
iOS Screen Rotation
  • Fixed a bug that broke layout when rotating the screen on iOS
  • Fix bug which could cause visual glitches the first time rotating from Portrait to Landscape
Other Bugfixes
  • Fixed a bug (regression in 0.36) where functions could not be used as data context in event callbacks.
  • Fixed a bug where strings like "20%" did not marshal correctly to Size when databound.