<Swing Dev> [10] RFR JDK-7190581: Nimbus: PgDn at the bottom causes scrolling

Semyon Sadetsky semyon.sadetsky at oracle.com
Thu Jul 27 15:29:55 UTC 2017


Thanks.

The fix looks good to me.

--Semyon

On 07/26/2017 11:08 PM, Prasanta Sadhukhan wrote:
> OK. Here's the webrev with modified testcase
>
> http://cr.openjdk.java.net/~psadhukhan/7190581/webrev.01/
>
> Regards
> Prasanta
> On 7/26/2017 8:21 PM, Semyon Sadetsky wrote:
>> Hi Prasanta,
>>
>> The bug was found on Nimbus L&F but the provided reg test doesn't run 
>> on Nimbus.
>>
>> Can you modify the test to make it testing page scrolling on all 
>> available L&Fs?
>>
>> --Semyon
>>
>>
>> On 07/25/2017 11:52 PM, Prasanta Sadhukhan wrote:
>>> Hi All,
>>>
>>> Please review a fix for an issue where it is seen that pressing 
>>> "Page down" after "ctrl-END" in TextArea causes extra scroll down 
>>> for Nimbus L&F.
>>> ctrl-END is supposed to go the very end of the document and show the 
>>> caret at the end, so any "page down" should not cause any further 
>>> scroll down.
>>>
>>> This was happening because JTextArea uses 
>>> DefaultEditorKit.VerticalPageAction() to execute pagedown/up and
>>> due to container layout a bit different in different l&fs, in 
>>> ViewportLayout.layoutContainer causes "viewSize" to be different as 
>>> set in vp.setViewSize(viewSize);
>>> So, the "initialY" view point as obtained from 
>>> VerticalPageAction#target.getVisibleRect();   is different in Nimbus 
>>> l&f as compared to say, Metal l&f.
>>> When constrainY() is called to ascertain if "initialY" is valid, it 
>>> calculates new Y again [using Math.max(0, target.getHeight() - vis);]
>>> which causes "newVis.y" to be different so 
>>> target.scrollRectToVisible(newVis); at the end with new visual y , 
>>> causes scrolling.
>>>
>>> In other l&f like metal, initialY and newVis.y are same so no 
>>> additional scrolling is seen.
>>>
>>> Proposed fix is to ensure if caret position [obtained from 
>>> target.getCaretPosition()] is same as visible offset,
>>> which means caret is at the end of the document when "page down" is 
>>> pressed after ctrl-END
>>> or
>>> at the start when "page up" is pressed after ctrl-HOME
>>> then correct the newVis.y to prevent additional scrolling.
>>>
>>> Bug: https://bugs.openjdk.java.net/browse/JDK-7190581
>>> webrev: http://cr.openjdk.java.net/~psadhukhan/7190581/webrev.00/
>>>
>>> I have tested with Notepad demo which uses DefaultEditorKit with 
>>> pageup/down actions and also other regression tests which uses 
>>> DefaultEditorKit.
>>>
>>> Regards
>>> Prasanta
>>
>




More information about the swing-dev mailing list