Skip to content

Refactor fillGradientRectangle to avoid DPIUtil.autoScaleDown() #2284

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

arunjose696
Copy link
Contributor

@arunjose696 arunjose696 commented Jul 4, 2025

Summary:

This PR refactors the image creation logic in fillGradientRectangle() by using an ImageDataProvider instead of directly creating ImageData. There is no visual impact for the changes the behavior should remain as before.

Steps to reproduce

Reaching this function on Windows is difficult, as the check if (OS.GetROP2(handle) != OS.R2_XORPEN && OS.GetDeviceCaps(handle, OS.TECHNOLOGY) != OS.DT_RASPRINTER) usually returns true, causing the method to be bypassed. For testing purposes, this condition can be manually set to false to ensure that fillGradientRectangle is executed.

When the check is disabled, the method is invoked, for example, when using palettes in GEF. After applying this change, the gradient rectangles in the palette render identical as before.

Copy link
Contributor

github-actions bot commented Jul 4, 2025

Test Results

   539 files   -  7     539 suites   - 7   32m 45s ⏱️ + 1m 13s
 4 358 tests  - 49   4 343 ✅  - 47   14 💤  - 3  1 ❌ +1 
16 664 runs   - 49  16 539 ✅  - 47  124 💤  - 3  1 ❌ +1 

For more details on these failures, see this check.

Results for commit 1cf0759. ± Comparison against base commit ac52a23.

This pull request removes 49 tests.
AllWin32Tests org.eclipse.swt.graphics.ImageWin32Tests ‑ testImageDataForDifferentFractionalZoomsShouldBeDifferent
AllWin32Tests org.eclipse.swt.graphics.ImageWin32Tests ‑ testImageShouldHaveDimesionAsPerZoomLevel
AllWin32Tests org.eclipse.swt.tests.win32.Test_org_eclipse_swt_dnd_DND ‑ testByteArrayTransfer
AllWin32Tests org.eclipse.swt.tests.win32.Test_org_eclipse_swt_dnd_DND ‑ testFileTransfer
AllWin32Tests org.eclipse.swt.tests.win32.Test_org_eclipse_swt_dnd_DND ‑ testHtmlTransfer
AllWin32Tests org.eclipse.swt.tests.win32.Test_org_eclipse_swt_dnd_DND ‑ testImageTransfer_fromCopiedImage
AllWin32Tests org.eclipse.swt.tests.win32.Test_org_eclipse_swt_dnd_DND ‑ testImageTransfer_fromImage
AllWin32Tests org.eclipse.swt.tests.win32.Test_org_eclipse_swt_dnd_DND ‑ testImageTransfer_fromImageData
AllWin32Tests org.eclipse.swt.tests.win32.Test_org_eclipse_swt_dnd_DND ‑ testImageTransfer_fromImageDataFromImage
AllWin32Tests org.eclipse.swt.tests.win32.Test_org_eclipse_swt_dnd_DND ‑ testRtfTransfer
…

♻️ This comment has been updated with latest results.

@arunjose696 arunjose696 force-pushed the arunjose696/319/fillGradientRectangle branch from 5c3435f to 3035e8f Compare July 4, 2025 14:47
@ShahzaibIbrahim
Copy link
Contributor

The changes made here are similar to this PR about refactoring the DPIUtil. We might be working on the same thing, could you check and confirm?

@arunjose696
Copy link
Contributor Author

The changes made here are similar to this PR about refactoring the DPIUtil. We might be working on the same thing, could you check and confirm?

Yes, the changes are mostly similar. The only additional thing I'm doing is replacing Image constructors that take ImageData with ones that use an ImageDataProvider. I think this change can wait until #2281 is merged

@ShahzaibIbrahim
Copy link
Contributor

@arunjose696 #2281 is merged. You can resolve the conflicts and mark this one as ready for review.

@arunjose696 arunjose696 force-pushed the arunjose696/319/fillGradientRectangle branch from 3035e8f to f497de4 Compare July 15, 2025 15:56
@arunjose696
Copy link
Contributor Author

arunjose696 commented Jul 15, 2025

@arunjose696 #2281 is merged. You can resolve the conflicts and mark this one as ready for review.

Have resolved conflicts

@amartya4256
Copy link
Contributor

@arunjose696 Please adapt the description of the PR in comparison to the new version of the base branch. It's not relevant anymore.

@arunjose696 arunjose696 force-pushed the arunjose696/319/fillGradientRectangle branch from f497de4 to 4513765 Compare July 17, 2025 14:31
fillGradientRectangle()

This PR  refactors the image creation logic in fillGradientRectangle() by using an
ImageDataProvider instead of directly creating ImageData. There is no
visual impact for the changes the behavior should remain as before.
@arunjose696 arunjose696 force-pushed the arunjose696/319/fillGradientRectangle branch from 4513765 to 1cf0759 Compare July 17, 2025 14:32
@arunjose696
Copy link
Contributor Author

@arunjose696 Please adapt the description of the PR in comparison to the new version of the base branch. It's not relevant anymore.

done

@amartya4256
Copy link
Contributor

@arunjose696 Can you provide a snippet with which I could test it? I didn't understand which condition you meant to set false. Is it if (data.gdipGraphics != 0)?

@arunjose696
Copy link
Contributor Author

arunjose696 commented Jul 17, 2025

@arunjose696 Can you provide a snippet with which I could test it? I didn't understand which condition you meant to set false. Is it if (data.gdipGraphics != 0)?

What I meant is that, by replacing the original condition:
if (OS.GetROP2(handle) != OS.R2_XORPEN && OS.GetDeviceCaps(handle, OS.TECHNOLOGY) != OS.DT_RASPRINTER) {
with:
if (false && OS.GetROP2(handle) != OS.R2_XORPEN && OS.GetDeviceCaps(handle, OS.TECHNOLOGY) != OS.DT_RASPRINTER) {
you can force it to run through the changed code.

I had originally linked to a specific line in the file, but that became outdated after the file changed. I wasn't able to provide a proper snippet because I couldn’t determine under what conditions the original check would actually evaluate to false.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

fillGradientRectangle() needs to be refactored
3 participants