Image unit workgroup
The image unit is currently very random in GIMP. Here are basically the 4 concepts of image units right now:
- image unit: defaults to "Pixels", saved in the XCF as PROP_UNIT.
- print unit: can only be a physical unit (i.e. not pixels).
- resolution unit: only many dots/pixels per physical unit.
- display unit: shown in rulers for instance.
Note: though "percentage" is sometimes shown in unit list on some dialogs (Scale, Canvas Size, etc.), it is not a proper unit and cannot be set for any of the units above.
- You work for the screen (web, movie, etc.). You usually only care about pixel size.
- You work for a physical medium (print or other), and you usually want to see your size in the unit adapted to your country/work/de-facto standard for the type of medium. Typically in the US, for paper print, I think they talk in inches, but in the EU, we use international metrics (mm, cm usually).
Current UI Analysis
- The image unit is only changed when changing the resolution unit (which is a bug IMO).
- The print unit concepts mixes with image unit. Basically when image unit is not pixel, then we have a print unit. We cannot reset the print unit right now (if we want to use "pixel") AFAIK.
- The resolution unit is not stored and always considered as DPI. But somehow when we changed the print unit, it uses it for resolution unit (which is silly IMO).
- Display unit is independent from image unit (though it defaults to the image unit). Changing it (usually the combo in status bar) does not change the image unit.
A lot of things are very unclear about how this all works:
- How to set the image unit? Currently the unit is set in current cases:
- New image: it uses the **resolution unit** as image unit, which seems silly to me (resolution is usually using DPI, hence inches, even when we want to see your image in cm/mm for instance). - New image from existing drawable(s): it uses the unit from previous image which seems fair. - New image from buffer: it uses the unit from the buffer. - Print size: uses the resolution unit if and only if physical size/resolution changed. - Scale size: uses the resolution unit if and only if pixel dimensions changed.
- Print unit is basically the image unit if not pixel.
- Why are we using the resolution units as image unit in various places? This doesn't match with the fact that from our experience, we more often use DPI while still using other physical units for dimension. Basically image unit is a mix of print unit + resolution unit.
- It is never clear at all which action actually changes the image unit.
- With current code, it doesn't look we ever can switch back to "pixel" as image unit (basically not a print job, we don't care about physical dimensions) once we moved away from it.
- When changing the display unit, we don't actually change the image unit. Which is maybe fine (you might want to look temporarily at your image with another unit system) but also sometimes confusing.
- How often are non-DPI resolution units used? I.e. for which use case do we want dots per mm for instance? Here in France for instance, even when all dimensions are in mm (or cm), we still use the DPI units for dot density.
- As a result of answers from previous question, would we want to store both a dimension unit **and** a resolution unit in the XCF?
Maybe we should have both a dimension unit and resolution unit concepts. Also we should make it clearer when you setting them or not.
Finally I wonder if we should add the concept of image target. Basically when a work does not target print (or similar physical medium), disabling resolution would be helpful, at least to have people understand this concept is useless when you target the screen.