Commit Graph

63 Commits

Author SHA1 Message Date
jdescottes
89466d582a Feature : Save Piskel project as File
First commit :
Removed Local storage feature
Added 'download project' 'open project' options

First attempt at simplifying right panel.

To be continued ...
2014-06-23 00:49:54 +02:00
jdescottes
98f59fecf1 Feature : add onion skin option
New option in application settings : onion skin.
You can choose the overlay to display now :
- no overlay
- onion skin (default)
- layer preview (previous default)

Available in Application Settings panel.

Only one overlay can be used at the same time.
The onion skin overlay is driven by a new OnionSkinRenderer maanged by the
drawing.

The drawing controller is responsible for instanciating and 'choosing' the
overlay renderer.

When switching to a new overlay, other overlays are cleared and flushed
(they cache their rendering frame, flush empties the cache).

NB : flush is only available on LayersRenderer and OnionSkinRenderer for
now.
2014-06-19 23:33:57 +02:00
jdescottes
fbb5ccc7e2 Fix : bugs in imageToBlob and PngExportController 2014-06-17 07:46:15 +02:00
jdescottes
2809a551d7 Fix : Export to GIF : download option
In the GIF export panel, user can now choose between :
- export online (previous 'upload' feature)
- download GIF

Labels have been updated in the PNG export panel to follow the same
convention.

CanvasToBlob library was modified and moved to dedicated utils to handle
not only canvas, but also any base64 dateURI.
2014-06-14 14:21:26 +02:00
jdescottes
cdef28c60f Fix : force zoomMultiplier to 1 on using +/- 2014-05-18 17:32:20 +02:00
jdescottes
f1b6ea4ae3 Fix : zoom step depends on mousewheel event delta value 2014-05-18 16:33:01 +02:00
jdescottes
0fec4eff4a Fix: cannot detect mac touchpad : switch to throttling 2014-05-18 16:05:59 +02:00
jdescottes
6dc3a2bdf7 merge 2014-05-18 15:51:11 +02:00
jdescottes
c7c536dc80 Fix : Loading state with delete frame/layer
The Frame and Layer selected after an undo/redo are now taken from the
next state saved in the HistoryQueue.
2014-05-17 11:03:18 +02:00
jdescottes
1401c30d87 Fix : Lighten tooltip + fix for #170
Issue 170 : both selected frame and layer are kept after a resize
2014-05-17 00:38:13 +02:00
jdescottes
0c441c214b Feature : darken lighten
Added new tool to lighten/darken. By default is in lightening mode. If the
user holds ctrl/cmd while using the tool, switches to darkening mode.

