+ BaseTool : added new method hideHighlightedPixel
+ DrawingController : mousemove event plugged on mousenter
and unplugged on mouseleave
+ DrawingController : tool.hideHighlightPixel called on mouseleave and
when switching the current tool to active (i.e. when user starts
clicking)
+ decentralized shortcut declaration
+ each service/controller is now responsible for declaring its shorcuts
- documentation (cheatsheet) is still to be maintained manually
- init order matters (shortcutService has to be instanciated before
everyone else) => should have a standalone KeyboardService singleton
which is ready as soon as it is loaded
+ cleanup of color management
+ colors are now stored in palette controller
+ drawing controller has a dependency on palette controller
+ UPDATE COLOR events have been removed (they were used only for
synchronizing palette and drawing controller)
+ added shortcuts for all tools in ToolController
+ modified structure of tools in Controller to Array of descriptors to
allow to declare shortcuts directly when setting up the tool controller
+ moved keycode translation to KeycodeTranslator
+ made KeycodeTranslator more generic to handle 0-9 and a-z keys
+ small refactor in KeyboardEventService
+ added explanatory comment for CanvasUtils.disableImageSmoothing
+ detect browser for chosing wheel/mousewheel event in DrawingController
+ create ABSTRACT_FUNCTION constant to be reused forabstract methods
+ moved Serializer and Deserializer to utils.serialization package
+ put all backward code in utils.serialization.backward
+ added static method on Deserializer to make its usage similar to other
utils in the package
- still not happy with the names used in Deserializer classes
(deserializer.deserialize ...)
+ ImportController is no longer relying on the deserializer to build a
piskel instance
+ Static builders have been added to Piskel and Layer to help easily
create new instances from existing elements
+ piskel deserialization is now clearly asynchronous
+ added utils.Deserializer (not a singleton though, more a builder/loader)
+ utils.Deserializer constructor expects a callback
+ when all layers are loaded and piskel is ready, the callback provided by
the client is called with piskel as the first argument
- Deserializer doesn't fit in the utils package, which should be reserved
to singletons : can move it to service as a PiskelLoaderService, and
Deserializer could remain with only the purely static methods
- ImportController is realying on the Deserializer to build a Piskel but
it shouldn't. Find a way to mutualize the code necessary to create a
Piskel from an array of pskl.model.Frame
- still cleanup to do in app.js
- comments to add as well