The fix looks good to me.

 Thanks,
 Alexandr.

On 24/03/16 13:31, Rajeev Chamyal wrote:

Looks good to me.

Regards,

Rajeev Chamyal

*From:*Avik Niyogi
*Sent:* 24 March 2016 12:54
*To:* Rajeev Chamyal; Alexander Scherbatiy; Sergey Bylokhov; swing-dev@openjdk.java.net *Subject:* Re: <Swing Dev> Review Request of 8137169 : [macosx] Incorrect minimal heigh of JTabbedPane with more tabs

Hi All,

Please review code changes as per inputs received.

http://cr.openjdk.java.net/~aniyogi/8137169/webrev.03 <http://cr.openjdk.java.net/%7Eaniyogi/8137169/webrev.03>

As SCROLL_TAB_LAYOUT is the default layout for Aqua LAF, with implementation within the derived AquaTruncatedTabbedPaneLayout, extending of TabbedPaneScrollLayout is not needed and management of row and column height is done within it itself. Hence preferredTabAreaWidth and preferredTabAreaHeight need not manage the number of columns and rows respectively and will remain 1 as tabs can be brought forth to the UI by the arrow buttons AQUA provides instead of placing them in another row or column. This is also the expected behaviour for AquaLAF as per javadoc.

With Regards,

