Transformed Graphics Demo
This example lets the user rotate, shear and scale text and graphics
arbitrarily.
/****************************************************************************
** $Id: xform.cpp,v 2.9 1998/06/16 11:39:35 warwick Exp $
**
** Copyright (C) 1992-1998 Troll Tech 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.
**
*****************************************************************************/
#include <qapplication.h>
#include <qdialog.h>
#include <qlabel.h>
#include <qlineedit.h>
#include <qpushbutton.h>
#include <qcheckbox.h>
#include <qradiobutton.h>
#include <qbuttongroup.h>
#include <qlcdnumber.h>
#include <qslider.h>
#include <qmenubar.h>
#include <qpainter.h>
#include <qpixmap.h>
#include <stdlib.h>
class FontSelect;
class XFormControl : public QFrame
{
Q_OBJECT
public:
XFormControl( QWidget *parent=0, const char *name=0 );
~XFormControl() {}
signals:
void newMatrix( QWMatrix );
void newText( const char * );
void newFont( const QFont & );
void newMode( bool image );
private slots:
void newMtx();
void selectFont();
void selectFontDestroyed();
void fontSelected( const QFont & );
void toggleMode();
private:
QSlider *rotS; // Rotation angle scroll bar
QSlider *shearS; // Shear value scroll bar
QSlider *magS; // Magnification value scroll bar
QLCDNumber *rotLCD; // Rotation angle LCD display
QLCDNumber *shearLCD; // Shear value LCD display
QLCDNumber *magLCD; // Magnification value LCD display
QCheckBox *mirror; // Checkbox for mirror image on/of
QLineEdit *textEd; // Inp[ut field for xForm text
QPushButton *f; // Select font push button
QCheckBox *imgCheckBox; // Check box for image on/off
FontSelect *fs; // font select dialog box
bool fsUp; // TRUE if font select is visible
};
/*
ShowXForm displays a text or a pixmap (QPixmap) using a coordinate
transformation matrix (QWMatrix)
*/
class ShowXForm : public QWidget
{
Q_OBJECT
public:
ShowXForm( QWidget *parent=0, const char *name=0 );
~ShowXForm() {}
void showIt(); // (Re)displays text or pixmap
bool pixmapMode() const { return usingPixmap; }
public slots:
void setText( const char* );
void setMatrix( QWMatrix );
void setFont( const QFont &f );
void setPixmap( QPixmap );
void setPixmapMode( bool b );
private:
void paintEvent( QPaintEvent * );
void resizeEvent( QResizeEvent * );
QString text; // text to be displayed
QWMatrix mtx; // coordinate transform matrix
QPixmap pix; // pixmap to be displayed
bool usingPixmap; // TRUE if pix is being displayed
QRect eraseRect; // covers last displayed text/pixmap
};
class FontSelect : public QDialog
{
Q_OBJECT
public:
FontSelect( QWidget *parent=0, const char *name=0 );
private slots:
void newStrikeOut();
void doFont();
void newUnderline();
void newItalic();
void newWeight( int id );
void newFamily();
void newSize( int );
void slidingSize( int );
void doApply();
void familyActivated( int );
void pSizeActivated( int );
signals:
void newFont( const QFont & );
protected:
void updateMetrics();
private:
QLabel *familyL;
QLabel *sizeL;
QLineEdit *family;
QLineEdit *sizeE;
QCheckBox *italic;
QCheckBox *underline;
QCheckBox *strikeOut;
QPushButton *apply;
QPushButton *stat;
QSlider *sizeS;
QRadioButton *rb[5];
QButtonGroup *weight;
QGroupBox *mGroup;
QFont f;
QMenuBar *menu;
QLabel *metrics[4][2];
QWidget *fontInternal;
};
XFormControl::XFormControl( QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.QWidget *parent pm = pm.