On Thu, 24 Mar 2022 03:07:28 GMT, Phil Race <p...@openjdk.org> wrote:

> 2. What I need here is a nice little statement of what we are INTENDING to 
> draw. I mean what the UX person sketched out on their paper at infinite 
> resolution.

Just my 2c: I'd say the main goal here is to enhance the fidelity of 
`EtchedBorder`. Magnify what we see already at 100% scaling nicely so that the 
"parts" don't fall apart or overlap inconsistently due to rounding. Note that:

 * `TitledBorder` defaults to using `EtchedBorder` in constructors not taking a 
`Border`. 
 * `EtchedBorder` defaults to deriving its 2 colors from the background of the 
component it is painting on, when not given explictly

        public Color getHighlightColor(Component c)   {
            return highlight != null? highlight : c.getBackground().brighter();
        }
        public Color getShadowColor(Component c)   {
            return shadow != null? shadow : c.getBackground().darker();
        }

> Let's assume highlight thickness has to match the border too ? (...) I also 
> think there's at least some analogy with OpenJFX's snap-to-pixel idea that it 
> is sometimes better to pick a pixel and stick with it rather than span pixels 
> and be fuzzy.

These have been my working-assumptions, based on what I see of the built-in L&F 
code.

> Can I please have a pretty picture ? Or is there one here already that shows 
> this ideal ?

How about an ugly one? ;-)  If there is agreement to use sharp, non-aliased 
lines of equal thickness at all scaling levels then I believe [the bottom half 
of this image 
](https://user-images.githubusercontent.com/2722420/159801708-592e9e4d-875b-4b89-aede-306a4f24d78a.png)
 shows the desired result, captured @ 250% scaling (2px lines, matching the 
width of the CheckBox border). Specifying Red and Yellow explicitly ruins the 
'3D' illusion, but makes it easier to spot problems. Title 1 is `LOWERED` 
(default). Title 2 is `RAISED`

The trade-off is that the weight of the lines is "quantized" - not smoothly 
proportional w.r.t. the scaling. I think it's appropriate for the retro etched 
effect, to keep a sharp contrast. An alternative would be to use anti-aliasing 
rendering hints (such as is used almost exclusively through the popular 
[FlatLaf](https://github.com/JFormDesigner/FlatLaf)).

> If we figure this out properly it might be useful to apply to other cases 
> rather than applying inconsistent hacks.

+1

-------------

PR: https://git.openjdk.java.net/jdk/pull/7449

Reply via email to