Fuse (beta) release 0.8.2

0.8.2

This release fixes issues with building for Android and iOS.

0.8.1

This is mainly a bugfix release, please see the release notes for 0.8.0 below for more details about the 0.8 release.

In this release we have fixed the bug where you didn’t get selection cues, and the inspector didn’t work. We have also introduced new buttons on the dashboard to open the monitor and the inspector.

0.8.0

Fuse

New features

  • Fuse Inspector, allowing you to tweak values without refreshing the whole app
  • Fuse Monitor, a common place to find all run-time output from preview
  • On OSX we have also introduced an experimental Sketch importer for Fuse

Fixes and improvements

  • Better defaults for OSX dashboard project creation
  • “Open project” button in dashboard
  • Fuse update notifications

Fuselibs

X,Y, Offset

  • Element gains an X, and Y property which replace the old Offset property. If X is specified it sets the default horizontal alignment to Left and then offsets from that alignment. If Y is specified it sets the default vertical alignment to Left and then offsets from that alignment.
  • The Offset property still offets but no longer modifies the alignment, thus stretching can still be used. To migrate either replace Offset with X and Y or set Alignment="TopLeft".

Grid Columns and Rows

  • Renamed properties on Grid and GridLayout: ColumnData -> Columns and RowData -> Rows. The old Rows and Columns (which are only used in Uno code) are now called RowList and ColumnList respectively.

To migrate, change:

<Grid RowData="1,2" ColumnData="100px,auto">

To:

<Grid Rows="1,2" Columns="100px,auto">

Native

  • An <App> without a theme tag implied a Basic theme previous, but now it implies an “empty” theme. Add Theme="Basic" to your App, and include the Fuse.BasicTheme package in your project to get the basic theme.
  • Fuse.Elements.ImageElement removed. Use the high-level Image to wrap native/graphics images.
  • The hit test for Image is now strictly within the visible image, not the empty area in the control, in cases where the image does not fill the control entirely
  • Fuse.Shapes is no longer part of the standard namespaces. Circle and Rectangle are now controls in Fuse.Controls.
  • WhileSliding has been replaced with the more generic WhileInteracting
  • ScrollViewer renamed ScrollView.
  • ScrollView.Behavior removed. You can use the KeepFocusInView and UserScroll properties directly. If you need a scroll view that doesn’t have standard behaviour you’ll have to create a style that doesn’t add that behavior.
  • IScrollable has been removed. A Scroller must be rooted inside a ScrollView.
  • BasicTheme Button no longer sets the style of all text contained within, only the ButtonText has a style now. If you were using Text inside a button you can use ButtonText instead.
  • Many of the basic controls are now derived from Panel, making it even more important you never style panel. If you need a custom panel type then create one with <Panel ux:Class="MyPanel"/> and apply a style to that panel.
  • Node.LayoutRole made a style property of Layout since that is the only node in which it applies (used by Layout)
  • Fuse.LayoutRole moved to Fuse.Layouts.LayoutRole
  • Control.VisualTree has been removed. Several controls, like ScrollView derive now from ContentControl which exposes Content. This likely doesn’t require any code change, but if you were using VisualTree in a custom control, you must now use ContentControl and the Content property.
  • Control.Overlays has been removed. You can use Layer="Overlay" on a panel instead now (from which most controls are derived). A few controls, like ScrollView no longer have multiple children, and thus must be placed inside a Panel if you need an overlay or background.
  • Control.OnHitTestControlChildren has been removed, just use OnHitTestChildren

BottomBarBackground and StatusBarBackground renamed

BottomBarBackground and StatusBarBackground are now remove in favour of the more consistantly named BottomFrameBackground and TopFrameBackground. These have been available in uno for a while so if you are already using them then you dont have to worry.

API for both are exactly the same as before.

HitTest

  • If you override a HitTest... function you must override the matching HitTest...Bounds function and produce an appropriate bounds, otherwise hit test clipping will prevent the node from getting events.
  • IViewport.PixelToWorldRay is replaced with IViewport.PointToWorldRay since point space is more common. Divide by PointDensity to calculate in pixel space (not valid in all situations).
  • Hit test clipping is now based on HitTestBounds and not the RenderBounds of controls. If you have a custom control that doesn’t seem to get messages add a custom HitTestLocalBounds definition. Standard controls should all respond correctly.

FuseJS

  • Added NativEvent to be able to call events from Uno.
  • Storage: Added deleteSync, writeSync and readSync.
  • Fetch and FetchJson is deprecated, use the browser based fetch (lowercase f) API instead.
  • Added optional parameter to NativeEvent to decide if events should be queued before the handler is set
  • Added localStorage web api shim
  • Added setInterval

[Version 0.8.2 – 4544] When I, in Sublime, try to Build With “Fuse – Android Build & Run” (should this open an Emulator, or only run on device?), this error shows up (yeah, I have no idea what tags to use except code]:

Unexpected fatal error! Please report this to us.
fuse: unhandled exception: One or more errors occurred.
  at System.Threading.Tasks.Task.ThrowIfExceptional (Boolean includeTaskCanceledExceptions) [0x00000] in <filename unknown>:0 
  at System.Threading.Tasks.Task.Wait (Int32 millisecondsTimeout, CancellationToken cancellationToken) [0x00000] in <filename unknown>:0 
  at System.Threading.Tasks.Task.Wait (TimeSpan timeout) [0x00000] in <filename unknown>:0 
  at Outracks.TaskExtensions.GetResult[IMessagingService] (System.Threading.Tasks.Task1 task, TimeSpan timeSpan) [0x00000] in &lt;filename unknown&gt;:0 
  at Outracks.Fuse.Protocol.MessagingServiceSpawner.ConnectOrSpawn (IMessagingServiceSpawner spawner, System.String identifier, IEnumerable1 events, TimeSpan timeout, Optional1 eventFilter) [0x00000] in &lt;filename unknown&gt;:0 
  at Outracks.Fuse.Preview.PreviewWithDaemon.Preview (Outracks.Fuse.Preview.PreviewArguments argument) [0x00000] in &lt;filename unknown&gt;:0 
  at Outracks.Fuse.Preview.CLI.PreviewCliCommand.RunInternal (System.String[] args) [0x00000] in &lt;filename unknown&gt;:0 
  at Outracks.Fuse.Preview.CLI.PreviewCliCommand.Run (System.String[] args) [0x00000] in &lt;filename unknown&gt;:0 
Inner exception: Exception of type &#39;Outracks.Fuse.FailedToConnectToDaemon&#39; was thrown.
  at Outracks.Fuse.DaemonSpawner.ConnectForSure (IEnumerable1 messageTypes) [0x00000] in <filename unknown>:0 
  at Outracks.Fuse.DaemonSpawner.ConnectOrSpawn (IEnumerable1 messageTypes) [0x00000] in &lt;filename unknown&gt;:0 
  at Outracks.Fuse.Protocol.MessagingServiceSpawner+&lt;ConnectOrSpawn&gt;cAnonStorey7+&lt;ConnectOrSpawn&gt;casync6.MoveNext () [0x00000] in &lt;filename unknown&gt;:0 
Unhandled exception: One or more errors occurred.
[ERROR] FATAL UNHANDLED EXCEPTION: System.AggregateException: One or more errors occurred. ---&gt; Outracks.Fuse.FailedToConnectToDaemon: Exception of type &#39;Outracks.Fuse.FailedToConnectToDaemon&#39; was thrown.
  at Outracks.Fuse.DaemonSpawner.ConnectForSure (IEnumerable1 messageTypes) [0x00000] in <filename unknown>:0 
  at Outracks.Fuse.DaemonSpawner.ConnectOrSpawn (IEnumerable1 messageTypes) [0x00000] in &lt;filename unknown&gt;:0 
  at Outracks.Fuse.Protocol.MessagingServiceSpawner+&lt;ConnectOrSpawn&gt;cAnonStorey7+&lt;ConnectOrSpawn&gt;casync6.MoveNext () [0x00000] in &lt;filename unknown&gt;:0 
  --- End of inner exception stack trace ---
  at System.Threading.Tasks.Task.ThrowIfExceptional (Boolean includeTaskCanceledExceptions) [0x00000] in &lt;filename unknown&gt;:0 
  at System.Threading.Tasks.Task.Wait (Int32 millisecondsTimeout, CancellationToken cancellationToken) [0x00000] in &lt;filename unknown&gt;:0 
  at System.Threading.Tasks.Task.Wait (TimeSpan timeout) [0x00000] in &lt;filename unknown&gt;:0 
  at Outracks.TaskExtensions.GetResult[IMessagingService] (System.Threading.Tasks.Task1 task, TimeSpan timeSpan) [0x00000] in <filename unknown>:0 
  at Outracks.Fuse.Protocol.MessagingServiceSpawner.ConnectOrSpawn (IMessagingServiceSpawner spawner, System.String identifier, IEnumerable1 events, TimeSpan timeout, Optional1 eventFilter) [0x00000] in <filename unknown>:0 
  at Outracks.Fuse.Preview.PreviewWithDaemon.Preview (Outracks.Fuse.Preview.PreviewArguments argument) [0x00000] in <filename unknown>:0 
  at Outracks.Fuse.Preview.CLI.PreviewCliCommand.RunInternal (System.String[] args) [0x00000] in <filename unknown>:0 
  at Outracks.Fuse.Preview.CLI.PreviewCliCommand.Run (System.String[] args) [0x00000] in <filename unknown>:0 
---> (Inner Exception #0) Outracks.Fuse.FailedToConnectToDaemon: Exception of type 'Outracks.Fuse.FailedToConnectToDaemon' was thrown.
  at Outracks.Fuse.DaemonSpawner.ConnectForSure (IEnumerable1 messageTypes) [0x00000] in &lt;filename unknown&gt;:0 
  at Outracks.Fuse.DaemonSpawner.ConnectOrSpawn (IEnumerable1 messageTypes) [0x00000] in <filename unknown>:0 
  at Outracks.Fuse.Protocol.MessagingServiceSpawner+<ConnectOrSpawn>cAnonStorey7+<ConnectOrSpawn>casync6.MoveNext () [0x00000] in <filename unknown>:0 <---

Hi Andreas, this is the Sublime plugin not being able to connect to the Fuse daemon, which provides the services it needs. Could you please try to quit Fuse and see if that helps? Sublime will then start a fresh daemon automatically. Just select “Quit” (OS X) or “Exit” (Windows) from the tray menu.

We have noticed that multi-line text input on iOS is broken in this release. We have a fix in place for this, that will be included in an upcoming release.