Avik Niyogi

    On 24-Mar-2016, at 12:34 pm, Rajeev Chamyal
    <rajeev.cham...@oracle.com <mailto:rajeev.cham...@oracle.com>> wrote:

    Hello Avik,

    x variable on line 2195 is not used anywhere. Do we need for loop
    also?

    Regards,

    Rajeev Chamyal

    *From:*Avik Niyogi
    *Sent:*24 March 2016 12:19
    *To:*Alexander Scherbatiy
    *Cc:*Sergey Bylokhov; Rajeev Chamyal; swing-dev@openjdk.java.net
    <mailto:swing-dev@openjdk.java.net>
    *Subject:*Re: <Swing Dev> Review Request of 8137169 : [macosx]
    Incorrect minimal heigh of JTabbedPane with more tabs

    Hi All,

    Please review my code changes below as per the inputs received.

    http://cr.openjdk.java.net/~aniyogi/8137169/webrev.02/
    <http://cr.openjdk.java.net/%7Eaniyogi/8137169/webrev.02/>

    As SCROLL_TAB_LAYOUT is the default layout for Aqua LAF, with
    implementation within the derived AquaTruncatedTabbedPaneLayout,
    extending of TabbedPaneScrollLayout is not needed and management
    of row and column height is done within it itself. Hence
    preferredTabAreaWidth and preferredTabAreaHeight need not manage
    the number of columns and rows respectively and will remain 1 as
    tabs can be brought forth to the UI by the arrow buttons AQUA
    provides instead of placing them in another row or column. This is
    also the expected behaviour for AquaLAF as per javadoc.

    With Regards,

    Avik Niyogi

        On 23-Mar-2016, at 4:14 pm, Alexander Scherbatiy
        <alexandr.scherba...@oracle.com
        <mailto:alexandr.scherba...@oracle.com>> wrote:

        On 23/03/16 14:07, Avik Niyogi wrote:


                On 23-Mar-2016, at 3:31 pm, Alexander Scherbatiy
                <alexandr.scherba...@oracle.com
                <mailto:alexandr.scherba...@oracle.com>> wrote:

                On 21/03/16 09:19, Avik Niyogi wrote:


                    Hi Alexander,

                    I agree with what you said regarding the look and
                    feel looking different. But this bug arrises due
                    to setting of TabbedPaneScrollLayout only. If
                    Scroll Layout is not meant for Aqua look and feel
                    should not the setting of this parameter instead
                    throw a helpful error saying this parameter is not
                    accepted

                  According to the JTabbedPane.setTabLayoutPolicy(int
                tabLayoutPolicy) javadoc:
                  "Some look and feels might only support a subset of
                the possible layout policies, in which case the value
                of this property may be ignored."

                  Aqua L&F ignores WRAP_TAB_LAYOUT for JTabbedPane
                tabs layouting and always use SCROLL_TAB_LAYOUT. No
                exception should be thrown in this case.

            Actually, it is doing the other way around for Aqua L&F.
            It is defaulting WRAP_TAB_LAYOUT and setting
            SCROLL_TAB_LAYOUT is still setting a subclass of
            TabbedPaneLayout and not TabbedPaneScrollLayout.

           According to the JTabbedPane javadoc:
          SCROLL_TAB_LAYOUT: Tab layout policy for providing a subset
        of available tabs when all the tabs will not fit within a
        single run.
          WRAP_TAB_LAYOUT The tab layout policy for wrapping tabs in
        multiple runs when all tabs will not fit within a single run.

           The Aqua L&F uses only AquaTabbedPaneUI and
        AquaTabbedPaneContrastUI for tabbed pane UI and they both
        returns AquaTruncatingTabbedPaneLayout which has been designed
        for to place tabs according to the SCROLL_TAB_LAYOUT.

          Thanks,
          Alexandr.





                  Thanks,
                  Alexandr.



                    instead of absorbing this parameter and letting it
                    render itself into a dummy node which does not
                    proceed further with this parameter? Maybe we need
                    to discuss what the expected behaviour may be.
                    Also, thank you for the inputs regarding how to
                    proceed with removing duplicate code.

                    With Regards,

                    Avik Niyogi

                        On 19-Mar-2016, at 1:52 am, Alexander
                        Scherbatiy <alexandr.scherba...@oracle.com
                        <mailto:alexandr.scherba...@oracle.com>> wrote:


                        I would think about something like:
                        -------------
                            public class TabbedPaneLayout implements
                        LayoutManager {

                                protected int
                        basePreferredTabAreaWidth(final int
                        tabPlacement, final int height) {
                                    // TabbedPaneLayout
                        preferredTabAreaWidth implementation
                                }

                                protected int
                        truncatingPreferredTabAreaWidth(final int
                        tabPlacement, final int height) {
                                    if (tabPlacement ==
                        SwingConstants.LEFT || tabPlacement ==
                        SwingConstants.RIGHT) {
                        return basePreferredTabAreaWidth(tabPlacement,
                        height);
                                    }

                                    return
                        basePreferredTabAreaWidth(tabPlacement, height);
                                }

                                protected int
                        preferredTabAreaWidth(final int tabPlacement,
                        final int height) {
                                    return
                        basePreferredTabAreaWidth(tabPlacement, height);
                                }

                            }

                            class TabbedPaneScrollLayout extends
                        TabbedPaneLayout {
                                @Override
                                protected int
                        basePreferredTabAreaWidth(int tabPlacement,
                        int height) {
                                    // TabbedPaneScrollLayout
                        preferredTabAreaWidth implementation
                                }
                            }

                            protected class
                        AquaTruncatingTabbedPaneLayout extends
                        AquaTabbedPaneCopyFromBasicUI.TabbedPaneLayout {

                                @Override
                                protected int
                        preferredTabAreaWidth(final int tabPlacement,
                        final int height) {
                                    return
                        truncatingPreferredTabAreaWidth(tabPlacement,
                        height);
                                }
                            }

                            protected class
                        AquaTruncatingTabbedScrollPaneLayout extends
                        AquaTabbedPaneCopyFromBasicUI.TabbedPaneScrollLayout
                        {

                                @Override
                                protected int
                        preferredTabAreaWidth(final int tabPlacement,
                        final int height) {
                                    return
                        truncatingPreferredTabAreaWidth(tabPlacement,
                        height);
                                }
                            }
                        -------------

                        I just have one more question. The
                        TabbedPaneScrollLayout is only created in
                        AquaTabbedPaneCopyFromBasicUI. AquaLookAndFeel
                        only use AquaTabbedPaneUI or
                        AquaTabbedPaneContrastUI which do not return
                        TabbedPaneScrollLayout.

                        Are there any real cases when the
                        TabbedPaneScrollLayout is created?

                        When you enabled the
                        AquaTruncatingTabbedScrollPaneLayout in the
                        AquaTabbedPaneUI the JTabbedPane L&F with
                        SCROLL_TAB_LAYOUT does not look similar to
                        Aqua L&F:
                        
http://cr.openjdk.java.net/~alexsch/8137169/aqua-scrolled-tabbed-pane.png
                        
