Skip to content

v0.6.0 - Smart Objects

Latest
Compare
Choose a tag to compare
@EmilDohne EmilDohne released this 25 Feb 19:39
· 2 commits to master since this release
bd9f29f

The v0.6.0 Release primarily targets adding support for SmartObject layers and warps. Additionally, we refactored large parts of the internal and public API.

To check out how to use SmartObjects please have a look here for an example, here for the documentation (c++) and here for the documentation (python)

Warning

This is a breaking release, please proceed with caution and read both the changelogs and documentation carefully as large parts of the API were overhauled.

Features:

  • Add support for SmartObject layers SmartObjectLayer<T>, psapi.SmartObjectLayer_*bit
  • add support for SmartObject warps (Exceptions being "smart" perspective warp and puppet warp)

Python

  • Expose all mask parameters that were previously hidden. This includes mask_disabled, mask_relative_to_layer, mask_default_color, mask_density, mask_feather, mask_position, mask_width and mask_height

Bugfixes:

  • Masks on layers now are better supported and have their width and height decoupled from the layers' width and height (except for during construction of image layers).
  • Internal: Harden file section write to be less error prone using scoped section markers

C++

  • Harden template requirements to only allow uint8_t, uint16_t, float for all Photoshop related templates

Python

  • Add missing is_visible and is_locked arguments to constructor of layers

Breaking Changes:

  • Layer coordinates are no longer expressed relative to the canvas center but rather relative to canvas top left to be more in line with photoshop
    • Example: if previously for a 64x64 canvas a centered layer was at (0, 0), now it would be at (32, 32)
  • Layer opacity is now expressed as a float (but still backed by a uint8_t

C++

  • Drop C++17 support
  • Public facing API was changed from camelCase to snake_case to be more in line and equal to python bindings
  • All previously public member variables are now private with appropriate getters and setters to allow the API to implement more logic on them in the future

Python

  • All image data is no longer expressed as a property but instead as method as these are potentially quite expensive to compute
  • ImageLayer_*bit.channels property is now ImageLayer_*bit.channel_indices()

Miscellaneous:

  • Add Compositing Framework to prepare for eventual layer stack compositing
  • Internal: Add basic 2D rendering framework
  • Internal: Add Geometry Framework to allow for parsing of Quad Meshes and Bezier Surfaces
  • Internal: Add Parsing of Descriptors
  • Internal: Simplify endian functions to work more generically
  • Refactor large parts of the internal API.
  • Refactor inheritance structure of Image Based layers and extract mask logic to mixin

Dependencies:

  • Add OpenImageIO as dependency (via vcpkg)
  • Add fmt as dependency (via vcpkg)
  • Add stduiid as dependency (via vcpkg)
  • Add eigen3 as dependency (via vcpkg)
  • Add json as a submodule
  • Move libdeflate from submodule to vcpkg
  • Add vcpkg submodule
  • Bump c-blosc2 to 2.15.2

Documentation

  • Link in examples directly to hosted docs for easier access

CI:

  • Add Clang ubuntu build target
  • Add ASAN to all tests (that support it)
  • Add Clang ubuntu valgrind target