summaryrefslogtreecommitdiffstats
path: root/examples/qfd/fontdisplayer.cpp
diff options
context:
space:
mode:
authorTimothy Pearson <[email protected]>2011-07-10 15:24:15 -0500
committerTimothy Pearson <[email protected]>2011-07-10 15:24:15 -0500
commitbd0f3345a938b35ce6a12f6150373b0955b8dd12 (patch)
tree7a520322212d48ebcb9fbe1087e7fca28b76185c /examples/qfd/fontdisplayer.cpp
downloadqt3-bd0f3345a938b35ce6a12f6150373b0955b8dd12.tar.gz
qt3-bd0f3345a938b35ce6a12f6150373b0955b8dd12.zip
Add Qt3 development HEAD version
Diffstat (limited to 'examples/qfd/fontdisplayer.cpp')
-rw-r--r--examples/qfd/fontdisplayer.cpp155
1 files changed, 155 insertions, 0 deletions
diff --git a/examples/qfd/fontdisplayer.cpp b/examples/qfd/fontdisplayer.cpp
new file mode 100644
index 0000000..0e67bee
--- /dev/null
+++ b/examples/qfd/fontdisplayer.cpp
@@ -0,0 +1,155 @@
+/****************************************************************************
+**
+** Copyright (C) 1992-2008 Trolltech ASA. All rights reserved.
+**
+** This file is part of an example program for Qt. This example
+** program may be used, distributed and modified without limitation.
+**
+*****************************************************************************/
+
+#include "fontdisplayer.h"
+#include <qapplication.h>
+#include <qslider.h>
+#include <qspinbox.h>
+#include <qpainter.h>
+#include <qtoolbar.h>
+#include <qstatusbar.h>
+#include <qlabel.h>
+#include <qpushbutton.h>
+#include <qfontdialog.h>
+#include <stdlib.h>
+
+
+FontRowTable::FontRowTable( QWidget* parent, const char* name ) :
+ QFrame(parent,name)
+{
+ setBackgroundMode(PaletteBase);
+ setFrameStyle(Panel|Sunken);
+ setMargin(8);
+ setRow(0);
+ tablefont = QApplication::font();
+}
+
+QSize FontRowTable::sizeHint() const
+{
+ return 24*cellSize()+QSize(2,2)*(margin()+frameWidth());
+}
+
+QSize FontRowTable::cellSize() const
+{
+ QFontMetrics fm = fontMetrics();
+ return QSize( fm.maxWidth(), fm.lineSpacing()+1 );
+}
+
+void FontRowTable::paintEvent( QPaintEvent* e )
+{
+ QFrame::paintEvent(e);
+ QPainter p(this);
+ p.setClipRegion(e->region());
+ QRect r = e->rect();
+ QFontMetrics fm = fontMetrics();
+ int ml = frameWidth()+margin() + 1 + QMAX(0,-fm.minLeftBearing());
+ int mt = frameWidth()+margin();
+ QSize cell((width()-15-ml)/16,(height()-15-mt)/16);
+
+ if ( !cell.width() || !cell.height() )
+ 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();
+
+ QColor body(255,255,192);
+ QColor negative(255,192,192);
+ QColor positive(192,192,255);
+ QColor rnegative(255,128,128);
+ QColor rpositive(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();
+
+ QChar ch = QChar(j*16+i,row);
+
+ if ( fm.inFont(ch) ) {
+ int w = fm.width(ch);
+ int l = fm.leftBearing(ch);
+ int r = fm.rightBearing(ch);
+
+ x += ml;
+ y += mt+h;
+
+ p.fillRect(x,y,w,-h,body);
+ if ( w ) {
+ if ( l ) {
+ p.fillRect(x+(l>0?0:l), y-h/2, abs(l),-h/2,
+ l < 0 ? negative : positive);
+ }
+ if ( r ) {
+ p.fillRect(x+w-(r>0?r:0),y+2, abs(r),-h/2,
+ r < 0 ? rnegative : rpositive);
+ }
+ }
+ QString s;
+ s += ch;
+ p.setPen(QPen(Qt::black));
+ p.drawText(x,y,s);
+ }
+ }
+ }
+ }
+}
+
+void FontRowTable::setRow(int r)
+{
+ row = r;
+
+ QFontMetrics fm = fontMetrics();
+ QFontInfo fi = fontInfo();
+ QString str = QString("%1 %2pt%3%4 mLB=%5 mRB=%6 mW=%7")
+ .arg(fi.family())
+ .arg(fi.pointSize())
+ .arg(fi.bold() ? " bold" : "")
+ .arg(fi.italic() ? " italic" : "")
+ .arg(fm.minLeftBearing())
+ .arg(fm.minRightBearing())
+ .arg(fm.maxWidth());
+
+ emit fontInformation(str);
+ update();
+}
+
+void FontRowTable::chooseFont()
+{
+ bool ok;
+ QFont oldfont = tablefont;
+ tablefont = QFontDialog::getFont(&ok, oldfont, this);
+
+ if (ok)
+ setFont(tablefont);
+ else
+ tablefont = oldfont;
+}
+
+FontDisplayer::FontDisplayer( QWidget* parent, const char* name ) :
+ QMainWindow(parent,name)
+{
+ FontRowTable* table = new FontRowTable(this);
+ QToolBar* controls = new QToolBar(this);
+ (void) new QLabel(tr("Row:"), controls);
+ QSpinBox *row = new QSpinBox(0,255,1,controls);
+ controls->addSeparator();
+ QPushButton *fontbutton = new QPushButton(tr("Font..."), controls);
+
+ connect(row,SIGNAL(valueChanged(int)),table,SLOT(setRow(int)));
+ connect(fontbutton, SIGNAL(clicked()), table, SLOT(chooseFont()));
+ connect(table,SIGNAL(fontInformation(const QString&)),
+ statusBar(),SLOT(message(const QString&)));
+ table->setRow(0);
+ setCentralWidget(table);
+}