When a textfield is embedded in a TableCellEditor in a JTable in Aqua L&F and 
space is entered and caret moved back and forth by pressing left/right arrow 
button, an artifact is seen, which is basically the caret is not properly 
repainted leaving behind its trails.

When caret is moved, it is repainted every time by "damaging" the area 
surrounding the caret to cause it to be repainted in a new location. AquaCaret 
overrides the default "damage" code to intersect the caret area with the border 
insets so that it does not damage the AquaBorder area..
For TextField case, AquaTextFieldBorder insets is removed from AquaTextField 
and then intersected with AquaCaret to get the dirry region which is then 
repainted, so as to not damage the border but it is done irrespective of 
whether border is shown or not, so proper dirty region is not repainted leaving 
behind artifacts when the caret is moved around...

Fix is to see if border to be painted is not opaque in which case the proper 
dirty region is calculated which is then used in repaint logic to repaint the 
component..

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

Commit messages:
 - jcheck
 - 8268145: [macos] Rendering artifacts is seen when text inside the JTable 
with TableCellEditor having JTextfield

Changes: https://git.openjdk.org/jdk/pull/22416/files
  Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=22416&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8268145
  Stats: 103 lines in 2 files changed: 95 ins; 4 del; 4 mod
  Patch: https://git.openjdk.org/jdk/pull/22416.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/22416/head:pull/22416

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

Reply via email to