forked from GafferHQ/gaffer
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Changes
2065 lines (1188 loc) · 105 KB
/
Changes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
0.81.0
======
Core
----
- Improved dirtiness propagation mechanism to remove duplicate signal emission.
UI
--
- Backdrop improvements
- Backdrop contents can now be scaled, so large backdrops can still have readable text when zoomed out.
- Fixed bug which meant that empty backdrops didn't immediately redraw as highlighted when selected.
- Improved resizing behaviour.
- Fixed cut and paste bug.
Scene
-----
- Added doublesided attribute to StandardAttributes node (#275).
Arnold
------
- Fixed packaging of Arnold plugins.
- Fixed problem where light shaders weren't being created as lights.
RenderMan
---------
- Fixed public build to work with older 3delight versions where RiProceduralV isn't available.
- Added support for several new attributes in RenderManAttributes node (#275).
API
---
- The plugDirtiedSignal() is now emitted when a value has been edited with ValuePlug::setValue() - this means that observers need only ever use plugDirtiedSignal() instead of also having to use plugSetSignal() as well.
- Added Style::characterBound(). This returns a bounding box guaranteed to cover the largest character in the font. It is useful for correctly positioning the text baseline among other things.
0.80.0
======
UI
--
- NodeGraph now only drag-selects nodes that are wholly contained in the drag area, not merely intersecting it.
- Added a Backdrop node (#153).
RenderMan
---------
- Added support for "help" shader annotation in RenderManShaderUI (#536). This provides help for the shader as a whole and is mapped into the MetaData as the node description, appearing in the NodeEditor as a tooltip.
API
---
- Added optional continuous update to string PlugValueWidgets, controlled by the continuousUpdate parameters to the constructor. This transfers the text from the ui to the plug on every keypress.
Core
----
- Fixed serialisation of dynamic BoxPlugs.
Documentation
-------------
- Improvements too numerous to mention.
0.79.0
======
UI
--
- Added additional plug types to the CompoundDataPlug new plug menu (#522).
- Fixed bug in searchable Menus with no entries (#527).
Scene
-----
- Added CustomAttributes and CustomOptions nodes. These will be used instead of the old Attributes and Options nodes, and exist to better distinguish their use from the Standard, RenderMan and Arnold options and attributes nodes.
RenderMan
---------
- Enabled hosting of RenderManShaders inside custom Box classes. Previously it only worked inside Boxes and not classes derived from Box.
API
---
- Added python subclassing ability to Serialisation::Serialiser (#520).
0.78.0
======
API
---
- Added python bindings for signal::num_slots and signal::empty().
- Added Gadget::idleSignal(). This allows Gadgets to do things during the idle times of the host event loop.
- Added NodeEditor.nodeUI() method.
- Added CompoundEditor.editorAddedSignal().
- Enabled subclassing of Box from Python.
- Made RenderManShaderUI public.
Core
---
- Fixed serialisation of ExecutableOpHolder.
- Added dynamic requirement plugs to Executable.
-
UI
--
- Added middle mouse drag for dragging nodules to the script editor without dragging a connection.
- Further increased width of plug labels in NodeEditor (#98).
- Fixed read-only RenderManShader UIs.
- Fixed bug whereby read-only PlugValueWidgets were accepting drags.
- Added Help menu.
- Added NodeGraph auto-scrolling.
- Added support for "presets" parameter type hint.
OS X
----
- Fixed GafferImageUI linking.
0.77.0
======
- Added alignment support and addSpacer method to ListContainer.
- Fixed an update bug in the pixel value inspector (#401).
- Added the pinned status to saved layouts (#444).
- Added read-only mode to NodeUIs and NodeEditor (#414). Note that this currently interacts poorly with activators on RenderManShader node, and will be fixed in a future release.
- Fixed read-only MultiLineTextWidget bugs.
- Implemented tag reading in SceneReader node. Tags are represented as BoolData attributes called "user:tag:tagName" (#494).
- Increased width of plug labels in NodeEditor (#98).
- Improved the default layout to include SceneHierarchy and SceneInspector and Timeline editors.
- Fixed TabbedContainer sizing when tabs not visible.
- Fixed crashes when loading old scripts where coshader array parameters were stored as Compound plugs.
- Fixed propagation of shader hashes through Boxes.
- Allowed shaders to accept inputs from Boxes, even if the Box doesn't currently output a shader.
- Changed internal image coordinate system to have 0,0 at bottom left (formerly at top left).
0.76.0
======
- Added Application._executeStartupFiles() method (#354).
- Added RemoveChannels image node.
- Added a PointConstraint node (#482).
- Fixed framing error when entering a Box.
- Image viewer now displays channels in grey scale.
- Added Widget.widgetAt() method.
- Added ability to hide tabs in layouts.
- Fixed bug converting coshader array from fixed to variable length.
- Added Serialiser::postScript() method.
0.75.0
======
- Added a channel mask feature to GafferImageUI::ImageView. Use the r,g,b and a keys to isolate individual channels (#403).
- Updated for compatibility with Cortex 8.0.0a14.
- Updated screengrab app to allow the execution of a commands file.
- Added a node find dialogue, accessible via the Edit/Find.. menu item (#454).
- Added NodeGraph.frame( nodes ) method. This can be used to frame specific nodes within the viewport of the NodeGraph.
- Addressed thread related hangs when using an InteractiveRenderManRender and deleting or connecting nodes.
0.74.0
======
- Added a multitude of miscellaneous documentation improvements.
- Implemented parameterName.type RenderManShader annotation (#456).
- Implemented parameterName.coshaderType RenderManShader annotation (#460).
- Fixed disabled Shader pass-through bugs.
- Added variable length coshader array support to RenderManShader (#462).
0.73.0
======
- Implemented connection hiding for the NodeGraph. This is accessed by right clicking on a node in the Node Graph and using the new "Show Input Connections" and "Show Output Connections" menu items (#429).
- Fixed const correctness of GraphGadget::getNodePosition().
- Fixed connection drag bug. Dragging the endpoint of a connection around and then placing it back where it started was breaking the connection, whereas it should have been having no effect.
- Replaced Enabled/Disable node menu item with Enabled checkbox.
- Added titles to the node graph context menus.
0.72.2
======
- Fixed Box creation with nested connected plugs. This allows the creation of Boxes with shader nodes with input connections.
- Fixed removal of nodules from nodes in the graph ui when Plugs are removed.
- Fixed InputGenerator bugs and added python bindings and tests.
- Fixed Group bugs involving dynamically generated inputs and undo (#179, #210, #302).
- Tidied up node menu labels.
- Renamed WriteNode to ObjectWriter and ReadNode to ObjectReader (#17).
- Fixed minimum height of ramp editor (#445).
- Fixed empty messages from ErrorDialogue.ExceptionHandler.
- Added popup error dialogues for file save failures (#449).
- Fixed context used by interactive render nodes.
0.72.1
======
- Updated PySide build.
- Fixed bug expanding objects in viewer when a custom variable was needed by the computation (#438).
- Fixed boxing of RenderMan coshaders (#440).
- Fixed Qt 4.6 compatibility.
0.72.0
======
- Added workaround for weird focus-stealing behaviour in Maya.
- Added application variable to the scope available to the screen grab command.
- Added support for empty and relative paths in Gaffer.Path. ( #432, #324 )
- Added root parameter to all path constructors. This is used to define the root when the path parameter is passed a list of items. Because python doesn't allow overloaded functions this is slightly awkward - see documentation of Path.__init__ for discussion of how this would break down into overloaded constructors when we move the implementation to C++.
- Added Path.root() and Path.isEmpty() methods.
- Added Path.setFromPath() method, which copies the elements and the root from another path. This should be used in place of code which formerly did path[:] = otherPath[:].
Note that the new root parameter changes the parameter order for all Path (and derived class) constructors - if you were formerly passing a filter as a non-keyword argument you should now pass it as a keyword argument to avoid problems. Additionally, if you implemented a custom Path subclass, you need to add the root parameter to your constructor and update your copy() and children() implementations. The DictPath changes provide a minimal example of what needs changing.
0.71.0
======
- Variable substitution improvements
- Added standard ${script:name} variable (#407)
- Added custom script-wide variables accessible via the File->Settings menu (#407)
- Added support for variable references within variables (recursive substitution)
- Added environment variable and ~ substitution
- Added standard ${project:name} and ${project:rootDirectory} variables.
- Fixed save and load of ReadOnly plugs.
- Removed Escape hotkey for leaving full screen mode. The same function is served by the ` hotkey.
- Defined default locations for ribs, ass files and rendered images.
- Added automatic directory creation for display, rib and ass locations (#59)
- Added GraphComponent::clearChildren() method
- Greyed out File->RevertToSaved menu item when it doesn't make sense
- Improved CompoundDataPlug data representation
- CompoundPlugValueWidget using PlugValueWidget.hasLabel() to avoid unecessary labelling
- Fixed UI for promoted plugs (#264)
- Fixed bug where deleted children of Boxes weren't removed from the selection (#430)
- Fixed bug where pinned nodes were still visible in the UI after being deleted (#308)
- Fixed hangs caused by adjusting colours while rerendering
- Tidied up some test cases
0.70.0
======
* Added Ganging for CompoundNumericPlugs (#402)
* Added menu item for loading renderman shaders from file (#125)
* Added color ramp editing support (#286)
* Added spline parameter support to RenderManShader::loadShader()
* Added shader annotations for passing default values to RenderManShader splines
* Added dividers in the NodeEditor, available to RenderMan shaders via the annotation "parameterName.divider" (#288)
* Added API for undo merging.
* Added ScriptNode::undoAddedSignal() (#103)
* Fixed hiding of Menu when using the search box
* Fixed tab focus ordering in NodeEditor (#107)
* Improved GadgetWidget focus behaviour (#119)
* Fixed redundant CompoundNumericPlug serialisation (#2)
* Fixed scrubbing of values for IntPlugs
* Fixed size issues caused by TabbedContainer size policy (Settings and About window)
* Fixed bug in Random::affects()
* Fixed multiple undo entries in virtual sliders, cursor up/down nudging, color choser, and ramps (#400)
* Fixed Ctrl+C copy shortcut in non-editable MultiLineTextWidgets
* Hid Shader enabled plug in the UI (#398)
0.69.1
======
* Fixed bug with top level actions breaking searchable menus
* Fixed node reconnection crashes in ScriptNode::deleteNodes and StandardGraphLayout::ConnectNodeInternal
0.69.0
======
* Implemented drag and drop between plugs in the NodeEditor (#285)
Drags are initiated on the label for the plug.
Left drag initiates a drag for connecting plugs.
Shift-left drag and middle drag initiate a drag for transferring values between plugs.
Colours may now also be dragged from the viewer onto a plug.
There are custom pointer icons for each type of drag (#44)
* Added blinking indication for plugs preventing the opening of a colour picker (#185).
* Implemented enabling/disabling for shader nodes (#327).
By default disabled shaders behave as if their output connections didn't exist.
RenderMan shaders may act as a pass-through by defining a "primaryInput" annotation naming an input coshader parameter.
* LinkedScene files (.lscc) are now previewable in the browser
* ImageReader only reads the necessary channel from the OpenImageIO cache
* Reverted non-gui ExecutableRender::execute() to block until the render is complete (#353).
* Fixed Nuke link error
* Fixed browser op mode
* Fixed missing Recent Files bug (#378).
* Fixed some bugs with extraneous dragBegins
* Removed namespace prefixes from typenames for displaying to the user (#389).
* Removed deperecated ModelCacheSource
0.68.0
======
* Improved speed of renderman shader menu.
* Image stats node in ImageView now uses the preprocessed input plug if the raw input is not an ImagePlug
* Removed right-click layout context menu.
* Added "Unpromote from Box" item to plug popup menu.
* Fixed menu title so it doesn't interfere with menu keyboard navigation.
0.67.0
======
* Fixed potential lockup with NumericPlugs.
* Fixed RenderMan ShaderMenu match expressions (broken in 0.66.0)
* Reintroduced the node name into the NodeEditor header.
* Exposed LayoutMenu submenu callable publicly.
* Implemented in-place renaming for user plugs (#213).
* Added support for RSL "parameterName.label" annotation (#372).
* Added a MapProjection node.
* Added sample window to the ImageViewer.
* Fixed UI test cases broken by the per-application menu commits.
* Can once again build for OS X.
* Added support for packaging as .dmg on OS X.
0.66.0
======
* Fixed interactive display.
* Fixed APIs to make UI resources per-application. When applications are updated to use these new APIS, they will no longer pollute each other's interfaces (#351, #225).
* Refactored GafferImage::Filter to have a better interface whilst removing the need for the construct() method.
* Added python bindings and enhancements for the GafferImage::Filter class.
* Fixed hash() bug in RenderMan coshader, which in turn fixes an interactive rerendering bug.
* Reduced occurences of accidental connection snatching (#313, #325).
* Fixed escape-to-close menu bug.
* Added an ImageStats node.
* Fixed deadlock when writing image files to disk.
* Op. Procedural and RenderMan shader menus may now be filtered to show fewer options.
* Added "cmd" parameter to screen grab app.
* Fixed GafferImage::FormatPlug::hash()
* Fixed duplicate typename errors (#330).
* Prevented promotion of non-serialisable plugs to Box level (#347).
* Fixed a bug in ImageProcessor that was causing a segfault when the node has an output that is not an ImagePlug.
0.65.0
======
* Added divisions plug to Plane node.
* Added Cube and Sphere scene sources (#97).
* Added a Text node to GafferScene.
* Added labelling support to TabbedContainer auto-parenting mechanism.
* Added ImageViewer pixel inspection by dragging pixels to the script editor (#245).
* Added python bindings for Views (#323).
* Added screengrab app.
* Implemented Gaffer->About menu item (#6).
* Improved ImageView to allow subclassing (#323).
* Set the name attribute for lights properly in the Render node (#326).
* Fixed GLWidget for use inside Maya 2013.
* Fixed Recent Files menu bug (#333).
* Fixed a bug in ViewportGadget drag event propogation.
0.64.0
======
* Added support for displaying RenderMan shader color parameters as plain numbers. This can be achieved by setting the "parameterName.widget" annotation to a value of "number".
* Added support for RenderManShader array parameters, including arrays of coshaders.
* Fixed redraw issue in searchable menus.
0.63.1
======
* Using Boost Filesystem version 3 (for compatibility with Cortex 8)
0.63.0
======
* Fixed promotion of dynamic colour plugs to Boxes.
* Fixed crash creating Merge node (#253).
* Fixed Gaffer module dependency on GafferImage.
* Display now obeys the default format (#280).
* Fixed circular references in plug popup menus.
* Fixed NumericWidget dragBegin errors.
* Newly created nodes are now connected in-stream where possible (#257).
* Fixed editability of user plugs.
* Added error handling for bad RenderManShader activator annotations.
* Improved automatic placement of filter nodes (#86).
* Fixed empty tab creation in Node Editor.
* Added interactive search for node menu.
* Reordered image filters so that they are displayed from most soft to most sharp.
* Added the Lanczos image filter.
* Fixed a bug with the Sinc image filter.
* Fixed the "streaking" issues when using the ImageTransform.
* Added subpixel filtering to the image Sampler.
* Implemented snapping during Graph Editor drags.
* Optimised node dragging in the Graph Editor.
0.62.1
======
* Fixed gl sharing widget bug when launching gaffer in maya
* ExecutableRenderer now always launches the render asynchronously to avoid locking the maya UI
0.62.0
======
* Fixed bug with promotion of CompoundPlugs to Boxes.
* Fixed ImageNode paste error (#251).
* Fixed BoolPlugValueWidget._updateFromPlug() to avoid setting plug value (#266).
* Fixed bug in Group operation (#269).
* Implemented RenderMan shader parameter activation via annotation expressions (#226).
An activator is defined by a global annotation of this form :
pragma annotation "activator.name.expression" "pythonExpression"
The python expression may reference current parameter values by name, and also use the connected( "parameterName" ) function to query whether or not a parameter is connected.
Activators are then assigned to specific parameters using annotations of this form :
pragma annotation "parameterName.activator" "name"
* Implemented annotation-based uis for RenderManLight node.
* Added a ComputeNode class, and refactored DependencyNode so it can be a useful base class for shaders as well.
* Fixed dirty propagation of Shaders through ShaderAssignments.
* Fixed 3delight workaround. GafferRenderMan now requires 3delight 10.0.138 or newer.
* Added rudimentary shader updates to InteractiveRender. Note that there are still problems whereby deadlocks sometimes occur so this isn't in a state where you'd want to bet the success of any public performances on it.
* Fixed an issue with the glBlendingMode that was causing the result to be pre-multiplied twice.
* Fixed an image rendering issue with data/display window mismatches.
* Fixed banding and dark edges evident in 2D viewer (#74).
* Improved speed issues when moving single nodes in the NodeGraph by refactoring GraphGadget::connectionGadgetAt (#283).
0.61.0
======
* Fixed bug in MultiSelectionMenu so that if only one selection is available, it is displayed by name rather than as "All".
* Added image Sampler and Filter API classes.
* Added an image Reformat node.
* Added an ImageWriter node.
* Added RecursiveChildIterator API class.
* Fixed noodle-snatching to work with Shader nodes.
* Node Graph label now uses "/" as a separator for Box paths, rather than ".".
* Fixed layouts to allow panels to be collapsed fully and smoothly - addresses issue #93.
* Added workaround for PyQt/PySide pyqtSignal/Signal differences.
* Fixed "CameraController not in motion" errors. These occurred when the user accidentally moved the mouse scroll wheel while performing a drag to move the camera. We now ignore wheel events when dragging the camera.
* Removed unecessary collapsible section in Group UI.
* Fixed ImageReader to work with offset data windows.
* Fixed node auto-connection to work with Shader nodes (and other nodes with nested plugs).
* Added auto-connection and auto-positioning for pasted nodes (#13).
* Added inherit argument to Metadata query functions (#232).
* Fixed negative data window origins in image module.
* Added subdivision attributes to ArnoldAttributes node.
* Renamed Assignment node to ShaderAssignment.
* Added Reference node, providing the ability to reference in external scripts to facilitate collaborative workflows (#228).
* Added popup plug labelling to the NodeGraph (#138).
* Added connection snapping to the NodeGraph - connections dragged onto a node will snap to the nearest compatible plug.
* Added ImageTransform node (#96).
0.60.0
======
* Expansion state of collapsible plug grouping is now remembered for the duration of a session (#87).
* Current tab in Node Editor is now remembered for the duration of a session (#87).
* Fixed a bug in the NodeGraph where setTitle() was having no effect.
* Slowed wheel zooming (#200).
* Fixed crash when dragging nodes (#211).
* Improved NodeEditor node labelling (#151).
0.59.0
======
* Fixed save/load of user plugs created via the UI (#174).
* Fixed UI for generic Options and Attributes nodes.
* Removed collapsibility of Transform node's transform plug as it just cluttered up the UI.
* Removed collapsibility of Attribute node's attributes plug as it just cluttered up the UI.
* Removed collapsibility of Lights node's parameters plug as it just cluttered up the UI.
* Fixed MeshType::affects() (#175).
* Fixed SceneInspector update (#176).
* Improved SceneInspector shader representation (#147).
* Improved SceneInspector numeric formatting (#88).
* Added drag and drop node connection re-wiring (#78).
* Added virtual slider for NumericWidgets, engaged using LeftClick + Control or ShiftControl (#79).
* Fixed dirty propagation for Light nodes.
* Added first implementation of interactive rerendering in the InteractiveRenderManRender node. (#141)
* Deleting nodes attempts to rebuild the network to act as if the deleted nodes had been disabled (#95).
* Viewports can be panned/tracked using middle mouse with no modifier key (#28).
0.58.0
======
* Fixed creation of nodes within Boxes - previously they were added below the root of the script rather than inside the box.
* Fixed unstable scene hierarchy expansion (issue #120).
* Fixed highlighting bugs whereby widgets inside a highlighted tab would incorrectly display an inherited highlight state. This could be seen when dragging a node into the node editor with either nested tabs or a nested VectorDataWidget.
* Fixed PathPlugValueWidget bug where it would attempt to change the value of a read only plug.
* Fixed PathWidget bug where it would still do autocompletion and popup menus even when non-editable.
* Added TabbedContainer.insert() method.
* Generalised the Metadata system to store arbitrary values rather than just descriptions.
* Fixed CompoundPlugValueWidget bug whereby it would error if a summary was provided on a non-collapsible UI.
* Added right-click context menus to enum and checkbox plug uis.
* Added Box plug-promotion feature (#142).
* Removed Gaffer.GroupNode (#164).
* Fixed ordering of parameters in RenderManShader UI (#136).
* Fixed banding and dark edges evident in 2D viewer (#74).
* Fixed awkward zooming of Viewers and NodeGraph (#46).
0.57.0
======
* Renamed ColorPlug child names to rgba rather than xyzw (issue #133).
* File->SaveAs... menu item now adds the file to the recent files list.
* Fixed unwanted vertical expansion of color plug widgets.
* Removed the unwanted visualisation of the "name" plug on shaders in the Node Graph.
* Added NodeGraph plugContextMenuSignal() and connectionContextMenuSignal() to allow customisable right click menus for plugs and connections (issue #122).
* RenderManShader annotations are now correctly reloaded when the shader itself is reloaded.
* RenderManShader UI produces more sensible errors when bad annotations are discovered.
* Fixed parameter ordering in RenderManShader UI (issue #136).
* Fixed bug which prevented numeric plug entry fields from showing the correct value when values outside the allowable range were entered.
0.56.0
======
* RenderManShader node now supports the use of annotations within the shader to define the node UI. Annotations follow the OSL specification for shader metadata.
* Added the GafferUI.Metadata class, which will be used to provide things such as node and plug descriptions for the generation of tooltips and reference documentation.
* Added a Prune node, for removing whole branches from a Scene (issue #70).
* The Menu class now supports the description field of menu items, displaying descriptions as tooltips.
* The Menu class now supports the passing of the menu to callables registered as subMenus.
* Added a "File/Open Recent" menu item (issue #118).
* Added the ability to reload RenderManShader nodes, updating them to reflect any changes to the shader on disk. This is done automatically on file load and can be performed manually at any time using the new button in the node editor.
0.55.0
======
* Fixed graphical glitches caused by icons overlapping the edge of the editors on the Gnome desktop.
* SceneProcedural now renders general VisibleRenderables too.
* Fixed SceneReader to read animation at the correct speed (issue #68).
* File->Quit and the window close icon now prompt the user to confirm before closing if there are unsaved changes (issue #19).
* Added support for shader parameters of type "shader" in the RenderManShader node - these are mapped to plugs which accept connections to other RenderManShaders, allowing the creation of networks of coshaders.
0.54.0
======
* Added base classes Executable and Despatcher and two derived Node classes: ExecutableNode and ExecutableOpHolder.
* Added an enabled/disabled plug to all SceneNodes. Nodes with no inputs output an empty scene when disabled, and SceneProcessors output the first input unchanged. The enabled/disabled state can be toggled using the node right click menu or the "d" hotkey in the Graph Editor.
* Added SceneNode::hash*() methods to match the GafferScene::compute*() methods. This was necessary for the enabled plug to be implemented, and also makes the implementation of derived classes more readable. Matching pairs of hash*() and compute*() methods should be reused as a pattern throughout Gaffer where appropriate in the future.
* Renamed SceneElementProcessor::process*() methods to SceneElementProcessor::computeProcessed*() and SceneElementProcessor::hash*() methods to SceneElementProcessor::hashProcessed*(). This was necessary to resolve conflicts with the name hash*() methods at the SceneNode level.
* Removed the ability to return distant descendants from the GraphComponent::getChild() function. Also modified GraphComponent method signatures to use InternedString where appropriate. This change alone gives a 10-15% speedup in evaluating a benchmark GafferScene network.
* Added GraphComponent::descendant() method to replace the lost functionality in GraphComponent::getChild().
* Fixed bug whereby ViewportGadget sent keyReleaseSignal() to the keyPressSignal() of child Gadgets.
* Added Style::renderLine() method.
* VectorDataWidget now supports InternedStringVectorData. This makes it possible to view InternedStringVectorData in the browser app.
* Fixed errors caused by trying to view a SceneReader with an empty filename.
* The currently active tab for each panel is now saved with each layout.
* Renamed GraphEditor to NodeGraph - the previous name was confusing to users. Renaming all the classes rather than just changing the label, because we want a fairly straightforward mapping from UI->API to help users make the transition into scripting.
* Multiple shortcuts may now be specified for each menu item by passing a comma separated list of shortcuts in the "shortCut" field of the menu item.
* EditMenu now uses both backspace and delete as shortcuts for the delete action.
* Double-clicking a node in the Node Graph now makes any Node Editor tabs editing that node visible by making them the current tab.
* The ` key (left of the 1 on the keyboard) may now be used to toggle in and out of fullscreen mode.
* Renamed SceneEditor to SceneHierarchy to be more explicit that it visualises the scene graph and doesn't really provide much in the way of editing.
* Renamed TimeEditor to a more user friendly Timeline.
* The File->SaveAs... menu item now ensures that the file saved always has a ".gfr" extension.
* Added Scene->Object->Modifiers->MeshType node for converting meshes between polygons and subdivs, and optionally adding normals when converting to polygons.
* The Scene Inspector now displays mesh interpolation.
* Fixed bugs which could prevent the UI updating appropriately when plug values were changed.
* Optimised redundant updates in the SceneHierarchy editor.
0.53.0
======
* Added the concept of a global format for disconnected nodes along with a format plug.
* Added the Constant node for GafferImage.
* Added the Select node for GafferImage.
* Fixed a bug which prevented Assignment nodes from being connected to Shaders outside the Box containing the Assignment.
* Improved formatting in NumericWidgets.
* Added NumericWidget.valueChangedSignal().
* Fixed bug where editing a numeric plug value using cursor up/down didn't immediately update.
* Added CompoundDataPlug::addMember() and CompoundDataPlug::addOptionalMember() overloads which take a ValuePlug instead of Data to provide the value for the member.
0.52.0
======
* The Gaffer clipboard now synchronizes with the global system clipboard, allowing nodes to be cut and pasted between external applications.
* Fixed a bug which meant that the Viewer didn't update if a view became dirty while it wasn't the currently active view.
0.51.0
======
* Switched Arnold import in ArnoldRender.py to a deferred import, to allow 3delight renders of scenes containing Arnold nodes
* Added a Grade node to GafferImage
* Added a Merge node to GafferImage
* Added option to disable highlight in GafferUI.Button
* Fixed exception caused by undefined subMenuDefinition in GafferUI.Menu
* Catching all exception types in ErrorDialogue
* Image nodes can now be disabled.
* Renamed ExpressionNode to simply Expression.
* Multithreaded the ImagePlug class.
* Fixed ParameterValueWidget.create() so that it always returns either None or an instance of ParameterValueWidget. Previously it was returning PlugValueWidget instances where no specific ParameterValueWidget registration had been made.
* Added PlugValueWidget setReadOnly/getReadOnly methods. These can be used to force a ui to be read only when the plug itself allows editing. Note that they can not be used to force editing when the plug itself is not editable.
* Fixed BoolPlugValueWidget so that it correctly disables the checkbox if the plug is not writable for any reason, or is setReadOnly( True ) has been called.
* PlugValueWidget.popupMenuSignal() now passes the PlugValueWidget itself to slots rather than the Plug as it did before. The plug can retrieved by calling plugValueWidget.getPlug().
* ParameterValueWidget.popupMenuSignal() now passes the ParameterValueWidget itself to slots rather than the ParameterHandler as it did before. The parameter handler can be retrieved using parameterValueWidget.parameterHandler().
* Added readOnly parameter to ParameterisedHolderNodeUI constructor.
* ParameterValueWidget now requires that the topLevelWidget passed to the constructor is always an instance of PlugValueWidget. This is made available via a new plugValueWidget() method.
* CompoundPlugValueWidget now requires that the result of _childPlugWidget either derives from PlugValueWidget or must have a plugValueWidget() method which returns a PlugValueWidget. This allows it to implement a new childPlugValueWidget() method which can be used to get access to the widget for a child plug. This is building towards a time when the NodeUI class provides a single method for retrieving the PlugValueWidget for a given plug.
* Added ValuePlug::settable() method.
* The VectorDataWidget now allows tooltips to be specified on a per-column basis using the columnToolTips argument to the constructor.
* The CompoundVectorParameterValueWidget now constructs tooltips for the columns using the descriptions for the child parameters.
* Added drag support to PathListingWidget and VectorDataWidget.
* ViewportGadget now forwards the keyPress and keyRelease signals to its child.
* GadgetWidget now allows the viewport to be changed using setViewportGadget(), and the previous viewportGadget() accessor has been renamed to getViewportGadget().
* ParameterisedHolder now calls the parameterChanged() methods of the classes held by ClassParameters and ClassVectorParameters when their parameters change, rather than calling the method on the top-level parameterised class.
* CompoundPlugs now accept input CompoundPlugs with more plugs than necessary, provided that the first N input child plugs match the N child plugs of the output. This allows Color3fPlugs to receive input directly from Color4fPlugs and arnold COLOR3 parameters to receive input from arnold COLOR4 outputs.
* ArnoldOptions node now allows the specification of texture, shader and procedural searchpaths.
* ArnoldRender node no longer specifies procedural location using a full path, allowing the procedural searchpath to be used if it has been set by an ArnoldOptions node.
* Fixed crash when evaluating a ContextProcessor containing an entry with an empty name.
* Added CompoundDataPlug::addOptionalMember(). This works as for addMember(), but adds an additional BoolPlug to allow the user to enable/disable that member. Both methods also take an additional parameter to specify the name of the plug used to represent the member.
* ArnoldOptions and ArnoldAttributes nodes now create their plugs with sensible names, and allow options and attributes to be enabled and disabled - by default they are all disabled.
* Added a File/Settings... menu option which opens a window for editing the plugs of the ScriptNode.
* Gaffer::CompoundDataPlug now handles Color4fData.
* Added a GafferScene::OpenGLAttributes node for controlling the drawing of objects in OpenGL.
* Gaffer::TypedObjectPlug::setValue() now references the value directly rather than taking a copy.
* Fixed bugs which prevented the ColorChooser working with colour types with an alpha channel.
* Added a procedural app for visualising Cortex procedurals.
* Plug::getInput() now returns a raw rather than reference counted pointer.
* Added RenderableGadget::selectionBound() method which returns the bounding box of all selected objects.
* Added View::framingBound() method which can be overridden by derived classes to control the framing behaviour when "F" is pressed.
* SceneView now frames the current selection when "F" is pressed.
* IndividualContainer::getChild() now returns raw pointers rather than smart pointers and uses a direct method of indexing.
* Gadget::getToolTip() now takes a line in gadget space, allowing the tooltip to be varied with the position of the mouse.
* RenderableGadget implements getToolTip() to display the name of the object under the mouse.
* PathMatcher is now editable after construction, with addPath() and removePath() methods. Because of this the copy constructor also now performs a full deep copy which can be expensive.
* Added PathMatcherData to make sharing PathMatchers easy, and to introduce the possibility of storing them in Plugs and Contexts. Copying is lazy-copy-on-write which can be used to avoid the expensive PathMatcher copy constructor where possible.
* Added Context::names() method.
* EditorWidget._updateFromContext() is now passed a set containing the names of items changed since the last call to _updateFromContext().
* Fixed bug which caused PathListingWidget.selectionChangedSignal() to fire far too frequently.
* Added a GraphLayout class, used in conjunction with the GraphGadget to perform automatic node connections and graph layout. This replaces ad-hoc code from NodeMenu.py. Still needs a decent fully automatic layout implementation for situations where the user doesn't build the graph manually.
* Added Plug::source() method.
* Added GraphGadget::nodeGadgetAt() method.
* GraphGadget now uses middle mouse drag for sending nodes to other widgets - left mouse drag is for moving nodes only. Shift drags can be used to add nodes to the current selection.
* TabbedContainer switches tabs automatically on drag enter, to allow drags to access targets that aren't current at the start of the drag.
* Expression node now supports calls to context.getFrame() and context.get() in addition to context["name"] dictionary style access. The get( name, defaultValue ) method is particularly useful when an expression may be executed in a context without the required entry.
* ScriptEditor no longer displays the result of execution if the result is None.
* Replaced RenderCamera node with more general StandardOptions node, which will define all the render globals type stuff that can be shared between renderers. Fixed bug in hash computation of GlobalsProcessor. Removed resolution from camera, putting it on the StandardOptions node instead.
* CompoundPlugValueWidget can now display a summary of the plug values in the collapsible header. Used this to provide useful summaries for all options and attributes nodes in GafferScene. Renamed in OpenGLAttribute plug for consistency with the others.
* Fixed SceneEditor bug which meant that items were only displayed if the first selected node contained them.
* Added TransformPlugValueWidget which provides a useful summary of the transform in the collapsible header.
* Added ScenePlug::fullAttributes() method which returns the full set of inherited attributes at a particular scene path.
0.36.0
------
* Improved bindings by removing macros and replacing them with proper wrapper classes.
* Added Window.childWindows() method.
* Added initial (and limited) support for Parameterised::parameterChanged() methods. Currently only modifying parameter values is supported in parameterChanged() - support for modifying user data and presets will be added in later revisions.
* The input and output connections for selected nodes are now drawn highlighted.
* Added BlockedConnection class in C++. This handles the blocking and unblocking of connections in an exception-safe manner.
* Added Node::plugFlagsChangedSignal().
* Added Plug::ReadOnly flag, to allow plugs to be locked against modification of the input or value.
* Added support for ["gaffer"]["readOnly"] bool parameter user data, mapping it to the Plug::ReadOnly flag. This user data may be modified in a ParameterModificationContext or in a Parameterised::parameterChanged() callback.
* StringPlugValueWidget and PathPlugValueWidget now correctly set their text entry field to read only when the plug is read only.
* PresetsOnlyParameterValueWidget now displays in a disabled state when a plug is not writable.
* Fixed C/C++ Object already deleted test messages caused by DeferredPathPreview.
* Fixed lifetime issues with ScriptWindows - they may now be constructed directly or acquire()d directly and their lifetime will be as expected (managed by the caller). ScriptWindow.connect() continues to operate as before - managing the lifetime of windows to correspond with the lifetime of scripts in the application.
* Fixed problems caused by serialising plug flags as All - they would then acquire new values when loaded in a future where there are new flags available.
* Added a SubTree node, for taking a branch of the tree and rerooting it back to /.
* Fixed bug in ConnectionGadget::bound() which meant that sometimes the graph would not be framed correctly when first displaying a GraphEditor.
* Fixed ColorChooserDialogue to actually use the colour passed to the constructor.
* Window.addChildWindow() now always causes the child window to remain on top of the parent. Previously, this was documented as the behaviour, but it only worked for child dialogues which subsequently went into a modal state. This is achieved by setting the QtCore.Qt.Tool window flag - this is much better than WindowStaysOnTopHint because it hides the child window when the application becomes inactive on the mac - otherwise the window would remain on top of the windows for the newly activated application.
* Fixed bug where colour chooser would remain after the parent swatch died, but be inoperative. It now remains but is still functional.
* Added GafferScene::PathMatcher class, which provides accelerated path matching for use in the PathFilter.
* PathFilter now supports * as a wildcard to match any portion of a name.
* PathFilter now supports ... as a path entry, to match any number of entries.
* Added a ParameterPath class for navigating Parameter hierarchies.
* Fixed bug which prevented CompoundVectorParameters from being saved in presets.
0.35.7
------
* Fixed bug which caused Windows to be hidden when being added as the child of another Window.
* Window.setVisible( True ) now ensures that the Window is unminimized and raised where necessary.
* Added NodeEditor.acquire() method, to allow other UI elements to request that a Node editor be shown in some way for a specific node.
* Double clicking a node in the graph now shows a floating Node Editor for that node.
* Added MultiLineTextWidget.dropTextSignal(), making it easy to implement drag and drop for different datatypes. This simplifies the ScriptEditor implementation somewhat.
* Added an improved ui for editing expressions. Context menu on plugs allows for creation and editing of expressions, and the expression editor accepts drag and drop of plugs.
* Random node no longer errors when context items are missing - this prevents the UI from erroring when scene:path etc is not available.
* NumericSlider now allows specification of hardMin and hardMax values to control what happens when the slider is dragged outside of the widget area.
* Slider now draws the position differently to indicate when the position is outside of the widget area.
* Fixed ColorChooser bugs caused by dragging sliders outside of sensible ranges - the ranges are now enforced.
* Added GafferUI.DisplayTransform class for managing colour transformations from linear to display space. Updated ColorSwatch and ColorChooser classes to use this, and added ocio.py config file to set up the transform using PyOpenColorIO.
* Added GafferUI.ExecuteUI module with functionality for executing nodes, repeating previous executions etc. This provides a new execute menu in the main menu, and a right click menu item in the graph editor.
* Fixed bug which meant that dynamic CompoundNumericPlugs would fail to restore their connections upon script load.
* Arnold shaders may now be connected together to form networks, and they may have non-shader inputs (such as the Random node) which can be evaluated on a per-object basis to provide additional variation.
* Fixed error caused by browser preview tab.
0.35.6
------
* Fixed problem where VectorDataWidget would grow to claim size it couldn't use.
* VectorDataWidget now scrolls to show the new rows when rows have been added.
* RenderableGadget now implements click and drag signal handlers to manage a set of selected objects.
* Fixed bug where MultiLineTextWidget would emit textChangedSignal whenever setText was called, regardless of whether or not it made any changes.
* Added insertText, setCursorPosition, getCursorPosition, cursorPositionAt, setFocussed and getFocussed methods to MultiLineTextWidget.
* ScriptEditor now accepts drops for scene objects, plugs, and nodes, which can be dragged from the Viewer and the GraphEditor.
* Added Widget.parentChangedSignal(), which does what you'd expect from the name.
* Improved default sizing for OpDialogue.
* Fixed CompoundParameter UIs to respect the ["UI"]["collapsed"] user data entry.
* CompoundPlugValueWidget now has a collapsed constructor argument to replace the previous collapsible argument. This takes None, True or False as values, allowing the ui to be created as non-collapsible, collapsed or expanded.
* Disallowing null values in plugs. This fixes bugs in the computation of hashes (all null values hashed the same, regardless of type, or what the actual default value was), and also simplifies coding (no more need for tests against null before using an Object).
* Fixed bug where setting SplinePlug to a value with less points than before raised an Exception.
* Fixed bug where SplinePlug::setToDefault did not work as expected.
* Added ValuePlug::setCacheMemoryLimit() and ValuePlug::getCacheMemoryLimit(), to allow management of cache memory usage. Added startup/gui/cache.py to expose this to the user via the preferences.
* Fixed bug which prevented user preferences from loading.
* Improved drawing of very thin/small selection boxes - they had a tendency to disappear before.
* Added Widget setHighlighted() and getHighlighted() methods, implementing highlight-on-hover for buttons and sliders.
* Implemented drop of items into VectorDataWidget. This allows objects from the viewer to be dragged and dropped into a filter to perform assignments.
* PlugValueWidget.popupMenuSignal now passes the PlugValueWidget to slots instead of the Plug.
* Fixed bug where ColorPlugValueWidget would attempt to show colour pickers for non-editable plugs, resulting in errors.
* NodeUI now also shows output plugs. They can be removed as necessary by registering None with PlugValueWidget.registerCreator().
* ModelCacheSource now uses the new ModelCache class provided by Cortex.
* Added a Random node, for producing random floats and colours based on a seed and a context item.
* Fixed bug where plug popup menus tried to edit plugs which were not editable.
* Fixed bug where the effects of TextWidget.setEditable() did not update the appearance of the widget.
* Fixed bug which caused ExpressionNode to crash when the expression was changed while the output plug was being viewed by the UI.
* Fixed bug which caused errors when connecting compatible children of CompoundPlugs together, if the CompoundPlugs were not themselves compatible enough for a complete connection between all child plugs to be made.
* Fixed bug which prevents ExpressionNode from accepting a Plug with direction()==In as an input to the expression.
* Fixed bug whereby GadgetWidget was passing buttonDoubleClick signals to buttonPress signals on the held gadget.
* Added GraphEditor.nodeDoubleClickSignal().
0.35.5
------
* Fixed graphical glitches caused by incorrectly applying visibility to children of TabbedContainer - this affected the preview section of the browser app particularly badly.
* Added a reportErrors parameter to the OpMatcher constructor - this defaults to True (same behaviour as before) but can be set to False to silence error reporting while loading ops. Note that the OpMatcher used by the BrowserEditor may be customised by implementing the Mode._createOpMatcher() method - this would be the place to pass reportErrors=True.
0.35.4
------
* Added a GafferBindings::NodeClass class, which simplifies the binding of Node derived classes. It is now a one liner to bind a typical extension node.
* The op app now has an arguments parameter which can be used to specify the parameter values for the op.
* The op app now has a gui parameter. When this is true a gui is presented, when it is false the op is executed directly on the command line.
* Added the GafferScene and GafferSceneUI modules. These will allow the generation and editing of scene graphs.
* Fixed RunTimeTyped registration of Gaffer::CompoundPlug.
* Fixed behaviour when a Widget doesn't have a tooltip - it now correctly looks for tooltips on parent Widgets until one is found.
* Added a GafferUI.NumericSlider widget.
* The Viewer now correctly updates when the context has changed. The EditorWidget no longer calls _updateFromContext() at awkward times.