0.18.0.0
This release brings a number of updates to GafferImage, including user-editable Formats, bug fixes to Resize and Crop, and a new Offset node. It also fixes a few bugs todo with Expressions, Switches, and UI crashes.
Core
Node::userPlug()
is now a Plug instead of a CompoundPlug.Preventing unwanted child connection tracking on userPlug().
Changed scriptNode() to return
this
when node is a ScriptNode.Support indirect connections to Switch index
Emitting Node::plugInputChangedSignal() for all downstream connections.
Expressions don’t let
__in
plug track child inputs.Added top level plug argument to
Expression::Engine::apply()
.PythonExpressionEngine drives
apply()
by plug type not data type.PythonExpressionEngine supports arbitrary compound plugs types.
Improved PythonExpressionEngine::defaultExpression().
Fixed a bug in plugs/nodesWithMetadata.
Fixed errors when serialising parent metadata only.
Reference/Box no longer export user plugs (#801).
UI
Skipping intermediate dots in tooltips.
Fixed crash in the GraphGadget when a non-nodule plug was removed from a node.
Improved UI robustness for errors on enabledPlug() expressions.
Fixed potential connection lifetime bugs in the Viewer.
Image
Added AtomicFormatPlug and replaced all non-user facing FormatPlugs with this.
This plug does not perform default format substitutions.
This plug does not serialise registered Formats.
Changed FormatPlug to be a user-editable Format specification
Using FormatPlug in all user facing scenarios (e.g. Constant, Resize, etc).
Deprecated Reformat. Use Resize instead.
Moved default Format mechanism onto FormatPlug.
Fixed default Format issues inside boxes (#888).
Fixed nodes which were unusable if no default format was specified in the context (#888).
We now fall back to a default default format in that case.
The default format was not getting transferred to the script context after loading (#888).
Rationalised and simplified the Format registry.
Fixed registerFormat() so that a second registration overrides the first.
Requiring name when registering a format.
Names should no longer include the numeric values.
Renamed removeFormat() to deregisterFormat().
Removed unused signals and not-so-useful methods.
Separated registered names and ostream output.
The ostream output just uses numeric values, keeping it in line with the Imath classes.
Querying the registered name for a format returns an empty string if it hasn’t been registered. Previously it returned a generated name, making it hard to tell if it had actually been registered or not.
FormatPlugValueWidget supports manual entry of custom formats.
This widget only supports FormatPlugs, not AtomicFormatPlugs.
ImageStats now uses a postCreate to set plug values via the UI only.
Renamed CropUI.postCreateCrop to CropUI.postCreate.
Fixed Resize disabling.
Add Offset node.
Fixed bug in Crop::affects().
Added Crop “resetOrigin” plug.
This resets the origin of the format back to [0,0], which is intuitively what is expected.
Incompatibilities
Changed type of Node::userPlug()
Moved default Format API from Format class onto FormatPlug class.
Changed Format registry API.
Crop now resets the display window origin to 0,0. Turn off the “resetOrigin” plug for the old behaviour.
Renamed CropUI.postCreateCrop to CropUI.postCreate.