<AWT Dev> [11] JDK-8195738: scroll poistion in ScrollPane is reset after calling validate()

semyon.sadetsky at oracle.com semyon.sadetsky at oracle.com
Thu Mar 1 17:46:38 UTC 2018


On 3/1/18 9:37 AM, semyon.sadetsky at oracle.com wrote:

> On 2/28/18 8:09 PM, Shashidhara Veerabhadraiah wrote:
>
>> Hi Semyon, It is not getting decreased for the case of 
>> SCROLLBARS_NEVER. The Boolean flags “needsHorz” and “needsVert” are 
>> false for the never case and true for the other cases. We decrease by 
>> the size of the scroll bars only for the true cases, so in the false 
>> case we will use the entire width and height(SM_CXEDGE and SM_CYEDGE).
>>
> Can you clarify this a bit more? I see the next lines executed without 
> any conditions
>
> 215     parentWidth -= (horzBorder * 2);
> 216     parentHeight -= (vertBorder * 2);
I was not right this is just borders.

Looks good to me.

--Semyon
>
> --Semyon
>>
>> Thanks and regards,
>> Shashi
>>
>> *From:*Semyon Sadetsky
>> *Sent:* Thursday, March 1, 2018 12:39 AM
>> *To:* Shashidhara Veerabhadraiah <shashidhara.veerabhadraiah at oracle.com>
>> *Cc:* awt-dev at openjdk.java.net
>> *Subject:* Re: <AWT Dev> [11] JDK-8195738: scroll poistion in 
>> ScrollPane is reset after calling validate()
>>
>> Hi Sashi,
>>
>> The parent with and height shouldn't be decreased by the size of the 
>> scrollbars in case of SCROLLBARS_NEVER.
>>
>> --Semyon
>>
>> On 2/27/2018 12:45 AM, Shashidhara Veerabhadraiah wrote:
>>
>>     Hi Semyon, Thanks for your help. I did some debugging from that
>>     perspective and could find the problem and the solution. Here is
>>     the new webrev, please review it:
>>
>>     http://cr.openjdk.java.net/~sveerabhadra/8195738/webrev.01/
>>     <http://cr.openjdk.java.net/%7Esveerabhadra/8195738/webrev.01/>
>>
>>     The problem was that in the case of SCROLLBARS_NEVER, scroll bar
>>     info was set using setScrollInfo() with SIF_RANGE with ranges
>>     being (0, 0). This forced the windows to pick a default value and
>>     hence reset it to that value every time. Now the logic is
>>     modified in a very similar fashion as the other scroll bar
>>     display modes but without displaying it using the new win api
>>     ShowScrollBar(). The scroll bar info is supplied with a proper
>>     range per the corresponding base component but without the scroll
>>     bar pane size(as we don’t display it). This should suffice a good
>>     range for the scroll bars to operate and correct itself if there
>>     is any out of range value is supplied.
>>
>>     Thanks and regards,
>>     Shashi
>>
>>     *From:*Semyon Sadetsky
>>     *Sent:* Tuesday, February 27, 2018 1:22 AM
>>     *To:* shashidhara veerabhadraiah
>>     <shashidhara.veerabhadraiah at oracle.com>
>>     <mailto:shashidhara.veerabhadraiah at oracle.com>
>>     *Cc:* awt-dev at openjdk.java.net <mailto:awt-dev at openjdk.java.net>
>>     *Subject:* Re: <AWT Dev> [11] JDK-8195738: scroll poistion in
>>     ScrollPane is reset after calling validate()
>>
>>     The bug was failed against Windows platform. So, I'd try to find
>>     the root cause why when the scroll is notified with the scrolled
>>     component size the scroll position is set to the wrong value.
>>
>>     --Semyon
>>
>>     On 02/26/2018 09:51 AM, shashidhara veerabhadraiah wrote:
>>
>>         I think I agree Semyon. Thanks for your detailed explanation.
>>
>>         So how do we approach on this? I see a different behaviour on
>>         other platforms. Shouldn’t we have a common behaviour across
>>         platforms? I agree with your analysis and hence should we
>>         change the behaviour on other platforms so that all of them
>>         will have the same behaviour?
>>
>>         Thanks and regards,
>>
>>         Shashi
>>
>>             On 26-Feb-2018, at 10:17 PM, Semyon Sadetsky
>>             <semyon.sadetsky at oracle.com
>>             <mailto:semyon.sadetsky at oracle.com>> wrote:
>>
>>             On 02/24/2018 05:27 AM, Shashidhara Veerabhadraiah wrote:
>>
>>                 Hi Semyon, Thanks for your review and these questions
>>                 help us to reach the right requirements.
>>
>>                 Without this change, there is different behavior on
>>                 windows compared to Mac/Linux platforms. Hence this
>>                 change is required to make the behavior same across
>>                 the platforms. Since the scroll pane control is not
>>                 displayed for the SCROLLBARS_NEVER case and if not in
>>                 the setScrollPosition() then how can the user can
>>                 move to a different position? Since we used to
>>                 update/recalculate the scroll pane geometry caused
>>                 changes to move to a different position other than
>>                 the setScrollPosition()!! This causes
>>                 SCROLLBARS_NEVER mode as unusable as the user is
>>                 unable to control the scrolling movement because
>>                 neither he can set one setScrollPosition() nor the
>>                 control is displayed to explicitly set the movement.
>>                 Hope this answers your question.
>>
>>             You need to think once again about two facts I brought in
>>             my previous message.
>>
>>             1. User still may scroll using mouse wheel even when
>>             scrollbars are not visible.
>>
>>             2. Visibility of scrollbars doesn't affect the
>>             requirement to notify the scroll about the scrolled
>>             component size changes. If the scrolled component was
>>             500x500 in size and its position in the 200x200 viewport
>>             was (300,300) after the size of the component is changed
>>             to 300x300 it may not be shown at the same position
>>             because the previously visible component area doesn't
>>             exist anymore and the scroll should be moved to
>>             (100,100). This should work in the same way regardless
>>             the selected scrlollbar visibility policy.
>>
>>             --Semyon
>>
>>
>>
>>                 Thanks and regards,
>>                 Shashi
>>
>>                 *From:*Semyon Sadetsky
>>                 *Sent:*Saturday, February 24, 2018 2:12 AM
>>                 *To:*Shashidhara
>>                 Veerabhadraiah<shashidhara.veerabhadraiah at oracle.com>
>>                 <mailto:shashidhara.veerabhadraiah at oracle.com>;awt-dev at openjdk.java.net
>>                 <mailto:awt-dev at openjdk.java.net>
>>                 *Subject:*Re: <AWT Dev> [11] JDK-8195738: scroll
>>                 poistion in ScrollPane is reset after calling validate()
>>
>>                 On 2/23/18 10:57 AM, Shashidhara Veerabhadraiah wrote:
>>
>>                     Hi Semyon, Whenever the container is resized we
>>                     used to update the scroll pane sizes/geometry
>>                     regardless of the scroll bar display policies.
>>                     This resizing make sense for the non
>>                     SCROLLBARS_NEVER cases as the scroll pane is
>>                     displayed or needed an update. This additional
>>                     update posed issues for the SCROLLBARS_NEVER case
>>                     where we are not supposed to display the scroll
>>                     pane per the java doc, then why update?
>>
>>                     Scroll pane geometry gets updated in 2 ways, one
>>                     thro’ setScrollPosition() and childResized(). So
>>                     I derived the conclusion based on the javadoc
>>                     information that since we don’t display the
>>                     scroll pane there is no need to update the scroll
>>                     pane geometry based on the childResized() as it
>>                     was altering the position already set by the
>>                     setScrollPosition(). This behavior is same as the
>>                     other non SCROLLBARS_NEVER mode and setting the
>>                     scroll bar display to SCROLLBARS_NEVER didn’t
>>                     made any difference.
>>
>>                 The only difference of SCROLLBARS_NEVER from others I
>>                 got from javadoc is that the scroll bar controls are
>>                 hidden. So the scrolling itself happens in the same
>>                 way as in the case of visible scroll bars but it can
>>                 be only controlled by mouse wheel or
>>                 programmatically. In my understanding this means that
>>                 the notification about the scrolled component size
>>                 changes should happen in the same way as for all
>>                 other cases. I see no reason for the differentiation
>>                 that your fix introduces. What will happen if to
>>                 remove this notification for visible scroll bars modes?
>>
>>                 --Semyon
>>
>>
>>
>>                     Thanks and regards,
>>                     Shashi
>>
>>                     *From:*Semyon Sadetsky
>>                     *Sent:*Friday, February 23, 2018 10:17 PM
>>                     *To:*Shashidhara
>>                     Veerabhadraiah<shashidhara.veerabhadraiah at oracle.com>
>>                     <mailto:shashidhara.veerabhadraiah at oracle.com>;awt-dev at openjdk.java.net
>>                     <mailto:awt-dev at openjdk.java.net>
>>                     *Subject:*Re: <AWT Dev> [11] JDK-8195738: scroll
>>                     poistion in ScrollPane is reset after calling
>>                     validate()
>>
>>                     On 2/22/18 8:23 PM, Shashidhara Veerabhadraiah wrote:
>>
>>                         Hi Semyon, Thanks for your review comments.
>>
>>                         Here are those different scroll bar pane
>>                         modes and their description:
>>
>>                         *Modifier and Type*
>>
>>                         	
>>
>>                         *Field*
>>
>>                         	
>>
>>                         *Description*
>>
>>                         |static int|
>>
>>                         	
>>
>>                         *SCROLLBARS_ALWAYS
>>                         <https://docs.oracle.com/javase/9/docs/api/java/awt/ScrollPane.html#SCROLLBARS_ALWAYS>*
>>
>>                         	
>>
>>                         Specifies that horizontal/vertical scrollbars
>>                         should always be shown regardless of the
>>                         respective sizes of the scrollpane and child.
>>
>>                         |static int|
>>
>>                         	
>>
>>                         *SCROLLBARS_AS_NEEDED
>>                         <https://docs.oracle.com/javase/9/docs/api/java/awt/ScrollPane.html#SCROLLBARS_AS_NEEDED>*
>>
>>                         	
>>
>>                         Specifies that horizontal/vertical scrollbar
>>                         should be shown only when the size of the
>>                         child exceeds the size of the scrollpane in
>>                         the horizontal/vertical dimension.
>>
>>                         |static int|
>>
>>                         	
>>
>>                         *SCROLLBARS_NEVER
>>                         <https://docs.oracle.com/javase/9/docs/api/java/awt/ScrollPane.html#SCROLLBARS_NEVER>*
>>
>>                         	
>>
>>                         Specifies that horizontal/vertical scrollbars
>>                         should never be shown regardless of the
>>                         respective sizes of the scrollpane and child.
>>
>>                     This javadoc, you've copy-pasted here, doesn't
>>                     explain why in your fix the notification about
>>                     changed child size is disabled for
>>                     SCROLLBARS_NEVER case.
>>
>>                         Thanks and regards,
>>                         Shashi
>>
>>                         *From:*Semyon Sadetsky
>>                         *Sent:*Thursday, February 22, 2018 11:58 PM
>>                         *To:*Shashidhara
>>                         Veerabhadraiah<shashidhara.veerabhadraiah at oracle.com>
>>                         <mailto:shashidhara.veerabhadraiah at oracle.com>;awt-dev at openjdk.java.net
>>                         <mailto:awt-dev at openjdk.java.net>
>>                         *Subject:*Re: <AWT Dev> [11] JDK-8195738:
>>                         scroll poistion in ScrollPane is reset after
>>                         calling validate()
>>
>>                         Hi Shashi,
>>
>>                         Can you clarify what is the principal
>>                         difference between SCROLLBARS_NEVER and other
>>                         scroll policies that requires to avoid
>>                         updating the scroll geometry according to the
>>                         inner component size?
>>
>>                         --Semyon
>>
>>                         On 02/19/2018 11:08 PM, Shashidhara
>>                         Veerabhadraiah wrote:
>>
>>                             Hi All, Please review a code fix for the
>>                             below bug.
>>
>>                             Bug:https://bugs.openjdk.java.net/browse/JDK-8195738
>>
>>                             Webrev:http://cr.openjdk.java.net/~sveerabhadra/8195738/webrev.00/
>>                             <http://cr.openjdk.java.net/%7Esveerabhadra/8195738/webrev.00/>
>>
>>                             Problematic platform: Windows only.
>>
>>                             Summary: This bug occurs only on windows
>>                             platform and whereas the behavior is
>>                             different on Mac/Linux platforms. Now
>>                             after this fix there is common behavior
>>                             across the platforms.
>>
>>                             The main problem was with resetting the
>>                             state of the scroll bars even though the
>>                             scroll bar panes are spawned with
>>                             SCROLLBARS_NEVER as the scroll bar
>>                             display policy. This resetting should not
>>                             occur as the scroll bar display policy
>>                             makes the
>>
>>                             scroll bar panes invisible. Hence except
>>                             the setScrollPosition() calls, we don’t
>>                             need to resize/update the scroll bars
>>                             state upon calling the scroll bars
>>                             validation if SCROLLBARS_NEVER policy is
>>                             used as the scroll bars are not displayed.
>>
>>                             Thanks and regards,
>>                             Shashi
>>
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/awt-dev/attachments/20180301/23be770d/attachment-0001.html>


More information about the awt-dev mailing list