<http://cr.openjdk.java.net/%7Ealexsch/8137169/aqua-scrolled-tabbed-pane.png>

                        The AquaTruncatingTabbedPaneLayout already
                        contains arrows for hidden tabs navigation.
                        May be the fix should update the
                        AquaTruncatingTabbedPaneLayout only?

                        Thanks,
                        Alexandr.

                        On 18/03/16 14:21, Avik Niyogi wrote:

                            Hi Alexander,

                            Thank you for the inputs. I agree with you
                            and did feel the need for removing
                            duplicate code as well. But as per an
                            earlier review input, changes to the super
                            call lay outing is not accepted. This was
                            the only other feasible solution. Created
                            redundant code in this process, but would
                            be maintaining with requirements with code
                            impact to superclasses.

                            Please provide any insight to a probable
                            compensate to mitigate this dichotomy of
                            code expectation. Thank you in advance.

                            With Regards,

                            Avik Niyogi

                                On 18-Mar-2016, at 2:42 pm, Alexander
                                Scherbatiy
                                <alexandr.scherba...@oracle.com
                                <mailto:alexandr.scherba...@oracle.com>>
                                wrote:


                                It is not usually a good idea to have
                                a duplicated code which should be
                                updated every time in several places.

                                Is it possible to move the methods
                                used both in
                                AquaTruncatingTabbedPaneLayout and
                                AquaTruncatingTabbedScrollPaneLayout
                                to TabbedPaneLayout with different
                                names and then reused?

                                Thanks,
                                Alexandr.

                                On 17/03/16 17:17, Avik Niyogi wrote:

                                    Hi Alexander,

                                    The issue only applies for
                                    ScrollingTabbedPane and hence this
                                    fix.

                                    With Regards,

                                    Avik Niyogi

                                        On 16-Mar-2016, at 4:51 pm,
                                        Alexander Scherbatiy
                                        <alexandr.scherba...@oracle.com 
<mailto:alexandr.scherba...@oracle.com>>
                                        wrote:


                                        Does the same issue affects
                                        the AquaTabbedPaneContrastUI?

                                        Thanks,
                                        Alexandr.

                                        On 14/03/16 09:04, Avik Niyogi
                                        wrote:

                                            Hi All,

                                            A gentle reminder, please
                                            review code changes.

                                            With Regards,

                                            Avik Niyogi

                                                On 08-Mar-2016, at
                                                9:51 pm, Avik Niyogi
                                                <avik.niy...@oracle.com 
<mailto:avik.niy...@oracle.com>>
                                                wrote:

                                                Hi All,

                                                Please review code
                                                changes done as with
                                                inputs provided.

                                                
http://cr.openjdk.java.net/~aniyogi/8137169/webrev.01/
                                                
<http://cr.openjdk.java.net/%7Eaniyogi/8137169/webrev.01/>

                                                Also, albeit the title
                                                of issue mentioned is
                                                as above, the
                                                injection of issue
                                                occurs because
                                                
*pane.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);*is
                                                not honoured.

                                                In the new fix as
                                                provided, references
                                                to base class layout
                                                manager is removed in
                                                current solution.

                                                With Regards,

                                                Avik Niyogi

                                                    On 02-Mar-2016, at
                                                    7:50 pm, Alexander
                                                    Potochkin
                                                    
<alexander.potoch...@oracle.com
                                                    
<mailto:alexander.potoch...@oracle.com>>
                                                    wrote:

                                                    Hello Avik

                                                    Let me make it
                                                    clear I don't
                                                    approve the
                                                    proposed fix
                                                    and ask you to do
                                                    additional evaluation.

                                                    Every LookAndFeel
                                                    is different and
                                                    it doesn't make
                                                    much sense
                                                    to compare Metal
                                                    LaF with AquaLaf.

                                                    The AquaLaf mimics
                                                    the native MacOS
                                                    controls and
                                                    therefore look
                                                    quite different
                                                    from any other Lafs.

                                                    The bug you are
                                                    fixing has the
                                                    following subject
                                                    "Incorrect minimal
                                                    heigh of
                                                    JTabbedPane with
                                                    more tabs"

                                                    Could you please
                                                    fix exactly the
                                                    problem with the
                                                    minimal heights,
                                                    without changing
                                                    the UI delegate class.

                                                    Thanks
                                                    alexp

                                                        Gentle
                                                        reminder.
                                                        Please review
                                                        this fix.

                                                            On
                                                            26-Feb-2016,
                                                            at 10:39
                                                            am, Avik
                                                            Niyogi
                                                            
<avik.niy...@oracle.com
                                                            
<mailto:avik.niy...@oracle.com>>
                                                            wrote:

                                                            The issue
                                                            is with
                                                            setting
                                                            of 
TabbedPane*Scroll*Layout()
                                                            for the
                                                            option 
