ToDouble
replaced withTryToDouble
for naming consistency (old names remain as deprecated)
- Invoke now takes an
Action<Scripting.Context>
. This is the first step in refactoring our scripting layer to make sure code does not evaluate JS on the wrong thread - The
Observable
property has been removed from Context & IThreadWorker
- Fuse.Reactive.JavaScript has been renamed to Fuse.Scripting.JavaScript & the separate VM packages are now subdirectories of this package
- Fixed an issue about certain event not triggering a proper update and redraw on desktop preview/build
LinearRangeBehavior
now correctly responds toUserStep
values, providing quantized input- Fixed
RangeControl.RelativeValue
to properly update when bound in UX - Allowed
Minimum
to be less thanMaximum
onRangeControl
making it easier to do left-to-right100..0
ranges. - Fixed a defect in position calculations in
LinearRangeBehavior
. It now uses the immediate Element parent for bounds calculation as opposed to theRangeControl
. - Added
UserStep
support to Android and iOS native Slider
- Exported the methods goBack, goForward, reload and stop for use in FuseJS
- Fixed a NullReferenceError that could happen while using ScrollViewPager in preview
- Introduced Fuse.Controls.DatePicker class, which wraps native date pickers on Android and iOS. See the
DatePicker
class documentation for more details.
- Introduced Fuse.Controls.TimePicker class, which wraps native time pickers on Android and iOS. See the
TimePicker
class documentation for more details.
- Fixed bug on Android where setting
TextWrapping="NoWrap"
would force theTextView
to be single line. New behavior is to instead allow the view to scroll horizontally instead of automatically wrapping the text.
- Added native support, meaning it can be used by images inside a
NativeViewHost
.
- Fixed bug in Video where playback actions, like
Play
, used before the video was initialized would end up getting swallowed. - Added some JavaScript methods to
Video
to make it easier to control playback from JavaScript, as well as obtaining information the video duration. - Made
Video.Duration
andVideo.Position
property-bindable.
- Fixed a bug where UX expressions that produce two component floats did not expand to four compoent floats the same same way as literals did.
- These are breaking changes, but very unlikely to affect your app:
- The
DataBinding
,EventBinding
andExpressionBinding
class constructors no longer take aNameTable
argument. - The
Name
andThis
expression classes has been removed. The UX compiler will now compile these asConstant
expressions that contain the actual objects instead. - The
IContext
interface no longer contains theNameTable
property. - The
Fuse.IRaw
interface removed (now internal to theFuse.Reactive.JavaScript
package). Had no practical public use. - The
Fuse.Reactive.ListMirror
class is no longer public. This was never intended to be public and has no practical public application. - Added detailed docs for many of the interfaces in the
Fuse.Reactive
namespace. - The
Fuse.Reactive.IWriteable
interface has changed (breaking!). The method signature is nowbool TrySetExclusive(object)
instead ofvoid SetExclusive(object)
. Unlikely to affect your code. IObservable
andIObservableArray
no longer push their initial value onSubscribe
.
- Image will now respect Exif orientation.
- Fixed bug on iOS that could cause native views from thirdparty libraries to get an incorrect position. (Fixes issues with Firebase AdMob)
- Symbols declared with
ux:Name
,ux:Dependency
ordep
are now also available torequire()
for<JavaScript>
modules using theux:
prefix. This allows us to write code that plays nicer with transpilers and linters. Using require for names declared in UX is optional, but may make the code more readable and maintainable, e.g.var router = require("ux:router")
over just usingrouter
with no declaration.
- Fixed a problem where horizontal or vertical lines would not draw in the .NET backend.
- Fixed an issue with
attract
not updating when using a data binding as the source value
- Fixed bug where the default font on Android could end up being null.
- Fixed issue where Images with Mask could end up not displaying. This happend due to unnecessary invalidation of the implicit native GraphicsView in the app root. This invalidation was introduced when the Surface API was implemented for native. Invalidation is now opt-in on ViewHandle
- Fixed issue where Circles could draw incorrect due to floating point precision
- Fixed issue where Rectangles could render incorreclty due to FP16 precision limitation.
- Added
Navigator.Pages
to bind the local history to an observable/model - Added
PageControl.Pages
to bind the list of available pages to an observable/model - Fixed the semantics of
PageControl.ActiveIndex
to work with dynamic pages. The output, getter, will only be updated when the navigation is intentionally changed to a new page. Previously it would always reflect the current page, which causes problem with dynamic pages. The variation between th desired target and actual target only lasts while the desired target is not yet rooted. - Changed how
Router
maintains history. This resolves several minor issues, including local histories (though this isn't fully exposed yet). It's intended to be backwards compatible for all known use-cases. - Changed
IRouterOutlet
and related types to be internal. This was not meant to be public as it's a private detail of the navigation system and could not be implemented correctly by users. - Removed the
Navigator
IsReusable
property. These were deprecated over a year ago. UseResuse="Any"
instead. - Removed
PageControl.TransitionEasing
andPagecontrol.TransitionDuration
. These were deprecated over a year ago. Use aNavigationMotion
object instead withGotoEasing
andGotoDuration
properties. - Removed
PageIndicator.DotTemplate
andPageIndicator.DotFactor
. These were deprecated over a year ago. Use aux:Tempate="Dot"
child instead. - Removed
Navigation.PageData
. It was always meant to be internal and has no public use. - Allowed
GoBack
andWhileCanGoBack
on the router to properly interact with bound observable/modelPageHistory
- Added ScriptPromise. This adds support for passing Promises between Uno and the scripting engine. Very useful when dealing with async stuff and JavaScript
- Added ScriptReadonlyProperty. This feature lets you expose readonly data in JavaScript. Useful for exposing constants for example
Fixed issue where custom URI schemes were matched too greedily in URLs, making for erroneously intercepted URL requests.
On iOS you can now put the following in your unoproj file:
"iOS": {
"PushNotifications": {
"RegisterOnLaunch": false
}
},
which will stop push notifications registering (and potentially asking for permissions) on launch. Your must then call register()
from JS when you wish to begin using push notifications. On android this option & register are silently ignored.
- Fixed issue where an
<Image />
could fail to display inside a<NativeViewHost />
on iOS - Fixed an issue where a JPEG image from a misconfigured server using
image/jpg
would fail to load.
- Fixed a bug where replacing the whole list of items with an empty list would not immediately remove the items from the UI.
- Added several features to allow navigation/routing from within UX, whereas previously JavaScript code was required.
- Added
ModifyRoute
,GotoRoute
andPushRoute
actions to replaceRouterModify
. These all have aPath
property. - Added
gotoRoute
,pushRoute
, andmodifyRoute
expression events which allow for simple navigation in event handlers.
- Added
ScrollViewPage
which simplifies the creation of infinite scrolling lists
- Added missing hit testing from
Ellipse
. If you relied on there not being any hit testing on an ellipse addHitTestMode="None"
- Xamarin Mac was upgraded to support 64-bit executables on macOS.
- Fixed an issue where certain triggers would not skip their animation/actions as part of the Bypass phase. This will not likely affect many projects, but may resolve some spurious issues where animations did not bypass under certain conditions.
- Fixed an issue where
WhileVisibleInScrollView
did not respect the Bypass phase for element layout.- If you required this behaviour add
Bypass="None"
to the trigger -- in exceptional cases you can addBypass="ExceptLayout"
to get the precise previous behaviour, but it should not be required, and is only temporarily available for backwards compatibility.
- If you required this behaviour add
- Several triggers were modified to properly look up the tree for a target node, whereas previously they may have only checked the immediate parent. The affected triggers are
BringIntoView
,Show
,Hide
,Collapse
,Toggle
,TransitionState
,Callback
,CancelInteractions
,Stop
,Play
,Resume
,Pause
,TransitionLayout
,BringToFront
,SendToBack
,EvaluateJS
,RaiseUserEvent
,ScrollTo
. This should only change previous behavior if the action was previously configured incorrectly and did nothing or already found the wrong node. Many of the actions have aTarget
to target a specific node, orTargetNode
to specify where the search begins. - Changed/fixed
Trigger
to provide the trigger itself as the target node to aTriggerAction
, previously it'd provide the parent of the trigger. The old behaviour was due to an old tree structure. This should have been updated a long time ago. This allows actions to reference the trigger in which they are contained. If you've created a custom UnoTriggerAction
and need the old behaviour modify yourPerform(Node target)
to usetarget.Parent
. Triggers should in general scan upwards from the target node.
- Added minimal support to WhileVisibleInScrollView for changes in Element layout updating the status
- Added support for the Surface API in native UI for iOS. Meaning that
Curve
,VectorLayer
and charting will work inside aNativeViewHost
.
- Fixed issue on Android causing text to align incorrectly if being scrolled and unfocused.
- Added possibility to use
RowAlignment
to align the elements in the major direction of theWrapPanel
as well as in the minor.
- Optimized UpdateManager dispatcher to deal better with high numbers of dispatches per frame (as when populating long lists).
- Optimized how ZOrder was computed which improves layout and tree initialization speed. Inlcudes a minor change on the
ITreeRenderer
interface, unlikely to affect your code. - Optimized how bounding boxes are calculated (improves layout and rendering performance).
- Optimized how render bounds are compounded for larger lists.
- Several low-level optimizations that speeds up scenarios with long lists (e.g. scrollviews). Here are the Uno-level details:
- Optimized the implementation of the
Visual.Children
collection to be an implicitly linked list. This avoids all memory allocation and shifting in connection with inserting and removing nodes from a parent, and ensures aO(1)
cost for all child list manipulations. - Introduced new public API:
Node.NextSibling<T>()
andNode.PreviousSibling<T>()
, which can be together withVisual.FirstChild<T>()
andVisual.LastChild<T>()
. The recommended way of iterating over the children of aVisual
is nowfor (var c = parent.FirstChild<Visual>(); c != null; c = c.NextSibling<Visual>())
whereVisual
can be replaced with the desired node type to visit.
- Fuse.Scripting now knows about the JS
Date
type, allowing instances to be passed to/from Uno in the form ofUno.DateTime
objects. This support extends to databinding,NativeModule
s,ScriptClass
s, and theContext.Wrap/Unwrap
API. - Binding an object that does not implement
IArray
to a property that expectsIArray
will now automatically convert the value to an array of length 1.
- Breaking change: Several entrypoints on UpdateManager now take a
LayoutPriority
enum instead ofint
as thepriority
argument. Very unlikely to affect user code code. - Fixed an issue where writes to
FuseJS/Observables
would not dispatch in the right order on the UI thread if interleaved withScriptClass
callbacks (slightly breaking behavior).
- Fixed an issue where the ElementBatcher ended up throwing an Exception complaining about the element not having a caching rect.
- Fixed an issue where the combination of
-DUSE_HARFBUZZ
,-DCOCOAPODS
and certain Pods (in particular Firebase.Database has been identified) caused an app to link to symbols that the AppStore disallows.
- Fixed an issue where removing an element would not actually remove the element
- Fixed issue where an
<Image />
could fail to display inside a<NativeViewHost />
on iOS
- Added
findRouter
function making it easier to use a router in a page deep inside the UI - Fixed and issue where relative paths and nested
Router
gave an error about unknown paths
- Introduced support for variable arguments to UX functions - inherit from the
Fuse.Reactive.VarArgFunction
class. - The classes
Vector2
,Vector3
andVector4
inFuse.Reactive
are now removed and replaced with the general purpose, variable-argument versionVector
instead. This ensures vectors of any length are treated the same way. This is backwards incompatible in the unlikely case of having used these classes explicitly from Uno code. - Added support for name-value pair syntax:
name: value
. Can be used for JSON-like object notation and named arguments in custom functions. Any vector of name-value pairs is interpreted as anIObject
, e.g.{name: 'Joe', apples: 10}
is an object.
- Added
Identity
andIdentityKey
toEach
. This allows created visuals to be reused when replaced withreplaceAt
orreplaceAll
in an Observable. - Triggers may now use templates which will be instantiated and added to the parent when active (like a node child).
- Added templates to
NodeGroup
, which can now be used inEach.TemplateSource
andInstance.TemplateSource
Each
, usingTemplateSource
, will no longer respond to template changes after rooting. This was done to simplify the code, and to support alternate sources, and is a minor perf improvement. It's not likely to affect any code since it didn't work correctly, and there's no way in UX to modify templates after rooting.- A memory leak was fixed by changing
Instantiator.TemplateSource
to a WeakReference. Only if you assigned this property a temporary value in Uno would this change impact your code. - Clarified/fixed some issues with how
Each
/Instances
handled default templates. Previously if no matching template was found all the specified templates, or a subset, might have erronously been used. Now, as was always intended, if you useMatchKey
and wish to have a default template you must specifiyux:DefaultTemplate="true"
on the default template. You cannot have multiple fallback templates, just as you can have only one template of a particular name. - If a
ux:DefaultTemplate="true"
is specified it will be the template that is used; the complete list of templates will not be used.
- Fixed issue where using Fuse.Share would crash on iPad. Users must provide a position for spawn origin for the share popover. Check the Fuse.Share docs for more details.
- Made iOS implementation internal, this was never ment to be public in the first place
- Optimized hit testing calculations. Improves scrolling in large scroll views with deep trees inside, among other things.
- Optimized redundant OpenGL rendertarget operations. Gives speedups on some platforms.
- Optimized invalidation strategy for transforms, to avoid subtree traversion. This improves performance generally when animating large subtrees (e.g. scrollviews).
- Backwards incompatible optimization change: The
protected virtual void Visual.OnInvalidateWorldTransform()
method was removed. The contract of this method was very expensive to implement as it had to be called on all nodes, just in case it was overridden somewhere. If you have custom Uno code relying on this method (unlikely), then please rewrite to explicitly subscribe to theVisual.WorldTransformInvalidated
event instead, like so: OverrideOnRooted
and doWorldTransformInvalidated += OnInvalidateWorldTransform;
, OverrideOnUnrooted
and toWorldTransformInvalidated -= OnInvalidateWorldTransform;
, then rewriteprotected override void OnInvalidateWorldTransform()
tovoid OnInvalidateWorldTransform(object sender, EventArgs args)
- To improve rendering speed, Fuse no longer checks for OpenGL errors in release builds in some performance-critical code paths
- Improved perceived ScrollView performance by preventing caching while pointers are pressed on them, avoiding inconsistent framerates.
- Fixed a bug which prevented elements like
Image
to use fast-track rendering in trivial cases with opacity (avoids render to texture). - Optimized how bounding boxes are calculated (improves layout and rendering performance).
- Fixed issue where during multitouch all input would stop if one finger was lifted.
- Added the option to opt-out of automatic handling of touch events when implementing a native view.
- Added the
attract
feature, which was previously only in premiumlibs. This provides a much simpler syntax for animation than theAttractor
behavior.
- The experimental
IGesture
interface has changed.- The
Significance
,Priority
andPriotityAdjustment
have been merged into the singleGetPriority
function. OnCapture
is changed toOnCaptureChanged
and provides the previous capture state
- The
Clicked
,DoubleClicked
,Tapped
,DoubleTapped
, andLongPressed
have been corrected to only detect the primary "first" pointer press. If you'd like to accept any pointer index addPointerIndex="Any"
to the gesture.SwipeGesture
,ScrollView
,LinearRangeBehaviour
(Slider
),CircularRangeBehaviour
,Clicked
,Tapped
,DoubleClicked
,DoubleTapped
,LongPressed
,WhilePressed
all use the gesture system now. They have aGesturePriority
property which can be used to adjust relative priorities -- though mostly the defaults should be fine.- The
SwipeGesture.GesturePriority
default is changed fromHigh
toLow
. This better fits with how the priorities should work together in a typical app and in general shouldn't affect any usual layouts. You can alter the priority withGesturePriority="High"
- Added
Reuse
toEach
allowing the reuse of nodes - Added
OnChildMoved
toVisual
. Anything implementingOnChildAdded
orOnChildRemoved
will likely need to implementOnChildMoved
as well. This happens when a child's position inChildren
list changes. - Added
OnChildMovedWhileRooted
toIParentObserver
- Added
parameter(page)
function which returns the routing parameter of the page parsed as an JSON string. - UX expressions now support arbitrary array lookups, e.g.
{someArray[index+3]}
. The same syntax can also be used with string keys, e.g{someObject[someKey]}
. The lookup is fully reactive - both the collection and the key/index can change.
- Added support for injecting UX expressions into
<JavaScript>
tags using thedep
XML namespace. See docs onJavaScript.Dependencies
for details.
### WhileVisibleInScrollView
- Added
How
property toWhileVisibleInScrollView
trigger that accepts valuesPartial
(default) andFull
. When set toFull
, the trigger is only active when the whole element bounds are inside view.
- Fixed connection problems on ios devices.
- Fixed an issue where
Activated
andWhileActivated
within anEdgeNavigator
did not correctly identify an active state - Changed
EdgeNavigation
to return a page inActive
when no side-panels are active
- Fixed a crash in the iOS implementation for Fuse.Share that could happen on iPad.
- Fixed a bug where disposing a JavaScript tag that has called the findData-method could lead to a crash.
- Fixed a crash in the rooting of certain tree structures using any of the Navigation triggers such as
WhileActive
- Fixed bug preventing handling of
KEEP_ASPECT
resize mode on Android when using ImageTools.resize
- iOS: Fixed crash when using Fuse.Camera alongside
<iOS.StatusBarConfig IsVisible="false" />
- Fixed bug on iOS where URIs were incorrectly encoded, leading to some input with reserved URI-characters misbehaving.
- Fixed bug in Android implementation that could result in errors due to prematurely recycled bitmaps
- Added
.list()
to fetch a list of all bundled files - Added
.readBuffer()
to read a bundle as an ArrayBuffer - Added
.extract()
to write a bundled file into a destination path
- A failed to load Image with a Url will now try again when the Url is used again in a new Image
- Added
reload
andretry
JavaScript functions onImage
to allow reloading failed images. - Fixed infinite recursion bug that could happen if a MemoryPolicy is set on a MultiDensityImageSource
- Fixed issue where the animation could become out of sync if the properties on ScrollingAnimation were updated.
- Updated the bundled Freetype library on macOS to now (again) include both 32-bit and 64-bit symbols, which fixes an issue where .NET and preview builds would crash with a SIGILL at startup when running on older Mac models.
- Updated the bundled libjpeg, libpng, Freetype, and SDL2 libaries for macOS to not use AVX instructions, since they are incompatible with the CPUs in some older Mac models. This fixes an issue with SIGILLs in native builds.
- Added feature toggle for implicit
GraphicsView
. If you are making an app using only Native UI disabling the implicitGraphicsView
can increase performance. Disable theGraphicsView
by definingDISABLE_IMPLICIT_GRAPHICSVIEW
when building. For exampleuno build -t=ios -DDISABLE_IMPLICIT_GRAPHICSVIEW
- Fuse.Input.Gesture now only has an internal constructor. This means that external code can't instantiate it. But before, they already couldn't do so in a meaningful way, so this shouldn't really affect any applications.
- Fixed issue where focusing a
<TextInput />
or<TextView />
by tapping it would not update the caret position accordingly.
Activated
,Deactivated
,WhileActive
,WhileInactve
have all been fixed when used inside nested navigation. Previously they would only consider the local navigation, not the entire tree. If the old behavior is still desired you can set thePath="Local"
option on the navigation.Activated
,Deactivated
have been fixed to only trigger when the navigation is again stable. If you'd instead like to trigger the moment the active page changes, which is closest to the previous undefined behavior, setWhen="Immediate"
- The
NavigationPageProxy
use pattern has changed.Rooted
is removed,Unrooted
is nowDispose
, and the constructor takes the parent argument. This encourages a safer use (avoiding leaks).
- Support MapMarker icon anchor X/Y/File properties when setting MapMarkers via JS
- Added
<MapMarker Tapped="{myHandler}"/>
to retain the data context for each tapped marker. - Added
<MapView AllowScroll="false"/>
to disable the user panning and scrolling around. - Fixed a bug causing crashes on iPhone 5s devices when using
ShowMyLocation="true"
- Added
<WebView ScrollEnabled="false"/>
to disable the user panning and scrolling around.
- Uno.Geometry.Box and Uno.Geometry.Ray has been replaced with Fuse.Box and Fuse.Ray.
- Added
QuickUnload
memory policy to keep data in memory for as short as possible.
- Added supported for encoding/decoding images to/from base64 on DotNet platforms, including Windows and Mac OS X.
- Fixes a bug where the app would crash if a databinding resolved to an incompatible type (e.g. binding a number property to a boolean value). (Marshal.TryConvertTo would throw exception instead of fail gracefully).
- Fixed a bug where HLS streams would become zero-sized on iOS.
- added
index
andoffsetIndex
as funtions to get the position of an element inside anEach
- added functions
mod
,even
,odd
, andalternate
to complement the index functions. These allow visually grouping elements on the screen based on their index. - added trigonometric math functions
sin
,cos
,tan
,asin
,acos
,atan
,atan2
,radiansToDegrees
,degreesToRadians
- added math functions
abs
,sqrt
,ceil
,floor
,exp
,exp2
,fract
,log
,log2
,sign
,pow
,round
,trunc
,clamp
- added
lerp
function for linear interpolation between values
- Fixed a bug where disposing a JavaScript tag that has called the findData-method could lead to a crash.
- Fixed issue where apps would not redraw when returning to Foreground
- Fixed possible nullref in Scroller that could happen in certain cases while scrolling a ScrollView
- Fixed nullref in Scroll that could happen if there are any pending LostCapture callbacks after the Scroller is Unrooted
- Fixed an issue where the rendering of one element could bleed into the rendering of another element under some very specific circumstances.
- Fixed an issue that would result in a broken layout if a
Sizing="Fill"
was used there wasn't enough space for one column.
- Fixed bug in Container which caused crash when the container had no subtree nodes. This caused the Fuse.MaterialDesign community package to stop working.
- Fixed a bug where we would trigger errors on Android if a live-stream was seeked or paused.
- Fixed an issue when loading images bigger than the maximum texture-size. Instead of failing, the image gets down-scaled so it fits.
This release only upgraded Uno.
- Fixed a bug where elements with many children and some of them were rotated, the rotated elements would appear in the wrong location.
- Fix bug which could cause visual glitches the first time rotating from Portrait to Landscape
- The interfaces
IObservable
,ISubscriber
andIObserver
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.
- Fixes 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 toSize
when databound. - Fixed a defect in expression functions
x,y,width,height
, they will not use the correct size if referring to an element that already has a layout
- Changes to the items will not 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. Defer="Deferred"
onInstance
/Each
allows the deferred creation of nodes without the need for aDeferred
nodeDeferred
now has an implied priority based on the node depth. Items with equalPriority
will now be ordered based on tree depth: deeper nodes come first.
- A
Page
will now be busy for the first frame (or two) after it is prepared. This will block theNavigator
from starting the transition during those frames, which should improve first frame jerkyness. ThePrepareBusy
property can be set toNone
to disable this behaviour.
- 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.
- 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 recommendedEventEmitter
GeoLocation.on("changed", ...)
) did not work.
- 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.
- 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.
- Add implementation for
android.view.TextureView
to better support multiple<GraphicsView />
's and<NativeViewHost />
's on Android.
- In order to fix a memory leak in
Container
the pre-rooting structure was changed. Children of the container will not be children of theSubtree
until rooted. It is not believed this will have any noticable effect; other features, like Trigger, also work this way.
- 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 usingAuto
instead. - Deprecated public access to the
Scroller
class. This is an internal class and should not be used. All functionality is accessible viaScrollView
- Added
SwipeGesture.GesturePriority
andScrollView.GesturePriority
to adjust priorities - Fixed an issue where a higher level capture where preempt one lower in the UI tree
- The
then
argument toBeginRemoveChild
is now anAction<Node>
to provide the node to the callback. Add anNode child
argument to the callback function.
- 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.
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
andRegularPolygon
. These are all backed by the new vector system. - Added several options to
Ellipse
to allow drawing wedges, like withCircle
- Added
Arc
for drawing the outside edge of anEllipse
- Added elliptic arc support to
Path
to support more SVG path data - Removed
FitMode.StrokeMaximum
andFitMode.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
andFuse.Drawing.Paths
packages. Their functionality has been replaced by the new vector system Fuse.Controls.FillRule
has moved toFuse.Drawing.FillRule
- 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
- Due to a bug in Mono we have temporarily removed support for PlaySound in preview on OSX.
- Fixed a bug causing crashes on iPhone 5s devices when using
ShowMyLocation="true"
- Fixed a bug where the
MemoryPolicy
given would not be correctly used.
See the commit history for this file for older entries.