- Add
outputType
in project files (acbcee3) - Update project and config files (85ff816)
- Update
GLHelper.h
includes on Android (2b143eb) - Simplify Android runtime version check (#1480)
- Update macros and uxl files (#1491)
- Remove legacy
Experimental.TextureLoader
library (#1458)
- Update permissions for Android 13 (#1487)
- Remove obsolete methods and enum value (#1492)
Fuse.Json.Escape(string s)
Fuse.Json.Escape(string s, StringBuilder sb)
Fuse.SystemFont.Weight.SemiBold
- Upgrade
Fuse.Video.CIL
to .NET 6.0 (#1475)
- Update assembly references for .NET 6.0 (#1476)
- Fix compatibility with the latest Android OS and indentation (#1473)
- Remove obsolete methods (#1492)
Fuse.VisualBounds.Transform(float4x4 matrix)
Fuse.VisualBounds.TransformFlatten(float4x4 matrix)
Fuse.VisualBounds.BoxTransform(Box box, float4x4 transform)
- Deprecate
NativePromise
withoutContext
(#1467) - Remove obsolete methods (#1492)
Fuse.Scripting.IThreadWorker.Invoke(Uno.Action action)
Fuse.Scripting.Context.Invoke(Uno.Action action)
Fuse.Scripting.ModuleResult.Object
Fuse.Scripting.ModuleResult.Exports
Fuse.Scripting.NativeEvent.RaiseAsync(params object[] args)
Fuse.Scripting.Object.InstanceOf(Function type)
Fuse.Scripting.Object.CallMethod(string name, params object[] args)
Fuse.Scripting.Function.Call(params object[] args)
Fuse.Scripting.Function.Construct(params object[] args)
- TypeScript and transpiler support in UX files (#1472)
- Upgrade
V8Simple.net
for .NET 6.0 (#1483)
- Upgrade
Fuse.Profiling
tool to .NET 6.0 (#1474) - Upgrade
android-build-tools
to v2.x (#1488) - Ignore tests failing on macOS (#1484)
- Kill tests after 15 minutes (#1489)
com.google.android.gms:play-services-maps
-> 17.0.0 (#1494)
This is the minimum version required to be published on Google Play.
- Remove AD_ID permission on Android (#1482)
- Support latest Android and iOS version (#1473)
- Fix package name on Android (#1477)
- Upgrade
firebase-messaging
-> 23.2.0 (#1479) - Support latest Android version (#1479)
- New library for drawing using your finger (#1470)
- Support
async
/await
in JavaScript via "regenerator-runtime" (#1465)
- Add
Context
parameter to native promises (#1468) - Implemenentation clean-up using lambda functions (#1466)
- Update iOS include headers (#1471)
- Add tsconfig module for FuseJS (0c3721d)
- Upgrade nodejs -> 16 (77ca8e6)
- Take screenshot of a Panel and save as a file (#1461)
- Add Snapping feature for ScrollView (#1459)
- Add SMS launcher and scriptmethod (#1464)
- Android 12 compatibility fix (#1463)
- Add Context parameter to NativePromise delegates (#1460)
- Fix desktop implementation of UserSettings (#1462)
- Use Node.js v14 on AppVeyor (#1457)
- Device orientation for iOS 16 compatibility (#1454)
- Add
Context.Stringify()
method (#1455)
- Add
Fuse.Alerts
to doc-export (#1456)
- Upgrade PickImage for Android to version 3.0.01 (#1453)
- Prevent duplicate paths on iOS (#1451)
- Android 12 compatibility fix (#1452)
- Improvements for wrapping web apps
- iOS: Enabling edge swipe for history back
- iOS: Disable preview a page on long pressing a link
- Android: Hide zoom button controls
- Introduce new type of Panel: CollectionPanel (#1446)
- WebView (Android): Image picker dialog (#1448)
- New library for home screen shortcuts (#1440)
- Fix memory leak in Glass effect (#1441)
- Experimental support for dashed strokes (#1442)
- Update device orientation implementation (#1443)
- Silences warnings when building on Mac with Xcode 13 (#1444)
- Transparency support for images from base64 (#1434)
- InAppBrowser launcher (#1412)
- Support fullscreen mode (#1435)
- Download ability (#1436)
- Open file picker for file inputs (#1439)
- TextControl accessibility: Introduce MinFontScale and MaxFontScale Property (#1362)
- Single finger PanGesture (#1428)
- Draggable enhancements (#1373)
- Refactor
Draggable
using IGesture System - Introduce
Translation
property toDraggable
to track translation position when user drag a visual withDragabble
behavior attached - Introduce two new Triggers:
DragStarted
Pulse when dragging activity has been startedDragEnded
Pulse when dragging activity has been ended
- Drag and Drop API. Experimental support for drag and drop between visual element. Introduce sets of Triggers:
WhileDraggingOver
Activated when Visual that containDraggable
behavior andWhileDraggingOver
trigger is overlaped / intersected with theTarget
Visual property that is defined inWhileDraggingOver
WhileDroppingBy
Activated when Visual that containWhileDroppingBy
trigger being overlaped / intersected bySource
Draggable VisualDropped
Pulse when Draggable Visual is being dropped to the target visual and vice versa
- Refactor
- Lazy load feature on
ImageFill
brush. IntroduceAutoLoad
bool property to control when we fetch the image data. The default value istrue
which means it automatically load the image data and display it whenever it rooted. Set it to false to make it lazy load and using the newLoadImage
trigger action to actually load the image (#1401) - Added
TargetSize
property onHttpImageSource
andFileImageSource
to resize the image before displaying. Only works on iOS and Android (#1401)
- Add Style property to DatePicker and TimePicker (#1384, #1420)
TextControl
accessibility feature. IntroduceMinFontScale
andMaxFontScale
Property to control the minimum or maximum text scaling behavior when the text/font size configuration setting on the phone has changed. Now default Fuse will honor the phone's text/font size configuration setting and will change all of the texts or labels in the Fuse App to match the setting. If you don't want the behavior you can pass a compiler flag:IGNORE_FONT_SCALING
when building the app i.e:uno build ios -DIGNORE_FONT_SCALING
(#1362)- Added
MaxLines
property to theText
component to limit the number of lines whenTextWrapping
property is set toWrap
(#1385) - Added support for
Shadow
Behavior inNativeViewHost
(#1380) - Added support for rendering backdrop filter of glass effect using the new
Glass
behavior (#1381, #1426) - Lazy load feature on
Image
component. IntroduceAutoLoad
bool property to control when we fetch the image data. The default value istrue
which means it automatically load the image data and display it whenever it rooted. Set it to false to make it lazy load and using the newLoadImage
trigger action to actually load the image. (#1401) - Added
LoadImage
trigger action to load image data forImage
orImageFill
(#1401)
- Introducing Fuse.Auth, the easiest way to perform user authentication using biometric sensor that reside on the device such as fingerprint or FaceID (#1351)
- Introducing Platform SignIn. a Sign In mechanism that use
Sign In With Apple
on iOS andGoogle SignIn
on Android. There is two API added,PlatformSignIn
as trigger action andFuseJS/Auth
as javascript module (#1366)
- Adds a map overlay to a MapView using
MapOverlay
Node. There are 3 types of overlay that are supported : Polyline, Polygon and Circle (#1352) - Added two scriptclass function,
snapshot
for taking an image of the current MapView display andshowAllMarkers
to zoom MapView to the particular position where all of the markers is visible on the MapView (#1395) - Implement click event on MapOverlay (#1396)
- Added trigger action
SetWindowOrientation
for setting device orientation (#1354) - Added trigger action
SetStatusBarUI
for setting look and feel of statusbar (#1355)
- Fix Image bounds in NativeViewHost (#1341)
- ImageLoader run on background thread (#1342)
- Fix memory leak on get image orientation (#1371)
- Compatibility with latest Xcode and iOS13.4 later (#1377)
- Fix device orientation setup, honor the project settings (#1375)
- Fuse.Text: Upgrade ICU to v68.2 (#1403)
Android.StatusBarConfig
Added property to change status bar style: Dark or Light. (#1355)- Push Notifications - JSON Payload Upgrade (#1346)
- Implement feedback vibration (#1359)
- Fix text rendering (#1405)
- Don't add BACKGROUND_LOCATION to manifest (#1411)
- TextEditRenderer: Enable horizontal scrolling only on lower versions (#1414)
- GeoLocation Upgrade (#1344, #1345)
- Trigger Action for Native Alerts (#1397)
- WhileScrolling Trigger (#1398)
- Media Picker (#1427)
- Introduce DiskCachePolicy in HttpImageSource (#1356)
- ImageSource and ImageFill Enhancement (#1360)
- Implement TextTruncation on NativeViewHost (#1364)
- Fix Visual Scroll Position of an element when MinScroll is Negative (#1368)
- Experimental support for mouse wheel scroll (#1372)
- Fix text-wrapping in NativeViewHost (#1378)
- Update ModuleInstance.uno (#1404)
- Tweak swipe edge navigation (#1421)
- Fix path 's' command use relative bezier curve (#1422)
- FuseJS/Environment
- Add properties to retrieve general information that reside in the .unoproj file (#1383)
- Biometric Module (#1379)
- Add
hsvColor()
function (#1423) - Enable cast from
string
tofloat4
(#1424) - Add
hexColor()
andrgba()
functions (#1425) - Add
length()
function (#1382)
- Make static selectors internal (#1369)
- Rename Java packages (#1370)
- Import Fuse.Android.Permissions from Uno.Permissions (#1387)
- Trim trailing whitespace (#1361, #1388)
- Include markdown docs in package (#1386)
- Fuse.Charting: Fix deprecation warnings in test (#1390)
- Drop obsolete legacy code (#1389)
- AppVeyor: Drop legacy mesa-download (#1391)
- Replace usage of obsolete APIs (#1348)
- Drop obsolete text file (#1350)
- Update TypeScript definitions (#1357)
- doc-export: Add Fuse.Auth reference (#1392)
- Fuse.Controls.CameraView: Fix type-name typo (#1393)
- Text Test App (#1408, #1409)
- Marked all members as obsolete. Please use
TextureLoader
inUno.Graphics.Utils
instead (#1327).
- Switched to AndroidX libraries (#1323).
- Auto Resizing Mask Fix (#1316).
- Fixed compile-time warnings (#1335).
- Fix crash caused by accessing disposed object (#1322).
- Added the following properties (#1317).
PlotPoint.RadialOffset
PlotPoint.RadialScale
PlotWedge.RadialOffset
PlotWedge.RadialScale
- Added
authorizationStatus
(#1319).
- Added
HoldPress
trigger (#1320).
- Added
launchApp(uri)
(#1324, #1325).
- Updated
IsRegistered
and updated dependencies (#1318).
- Print run-time warning instead of throwing exception (#1321).
- On iOS you can do feedback vibration by leveraging Taptic Engine (#1338). There are 9 types of vibration:
- Soft
- Rigid
- Light
- Medium
- Heavy
- Success
- Warning
- Error
- Selection
- Added more string functions (#1337):
trim
functionindexOf
functionsubstring
functionreplace
functioninsert
functionsplit
functionstartsWith
functionendsWith
function
- FuseJS/Environment: add property to retrieve current device locale using BCP47 format (#1313).
- Fixed threading issue on iOS 13 (#1299).
- Fixed threading issue on iOS 13 (#1294).
- Fixed threading issue on iOS 13 (#1293).
- Fixed system fonts on iOS 13 (#1291).
- Added the following methods to public API (#1310).
Fuse.Json.Parse(string)
Fuse.Json.Parse(string[])
- Added support for Dark Mode on Android (#1290).
- Added support for Dark Mode on iOS (#1309).
- Added new scriptmodule
FuseJS/DarkMode
(#1290).
- Added Page Navigation swipe from edges (#1279).
- Fixed SVGPathParser to better parse minimized svg data (#1302).
- Fixed dependencies/permissions on Android (#1245).
- Added new scriptmethod
isLocationEnabled
(#1245).
- Fixed crop function not using height parameter (#1300).
- Added docs for Universal and App Links support (#1282).
- Updated dependencies on Android (#1284).
- Upgraded zone.js to v0.9.1 (#1296).
- Allow unsetting/overriding Model (#1306).
- Fixes and updates for Android and iOS (#1220, #1314).
- Added scriptmethod
isRegisteredForRemoteNotifications
(#1220). - Fixed threading issue on iOS 13 (#1292).
- Fixed run-time warnings (#1312).
- Upgraded V8 to v7.6.303.30 on Android (#1297).
- Add
UserSettings
module. This module provides key-value pairs mechanism to store and retrieve primitive data types (string, number, boolean) as well as an array and a JSON object (#1310).
- Added
Value
property onTransitionState
(#1286).
- Fixes threading issue on iOS 13 (#1308).
- Fixed readonly
TextInput
.
- Added
DiskCache
property onHttpImageSource
.
- Fixed building with
-DUSE_JAVASCRIPTCORE
on Android.
- Added a new script module - FuseJS/Sensor.
- Updated to new android file permission requirements when sharing.
- Added definitions file for TypeScript.
- Renamed the following methods (for TypeScript compatibility):
- FuseJS/FileSystem:
delete
->remove
- FuseJS/FileSystem:
deleteSync
->removeSync
- FuseJS/Timer:
delete
->destroy
- FuseJS/Storage:
deleteSync
->removeSync
- FuseJS/FileSystem:
See also v1.11.3...v1.12.0.
- Updated with new file permission requirements for newer androids.
- Catered for out of memory error.
- Post photo capture - rotation fix: If out of memory, won't crash but will downsize image to fit memory before adjusting rotation.
- Fixed android app name.
- Upgrade V8 to 6.9.427.23 on Android.
- Switched to NPM for distribution.
- Added a set of overloads that return the texture object directly instead of passing the texture via callbacks. The old callback-based overloads are deprecated.
- Improves WebView to handle
mailto:
,sms:
, andtel:
special URLs supported by system apps on Android and iOS.
- Fix bug on iOS where an app is launched (not restored) from a notification and the notification isn't delivered.
- Fixed bug which caused dates not to be selectable if the control was inside a WhileTrue on iOS.
- This obsolete package has been removed. All functionality should be present in
Fuse.Controls.CameraView
instead.
- New feature:
checkPermissions()
- Check if your app has access to the camera. - New feature:
requestPermissions()
- Request permission to access the camera. In iOS, if the user has previously denied access this function will redirect them to your app settings in their iPhone / iPad.
- New feature:
checkPermissions()
- Check if your app has access to the gallery. - New feature:
requestPermissions()
- Request permission to access the gallery. In iOS, if the user has previously denied access this function will redirect them to your app settings in their iPhone / iPad.
- Fixed an issue causing an empty (
Size
= 0) layout to be performed on Android during app startup.
- Implement support for horizontal scrolling in ScrollViews inside a
NativeViewHost
on Android
- Added the functions
darken
,lighten
,saturate
,desaturate
,scaleSaturation
,scaleLightness
andadjustHue
for improved color handling in UX expressions. - Added the functions
rgbaToHsla
andhslaToRgba
for color conversions in UX expressions.
- Improved diagnostics to provide UX source location on several kinds of errors.
- Gradient rendering in preview previously had some limitations in the ranges of
StartPoint
andEndPoint
it could accept. This has been fixed: points inside and outside of the element render correctly now.
- Changed
NavigateToggle
to work without aNavigationContext
and remove some potential errors.
- Fixed a redundant layout invalidation when
Element.LayoutMaster
is changed. This would result in brokenLayoutAnimation
as multiple layouts could be triggered by aChange
.
- Fixed invalid layout caching when a relative container size changed. This affected
ScrollView
andDockPanel
, in particular it may have resulted in stale sizes when the keyboard appeared, or orientation changed.
- Fixed a crash when tapping the user's current location on iOS.
- Fixed incorrect zoom factor changes when the location changed on iOS.
- Deprecated the
GoUp
behavior which causes unexpected behavior and defects. This fixes an issue of pressing the hardware back button at the root state (on Android). The old behavior can be had by settingGoBackBehavior="GoBackAndUp"
on the router, but be aware it is deprecated and will be removed. - Added
Router.BackAtRootPressed
to allow intercepting a back button action on the root page.
- Fixed issue where
Video
on Android could end up not finding the rotation metadata on its video source - Fixed issue where
Video
on iOS could render incorrect on some rotations - Removed size flip in
VideoVisual
, looks like this used to work due to bug dependency. But the native video players flip the size themselves. - Add
VideoOrientationPage
to ManualTestApp, this page tests video with mp4 files with different rotations in their metadata section. - Use proper transforms for rotation in the video rendering code
- Fixed
WrapPanel
to update its layout when a layout property changes.
- Fixed a crash when pushing the back-button on Android.
- Support for
Fragment
on Android
- Fixed a defect that performed layout with a 0 density on Android at startup
- Fixed bug where setting
Data
on aPath
could end up not rendering inside aNativeViewHost
on iOS
- 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
withStretchMode="Uniform"
(the defaultStretchMode
). - 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 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.
- Added
IsEnabled
to allow conditional instantion of templates inInstance
- Added
Match
to pick a specific template - Added
Defaults
to limit default instances, useful when using bindings to match criteria
- Improved the JavaScript model and object support on
EdgeNavigator
.EdgeNavigator.Pages
functions likePageControl.Pages
, binding model data to templated pages.- Set
IsRouterOutlet="true"
to enableRouter
functionality.
- The following
protected internal
members have been made justinternal
, as they refer tointernal
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
- Added
SafeEdgePanel
to assist in creating iPhone X capable layouts.
- Fixed a defect in the default metric mode of
Grid
that could result in incorrect layout calculations, in particular if putting aGrid
inside aStackPanel
withauto
columns.
- Added
isSelected
function for determine selection status within an expression
- Fixed Android strokes to use the correct cap and join instead of always being Butt and Bevel.
- Added
Size
andHeight
toElement
as an alternate way to control the layout. This is useful for some animation and binding situations.
- Added
Restore
optionForward
to allow animating forward to return to rest state
- Marked several types internal that should not have been public:
SystemUI
and related types - Changed
ClientPanel
to usePadding
instead of panels. - Added
window()
function to get device UI borders:safeMargins
,staticMargins
and experimentaldeviceMargins
. This will allow developing for devices with extended border areas such as the iPhone X - Added
Device
global to query platform details, such asDevice.isIOS
andDevice.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 usewindow().safeMargins
andwindow().staticMargins
- Fixed
Keyframe
to allow expressions on the property values.
- A
Simple
orAuto
SwipeGesture
will no longer automatically activate at the halfway point, whereas aActive
gesture will. To get the old default behavior, which is considered a defect, useThreshold="0.5"
. - Added a
SwipeGesture.Threshold
to configure the automatic activation distnace.
- Added more info to the messages reported on failure during image loading.
- Marked
NativeMember.Context
as Obsolete. Either use passed-downContext
, or dispatch toThreadWorker
instead.
- Added support for passing arguments from UX to the model constructor using the
ModelArgs
attribute.
- There were a few bug-fixes from 1.6 that somehow missed 1.7. Those have now been restored. In particular:
- Added back removed API
Context.Invoke(Action ...)
. - Fixed a NullReferenceException in
NativeEvent.RaiseAsync(params object[])
.
- Added back removed API
- Fixed a crash in
Router.GoUp
that could be seen when pressing the back button at the root page of navigation.
- Fixed a bug where triggering
onParameterChanged
on an element would lead to a crash.
- Fixed a crash resulting from adding dynamic pages and binding by name
- Added support for drawing partial curves to
Path
andCurve
. Refer to thePathStart
,PathLength
andPathEnd
properties. - Added the path expressions
pathPointAtDistance
andpathTangentAngleAtDistance
for locating an offset along aPath
orCurve
and the heading.
- Fixed
goBack
to properly modify the route with two duplicate routes in the history## JavaScript - Several functions in
ScriptModule
and related classes have been markedinternal
. These were never meant to be part of the public API. - Added
JavaScript.Names
with optionRequire
to prevent injecting names into the JavaScript code namespace
- Fixed a failure to render translucent
TextColor
correctly - Fixed the rendering of opaque emoji when
TextColor
is translucent (they will not also be translucent, though still use the font coloring)
- Removed some deprecated methods and classes from
Node
:IDataListener
,OnDataChanged
. These were not meant to be public. - Deprecated
{}
in favour of the newdata()
function.{}
had unusual binding rules and would often not bind to the intended context.data()
always binds to the prime data context, it's unambiguous and predictable. - Fixed the object provided to JavaScript callbacks in
args.data
. It will now always be the prime data context, not just the next contextual data. - Deprecated and removed several functions which were not meant to be public. The deprecated ones will be removed shortly, as the current interface cannot be supported in the future.
ISiblingDataProvider
,ISubtreeDataProvider
,IDataEnumerator
,Node.GetFirstData
,Node.EnumerateData
,Node.BroadcastDataChange
,Node.IDataListenere
,Node.OnDataChanged
,Node.AddDataListener
,Node.RemoveDataListener
,IObject
,IArray
- Fixes invalid gradients in desktop preview (DotNet targets)
- Fixed the invalid reuse of an existing page if the context does not match
- Added support for boolean
==
and!=
expressions, which can be used for things like negating boolean expressions. - Added support for the logical not operator. This means you can do "!someBoolean" to logically negate it.
- Fixed negation operator (
-
, eg.-someValue
). - Added vector accessors
x(v)
,y(v)
,z(v)
,w(v)
to access the component values of float/2/3/4 values. (Note:x
andy
have an overloaded meaning now, also providing Element position). - Added
atanVector
to compute arc-tangent from afloat2
input
- Fixed bug where arrays inside arrays would produce unexpected behavior
- Fixed bug where a cycle in the object graph would result in infinite recursion in some cases
- Fixed bug where changing the value of a property from an object to a primitive value would cause odd behavior in some cases.
- Fixed bug where ScrollView's inside a NativeViewHost would scroll to fast
- Fixed bug where the scrolling indicator in a native ScrollView would not show on iOS
- Added
ContentSize
property on theFuse.Controls.Native.IScrollViewHost
interface. Needed by iOS to layout the native scrollview correctly
- Setting the
Background
property to something else than SolidColor or StaticSolidColor has been deprecated, and gives a warning. Support for this will be removed in an upcoming release.
- Setting the
StretchMode
property toScale9
on VideoVisual has been depecated, and gives a warning. Support for this will be removed in an upcoming release. - Removed
protected
constructor forLayoutFunction
, this was not meant to be public. Sealed the derived classes, they were not meant to be extendable.
- Restore accidentally broken NativeEvent.RaiseAsync() API.
- Rolled back NativeProperty constructor API to the pre-1.6 state. Code updated to 1.6 needs to be rolled back as well.
- Previous changes resulted in a breaking change we would rather avoid so we reintroduce
Invoke(Action ..)
so we can take it through the usual deprecation cycle.
- Fixed issue where
<Image />
inside a<NativeViewHost />
on android could display incorrectly
- Fixed bug where ScrollView's inside a NativeViewHost would scroll to fast
- Fixed bug where the scrolling indicator in a native ScrollView would not show on iOS
- Added
ContentSize
property on theFuse.Controls.Native.IScrollViewHost
interface. Needed by iOS to layout the native scrollview correctly
- Introduced an experimental
Let
feature that allows creating expression aliases and local variables in UX - Added specific type version of
Let
, such asLetFloat
andLetString
. This improve the ability to connect pieces of the UX together and do animation/transitions in UX without using JavaScript.
- Improved the internals of
Instantiator
(the base forEach
andInstance
). This also fixed a few corner cases with templates not updating, but should otherwise not affect user code. - Fixed the creation of templates in
Each
/Instance
when the data context is null/non-extant. It will now not instantiate the templates are all. This prevents some kinds of binding defects and improves efficiency with default templates.
- Fixed an incorrect cascade of
MinWidth
/MinHeight
. This could only be noticed in certain scenarios usingBoxSizing="FillAspect"
. - Fixed the
width
,height
,x
, andy
functions to support an element losing its layout. They become undefined in this case, thus allowing a syntax likewidth(element) ?? 50
- Fixed the invalid propagation of MaxWidth/MaxHeight in a StackPanel to its children
- Resolved a situation with nested context binding
{}
, such asWith
andInstance
, where the data would not correctly update
- Fixed the ordering of events so that
SelectionChanged
is emitted after the bound value is updated
- Deprecated
UnaryOperator.OnNewOperand
andOnLostOperand
. These are part of a broken pattern of using unary expressions (and were not present on Binary/Ternary/QuaternaryOperator). You generally shouldn't need this, and should implementCompute
instead. In the rare cases you need the virtuals you'll need to extend Expression and implementSubscribe
, usingExpressionListener
as a way to capture the correct functionality. - Moved
VarArgFunction.Argument
toExpression.Argument
. It's in a base class so still has visibility inVarArgFunction
. VarArgFunction.Subscription.OnNewData
andOnLostData
have been sealed. They should not have been open for overriding before as it conflicts with the inner workings on the class. Only theOnNewPartialArguments
andOnNewArguments
should be overridden.- Improved error handling on several operators and math functions. Instead of exceptions these should produce the standard conversion/computation warnings for invalid types.
- Added
size()
function to force conversion to aSize
orSize2
type. Useful when dealing with unknown types and some operators that would otherwise result in the undesired conversion.
- Fixed an issue with
Navigator.Pages
not registering pages correctly in certain initialization orders - Added
$navigationRequest
toNavigation.Pages
objects. This can be used to fine-tune the navigation.
- Added
Instance.Item
to work similar to anEach
with a single data item
- Added
nonNull
for special evaluation handling for temporary null values. This may be useful in migrating code that is now producing many incompatible argument warnings. - Changed operators / functions to report warnings if they are provided with invalid arguments. This should help locate errors in code that were previously silent and just didn't evaluate, or evaluated wrong. Consider using the
??
operator, and theisNull
,isDefined
andnonNull
functions to deal with non-data scenarios. - Removed
protected
fromBinaryOperator.OnNewOperands
. This was intended to beinternal
as there is no correct way to overload it. If you happened to use it we can provide a different base-class to use for you.
- Removed the following APIs, that were never meant to be exposed to user-code:
Fuse.Visual.DrawLocalSelection(DrawContext, Rect)
Fuse.Visual.DrawSelection(DrawContext)
Fuse.AppBase.InvalidateSelection()
Fuse.App.DrawSelection(DrawContext)
Fuse.Preview.SelectionManager
Fuse.Preview.ISelection
- Added
float()
expression to force conversion to float values - Added
string()
expression to force conversion to string values
- Fixed issue where creating a repeating
Timer
with 0 delay in JavaScript would not prevent the worker thread to become idle.
RangeControl.Value
andRangeControl2D.Value
are not longer clamped to theRange
of the control. This fixes issues where theValue
was incorrectly modified when the range and value were both data bound. The user behaviorsLinearRangeBehavior
andCircularRangeBehavior
will both however clamp to the range -- the user cannot select outside the range.
- Fixed an issue where missing data was propagated as null. This will affect Observable's that contain zero data, and may have resulted in some bindings showing old/incorrect data.
- Fixed an issue where the desired size of a multi-density source ended up as the pixel size of the selected image source. The effect was that images rendered on a high-density screen, would appear larger than on a low density screen.
- Fixed an issue where
PlayMode="Wrap"
would not loop if the duration was less than 1 second
- Added
isDefined
to check if a value is known in the context - Added
isNull
to check if a value is null or doesn't exist
- Added object support to
Router
script functions, such asgoto
,push
,bookmark
, etc. This mirrors the upcoming Model ability to use objects as path elements. - Added object support to
Modify/Push/GotoRoute
actions. - Added
NavigationControl.modifyPath
to the JavaScript interface. This allows extended local path manipulation without using a router.
- Fixed iOS issue where the return key would display "next" instead of "return".
Navigator
blocks input to pages while transitioning to new pages. To get the old behaviour, where input is not blocked, set<Navigator BlockInput="Never">
.
- Added
OnLostData
to theIListener
interface. This is needed to properly deal with changes in context in Preview, Model, and some JavaScript situations. - Added
OnLostData
to theInnerListener
class. Implementations should deal with this scenario. - Changed null coalesce
??
to use the default when the left operand doesn't exist, not just when it's null
ToDouble
replaced withTryToDouble
for naming consistency (old names remain as deprecated)
- Fixed a bug where
IsFrozen
would ignorePanel.Opacity
.
- Fixed an Uno reflection bug that caused these pickers to crash in preview.
Fuse.Scripting
'sFunction
type has aCall
method, this now takes aScripting.Context
. This guarantees that it can only occur on the VM thread.Fuse.Scripting
'sObject
type has aCallMethod
method, this now takes aScripting.Context
. This guarantees that it can only occur on the VM thread.- IMirror is no longer implemented by ThreadWorker. This functionality has been moved to the context
- Moved
ArrayMirror
,ClassInstance
,ModuleInstance
,ObjectMirror
,Observable
,ObservableProperty
,RootableScriptModule
&ThreadWorker
to theFuse.Scripting.JavaScript
namespace - Removed the
CanEvaluate
method and instead rely on the passing of theScripting.Context
to know if we are on the VM thread or not. - The 'wrapping' functionality has been moved from the
ThreadWorker
to a standalone static class calledTypeWrapper
. TheIThreadWorker
no longer providesWrap
&UnWrap
ThreadWorker.ScriptClass
functionality moved to context. We will likely want to factor this out to a helper class however for now the major benefit is thatThreadWorker
no longer owns these features.- Remove the public
Context
property from theThreadWorker
. Sadly the context is still available via the internal field so that the tests can work. This will need to be fixed. Fuse.Reactive
now depends onFuse.Scripting
so that it can talk about theScripting.Context
in it's provided interfaces.DateTimeConverterHelpers
moved to its own uno file.IMirror
'sReflect
now takes aScripting.Context
- IThreadWorker no longer implement IDispatcher
Fuse.Scripting.JavaScript
'sThreadWorker
no longer blocks on construction- Implemented
console.error
,console.warn
andconsole.info
- Improved formatting for the above functions, as well as for
console.log
- The
ScriptMethod<T>
constructor now throws if it's passedExecutionThread.MainThread
with Func, instead of failing to run it later on. - The
ScriptMethodInline
constructor that takes anExecutionThread
as an argument is now obsolete. Use the one without instead. JavaScript needs to run on the JavaScript thread anyway. - The
ScriptMethod<T>
constructor that takesFunc
andExecutionThread
as arguments is now obsolete. Use the one without instead. - Calling script-methods that doesn't take any arguments should now consistently give an error. This was already the case for many functions. This is intended to ensure user-code is forward-compatible.
ScriptException.ErrorMessage
has been marked as obsolete, useScriptException.Message
instead.ScriptException.Message
no longer includes all details about the script-exception, only the message itself. If you want the extra information, useScriptException.ToString()
, or check the specific fields.Fuse.IScriptException
has been marked as obsolete. This was previously unused.ScriptException.JSStackTrace
has been marked as obsolete, useScriptException.ScriptStackTrace
instead.ScriptException.SourceLine
has been marked as obsolete, and consistently returns null now. The latter was always the case except for when using V8 before. The same information can be deduced from the project files and FileName + LineNumber fields.ModuleResult.Object
has been marked as obsolete. UseModuleResult.GetObject(Context)
instead.ModuleResult.Exports
has been marked as obsolete. UseModuleResult.GetExports(Context)
instead.Function.Call
,Function.Construct
,Object.InstanceOf
andObject.CallMethod
now takes aContext
as their first argument. The old signatures has been marked as obsolete.
- Added support for JavaScriptCore on Android. Build with
-DUSE_JAVASCRIPTCORE
to enable it on Android. JavaScriptCore is by default enabled on iOS.
- Fixed an issue where toUpper and toLower would crash on null intput. Now they propagate null instead.
- Fixed an issue where some properties (for example
TimePicker.Is24HourView
) wouldn't work when set from UX. - Fixed a documentation issue with
TimePicker
where the code example used the wrong name for theIs24HourView
property.
- Fix regression causing iOS apps not to be accepted to the Store apparently due to use of push-notifications even though they are not used in the project.
- Fixed issue on android where placeholder text on a
<TextInput IsPassword="true" />
would be drawn as password dots
- 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 regression in 1.3 that broke WebView when using URISchemeHandler
- 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 a regression where args.sender was no longer the
ux:Name
of the parent of the trigger.
- Fixed an issue where
PageControl.ActiveIndex
would not update if navigation done with JavaScriptseekToPath
orRouter
interfaces.
- 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.