Infinity constant
The constant infinity has been added to the language in this release. As a result, the unquoted literal infinity is now reserved. Any existing uses of it should be quoted, as otherwise it will resolve to the floating point value representing infinity, rather than the string "infinity".Math operation refactor
The math operations have been refactored to use common code for error checking. One of three different execution errors can now be thrown:"numeric: domain error" "numeric: range error (overflow)" "numeric: divide by zero". The error checking depends solely on the finiteness or otherwise of the operation's input(s) and output.A domain error occurs when a math operation, given finite inputs, results in not-a-number (NaN) -this is the case when the function is not defined for the given inputs, for example acos(2); or the output does not exist in the extended real line (ℝ ∪ {−∞, +∞}), for example, sqrt(-1). A range error occurs when a math operation's output overflows given finite inputs, i.e. when the result is greater than the maximum value of a 64-bit floating point, for example 10^308 * 2.A divide by zero error occurs when a math operation causes division by zero either directly, for example 1/0 or 0^-1 or as part of its computation, for example 10 wrap 0. Math operations now do not throw execution errors when any of the inputs are non-finite, for example neither of (1^(-inf) + inf) / 2 = inf or sqrt(-inf) = NaN causes an execution error.
New container layer mode
Container layer mode support has been added to the accelerated rendering architecture.The container layer mode only has an effect on unadorned groups whose ancestors are alsocontainer layer mode unadorned groups.A container layer mode group provides a container for static and dynamic layers, allowing nestedgroups to also benefit from being cached for fast re-rendering.For more information, see the layerMode entry in the dictionaryProgress, isSecure and allowUserInteractinfeatures added to browserwidget
The message browserProgressChanged has been added to the browser widget to allow monitoring the progress of page loads.The property isSecure has been added to the browser widget to determine if the content of thecurrent URL has been loaded securely.The property allow UserInteraction has been added to the browser widget to control if the browser should respond to user input.See the dictionary for full documentation.Deploy64-bit Windows standalones
You can now deploy 64-bit standalones for Windows. The Standalone Settings dialog now has a Windows x86 and a Windows x86_64 checkbox allowing you to choose to build either or both32-bit and 64-bit executablesNew keyboardType field property
A new property has been added to fields to control the keyboard type displayed on the mobile keyboard.NewAndroidArchitectures
Android builds now support four architectures. Previously android was built for armv6 only.Android is now built for armv7, arm64, x86 and x86_64.Checkboxes are included on in the Android standalone settings to choose which architectures toinclude in the build. When deploying your application via the Test button to a device the devicearchitecture will be detected and used even if not chosen in standalone settings.New mobileSetKeyboardDisplay and mobileGetKeyboardDisplay handlers
A new command mobileSetKeyboardDisplay has been added to support a pan mode where the view is panned up if the currently focused field control is not visible when the keyboard is shown. Use mobileGetKeyboardDisplay to get the current mode. There are two modes supported:- over - the default where the keyboard displays over the stack
- pan - the view is panned up the minimum amount required to ensure the foucused field isvisible
StaticlinkedcodelibrariesforiOSdevicebuilds
The standalone builder now supports .lcext compiled objects that link static libraries used by aLCB module to the module compiled as C++ using lc-compile's --forcebuiltins --outputauxc options. Additionally, the Using compiled librariessection of the Extending LiveCode guide has been updated to describe the creation of .lcextobjectsNew layerClipRect control property
A new property 'layerClipRect' has been added to all controls. Use the layerClipRect property to clip an object's display to a rectangle. The clipping rectangleonly changes what part of the object is rendered, it has no effect on interaction; in particular,mouse events will still occur as they would without it being setNew log command and logMessage property
A new command (log) and global property (logMessage) have been added to allow an easy and low-cost method to disable or redirect script logs.The log command invokes the handler named by the logMessage as though the logMessage were directly written in the script. For backwards compatability the default value of the logMessage is log so any scripts that currently have a log handler will continue to work. To allow this log has been special cased as both a command name and a permitted handler name. If the logMessage is set to empty then the log command will not invoke any handler or evaluate any of the parameters in the argument list. In this example the log command will not be called with pInfo as loading resources whenthe uBuildMode of the stack is release
on preOpenStack
-- uBuildMode property set before building standalone
if the uBuildMode of this stack is "release" then
set the logMessage to empty
end if
loadResources
end preOpenStack
command loadResources
log "loading resources"
end loadResources
on log pInfo
-- unhandled put will go to system logs
put pInfo
end log
New returnKeyType field property
A new property has been added to fields to control the return key type displayed on the mobile keyboardImplement filter where clause
A new clause has been added to the filter command to filter where an expression evaluates to true. For example:put "foo,bar,baz" into tList
filter items of tList where each begins with "b" -- tList contains "bar,baz"
mobileSetKeyboardReturnKey on android
The mobileSetKeyboardReturnKey is now supported on android and theiphoneSetKeyboardReturnKey synonym is now deprecatedAccelerated DataGrid
The DataGrid has been updated to use the new container layer mode feature when running inform view mode.To take advantage of this, the datagrid must be at top-level or contained withing groups all havingcontainer layer mode set. It must have showBorder set to false, and the acceleratedRendering property must be enabled on the stack with appropriate compositor property settings. To get the maximum benefit from accelerated rendering, the behavior script for a row templateshould changing properties within the template unnecessarily. A new datagrid property minimal layout has been added. When this property is true, a rowtemplate will only receive the LayoutControl message if its data or its width or height haschanged as opposed to every time its rect changes (e.g. due to scrolling).TreeViewwidget
The tree view widget now will automatically expand to reveal a row when it is selected. If scrollHilitedElementIntoView is not true then the scroll position will be adjusted to maintainthe currently visible top row. The tree view widget now has the ability to get and set the fold state of the selected element viathe hilitedElementFoldState property. Values are folded, unfolded, and leaf.Setting a value other than folded or unfolded will throw an error. Setting a value when nothing is selected or setting a value on a leaf node will have no effect. The autoFoldStateReset boolean property is added to allow the fold state to be reset when thearray data is set. Default value is false to match existing behavior. The tree view widget now has the ability to automatically select a new row when it is added. The tree view widget now has the ability to scroll the selected row into view. If true, this willhappen when setting the arrayData, setting the hilitedElement, and when adding a new row (when hiliteNewElement is true).Two properties have been added to achieve these options:- hiliteNewElement: either true or false
- scrollHilitedElementIntoView: either true or false
Mac Status Menu library
An mac status menu library has been added. Use the new library to create, delete and setproperties on a status menu. The menu's items property uses the familiar menu text formatfrom LiveCode menusAndroidUtilitiesmoduleAndroidPermissionChecking
The ability to check Android permissions in LCB has been added to the android utility module. Use these handlers to check and request permissions before accessing resources (e.g. cameraaccess). The following handler have been added:- AndroidRequestPermission - Display a dialog requesting a given permission.
- AndroidPermissionExists - Check to see if a given permission name is valid.
- AndroidHasPermission - Check to see if a given permission has been granted.
Just for Indy e Business versions
PDFWidget
A PDF widget has been implemented for all platforms with the exception of HTML5 and is available in LiveCode Business. The widget has a wide range of properties allowing you to alter the appearance of the widget, the way the user can interact with the document and providing details about the loaded document.Android Barcode Scanning Widget
A new Android widget had been added that allows for scanning of barcodes using the device'scamera. Multiple barcodes can be detected in a single frame. Turning the guide on will set the widget tosingle detect mode, with only barcodes overlapping the guide being detected. Callbacks are sent on barcode detection and removal.See the dictionary for full details.The barcode widget has the following properties:
- device: The camera device to use.
- previewWidth: The width of the camera's resolution.
- previewHeight: The height of the camera's resolution.
- previewFPS: The camera's frame rate.
- overlayShowLabels: If labels should be displayed on top of each detected
- barcode.overlayShowRects: If rectangles should be displayed around each detected
- barcode.overlayShowGuide: If the scanning guide should be displayed.
- overlayLabelColor: The color of any barcode labels .
- overlayRectColor: The color of any barcode rectangles.
- acceptedFormats: A list of barcode types to detect.
- snapshotMode: If and when a snapshot should be taken of the barcode.
- barcodeDetected: Sent when a new barcode is detected.
- barcodeRemoved: Sent when a previously detected barcode is no longer in the frame.
- barcodeClicked: Sent when a detected barcode has been clicked by the us