If the user holds shift while using the tool, then each pixel can only be
modified once per tool usage (ie user keeps hovering the same pixel, it
won't get lighter/darker after the first time). Can be useful if you want
to keep control of the amount of colors in the sprite.

TODO :
- Ability to select explicitly lighten/darken (context menu for
tools).
- Ability to set the 'step' (ie the strength of the lighten/darken)
2014-05-16 23:51:04 +02:00
jdescottes
7569a4343c Fix : Undo/redo for eraser 2014-05-16 22:40:09 +02:00
jdescottes
21a759d8eb Fix : trigger tool move on keyup to acknowledge modifier changes 2014-05-16 22:36:23 +02:00
juliandescottes
a3108225f6 Fix : Zoom level : reduce zoom step on mac os + added keyboard shortcuts 2014-05-14 23:52:32 +02:00
jdescottes
6c882928cc Enhancement : Lossless GIF encoding
If there are less than 256 colors in the piskel, do not perform anycolor
quantization, just reuse the colors from the piskel.

Added preserveColorsParameter to gif.js library.

If nb colors>256, fallback to the previous behavior. This could be
improved by checking the number of colors for each frame. The palette is
defined independantly for each frame, so as long as a frame is <256
colors, we could reuse the original colors.

I also believe that images with more colors would get a better quality if
we could use a single color sample for all frames. This would avoid color
'gaps' as we can experience today. In any case, for piskel, < 256 is a
reasonable assumption
2014-05-12 01:06:37 +02:00
jdescottes
cf560fce0f Merge branch 'master' into enhancement-gif-encoding 2014-05-12 00:50:48 +02:00
jdescottes
cc45ede931 Initial commit 2014-05-12 00:50:13 +02:00
jdescottes
384f8f71b1 Merge 2014-05-12 00:18:34 +02:00
jdescottes
a8e0fef416 Merge branch 'master' into feature-dynamic-palette 2014-05-11 23:34:49 +02:00
juliandescottes
cfb846b6de Moved hardcoded values to constants in PaletteListController 2014-05-11 11:55:00 +02:00
jdescottes
94ce3907da Renamed UsedColorsService to CurrentColorsService + exposed getCurrentColors explicitly 2014-05-08 22:11:16 +02:00
jdescottes
453fbcf88e Fix : changed classnames used for primary and secondary color highlight in palette 2014-05-08 22:03:19 +02:00
jdescottes
3969867dfa Fix : bug when setting switching primary and secondary colors 2014-05-08 21:56:36 +02:00
jdescottes
59195c9fb6 Tiled preview : mutualize canvas background update
When user changes canvas background, css class now applied on document
body.

Created new controller listening to Events.USER_SETTINGS_CHANGED to handle
this.
2014-05-08 20:57:31 +02:00
jdescottes
6ad5bde5d1 TiledPreview : follow up 2014-05-08 20:45:05 +02:00
juliandescottes
aa4c94e3af Feature : Tiled preview initial commiy 2014-05-08 01:41:14 +02:00
jdescottes
c98d25ab66 Fix : Duplicate Current Frame bug (shift+n)
Events were not raised when using Duplicate current frame on
PublicPiskelController.
2014-05-08 01:36:59 +02:00
jdescottes
637fa05109 Feature : Current colors palette
Created dynamic palette displaying currently used colors.
This palette is now selected by default.

New service UsedColorsService created. Listens to PISKEL_RESET and
TOOL_RELEASED and keeps track of the list of current colors.

Still need to :
- improve sorting of colors
- allow to clone the current color palette as a custom palette
- add proper getter in UsedColorService to get the list of current colors

Also I hardcoded a max-height for the palettes-list as I found no better
way of handling the case of palettes containing many colors.

Maybe should add a limit to the number of colors handled by this automatic
palette.
2014-05-07 00:43:28 +02:00
juliandescottes
1db937ae01 Enhancement : Possibility to resize canvas content during resize
- new checkbox in resize panel
- content is resized using nearest neighbor
- deactivated by default

2 bug fixes :
- remove focus after closing drawer
- fire resize event after undo/redo if size changed
2014-05-04 22:58:36 +02:00
jdescottes
5541d030a5 Feature : undo redo including frame/layer actions
- Frame and Layer CRUD actions are now registered and can be cancelled
- Limited performance impact while drawing
- Improved frame cache invalidation
2014-04-22 23:57:30 +02:00
juliandescottes
c2a3ccc8d0 Simplified SAVE STATE events, added wrap method to easily build decorators 2014-04-20 13:15:30 +02:00
juliandescottes
8335c07519 Fix : layer manager was broken 2014-04-19 20:19:24 +02:00
juliandescottes
d45ea00ca5 Refactored piskel controller to extract the event creation 2014-04-19 16:01:51 +02:00
jdescottes
0cecdc74eb Temp commit 2014-04-17 01:27:49 +02:00
jdescottes
a59bfcab11 Feature : import sprites from GIF 2014-04-12 18:40:25 +02:00
jdescottes
c5accf978e Fix : Plug PreviewFilmController to USER_SETTING_CHANGED 2014-04-12 14:19:28 +02:00
jdescottes
76044fa6d4 Fix : Plug PreviewFilmController to USER_SETTING_CHANGED 2014-04-12 14:19:13 +02:00
jdescottes
23f1e8908e Enhancement : performance : event delegation for previewfilmcontroller 2014-04-12 14:15:45 +02:00
jdescottes
b217f8f005 Added progress bar for GIF rendering 2014-04-12 12:09:22 +02:00
jdescottes
09319ecc1b Added progress bar for GIF rendering 2014-04-12 12:08:53 +02:00
jdescottes
3abf0897d5 Enhancement : display canvas size next to cursor coords 2014-04-12 10:14:57 +02:00
jdescottes
dc729ee80b Feature : display cursor coordinates
- new controller CursorCoordinatesController
- added div in right column (bottom:0)
- 3 new events : CURSOR_MOVED, DRAG_START, DRAG_END
- modified tools to fire events when necessary

The cursor coordinates are displayed when the mouse is hovering the
drawing area. When the mouse leaves the area, the indication disappears.
If the user is using a tool that involves dragging (selection, rectangle,
circle), the indicator displays the original coordinates (captured during
drag start) and the current coordinates.
2014-04-11 23:32:28 +02:00
jdescottes
abd5ac5959 Feature : export to ZIP 2014-04-11 01:12:01 +02:00
jdescottes
dd4a544d7a Bug : current layer index was a string 2014-04-09 23:38:35 +02:00
jdescottes
39d7d4d8c8 Enhancement : Rename layers
- added rename icon in layers list
- mutualized CSS for edit icon between palette manager and layers list
- new CSS file icons.css for actions/links/buttons using icons
- layers are no longer retrieved by name, but by index
2014-04-09 23:24:25 +02:00
jdescottes
644b72cc6e Bug : New palette name was set to object MouseEvent ! :) 2014-04-02 22:53:58 +02:00
jdescottes
1ce633bd06 Fix : Tools event listeners are now on window
Smoother user experience. Drawing shapes, selecting etc... is no longer
blocked by either the drawing canvas or the document.
2014-04-02 22:37:01 +02:00
jdescottes
c9251229fc Feature : Hold shift to preserve shape ratio
- mutualized shape tools common code in a ShapeTool class
- when holding shift and drawing a frame, the ratio is preserved
- selection and shape tools now support the mouse to leave the drawing
  area
