mirror of
https://github.com/JFormDesigner/FlatLaf.git
synced 2026-02-13 07:17:13 -06:00
TabbedPane: fixed clipping title if "more tabs" button is used (issue #40)
This commit is contained in:
@@ -71,6 +71,7 @@ import javax.swing.text.View;
|
|||||||
import com.formdev.flatlaf.FlatLaf;
|
import com.formdev.flatlaf.FlatLaf;
|
||||||
import com.formdev.flatlaf.util.Animator;
|
import com.formdev.flatlaf.util.Animator;
|
||||||
import com.formdev.flatlaf.util.CubicBezierEasing;
|
import com.formdev.flatlaf.util.CubicBezierEasing;
|
||||||
|
import com.formdev.flatlaf.util.JavaCompatibility;
|
||||||
import com.formdev.flatlaf.util.UIScale;
|
import com.formdev.flatlaf.util.UIScale;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -497,6 +498,20 @@ public class FlatTabbedPaneUI
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// clip title if "more tabs" button is used
|
||||||
|
// (normally this is done by invoker, but fails in this case)
|
||||||
|
if( hiddenTabsNavigation == MORE_TABS_BUTTON &&
|
||||||
|
tabViewport != null &&
|
||||||
|
(tabPlacement == TOP || tabPlacement == BOTTOM) )
|
||||||
|
{
|
||||||
|
Rectangle viewRect = tabViewport.getViewRect();
|
||||||
|
viewRect.width -= 4; // subtract width of cropped edge
|
||||||
|
if( !viewRect.contains( textRect ) ) {
|
||||||
|
Rectangle r = viewRect.intersection( textRect );
|
||||||
|
title = JavaCompatibility.getClippedString( null, metrics, title, r.width );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// plain text
|
// plain text
|
||||||
Color color;
|
Color color;
|
||||||
if( tabPane.isEnabled() && tabPane.isEnabledAt( tabIndex ) ) {
|
if( tabPane.isEnabled() && tabPane.isEnabledAt( tabIndex ) ) {
|
||||||
|
|||||||
@@ -16,6 +16,7 @@
|
|||||||
|
|
||||||
package com.formdev.flatlaf.util;
|
package com.formdev.flatlaf.util;
|
||||||
|
|
||||||
|
import java.awt.FontMetrics;
|
||||||
import java.awt.Graphics;
|
import java.awt.Graphics;
|
||||||
import java.awt.Graphics2D;
|
import java.awt.Graphics2D;
|
||||||
import java.lang.reflect.InvocationTargetException;
|
import java.lang.reflect.InvocationTargetException;
|
||||||
@@ -27,7 +28,7 @@ import com.formdev.flatlaf.FlatLaf;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Provides Java version compatibility methods.
|
* Provides Java version compatibility methods.
|
||||||
*
|
* <p>
|
||||||
* WARNING: This is private API and may change.
|
* WARNING: This is private API and may change.
|
||||||
*
|
*
|
||||||
* @author Karl Tauber
|
* @author Karl Tauber
|
||||||
@@ -35,10 +36,12 @@ import com.formdev.flatlaf.FlatLaf;
|
|||||||
public class JavaCompatibility
|
public class JavaCompatibility
|
||||||
{
|
{
|
||||||
private static Method drawStringUnderlineCharAtMethod;
|
private static Method drawStringUnderlineCharAtMethod;
|
||||||
|
private static Method getClippedStringMethod;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Java 8: sun.swing.SwingUtilities2.drawStringUnderlineCharAt( JComponent c,
|
* Java 8: sun.swing.SwingUtilities2.drawStringUnderlineCharAt( JComponent c,
|
||||||
* Graphics g, String text, int underlinedIndex, int x, int y )
|
* Graphics g, String text, int underlinedIndex, int x, int y )
|
||||||
|
* <br>
|
||||||
* Java 9: javax.swing.plaf.basic.BasicGraphicsUtils.drawStringUnderlineCharAt( JComponent c,
|
* Java 9: javax.swing.plaf.basic.BasicGraphicsUtils.drawStringUnderlineCharAt( JComponent c,
|
||||||
* Graphics2D g, String string, int underlinedIndex, float x, float y )
|
* Graphics2D g, String string, int underlinedIndex, float x, float y )
|
||||||
*/
|
*/
|
||||||
@@ -71,4 +74,37 @@ public class JavaCompatibility
|
|||||||
throw new RuntimeException( ex );
|
throw new RuntimeException( ex );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Java 8: sun.swing.SwingUtilities2.clipStringIfNecessary( JComponent c,
|
||||||
|
* FontMetrics fm, String string, int availTextWidth )
|
||||||
|
* <br>
|
||||||
|
* Java 9: javax.swing.plaf.basic.BasicGraphicsUtils.getClippedString( JComponent c,
|
||||||
|
* FontMetrics fm, String string, int availTextWidth )
|
||||||
|
*/
|
||||||
|
public static String getClippedString( JComponent c, FontMetrics fm, String string, int availTextWidth ) {
|
||||||
|
synchronized( JavaCompatibility.class ) {
|
||||||
|
if( getClippedStringMethod == null ) {
|
||||||
|
try {
|
||||||
|
Class<?> cls = Class.forName( SystemInfo.isJava_9_orLater
|
||||||
|
? "javax.swing.plaf.basic.BasicGraphicsUtils"
|
||||||
|
: "sun.swing.SwingUtilities2" );
|
||||||
|
getClippedStringMethod = cls.getMethod( SystemInfo.isJava_9_orLater
|
||||||
|
? "getClippedString"
|
||||||
|
: "clipStringIfNecessary",
|
||||||
|
new Class[] { JComponent.class, FontMetrics.class, String.class, int.class } );
|
||||||
|
} catch( Exception ex ) {
|
||||||
|
Logger.getLogger( FlatLaf.class.getName() ).log( Level.SEVERE, null, ex );
|
||||||
|
throw new RuntimeException( ex );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
return (String) getClippedStringMethod.invoke( null, c, fm, string, availTextWidth );
|
||||||
|
} catch( IllegalAccessException | IllegalArgumentException | InvocationTargetException ex ) {
|
||||||
|
Logger.getLogger( FlatLaf.class.getName() ).log( Level.SEVERE, null, ex );
|
||||||
|
throw new RuntimeException( ex );
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user