plugdata-team / plugdata

Pure Data as a plugin, with a new GUI
https://plugdata.org
GNU General Public License v3.0
1.46k stars 62 forks source link

[cnv] minimum size should be able to be "1" #1682

Open porres opened 2 months ago

porres commented 2 months ago

The canvas object canbe configured in its properties to be able to go as low as 1 pixel in height and/or width, but PlugData has this arbitrary higher minimum of '9'

alcomposer commented 2 months ago

This is because it's a dragable number, and it could become too small too easily.

I have been thinking previous to this report that we could allow typing to go down to the lowest value. That way you can still enter 1, but have a safety for sliding it with the mouse / finger?

porres commented 2 months ago

Sorry, that doesn't make sense...

so what people can drag it too low? They can drag higher again, and if they can't get the exact value they want, they can just type it in...

timothyschoen commented 2 months ago

The draggable number part isn't the biggest issue, if you were to limit it at 1, it would still be okay in that regard. The problem is making it so small that it can't be drag-resized anymore (without going into properties). I'm not sure if what we have now is the best solution here, but that was the reason.

porres commented 2 months ago

I just went into the help file of [float], and note that vanilla's help files are full of 1 pixel heigth canvases.

I was able to select it and increase its height just fine

And if one is dragging, be it from directly resizing the object or via inspector and things get out of hand and smaller than you wanted, then you can just reverse the direction to what you actually want

anyway, I don't see a problem

alcomposer commented 2 months ago

What is your canvas zoom?

Also not all users have 20/20 vision. 1px selection is definitely not a good UI selection situation to be in.

I think we limit for dragging, but allow typing in. Would that be okay with you?

I don't see why that wouldn't allow you to achieve what you want?

porres commented 2 months ago

No zooming, and 1 pixel doesn't require eagle view

Open any vanilla help file and you will see 1 pixel height canvases nicely and you can edit them

I think it is a totally unnecessary and unjustified restriction, and it certainly drives people to think they can't set it lower than that

alcomposer commented 2 months ago

It doesn't need to drive people away from setting 1px. We can for example have a tool tip:

"Drag to change or type for smaller values"

Also, we need to consider touch device support. And 1px is definitely lower than the guidelines. Even 9 is!

https://developer.apple.com/design/human-interface-guidelines/accessibility

Screenshot_20240626-235950.png

I'm not suggesting we go to min 44! Obviously 9 is fine as a min draggable. But without a doubt exposing new users and general patching users to easily create 1px objects is dangerous. Especially as it is so easy (at least In my understanding) to resize objects, and multiple objects in plugdata.

This isn't an issue for help files, as I don't think help files are intended to be pachable, and the 1px canvas line trick is mainly used here anyway. Normal users are (correct me if I'm wrong) not writing help files all the time. But they are resizing objects all the time, and it's important to allow advanced behaviour (1<9 px) and general behaviour (9<) to not only limit object for selection ease, but also as 90% of the objects they will be resizing will not be canvases to 1px. (On a daily basis, please correct me if that is an incorrect guesstimate)

I think this is why for general patching / user resizing we should try to guide people to having sensible min size. Then allow users to use any size they want with typing. I can't see how that wouldn't be the best of both worlds.

Users that want 1px lines will work it out quite quick, otherwise they probably don't need this feature?

Some software I have used uses modifier-key to allow extended bounds for a value to be dragged. It's not uncommon, given that the way a UI is made powerful is by creating safe ways to play with values without breaking stuff. Then if you really want a smaller / larger value press ctrl while dragging the slider.

porres commented 2 months ago

Ok, so now the problem is multitouch support? Can you elaborate on that so I understand what you mean? I'm still failing to see

I think you're trying really hard to find a problem to fix and maybe it's just a case where you are trying hard to fix something that ain't broken... and is generating unnecessary noise and complexity

alcomposer commented 2 months ago

I'm not sure if you want all resizing, or only inspector to not be limited. So below is a list of ways the plugdata GUI can resize objects that I'm aware of:

Which of the above would you like to discuss being min 1px. (Obviously messages is already unbound)

Ok, so now the problem is multitouch support?

This is a consideration. It's not the problem now. The other considerations are still valid from our POV.

I think you're trying really hard to find a problem to fix and maybe it's just a case where you are trying hard to fix something that ain't broken

This was added by Tim before I was involved. I think it's a really nice and intelligent feature. As with multi-select resizing, larger objects can make smaller objects even smaller. So by limiting the smallest size, it's safe to resize many at once.

I'm also forgetting that our drag-resize handles take up space. And that less than 9 becomes hard to select those handles in plugdata. (I am not talking about if it's hard / easy in puredata).