- shape tools can go 'outside' the drawing canvas
- Frame set/getPixel now check the pixel is in range instead of crashing
2014-04-02 22:21:32 +02:00
jdescottes
7357614d9a Fix : Window resize is erasing the canvas
Issue was coming from the cached frame renderer.
During the window resize, we update the displaySize of the frame renderer,
regardless of the fact that the dimensions changed or not.

The setDisplaySize triggers a destruction of the canvas. But the
CachedFrameRenderer will render the frame only if it detects a change. In
this case, setDisplaySize has been overrided in CachedFrameRenderer to
skip any processing if the dimensions didn't change.

This behavior could be actually done in the FrameRenderer itself, but
since this is crucial to the CachedFrameRenderer behavior, I prefer to
keep it in this class.

Alternatively, could implement a way to discard caches of
CachedFrameRenderers from the outside.
2014-03-30 23:28:18 +02:00
jdescottes
090443c318 Feature : Color palette : fix spectrum issue
The palette manager UI is redrawn almost everytime the model changes.
This way, UI is always in sync with the model.

However, spectrum instances are spawning everytime a redraw is performed.
They cannot be cleaned before the redraw is performed, because if a
spectrum picker is opened, it should remain like this. This allows the
cuser to keep modifying a color without having to reopen the picker each
time he/she stops on a color.

As a workaround, I keep a reference on all the spectrum containers and
destroy them all when the manager is disposed.

Ideally I'd prefer to have a single spectrum instance that I could move
around depending on which color the user wants to edit. I.e. I want to
mutualize all the picker instances ...  But this will require a bit more
work.

Also added a notification when the user saves a palette.
Updated z-index of user-message container so that it is always above the
rest of the application.
2014-03-30 22:42:28 +02:00