TabbedPane: avoid "jumping" tab area when switching L&F or when mouse wheel scrolling to last tab (regression in commit 4ad45088c4)

This commit is contained in:
Karl Tauber
2023-12-31 12:56:43 +01:00
parent 4ad45088c4
commit 97495a6093

View File

@@ -3833,17 +3833,14 @@ debug*/
moreTabsButtonVisible = true; moreTabsButtonVisible = true;
} }
if( useScrollButtons ) { if( useScrollButtons ) {
// layout forward button on trailing side // the tabViewport view size is set in
if( !hideDisabledScrollButtons || forwardButton.isEnabled() ) { // BasicTabbedPaneUI.TabbedPaneScrollLayout.calculateTabRects(),
int buttonWidth = forwardButton.getPreferredSize().width; // which is called from calculateLayoutInfo()
forwardButton.setBounds( leftToRight ? (x + w - buttonWidth) : x, y, buttonWidth, h ); Point viewPosition = tabViewport.getViewPosition();
x += leftToRight ? 0 : buttonWidth; Dimension viewSize = tabViewport.getViewSize();
w -= buttonWidth;
forwardButtonVisible = true;
}
// layout backward button // layout backward button
if( !hideDisabledScrollButtons || backwardButton.isEnabled() ) { if( !hideDisabledScrollButtons || viewPosition.x > 0 ) {
int buttonWidth = backwardButton.getPreferredSize().width; int buttonWidth = backwardButton.getPreferredSize().width;
if( trailingScrollButtons ) { if( trailingScrollButtons ) {
// on trailing side // on trailing side
@@ -3857,6 +3854,15 @@ debug*/
w -= buttonWidth; w -= buttonWidth;
backwardButtonVisible = true; backwardButtonVisible = true;
} }
// layout forward button on trailing side
if( !hideDisabledScrollButtons || viewSize.width - viewPosition.x > w ) {
int buttonWidth = forwardButton.getPreferredSize().width;
forwardButton.setBounds( leftToRight ? (x + w - buttonWidth) : x, y, buttonWidth, h );
x += leftToRight ? 0 : buttonWidth;
w -= buttonWidth;
forwardButtonVisible = true;
}
} }
} }
@@ -3903,16 +3909,14 @@ debug*/
moreTabsButtonVisible = true; moreTabsButtonVisible = true;
} }
if( useScrollButtons ) { if( useScrollButtons ) {
// layout forward button on bottom side // the tabViewport view size is set in
if( !hideDisabledScrollButtons || forwardButton.isEnabled() ) { // BasicTabbedPaneUI.TabbedPaneScrollLayout.calculateTabRects(),
int buttonHeight = forwardButton.getPreferredSize().height; // which is called from calculateLayoutInfo()
forwardButton.setBounds( x, y + h - buttonHeight, w, buttonHeight ); Point viewPosition = tabViewport.getViewPosition();
h -= buttonHeight; Dimension viewSize = tabViewport.getViewSize();
forwardButtonVisible = true;
}
// layout backward button // layout backward button
if( !hideDisabledScrollButtons || backwardButton.isEnabled() ) { if( !hideDisabledScrollButtons || viewPosition.y > 0 ) {
int buttonHeight = backwardButton.getPreferredSize().height; int buttonHeight = backwardButton.getPreferredSize().height;
if( trailingScrollButtons ) { if( trailingScrollButtons ) {
// on bottom side // on bottom side
@@ -3925,6 +3929,14 @@ debug*/
h -= buttonHeight; h -= buttonHeight;
backwardButtonVisible = true; backwardButtonVisible = true;
} }
// layout forward button on bottom side
if( !hideDisabledScrollButtons || viewSize.height - viewPosition.y > h ) {
int buttonHeight = forwardButton.getPreferredSize().height;
forwardButton.setBounds( x, y + h - buttonHeight, w, buttonHeight );
h -= buttonHeight;
forwardButtonVisible = true;
}
} }
} }