RFR: JDK-8294680: Refactor scaled border rendering

Rajat Mahajan duke at openjdk.org
Sat Dec 10 23:12:35 UTC 2022


On Wed, 7 Dec 2022 21:34:12 GMT, Harshitha Onkar <honkar at openjdk.org> wrote:

> In this fix, the common code required for scaled border rendering is unified and added to SwingUtilities3. This is achieved by adding a functional interface to SwingUtilities3 and calling the the respective paintBorder function passed as parameter to method.  
> 
> Following are the usual steps for any border scaling -
> 
> - Resetting transform.
> - Calculating new width, height, x & y-translations.
> - Perform the required border rendering.
> - And at the end restore the previous transform.
> 
> To test the refactored code, 3 separate border scaling instances were taken (details below) and the SwingUtilities3.paintBorder, (containing the common functionality) was applied. All the tests associated with the respective border changes pass.
> 
> 1. EtchedBorder - [PR#7449](https://github.com/openjdk/jdk/pull/7449) - Test: ScaledEtchedBorderTest.java
> 2. LineBorder - [PR#10681](https://github.com/openjdk/jdk/pull/10681) - Test: ScaledLineBorderTest & ScaledTextFieldBorderTest.java
> 3. JInternalFrame Border - [PR#10274](https://github.com/openjdk/jdk/pull/10274) - Test: InternalFrameBorderTest.java
> 
> The advantage of this solution is - it avoids code repetition and can be reused across all the border classes requiring border scaling fix.

Changes requested by rajamah at github.com (no known OpenJDK username).

src/java.desktop/share/classes/com/sun/java/swing/SwingUtilities3.java line 174:

> 172: 
> 173:             if (resetTransform) {
> 174:                 g2d.setTransform(new AffineTransform());

Can we keep the original comment about this:
                /* Deactivate the HiDPI scaling transform,
                 * so we can do paint operations in the device
                 * pixel coordinate system instead of the logical coordinate system.
                 */

src/java.desktop/share/classes/com/sun/java/swing/SwingUtilities3.java line 190:

> 188: 
> 189:         if (resetTransform) {
> 190:             double xx = at.getScaleX() * x + at.getTranslateX();

Can we combine this code block with the above if (resetTransform) at line 173 ? or did you keep it separate for a reason?

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

PR: https://git.openjdk.org/jdk/pull/11571



More information about the client-libs-dev mailing list