Jump to content

Suggestion: Seperate undo for each layer


Recommended Posts

Hey Rick,

How difficult would it be to make the undo history feature layer specific. Basically what I'm looking for is a way to undo things on one layer, while retaining the other layers. :idea: Perhaps a combined layers/undo box could expedite such a feature. Maybe something like this? double%20dialog.png

Just a quick example, obviously there are some things that I didn't put in the window.

Lawless%20government%20sig.png
Link to comment
Share on other sites

I think the history takes up a lot of memory... but then again, it would be the same amount of history, wouldn't it? Just different locations. Well, let's see, there'd be a couple problems. Obviously, we could put things like "merge layers" into a general history, what would happen to the histories once you merge layers? Idk... but I like the idea!

HellRiverSig3_stretch.png
Link to comment
Share on other sites

I may be wrong but I think the history is stored as a temporary .txt file while using PdN. After PdN closes, the .txt file is deleted. I don't think memory would be an issue. I could be wrong on all counts.

Anyway, it's still an interesting idea.

BK_BloodSaw_sig.png

- DO NOT contact me asking for the .pdn of my avatar or the PDN logo. Thank you. Have a nice day.

Link to comment
Share on other sites

Memory isn't an issue. The history files are stored in %USERPROFILE%/AppData/Local/Paint.NET (Vista), or something like "%USERPROFILE%/Local Settings/Paint.NET" (XP) -- they aren't text files.

The real issue here is that this would be horrendously confusing. If each layer has its own history, then where does image-wide history data go? If I create a new layer, or delete a layer, how does that affect the granularized history? It also becomes very confusing to develop and test, and to use. Things just wouldn't always happen as you'd expect them to even if it was indeed working correctly.

No, it's just simpler to keep "time" as a one-dimensional entity in Paint.NET.

The Paint.NET Blog: https://blog.getpaint.net/

Donations are always appreciated! https://www.getpaint.net/donate.html

forumSig_bmwE60.jpg

Link to comment
Share on other sites

Yeah, I think it would be easier to keep it the way it is. However, if there ever is a chance of this becoming part of the program it should have a toggle on/off option, that way it won't confuse you if you don't want it to.

Which further enforces my conviction to not ever have this.

The Paint.NET Blog: https://blog.getpaint.net/

Donations are always appreciated! https://www.getpaint.net/donate.html

forumSig_bmwE60.jpg

Link to comment
Share on other sites

I have had a lot of ideas for improvements, but most of them are scraped because it would make things too complicated and I would forget how to use it after a day or two.

"The greatest thing about the Internet is that you can write anything you want and give it a false source." ~Ezra Pound

twtr | dA | tmblr | yt | fb

Link to comment
Share on other sites

If each layer has its own history, then where does image-wide history data go?

I'm not entirely sure how it is done now, but, in xml speak, it could be as follows:

 



























The image wide adjustments could perhaps have a separate area on screen, but in the same window.

If I create a new layer, or delete a layer, how does that affect the granularized history?

Continuing on the above, a new layer could simply add a new to the history file.

It also becomes very confusing to develop and test, and to use. Things just wouldn't always happen as you'd expect them to even if it was indeed working correctly.

How so?

No, it's just simpler to keep "time" as a one-dimensional entity in Paint.NET.

Aye, perhaps....maybe I should get the PDN source and try implementing it. In the process of which I will probably find that I agree wholeheartedly with Rick on this :lol:

Lawless%20government%20sig.png
Link to comment
Share on other sites

crosswalker, Except that's not how history files are stored or organized at all. They are not XML, they are not plain text, they are not human understandable descriptions in any way. Nor are they designed to be.

Continuing on the above, a new layer could simply add a new to the history file.

This statement is a logical fallacy though, following from over-simplifying the engineering aspect of this whole thing. You can't just wave your hands and say, "it's a new layer!"

How so?

Because you'd suddenly be organizing the history data in a non-intuitive way. If you make changes to layer A, then layer B, then layer C, then go undo things from A, then make changes to C, then undo something from B, then make changes to C, then undo from layer B again ... and then you want to start redoing things ... it gets very confusing. The normal timeline, that is to say the history organized w.r.t. time instead of time+layer, gets totally maligned. Do we keep a separate undo list for the order in which you've undone things so that you can actually recreate the normal timeline? It's just way more confusing than you realize, trust me.

The Paint.NET Blog: https://blog.getpaint.net/

Donations are always appreciated! https://www.getpaint.net/donate.html

forumSig_bmwE60.jpg

Link to comment
Share on other sites

Additionally, there are items that show up in the history that do not modify a layer directly, but which define the scope at which the image or layer is modified. Primarily, the selection, which is not actually part of the image (it is part of the "workspace"). When you change a selection, it affects where you can draw on the layer. However, the selection is independent of the layer. You can't have the selection's changes be part of any one layer's timeline because the scope of permitted modification (that is, the selection region) changes with the layer you have chosen in the Layers window (that is to say, changing the active layer affects which part of the image you can change). This is especially integral to the Move Selected Pixels tool, which must have a lock on the layer, a lock on which layer is active, and full control over the selection. If you made changes with this tool and then allowed each entity's timeline to be backtracked independently, then either: (1) you have to implement crazy locking and sychronization mechanisms to ensure that if "A" is undone but depends on state in "B" or "C", that B and C are also given a chance to reconcile themselves, or (2) your head explodes.

The Paint.NET Blog: https://blog.getpaint.net/

Donations are always appreciated! https://www.getpaint.net/donate.html

forumSig_bmwE60.jpg

Link to comment
Share on other sites

  • 3 weeks later...

but noting which layer the history event occurred on might be nice, so your history, instead of reading:

Open File
Pencil
Pencil
Select
Crop to Selection
Eraser

would read

Open File
Pencil - Layer 1
Pencil - Layer 1
Select
Crop to Selection
Eraser - Layer 2

pdnsig.png
Link to comment
Share on other sites

Like I said, it is just way way way way way way way way way more complicated than you think, but in terms of implementation complexity and in terms of usability. This will not be added to Paint.NET. (Not trying to be stern here, just trying to divert energy away from this thread and on to other things that are much more productive.)

Locked

The Paint.NET Blog: https://blog.getpaint.net/

Donations are always appreciated! https://www.getpaint.net/donate.html

forumSig_bmwE60.jpg

Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
 Share

×
×
  • Create New...