- Add
outputTypein project files (acbcee3) - Update project and config files (85ff816)
- Update
GLHelper.hincludes on Android (2b143eb) - Simplify Android runtime version check (#1480)
- Update macros and uxl files (#1491)
- Update unoproj syntax in doc-comments (#1493)
- Switch default UI rendering on iOS and Android (#1502)
- Remove legacy
Experimental.TextureLoaderlibrary (#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
- Android: Fix Android 13 permission (#1496)
- Native ScrollView feature parity with the Graphics Mode (#1497)
- Android: Fix native ScrollView where nested with horizontal ScrollView (#1500)
- Native Video Component (#1501)
- Native Slider Android: fix bug recursive setting value (#1504)
- Android: Fix Scrollview with content padding (#1505)
- Android: Native Scrollview snap min/max and bounce scroll (#1509)
- Android: Scrolling detect Improvement (#1512)
- Android: Add Icon Symbols using Material Symbols (#1513)
- iOS: Add Icon Symbols using SF Symbols (#1513)
- iOS: Fix crash when removing Shadow (#1498)
- Fix bugs and improve native rendering for Image, Circle and Shadow (#1507)
- Upgrade
Fuse.Video.CILto .NET 6.0 (#1475)
- ScrollView push to native for property changes (#1510)
- Update assembly references for .NET 6.0 (#1476)
- Android: Fix Android 13 permission (#1499)
- Android: Fix compatibility with the Android 13 and indentation (#1473)
- iOS: Fix memory leaks with MapView (#1503)
- Android: MapView sanitary check (#1511)
- Remove obsolete methods (#1492)
Fuse.VisualBounds.Transform(float4x4 matrix)Fuse.VisualBounds.TransformFlatten(float4x4 matrix)Fuse.VisualBounds.BoxTransform(Box box, float4x4 transform)
- Android: Fix crash on layout transformation (#1506)
- Deprecate
NativePromisewithoutContext(#1467) - Remove obsolete methods (#1492)
Fuse.Scripting.IThreadWorker.Invoke(Uno.Action action)Fuse.Scripting.Context.Invoke(Uno.Action action)Fuse.Scripting.ModuleResult.ObjectFuse.Scripting.ModuleResult.ExportsFuse.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.netfor .NET 6.0 (#1483)
- Blob and URL polyfill, enhance fetch, and sanitary check (#1508)
- Upgrade
Fuse.Profilingtool to .NET 6.0 (#1474) - Upgrade
android-build-toolsto v2.x (#1488) - Ignore tests failing on macOS (#1484)
- Kill tests after 15 minutes (#1489)
- OS X -> macOS clean up (#1495)
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/awaitin JavaScript via "regenerator-runtime" (#1465)
- Add
Contextparameter 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.Alertsto 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
Draggableusing IGesture System - Introduce
Translationproperty toDraggableto track translation position when user drag a visual withDragabblebehavior attached - Introduce two new Triggers:
DragStartedPulse when dragging activity has been startedDragEndedPulse when dragging activity has been ended
- Drag and Drop API. Experimental support for drag and drop between visual element. Introduce sets of Triggers:
WhileDraggingOverActivated when Visual that containDraggablebehavior andWhileDraggingOvertrigger is overlaped / intersected with theTargetVisual property that is defined inWhileDraggingOverWhileDroppingByActivated when Visual that containWhileDroppingBytrigger being overlaped / intersected bySourceDraggable VisualDroppedPulse when Draggable Visual is being dropped to the target visual and vice versa
- Refactor
- Lazy load feature on
ImageFillbrush. IntroduceAutoLoadbool property to control when we fetch the image data. The default value istruewhich 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 newLoadImagetrigger action to actually load the image (#1401) - Added
TargetSizeproperty onHttpImageSourceandFileImageSourceto resize the image before displaying. Only works on iOS and Android (#1401)
- Add Style property to DatePicker and TimePicker (#1384, #1420)
TextControlaccessibility feature. IntroduceMinFontScaleandMaxFontScaleProperty 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_SCALINGwhen building the app i.e:uno build ios -DIGNORE_FONT_SCALING(#1362)- Added
MaxLinesproperty to theTextcomponent to limit the number of lines whenTextWrappingproperty is set toWrap(#1385) - Added support for
ShadowBehavior inNativeViewHost(#1380) - Added support for rendering backdrop filter of glass effect using the new
Glassbehavior (#1381, #1426) - Lazy load feature on
Imagecomponent. IntroduceAutoLoadbool property to control when we fetch the image data. The default value istruewhich 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 newLoadImagetrigger action to actually load the image. (#1401) - Added
LoadImagetrigger action to load image data forImageorImageFill(#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 Appleon iOS andGoogle SignInon Android. There is two API added,PlatformSignInas trigger action andFuseJS/Authas javascript module (#1366)
- Adds a map overlay to a MapView using
MapOverlayNode. There are 3 types of overlay that are supported : Polyline, Polygon and Circle (#1352) - Added two scriptclass function,
snapshotfor taking an image of the current MapView display andshowAllMarkersto 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
SetWindowOrientationfor setting device orientation (#1354) - Added trigger action
SetStatusBarUIfor 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.StatusBarConfigAdded 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
stringtofloat4(#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
TextureLoaderinUno.Graphics.Utilsinstead (#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.RadialOffsetPlotPoint.RadialScalePlotWedge.RadialOffsetPlotWedge.RadialScale
- Added
authorizationStatus(#1319).
- Added
HoldPresstrigger (#1320).
- Added
launchApp(uri)(#1324, #1325).
- Updated
IsRegisteredand 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):
trimfunctionindexOffunctionsubstringfunctionreplacefunctioninsertfunctionsplitfunctionstartsWithfunctionendsWithfunction
- 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
UserSettingsmodule. 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
Valueproperty onTransitionState(#1286).
- Fixes threading issue on iOS 13 (#1308).
- Fixed readonly
TextInput.
- Added
DiskCacheproperty onHttpImageSource.
- Fixed building with
-DUSE_JAVASCRIPTCOREon 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.CameraViewinstead.
- 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
NativeViewHoston Android
- Added the functions
darken,lighten,saturate,desaturate,scaleSaturation,scaleLightnessandadjustHuefor improved color handling in UX expressions. - Added the functions
rgbaToHslaandhslaToRgbafor 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
StartPointandEndPointit could accept. This has been fixed: points inside and outside of the element render correctly now.
- Changed
NavigateToggleto work without aNavigationContextand remove some potential errors.
- Fixed a redundant layout invalidation when
Element.LayoutMasteris changed. This would result in brokenLayoutAnimationas multiple layouts could be triggered by aChange.
- Fixed invalid layout caching when a relative container size changed. This affected
ScrollViewandDockPanel, 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
GoUpbehavior 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.BackAtRootPressedto allow intercepting a back button action on the root page.
- Fixed issue where
Videoon Android could end up not finding the rotation metadata on its video source - Fixed issue where
Videoon 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
VideoOrientationPageto 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
WrapPanelto update its layout when a layout property changes.
- Fixed a crash when pushing the back-button on Android.
- Support for
Fragmenton Android
- Fixed a defect that performed layout with a 0 density on Android at startup
- Fixed bug where setting
Dataon aPathcould end up not rendering inside aNativeViewHoston 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
PathwithStretchMode="Uniform"(the defaultStretchMode). - Fixed a defect that prevented a
Pathwith 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
Griddefect that resulted in some cells not calculating the correct layout size. Gridnow 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
IsEnabledto allow conditional instantion of templates inInstance - Added
Matchto pick a specific template - Added
Defaultsto limit default instances, useful when using bindings to match criteria
- Improved the JavaScript model and object support on
EdgeNavigator.EdgeNavigator.Pagesfunctions likePageControl.Pages, binding model data to templated pages.- Set
IsRouterOutlet="true"to enableRouterfunctionality.
- The following
protected internalmembers have been made justinternal, as they refer tointernaltypes and weren't meant to be available to derived types:Fuse.Controls.TextInputControl.EditorFuse.Controls.TextInputControl.TextInputControl(TextEdit)Fuse.Physics.ForceFieldTrigger.SetForce(Body, float)Fuse.Physics.ForceFieldEventTrigger.OnTriggered(Body)Fuse.Controls.TextControl._textRenderer
- Added
SafeEdgePanelto assist in creating iPhone X capable layouts.
- Fixed a defect in the default metric mode of
Gridthat could result in incorrect layout calculations, in particular if putting aGridinside aStackPanelwithautocolumns.
- Added
isSelectedfunction 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
SizeandHeighttoElementas an alternate way to control the layout. This is useful for some animation and binding situations.
- Added
RestoreoptionForwardto allow animating forward to return to rest state
- Marked several types internal that should not have been public:
SystemUIand related types - Changed
ClientPanelto usePaddinginstead of panels. - Added
window()function to get device UI borders:safeMargins,staticMarginsand experimentaldeviceMargins. This will allow developing for devices with extended border areas such as the iPhone X - Added
Deviceglobal to query platform details, such asDevice.isIOSandDevice.isAndroid - Removed the
RelativeToKeyboardModerelative 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().safeMarginsandwindow().staticMargins
- Fixed
Keyframeto allow expressions on the property values.
- A
SimpleorAutoSwipeGesturewill no longer automatically activate at the halfway point, whereas aActivegesture will. To get the old default behavior, which is considered a defect, useThreshold="0.5". - Added a
SwipeGesture.Thresholdto configure the automatic activation distnace.
- Added more info to the messages reported on failure during image loading.
- Marked
NativeMember.Contextas Obsolete. Either use passed-downContext, or dispatch toThreadWorkerinstead.
- Added support for passing arguments from UX to the model constructor using the
ModelArgsattribute.
- 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.GoUpthat could be seen when pressing the back button at the root page of navigation.
- Fixed a bug where triggering
onParameterChangedon 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
PathandCurve. Refer to thePathStart,PathLengthandPathEndproperties. - Added the path expressions
pathPointAtDistanceandpathTangentAngleAtDistancefor locating an offset along aPathorCurveand the heading.
- Fixed
goBackto properly modify the route with two duplicate routes in the history## JavaScript - Several functions in
ScriptModuleand related classes have been markedinternal. These were never meant to be part of the public API. - Added
JavaScript.Nameswith optionRequireto prevent injecting names into the JavaScript code namespace
- Fixed a failure to render translucent
TextColorcorrectly - Fixed the rendering of opaque emoji when
TextColoris 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:xandyhave an overloaded meaning now, also providing Element position). - Added
atanVectorto compute arc-tangent from afloat2input
- 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
ContentSizeproperty on theFuse.Controls.Native.IScrollViewHostinterface. Needed by iOS to layout the native scrollview correctly
- Setting the
Backgroundproperty 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
StretchModeproperty toScale9on VideoVisual has been depecated, and gives a warning. Support for this will be removed in an upcoming release. - Removed
protectedconstructor 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
ContentSizeproperty on theFuse.Controls.Native.IScrollViewHostinterface. Needed by iOS to layout the native scrollview correctly
- Introduced an experimental
Letfeature that allows creating expression aliases and local variables in UX - Added specific type version of
Let, such asLetFloatandLetString. 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 forEachandInstance). 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/Instancewhen 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, andyfunctions 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 asWithandInstance, where the data would not correctly update
- Fixed the ordering of events so that
SelectionChangedis emitted after the bound value is updated
- Deprecated
UnaryOperator.OnNewOperandandOnLostOperand. 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 implementComputeinstead. In the rare cases you need the virtuals you'll need to extend Expression and implementSubscribe, usingExpressionListeneras a way to capture the correct functionality. - Moved
VarArgFunction.ArgumenttoExpression.Argument. It's in a base class so still has visibility inVarArgFunction. VarArgFunction.Subscription.OnNewDataandOnLostDatahave been sealed. They should not have been open for overriding before as it conflicts with the inner workings on the class. Only theOnNewPartialArgumentsandOnNewArgumentsshould 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 aSizeorSize2type. Useful when dealing with unknown types and some operators that would otherwise result in the undesired conversion.
- Fixed an issue with
Navigator.Pagesnot registering pages correctly in certain initialization orders - Added
$navigationRequesttoNavigation.Pagesobjects. This can be used to fine-tune the navigation.
- Added
Instance.Itemto work similar to anEachwith a single data item
- Added
nonNullfor 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,isDefinedandnonNullfunctions to deal with non-data scenarios. - Removed
protectedfromBinaryOperator.OnNewOperands. This was intended to beinternalas 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.SelectionManagerFuse.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
Timerwith 0 delay in JavaScript would not prevent the worker thread to become idle.
RangeControl.ValueandRangeControl2D.Valueare not longer clamped to theRangeof the control. This fixes issues where theValuewas incorrectly modified when the range and value were both data bound. The user behaviorsLinearRangeBehaviorandCircularRangeBehaviorwill 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
isDefinedto check if a value is known in the context - Added
isNullto check if a value is null or doesn't exist
- Added object support to
Routerscript functions, such asgoto,push,bookmark, etc. This mirrors the upcoming Model ability to use objects as path elements. - Added object support to
Modify/Push/GotoRouteactions. - Added
NavigationControl.modifyPathto 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".
Navigatorblocks input to pages while transitioning to new pages. To get the old behaviour, where input is not blocked, set<Navigator BlockInput="Never">.
- Added
OnLostDatato theIListenerinterface. This is needed to properly deal with changes in context in Preview, Model, and some JavaScript situations. - Added
OnLostDatato theInnerListenerclass. 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
ToDoublereplaced withTryToDoublefor naming consistency (old names remain as deprecated)
- Fixed a bug where
IsFrozenwould ignorePanel.Opacity.
- Fixed an Uno reflection bug that caused these pickers to crash in preview.
Fuse.Scripting'sFunctiontype has aCallmethod, this now takes aScripting.Context. This guarantees that it can only occur on the VM thread.Fuse.Scripting'sObjecttype has aCallMethodmethod, 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&ThreadWorkerto theFuse.Scripting.JavaScriptnamespace - Removed the
CanEvaluatemethod and instead rely on the passing of theScripting.Contextto know if we are on the VM thread or not. - The 'wrapping' functionality has been moved from the
ThreadWorkerto a standalone static class calledTypeWrapper. TheIThreadWorkerno longer providesWrap&UnWrap ThreadWorker.ScriptClassfunctionality moved to context. We will likely want to factor this out to a helper class however for now the major benefit is thatThreadWorkerno longer owns these features.- Remove the public
Contextproperty 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.Reactivenow depends onFuse.Scriptingso that it can talk about theScripting.Contextin it's provided interfaces.DateTimeConverterHelpersmoved to its own uno file.IMirror'sReflectnow takes aScripting.Context- IThreadWorker no longer implement IDispatcher
Fuse.Scripting.JavaScript'sThreadWorkerno longer blocks on construction- Implemented
console.error,console.warnandconsole.info - Improved formatting for the above functions, as well as for
console.log - The
ScriptMethod<T>constructor now throws if it's passedExecutionThread.MainThreadwith Func, instead of failing to run it later on. - The
ScriptMethodInlineconstructor that takes anExecutionThreadas an argument is now obsolete. Use the one without instead. JavaScript needs to run on the JavaScript thread anyway. - The
ScriptMethod<T>constructor that takesFuncandExecutionThreadas 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.ErrorMessagehas been marked as obsolete, useScriptException.Messageinstead.ScriptException.Messageno 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.IScriptExceptionhas been marked as obsolete. This was previously unused.ScriptException.JSStackTracehas been marked as obsolete, useScriptException.ScriptStackTraceinstead.ScriptException.SourceLinehas 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.Objecthas been marked as obsolete. UseModuleResult.GetObject(Context)instead.ModuleResult.Exportshas been marked as obsolete. UseModuleResult.GetExports(Context)instead.Function.Call,Function.Construct,Object.InstanceOfandObject.CallMethodnow takes aContextas their first argument. The old signatures has been marked as obsolete.
- Added support for JavaScriptCore on Android. Build with
-DUSE_JAVASCRIPTCOREto 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
TimePickerwhere the code example used the wrong name for theIs24HourViewproperty.
- 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
Observableproperty 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
LinearRangeBehaviornow correctly responds toUserStepvalues, providing quantized input- Fixed
RangeControl.RelativeValueto properly update when bound in UX - Allowed
Minimumto be less thanMaximumonRangeControlmaking it easier to do left-to-right100..0ranges. - Fixed a defect in position calculations in
LinearRangeBehavior. It now uses the immediate Element parent for bounds calculation as opposed to theRangeControl. - Added
UserStepsupport 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
DatePickerclass documentation for more details.
- Introduced Fuse.Controls.TimePicker class, which wraps native time pickers on Android and iOS. See the
TimePickerclass documentation for more details.
- Fixed bug on Android where setting
TextWrapping="NoWrap"would force theTextViewto 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
Videoto make it easier to control playback from JavaScript, as well as obtaining information the video duration. - Made
Video.DurationandVideo.Positionproperty-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,EventBindingandExpressionBindingclass constructors no longer take aNameTableargument. - The
NameandThisexpression classes has been removed. The UX compiler will now compile these asConstantexpressions that contain the actual objects instead. - The
IContextinterface no longer contains theNameTableproperty. - The
Fuse.IRawinterface removed (now internal to theFuse.Reactive.JavaScriptpackage). Had no practical public use. - The
Fuse.Reactive.ListMirrorclass 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.Reactivenamespace. - The
Fuse.Reactive.IWriteableinterface has changed (breaking!). The method signature is nowbool TrySetExclusive(object)instead ofvoid SetExclusive(object). Unlikely to affect your code. IObservableandIObservableArrayno longer push their initial value onSubscribe.
- Image will now respect Exif orientation.
- Fixed a regression where args.sender was no longer the
ux:Nameof the parent of the trigger.
- Fixed an issue where
PageControl.ActiveIndexwould not update if navigation done with JavaScriptseekToPathorRouterinterfaces.
- 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:Dependencyordepare 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 usingrouterwith no declaration.
- Fixed a problem where horizontal or vertical lines would not draw in the .NET backend.
- Fixed an issue with
attractnot 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.Pagesto bind the local history to an observable/model - Added
PageControl.Pagesto bind the list of available pages to an observable/model - Fixed the semantics of
PageControl.ActiveIndexto 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
Routermaintains 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
IRouterOutletand 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
NavigatorIsReusableproperty. These were deprecated over a year ago. UseResuse="Any"instead. - Removed
PageControl.TransitionEasingandPagecontrol.TransitionDuration. These were deprecated over a year ago. Use aNavigationMotionobject instead withGotoEasingandGotoDurationproperties. - Removed
PageIndicator.DotTemplateandPageIndicator.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
GoBackandWhileCanGoBackon 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/jpgwould 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,GotoRouteandPushRouteactions to replaceRouterModify. These all have aPathproperty. - Added
gotoRoute,pushRoute, andmodifyRouteexpression events which allow for simple navigation in event handlers.
- Added
ScrollViewPagewhich 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
WhileVisibleInScrollViewdid 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 aTargetto target a specific node, orTargetNodeto specify where the search begins. - Changed/fixed
Triggerto 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 UnoTriggerActionand 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,VectorLayerand charting will work inside aNativeViewHost.
- Fixed issue on Android causing text to align incorrectly if being scrolled and unfocused.
- Added possibility to use
RowAlignmentto align the elements in the major direction of theWrapPanelas 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
ITreeRendererinterface, 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.Childrencollection 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 aVisualis nowfor (var c = parent.FirstChild<Visual>(); c != null; c = c.NextSibling<Visual>())whereVisualcan be replaced with the desired node type to visit.
- Fuse.Scripting now knows about the JS
Datetype, allowing instances to be passed to/from Uno in the form ofUno.DateTimeobjects. This support extends to databinding,NativeModules,ScriptClasss, and theContext.Wrap/UnwrapAPI. - Binding an object that does not implement
IArrayto a property that expectsIArraywill now automatically convert the value to an array of length 1.
- Breaking change: Several entrypoints on UpdateManager now take a
LayoutPriorityenum instead ofintas thepriorityargument. Very unlikely to affect user code code. - Fixed an issue where writes to
FuseJS/Observableswould not dispatch in the right order on the UI thread if interleaved withScriptClasscallbacks (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,-DCOCOAPODSand 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
findRouterfunction making it easier to use a router in a page deep inside the UI - Fixed and issue where relative paths and nested
Routergave an error about unknown paths
- Introduced support for variable arguments to UX functions - inherit from the
Fuse.Reactive.VarArgFunctionclass. - The classes
Vector2,Vector3andVector4inFuse.Reactiveare now removed and replaced with the general purpose, variable-argument versionVectorinstead. 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
IdentityandIdentityKeytoEach. This allows created visuals to be reused when replaced withreplaceAtorreplaceAllin 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.TemplateSourceandInstance.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.TemplateSourceto 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/Instanceshandled 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 useMatchKeyand 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.WorldTransformInvalidatedevent instead, like so: OverrideOnRootedand doWorldTransformInvalidated += OnInvalidateWorldTransform;, OverrideOnUnrootedand 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
Imageto 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
attractfeature, which was previously only in premiumlibs. This provides a much simpler syntax for animation than theAttractorbehavior.
- The experimental
IGestureinterface has changed.- The
Significance,PriorityandPriotityAdjustmenthave been merged into the singleGetPriorityfunction. OnCaptureis changed toOnCaptureChangedand provides the previous capture state
- The
Clicked,DoubleClicked,Tapped,DoubleTapped, andLongPressedhave 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,WhilePressedall use the gesture system now. They have aGesturePriorityproperty which can be used to adjust relative priorities -- though mostly the defaults should be fine.- The
SwipeGesture.GesturePrioritydefault is changed fromHightoLow. 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
ReusetoEachallowing the reuse of nodes - Added
OnChildMovedtoVisual. Anything implementingOnChildAddedorOnChildRemovedwill likely need to implementOnChildMovedas well. This happens when a child's position inChildrenlist changes. - Added
OnChildMovedWhileRootedtoIParentObserver
- 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 thedepXML namespace. See docs onJavaScript.Dependenciesfor details.
### WhileVisibleInScrollView
- Added
Howproperty toWhileVisibleInScrollViewtrigger 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
ActivatedandWhileActivatedwithin anEdgeNavigatordid not correctly identify an active state - Changed
EdgeNavigationto return a page inActivewhen 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_ASPECTresize 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
reloadandretryJavaScript functions onImageto 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 implicitGraphicsViewcan increase performance. Disable theGraphicsViewby definingDISABLE_IMPLICIT_GRAPHICSVIEWwhen 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,WhileInactvehave 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,Deactivatedhave 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
NavigationPageProxyuse pattern has changed.Rootedis removed,Unrootedis 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
QuickUnloadmemory 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
indexandoffsetIndexas funtions to get the position of an element inside anEach - added functions
mod,even,odd, andalternateto 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
lerpfunction 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,ISubscriberandIObserverare 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 toSizewhen 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/Eachallows the deferred creation of nodes without the need for aDeferrednodeDeferrednow has an implied priority based on the node depth. Items with equalPrioritywill now be ordered based on tree depth: deeper nodes come first.
- A
Pagewill now be busy for the first frame (or two) after it is prepared. This will block theNavigatorfrom starting the transition during those frames, which should improve first frame jerkyness. ThePrepareBusyproperty can be set toNoneto 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 recommendedEventEmitterGeoLocation.on("changed", ...)) did not work.
- The
Strokewill 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.TextureViewto better support multiple<GraphicsView />'s and<NativeViewHost />'s on Android.
- In order to fix a memory leak in
Containerthe pre-rooting structure was changed. Children of the container will not be children of theSubtreeuntil 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.Continuousas it did not work correctly and wouldn't fulfill the known use-case even if it did. Consider usingAutoinstead. - Deprecated public access to the
Scrollerclass. This is an internal class and should not be used. All functionality is accessible viaScrollView - Added
SwipeGesture.GesturePriorityandScrollView.GesturePriorityto adjust priorities - Fixed an issue where a higher level capture where preempt one lower in the UI tree
- The
thenargument toBeginRemoveChildis now anAction<Node>to provide the node to the callback. Add anNode childargument 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
Curvewhich allows drawing of lines and polygons.CurvePointcan be used to bind to JavaScript observables and servers as the basis for drawing line graphs - Reintroduced
Path,Ellipse,StarandRegularPolygon. These are all backed by the new vector system. - Added several options to
Ellipseto allow drawing wedges, like withCircle - Added
Arcfor drawing the outside edge of anEllipse - Added elliptic arc support to
Pathto support more SVG path data - Removed
FitMode.StrokeMaximumandFitMode.ShrinkToStrokeas 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.ScaleModeas stroke scaling is not supported as it was before - Remove the
Fuse.Drawing.PolygonsandFuse.Drawing.Pathspackages. Their functionality has been replaced by the new vector system Fuse.Controls.FillRulehas 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>:ThinLightRegularMediumBoldThinItalicLightItalicItalicMediumItalicBoldItalic
- 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
MemoryPolicygiven would not be correctly used.
See the commit history for this file for older entries.