<Swing Dev> Review Request of 8137169 : [macosx] Incorrect minimal heigh of JTabbedPane with more tabs
Alexander Scherbatiy
alexandr.scherbatiy at oracle.com
Tue Mar 29 13:53:52 UTC 2016
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 at 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.chamyal at oracle.com <mailto:rajeev.chamyal at 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 at openjdk.java.net
> <mailto:swing-dev at 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.scherbatiy at oracle.com
> <mailto:alexandr.scherbatiy at oracle.com>> wrote:
>
> On 23/03/16 14:07, Avik Niyogi wrote:
>
>
> On 23-Mar-2016, at 3:31 pm, Alexander Scherbatiy
> <alexandr.scherbatiy at oracle.com
> <mailto:alexandr.scherbatiy at 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.scherbatiy at oracle.com
> <mailto:alexandr.scherbatiy at 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.scherbatiy at oracle.com
> <mailto:alexandr.scherbatiy at 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.scherbatiy at oracle.com <mailto:alexandr.scherbatiy at 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.niyogi at oracle.com <mailto:avik.niyogi at 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.potochkin at oracle.com
> <mailto:alexander.potochkin at 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.niyogi at oracle.com
> <mailto:avik.niyogi at 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.potochkin at oracle.com
> <mailto:alexander.potochkin at 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
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/swing-dev/attachments/20160329/9389b969/attachment.html>
More information about the swing-dev
mailing list