You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdebindings/qtjava/javalib/examples/qfd/FontDisplayer.java

168 lines
4.0 KiB

/***************************************************************************
* $Id$
**
* Copyright (C) 1992-2000 Trolltech AS. All rights reserved.
**
* This file is part of an example program for Qt. This example
* program may be used, distributed and modified without limitation.
**
****************************************************************************/
import org.trinitydesktop.qt.*;
import java.math.*;
class FontDisplayer extends TQMainWindow {
class FontRowTable extends TQFrame {
private TQFont tablefont;
private int row;
FontRowTable( TQWidget parent )
{
this(parent, null);
}
FontRowTable( TQWidget parent, String name )
{
super(parent,name);
setBackgroundMode(PaletteBase);
setFrameStyle(Panel|Sunken);
setMargin(8);
setRow(0);
tablefont = TQApplication.font();
}
public TQSize sizeHint()
{
return new TQSize( 16*cellSize().width()+2*(margin()+frameWidth()),
16*cellSize().height()+2*(margin()+frameWidth()) );
}
TQSize cellSize()
{
TQFontMetrics fm = fontMetrics();
return new TQSize( fm.maxWidth(), fm.lineSpacing()+1 );
}
protected void paintEvent( TQPaintEvent e )
{
super.paintEvent(e);
System.out.println("In paintEvent");
TQPainter p = new TQPainter(this);
p.setClipRegion(e.region());
TQRect r = e.rect();
TQFontMetrics fm = fontMetrics();
int ml = frameWidth()+margin() + 1 + (-fm.minLeftBearing() > 0 ? -fm.minLeftBearing() : 0);
int mt = frameWidth()+margin();
TQSize cell = new TQSize((width()-15-ml)/16,(height()-15-mt)/16);
if ( cell.width() == 0 || cell.height() == 0 )
return;
int mini = r.left() / cell.width();
int maxi = (r.right()+cell.width()-1) / cell.width();
int minj = r.top() / cell.height();
int maxj = (r.bottom()+cell.height()-1) / cell.height();
int h = fm.height();
TQColor body = new TQColor(255,255,192);
TQColor negative = new TQColor(255,192,192);
TQColor positive = new TQColor(192,192,255);
TQColor rnegative = new TQColor(255,128,128);
TQColor rpositive = new TQColor(128,128,255);
for (int j = minj; j<=maxj; j++) {
for (int i = mini; i<=maxi; i++) {
if ( i < 16 && j < 16 ) {
int x = i * cell.width();
int y = j* cell.height();
char ch = (char) ((j*16+i) + (row*256));
if ( fm.inFont(ch) ) {
int w = fm.width(ch);
int lb = fm.leftBearing(ch);
int rb = fm.rightBearing(ch);
x += ml;
y += mt+h;
p.fillRect(x,y,w,-h,new TQBrush(body));
if ( w != 0) {
if ( lb != 0 ) {
p.fillRect(x+(lb>0?0:lb), y-h/2, Math.abs(lb),-h/2,
new TQBrush(lb < 0 ? negative : positive));
}
if ( rb != 0) {
p.fillRect(x+w-(rb>0?rb:0),y+2, Math.abs(rb),-h/2,
new TQBrush(rb < 0 ? rnegative : rpositive));
}
}
String s = "";
s += ch;
p.setPen(new TQPen(Qt.black()));
p.drawText(x,y,s);
}
}
}
}
p.end();
}
void setRow(int r)
{
row = r;
TQFontMetrics fm = fontMetrics();
String str = "mLB=" + fm.minLeftBearing() +
" mRB=" + fm.minRightBearing() +
" mW=" + fm.maxWidth();
emit("fontInformation", str);
update();
}
void chooseFont()
{
boolean[] ok = { true };
TQFont oldfont = tablefont;
tablefont = TQFontDialog.getFont(ok, oldfont, this);
if (ok[0])
setFont(tablefont);
else
tablefont = oldfont;
}
}
FontDisplayer( )
{
this(null, null);
}
FontDisplayer( TQWidget parent, String name )
{
super(parent,name);
FontRowTable table = new FontRowTable(this);
TQToolBar controls = new TQToolBar(this);
new TQLabel(tr("Row:"), controls);
TQSpinBox row = new TQSpinBox(0,255,1,controls);
controls.addSeparator();
TQPushButton fontbutton = new TQPushButton(tr("Font..."), controls);
connect(row,TQ_SIGNAL("valueChanged(int)"),table,TQ_SLOT("setRow(int)"));
connect(fontbutton, TQ_SIGNAL("clicked()"), table, TQ_SLOT("chooseFont()"));
connect(table,TQ_SIGNAL("fontInformation(String)"),
statusBar(),TQ_SLOT("message(String)"));
table.setRow(0);
setCentralWidget(table);
}
}