// Path: src/main/java/org/sexydock/SwingUtils.java
// public class SwingUtils
// {
// 	public static void doSwing( Runnable r )
// 	{
// 		if( SwingUtilities.isEventDispatchThread( ) )
// 		{
// 			r.run( );
// 		}
// 		else
// 		{
// 			try
// 			{
// 				SwingUtilities.invokeAndWait( r );
// 			}
// 			catch( InvocationTargetException e )
// 			{
// 				throw new RuntimeException( e );
// 			}
// 			catch( InterruptedException e )
// 			{
// 				throw new RuntimeException( e );
// 			}
// 		}
// 	}
// 	
// 	public static JTabbedPane getJTabbedPaneAncestor( Component c )
// 	{
// 		while( c != null )
// 		{
// 			if( c instanceof JTabbedPane )
// 			{
// 				return ( JTabbedPane ) c;
// 			}
// 			c = c.getParent( );
// 		}
// 		return null;
// 	}
// 	
// 	public static JhromeTabbedPaneUI getJTabbedPaneAncestorUI( Component c )
// 	{
// 		JTabbedPane tabbedPane = getJTabbedPaneAncestor( c );
// 		if( tabbedPane != null && tabbedPane.getUI( ) instanceof JhromeTabbedPaneUI )
// 		{
// 			return ( JhromeTabbedPaneUI ) tabbedPane.getUI( );
// 		}
// 		return null;
// 	}
// }
// 
// Path: src/main/java/org/sexydock/tabs/jhrome/JhromeNewTabButtonBorder.java
// public static class Attributes
// {
// 	public float	slant			= 4.5f;
// 		
// 	public Color	fillColor		= new Color( 255 , 255 , 255 , 48 );
// 	public Color	borderColor		= JhromeTabBorderAttributes.UNSELECTED_BORDER.outlineColor;
// 	public Stroke	borderStroke	= JhromeTabBorderAttributes.UNSELECTED_BORDER.outlineStroke;
// 		
// 	public Attributes( )
// 	{
// 			
// 	}
// 		
// 	public Attributes( Attributes other )
// 	{
// 		copy( other );
// 	}
// 		
// 	public void copy( Attributes other )
// 	{
// 		slant = other.slant;
// 		fillColor = other.fillColor;
// 		borderColor = other.borderColor;
// 		borderStroke = other.borderStroke;
// 	}
// 		
// 	@Override
// 	public Attributes clone( )
// 	{
// 		return new Attributes( this );
// 	}
// 		
// 	public void interpolateColors( Attributes a , Attributes b , float f )
// 	{
// 		borderColor = Utils.interpolate( a.borderColor , b.borderColor , f );
// 		fillColor = Utils.interpolate( a.fillColor , b.fillColor , f );
// 	}
// }


