RFR: JDK-8294680: Refactor scaled border rendering
Harshitha Onkar
honkar at openjdk.org
Mon Dec 12 19:12:36 UTC 2022
On Sat, 10 Dec 2022 23:08:48 GMT, Rajat Mahajan <duke 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.
>
> 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.
> */
Sure. I can add it.
> 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?
@rajamah In-order to paint the border even when g is not a Graphics2D object I have added the `resetTransform` check here again and additionally to keep the if & else block close-by, which is easier to understand rather than having the blocks separated.
-------------
PR: https://git.openjdk.org/jdk/pull/11571
More information about the client-libs-dev
mailing list