package iiuf.swing;
import java.awt.Dimension;
import java.awt.Rectangle;
import java.awt.Insets;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.FontMetrics;
import java.awt.geom.AffineTransform;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.Icon;
import javax.swing.text.View;
import javax.swing.plaf.basic.BasicLabelUI;
import javax.swing.plaf.basic.BasicHTML;
/**
A JLabel UI that does vertical instead of horizontal rendering.<p>
(c) 2001, DIUF<p>
@author $Author: ohitz $
@version $Name: $ $Revision: 1.1 $
*/
public class VerticalLabelUI
extends
BasicLabelUI
{
static {
labelUI = new VerticalLabelUI(false);
}
protected boolean clockwise;
public VerticalLabelUI(boolean clockwise_) {
clockwise = clockwise_;
}
public Dimension getPreferredSize(JComponent c) {
Dimension dim = super.getPreferredSize(c);
return new Dimension(dim.height, dim.width);
}
private static Rectangle paintIconR = new Rectangle();
private static Rectangle paintTextR = new Rectangle();
private static Rectangle paintViewR = new Rectangle();
private static Insets paintViewInsets = new Insets(0, 0, 0, 0);
public void paint(Graphics g, JComponent c) {
JLabel label = (JLabel)c;
String text = label.getText();
Icon icon = label.isEnabled() ? label.getIcon() : label.getDisabledIcon();
if(icon == null && text == null) return;
FontMetrics fm = g.getFontMetrics();
paintViewInsets = c.getInsets(paintViewInsets);
paintViewR.x = paintViewInsets.top;
paintViewR.y = paintViewInsets.left;
paintViewR.width = c.getHeight() - (paintViewInsets.top + paintViewInsets.bottom);
paintViewR.height = c.getWidth() - (paintViewInsets.left + paintViewInsets.right);
paintIconR.x = paintIconR.y = paintIconR.width = paintIconR.height = 0;
paintTextR.x = paintTextR.y = paintTextR.width = paintTextR.height = 0;
String clippedText =
layoutCL(label, fm, text, icon, paintViewR, paintIconR, paintTextR);
Graphics2D g2 = (Graphics2D)g;
AffineTransform tr = g2.getTransform();
if(clockwise) {
g2.rotate(Math.PI / 2);
g2.translate(0, - c.getWidth());
} else {
g2.rotate(-Math.PI / 2);
g2.translate(-c.getHeight(), 0);
}
if (icon != null) {
icon.paintIcon(c, g2, paintIconR.x, paintIconR.y);
}
if (text != null) {
View v = (View) c.getClientProperty(BasicHTML.propertyKey);
if (v != null) {
v.paint(g2, paintTextR);
} else {
int textX = paintTextR.x;
int textY = paintTextR.y + fm.getAscent();
if (label.isEnabled())
paintEnabledText(label, g2, clippedText, textX, textY);
else
paintDisabledText(label, g2, clippedText, textX, textY);
}
}
}
}
/*
$Log: VerticalLabelUI.java,v $
Revision 1.1 2002/07/11 12:09:52 ohitz
Initial checkin
Revision 1.1 2001/02/23 17:25:07 schubige
Added loop source to soundium and fxed some bugs along
*/