import java.awt.RenderingHints;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.geom.Path2D;
import java.awt.image.BufferedImage;
import javax.swing.AbstractButton;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JComponent;
import javax.swing.JTabbedPane;
import javax.swing.plaf.basic.BasicButtonUI;
import org.sexydock.SwingUtils;
import org.sexydock.tabs.jhrome.JhromeNewTabButtonBorder.Attributes;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;

		if( tabbedPane != null )
		{
			border.flip = tabbedPane.getTabPlacement( ) == JTabbedPane.BOTTOM || tabbedPane.getTabPlacement( ) == JTabbedPane.RIGHT;
		}
		if( button.getModel( ).isPressed( ) )
		{
			border.attrs.copy( JhromeNewTabButtonBorder.PRESSED_ATTRIBUTES );
			highlightTimer.stop( );
		}
		else
		{
			float targetHighlight = button.getModel( ).isRollover( ) ? 1 : 0;
			if( highlight != targetHighlight )
			{
				highlight = animate( highlight , targetHighlight );
				highlightTimer.start( );
			}
			else
			{
				highlightTimer.stop( );
			}
			border.attrs.copy( JhromeNewTabButtonBorder.UNSELECTED_ATTRIBUTES );
			border.attrs.interpolateColors( JhromeNewTabButtonBorder.UNSELECTED_ATTRIBUTES , JhromeNewTabButtonBorder.ROLLOVER_ATTRIBUTES , highlight );
		}
	}
	
	public static Icon createNewTabButtonIcon( )
	{
		BufferedImage image = new BufferedImage( 10 , 10 , BufferedImage.TYPE_INT_ARGB );
		Path2D path = new Path2D.Double( );

// Path: src/main/java/org/sexydock/SwingUtils.java
// public class SwingUtils
// {
// 	public static void doSwing( Runnable r )
// 	{
// 		if( SwingUtilities.isEventDispatchThread( ) )
// 		{
// 			r.run( );
// 		}
// 		else
// 		{
// 			try
// 			{
// 				SwingUtilities.invokeAndWait( r );
// 			}
// 			catch( InvocationTargetException e )
// 			{
// 				throw new RuntimeException( e );
// 			}
// 			catch( InterruptedException e )
// 			{
// 				throw new RuntimeException( e );
// 			}
// 		}
// 	}
// 	
// 	public static JTabbedPane getJTabbedPaneAncestor( Component c )
// 	{
// 		while( c != null )
// 		{
// 			if( c instanceof JTabbedPane )
// 			{
// 				return ( JTabbedPane ) c;
// 			}
// 			c = c.getParent( );
// 		}
// 		return null;
// 	}
// 	
// 	public static JhromeTabbedPaneUI getJTabbedPaneAncestorUI( Component c )
// 	{
// 		JTabbedPane tabbedPane = getJTabbedPaneAncestor( c );
// 		if( tabbedPane != null && tabbedPane.getUI( ) instanceof JhromeTabbedPaneUI )
// 		{
// 			return ( JhromeTabbedPaneUI ) tabbedPane.getUI( );
// 		}
// 		return null;
// 	}
// }
// 
// Path: src/main/java/org/sexydock/tabs/jhrome/JhromeNewTabButtonBorder.java
// public static class Attributes
// {
// 	public float	slant			= 4.5f;
// 		
// 	public Color	fillColor		= new Color( 255 , 255 , 255 , 48 );
// 	public Color	borderColor		= JhromeTabBorderAttributes.UNSELECTED_BORDER.outlineColor;
// 	public Stroke	borderStroke	= JhromeTabBorderAttributes.UNSELECTED_BORDER.outlineStroke;
// 		
// 	public Attributes( )
// 	{
// 			
// 	}
// 		
// 	public Attributes( Attributes other )
// 	{
// 		copy( other );
// 	}
// 		
// 	public void copy( Attributes other )
// 	{
// 		slant = other.slant;
// 		fillColor = other.fillColor;
// 		borderColor = other.borderColor;
// 		borderStroke = other.borderStroke;
// 	}
// 		
// 	@Override
// 	public Attributes clone( )
// 	{
// 		return new Attributes( this );
// 	}
// 		
// 	public void interpolateColors( Attributes a , Attributes b , float f )
// 	{
// 		borderColor = Utils.interpolate( a.borderColor , b.borderColor , f );
// 		fillColor = Utils.interpolate( a.fillColor , b.fillColor , f );
// 	}
// }


// Path: src/main/java/org/sexydock/tabs/jhrome/JhromeNewTabButtonUI.java
import java.awt.RenderingHints;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.geom.Path2D;
import java.awt.image.BufferedImage;
import javax.swing.AbstractButton;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JComponent;
import javax.swing.JTabbedPane;
import javax.swing.plaf.basic.BasicButtonUI;
import org.sexydock.SwingUtils;
import org.sexydock.tabs.jhrome.JhromeNewTabButtonBorder.Attributes;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;

		if( tabbedPane != null )
		{
			border.flip = tabbedPane.getTabPlacement( ) == JTabbedPane.BOTTOM || tabbedPane.getTabPlacement( ) == JTabbedPane.RIGHT;
		}
		if( button.getModel( ).isPressed( ) )
		{
			border.attrs.copy( JhromeNewTabButtonBorder.PRESSED_ATTRIBUTES );
			highlightTimer.stop( );
		}
		else
		{
			float targetHighlight = button.getModel( ).isRollover( ) ? 1 : 0;
			if( highlight != targetHighlight )
			{
				highlight = animate( highlight , targetHighlight );
				highlightTimer.start( );
			}
			else
			{
				highlightTimer.stop( );
			}
			border.attrs.copy( JhromeNewTabButtonBorder.UNSELECTED_ATTRIBUTES );
			border.attrs.interpolateColors( JhromeNewTabButtonBorder.UNSELECTED_ATTRIBUTES , JhromeNewTabButtonBorder.ROLLOVER_ATTRIBUTES , highlight );
		}
	}
	
	public static Icon createNewTabButtonIcon( )
	{
		BufferedImage image = new BufferedImage( 10 , 10 , BufferedImage.TYPE_INT_ARGB );
		Path2D path = new Path2D.Double( );

		path.moveTo( 3 , 0 );
