Qt logo

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.