JTabbedPane.SCROLL_TAB_LAYOUT
                                                            as is
                                                            enabled in
                                                            the test code

                                                             
and*not*TabbedPaneLayout()
                                                            as which
                                                            is the
                                                            default.

                                                            The
                                                            minimum
                                                            size fixes
                                                            itself
                                                            because
                                                            
the*ScrollLayout*check
                                                            fails in
                                                            
*setTabLayoutPolicy*()
                                                            for the
                                                            pane. So
                                                            the issue
                                                            is with
                                                            the call
                                                            to set
                                                            layout
                                                            manager.

                                                            There are
                                                            only two
                                                            configurations
                                                            that
                                                            the*JTabbedPane*can
                                                            exist in
                                                            of
                                                            
which*SCROLL_TAB_LAYOUT*is
                                                            one of them.

                                                            Fixing the
                                                            minimum
                                                            size
                                                            
in*AquaTabbedPaneUI*will
                                                            fix it
                                                            
for*TabbedPaneLayout*()
                                                            only which
                                                            is
                                                            
the*WRAP_TAB_LAYOUT*.

                                                            Also, I
                                                            have
                                                            checked
                                                            other
                                                            implementations
                                                            such as
                                                            for
                                                            
*Metal*and*Motif*and*they
                                                            have
                                                            similar
                                                            code for
                                                            doing this
                                                            process*.

                                                            Hence,
                                                            with
                                                            in-depth
                                                            analysis,
                                                            this fix
                                                            has no
                                                            other
                                                            impact
                                                            apart from
                                                            this fix.

                                                            In case
                                                            the impact
                                                            caused by
                                                            this
                                                            change has
                                                            caused
                                                            some
                                                            definitive
                                                            regressions,
                                                            please
                                                            mention
                                                            them so
                                                            they can
                                                            be
                                                            addressed.
                                                            Thank you.

                                                            With Regards,

                                                            Avik Niyogi

                                                                On
                                                                25-Feb-2016,
                                                                at
                                                                6:45
                                                                pm,
                                                                Alexander
                                                                Potochkin
                                                                
<alexander.potoch...@oracle.com
                                                                
<mailto:alexander.potoch...@oracle.com>>
                                                                wrote:

                                                                Hello Avik

                                                                
AquaTruncatingTabbedPaneLayout
                                                                has a
                                                                lot of
                                                                code
                                                                which
                                                                is
                                                                specific
                                                                for
                                                                the
                                                                
AquaTabbedPaneUI.
                                                                I
                                                                don't
                                                                think
                                                                setting the
                                                                layout
                                                                manager from
                                                                the
                                                                base
                                                                class
                                                                is the
                                                                right
                                                                solution
                                                                here.

                                                                If
                                                                there
                                                                is a
                                                                problem with
                                                                minimum size
                                                                it
                                                                should
                                                                be
                                                                fixed
                                                                inside
                                                                the
                                                                AquaTabbedPaneUI

                                                                Thanks
                                                                alexp

                                                                On
                                                                2/24/2016
                                                                12:07,
                                                                Avik
                                                                Niyogi
                                                                wrote:

                                                                    Hi
                                                                    All,

                                                                    Kindly
                                                                    review
                                                                    the bug
                                                                    fix for
                                                                    JDK 9.

                                                                    *Bug:*

                                                                    
https://bugs.openjdk.java.net/browse/JDK-8137169

                                                                    *Webrev:*

                                                                    
http://cr.openjdk.java.net/~aniyogi/8137169/webrev.00/
                                                                    
<http://cr.openjdk.java.net/%7Eaniyogi/8137169/webrev.00/>

                                                                    *Issue:*

                                                                    For Aqua
                                                                    Look&Feel,
                                                                    multiple
                                                                    calls
                                                                    to 
pane.getMinimumSize().height
                                                                    causes
                                                                    incremental
                                                                    return
                                                                    of
                                                                    values.

                                                                    *Cause:*

                                                                    The impact
                                                                    was caused
                                                                    by
                                                                    a
                                                                    major
                                                                    broken
                                                                    code
                                                                    within
                                                                    
AquaTabbedPaneUI.java
                                                                    for 
createLayoutManager()

                                                                    *Fix:*

                                                                    Major
                                                                    linking
                                                                    calls
                                                                    to
                                                                    super
                                                                    class
                                                                    fix done
                                                                    within
                                                                    
createLayoutManager().

                                                                    With
                                                                    Regards,

                                                                    Avik
                                                                    Niyogi


Reply via email to