timothyschoen commented 2 months ago

No zooming, and 1 pixel doesn't require eagle view

Open any vanilla help file and you will see 1 pixel height canvases nicely and you can edit them

I think it is a totally unnecessary and unjustified restriction, and it certainly drives people to think they can't set it lower than that

Well that's not true, it is necessary for the resize handles! The limitation needs to be there. We can't show resize handles that are larger than the object, that's physically impossible.

So I like Alex' solution of allowing smaller sizes to be set from the inspector only

porres commented 2 months ago

This is a consideration. It's not the problem now. The other considerations are still valid from our POV.

The other considerations don't hold true to me, I can easily resize the canvas if it has a 1 pixel height like I said... without zooming, just open any vanilla help file and you'll see canvases with 1 pixel height. And I mean I can do this by selecting the object in edit mode and just resize it.

And of course that if I do that it immediately jumps to the higher minimum height and I can't bring it lower anymore. But if I were capable of it, then nothing prevents me from resizing it higher while i'm still adjusting things.

Selecting the object and going into the inspector settings instead is also possible, of course...

And if one is resizing via inspector, then of course it's completely hassle free to readjust and make it bigger if there was some "accident" by adjusting it too low, so I can't see the restrain there either.

I can't see the need for a restrain anywhere.

This is just ain't broken, no need to fix it, unless I'm still missing something and you gotta help me...

porres commented 2 months ago

Well that's not true, it is necessary for the resize handles! The limitation needs to be there. We can't show resize handles that are larger than the object, that's physically impossible.

oh, hmmm, ok, let me show a screenshot

Screenshot 2024-06-26 at 13 23 35

Well, handles are there, they don't look the same, but it's evident there is a handle there if you know the object and if you've seen it before (and even if you haven't I will argue). And hovering the mouse over it will show you the resizing cursor feature that clearly tells you you can resize it...

you know this is like a new software to me, I'm not used to resizing [cnv] objects, and it was perfectly fine for me...

so yeah, honestly, I can see your point now, but it doesn't feel like a case where safety measures must be applied... things work just fine... there's no real danger, no one is getting hurt.

porres commented 2 months ago

following the same principle, maybe the minimum size for bang (8) is also too small, but it works jus fine as well :)

Screenshot 2024-06-26 at 13 30 45

I think 8 for a bang is too small and if you want to increase it a bit I wouldn't mind, but 1 pixel width/height canvases are actually useful

alcomposer commented 2 months ago

LOL, I didn't think they were different min sizes! Yeah, they should probably be consistent?

We have a bunch of stuff that's hard coded in objects like this. Would be good (an easy, but time consuming delicate job) to get this all worked out.

Not sure if you noticed yet, but button is also on our radar for resizing. As it's aspect ratio locked currently, but shouldn't be...

We were thinking of trying to keep it ratio locked, but dragging sides of object would drag it out freely, while edges would resize with ratio.

Because I'm sure many people just want the button to be square. But then also be able to adjust it freely to.

Re min size, alternatively we can make canvas 1px min only? But I think it would be better to allow some sort of consistent behaviour for all GUI objects?