pencil2d / pencil

Pencil2D is an easy, intuitive tool to make 2D hand-drawn animations. Pencil2D is open source and cross-platform.
http://pencil2d.org
GNU General Public License v2.0
1.45k stars 272 forks source link

Add onion skin global toggle behavior #1085

Open Jose-Moreno opened 6 years ago

Jose-Moreno commented 6 years ago

Issue Summary

This is something more of a user experience issue that has been requested here and there. Onion skinning in most programs is normally turned on / off reminiscent of how a light table would. After that you are to handle the inclusion / exclusion of either previous or next frames relative to your current frame. Consider this I'd like to ask to have a single switch (and shortcut) for toggling the onion skin globally, and leave the current PREV and NEXT functionality to be perceived as filters. This way there would be the following Onion Skin states: All OFF, All ON, PREV ONly, NEXT ONly

So basically we would end up having:

scribblemaniac commented 5 years ago

I think there is potential for confusion if we have a global switch and a prev/next switch. If a user turns on next onion switching, they expect to see onion skins of the next frame. Image a scenario where the global switch is off, and one of the local switches is on but doing nothing. So it can be confusing, especially if they don't realize there is a global switch.

One solution would be to allow both the next and previous onion skin switches to be mapped to the same shortcut.

An alternative acceptable solution I think would be to have an all on/all off action which simply changes the prev and next switch, but doesn't have any state of its own. The problem with this is, what if there is one on and one off? Should it turn them both on or both off. An action that just toggles both switches is possible too.

MrStevns commented 5 years ago

@scribblemaniac To me the natural effect of enabling or disabling the global onion skin would render the previous and next onion skin button gray aka. disabled too.

If we consider the future timeline mockup design, then the global onion skin switch wouldn't necessarily turn on all onion skins, it would keep the hierarchy of whatever layer has its own onion skin state enabled or disabled.

So the states could be:

Timeline-----------Onionskin: [ON]---------- Layer 1: ----- Onion skin [ON] Layer 2: ----- Onion skin [OFF] Layer 3: ----- Onion skin [ON]

A disabled onion skin state however would indeed turn off all onion skins:

Timeline---------Onionskin: [OFF]---------- Layer 1: ----- Onion skin [OFF] Layer 2: ----- Onion skin [OFF] Layer 3: ----- Onion skin [OFF]

and reenabling the global onion skin state would then go back to the previous known state:

Timeline-----------Onionskin: [ON]---------- Layer 1: ----- Onion skin [ON] Layer 2: ----- Onion skin [OFF] Layer 3: ----- Onion skin [ON]

Jose-Moreno commented 5 years ago

@CandyFace @scribblemaniac In other applications there is normally a switch that controls the state of the onion skin (a.k.a global state) being on and off. Then they usually have what some call the an "onion skins" window which is very similar to the one in Krita (TVPaint has the exact same window)

Basically this additional window has switches to turn on and off individual frames (drawings?) that participate in the onion skin state, and are before and after the current drawing / keyframe. However we already have this behavior although slightly more subtle and hidden, having the amount of frames you want to see though and a sort of parametric fade-off that goes from the maximum opacity value to the minimum distributed between the amount of drawings you want to be in that mode.

I've always felt the method other apps use, while allowing you greater control is a bit un-intuitive, and it limits you to have only 10 drawings (although you really never need more than that) but with the one we have in Pencil2D although you can't turn off individual drawings right now, it's a bit more easy to grasp for the beginner at first.

There is also a request made by feeef years ago in #393 where he asked to include a way to toggle the onion skins on and off individually as well, but this is an enhancement to the system not a request to refactor it from scratch. The easiest way I can think of doing this is not by messing with the parametric fade off, but by allowing the user to right-click on the drawing and make it "non-onion skinnable" that is to have a sort of onion skin state blocker in the keyframe.

I also agree with Oliver that turning off the onion skin switch would really disable (i.e grey out) the "next / prev" buttons to signal the user that those are dependent on the global switch, so that would minimize any potential confusion. I also agree with how the individual layers onion skin should work.

Lastly, but a bit off-topic, I'll make another request issue so that we can migrate all the onion skin parameters in the preferences, the display panel elements related to the onion skin and the onion skin match keyframes button to their own panel. We need to have them grouped together to allow the user more flexibility and ease of use.