Made GafferImage::Format::getDisplayWindow() return const reference.
Fixed FormatData serialisation.

It could never have worked. Also moved the implementation of FormatData into its own file. Over time the Format class needs to be slimmed down until it's just a simple maths class - all the default format stuff would make more sense on the FormatPlug.
Tidied up Format.h.

- Moved inline implementations into GafferImage/Format.inl.
- Fixed include guards (GAFFERIMAGE_ not GAFFER_).
- Removed unnecessary friend declaration.
- Renamed m_aspect to m_pixelAspect to clarify that it isn't the aspect of the display window itself.
Added space conversion methods to GafferImage::Format.

Because Gaffer uses a Y-up coordinate system and Cortex and OpenEXR use Y-down, it's handy to have this documented somewhere and to have some methods for easily converting between coordinate systems.

Also added a todo in ImagePrimitiveSource.inl, to fix the display window computation and use these new convenience methods to make the data window and channel data match appropriately.
Improved GafferImage::Display node hashing.

Prior to this, the hash for every tile in the image was changed any time a new bucket arrived. This meant a lot of churning in the cache and a lot of unnecessary computation in the viewer, as exposure, gamma and lut were repeatedly being reapplied to tiles which hadn't changed but had new hashes.

This improves viewer responsiveness approximately 2x during an interactive render.
Optimised ChannelDataProcessor::channelEnabled().

There was no point getting the input channel names - it would be a mistake to call channelEnabled() with anything other than an existing channel anyway.

This change alone improves viewer responsiveness approximately 1.5x when receiving a render.
Removed deprecated ImageView( name, inputPlug ) constructor.

This was being used by old View subclasses which would pass their own input plug and then use setPreprocessor() to insert some conversion network. Subclasses should now use insertConverter(), following the example in GafferImageUITest.ImageViewTest.testDeriving.

This allows the simplification of various bits of the ImageView implementation.
Optimised ImageView internal connections.

Removing connections and replacing them with a plugSet callback which transfers the values gives a rather disturbing 1.5x improvement in ImageView update when viewing a Display node. This implies that there are some optimisations to be made when propagating static values through plug connections (we're currently relying on an unnecessary fake computation to do that every time the value is accessed, whereas we could be doing it as a one off operation before compute), but in the meantime it seems worth making this simple change which greatly improves the use of the render viewer.
Fixed GafferImageTest.DisplayTest.

It was relying on waiting a fixed amount of time for data to be received and processed on the DisplayDriverServer thread - sometimes the processing would take longer and the test would be performed before the data was processed, yielding failure. We now wait on semaphores connected to Display.dataReceivedSignal() and Display.imageReceivedSignal() to make sure the tests are performed at the appropriate time.
Fixed ambiguity in FormatDataBinding.

The "using IECore" wasn't necessary and was causing an ambiguity between IECore::FormatData and GafferImage::FormatData.
Fixed ImageView clipping default value (now off by default).
Fixed StandardNodeGadget nodule positioning.

When the content width was less than the minimum width, the nodules were being positioned inside the frame rather than on the edges. This only affected nodules on the left and right side of frame and so had gone unnoticed.
Added failing test for BoxUI nodule positioning.

We want the positioning to be based on the tangents of the internal connections.
Moved Metadata class from GafferUI to Gaffer.

It doesn't have any dependencies on code in GafferUI and it is useful outside of UI contexts - for instance in the documentation generation code.
Implemented per-instance metadata for Box nodes.

Since each Box may be created for a different purpose, and have different plugs to any other Box, it doesn't make sense for them to have static metadata entries. The Box::setPlugMetadata() method therefore allows metadata to be set on a per-plug-per-node basis. This will provide the basis for the user to make further customisations to Boxes, like setting descriptions for plugs and so on.
Made Box nodule positions match internal nodule positions

This means that, for instance, shader inputs to boxes which are connected internally to shader assignments now appear on the left hand side.

Fixes #608.
Fixed bugs in Switch and ShaderAssignment acceptsInput() methods.

They would attempt to deference NULL pointers when acceptsInput( NULL ) was called.
Merge pull request #705 from johnhaddon/nullInputAcceptance

Fixed bugs in Switch and ShaderAssignment acceptsInput() methods.
Merge pull request #701 from johnhaddon/displayOptimisation

Render view optimisation
Merge pull request #703 from johnhaddon/boxMetadata

Box metadata and nodule positioning