home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / qt3_emx.zip / examples / tablet / tabletstats.cpp < prev    next >
C/C++ Source or Header  |  2001-10-11  |  5KB  |  177 lines

  1. /****************************************************************************
  2. ** $Id:  qt/tabletstats.cpp   3.0.0   edited Jul 27 17:01 $
  3. **
  4. ** Copyright ( C ) 1992-2001 Trolltech AS.  All rights reserved.
  5. **
  6. ** This file is part of an example program for Qt.  This example
  7. ** program may be used, distributed and modified without limitation.
  8. **
  9. *****************************************************************************/
  10.  
  11. #include <qlabel.h>
  12. #include <qlayout.h>
  13. #include <qpainter.h>
  14. #include <math.h>
  15.  
  16. #include "tabletstats.h"
  17.  
  18. MyOrientation::MyOrientation( QWidget *parent, const char *name )
  19.     : QFrame( parent, name, WRepaintNoErase )
  20. {
  21. //    QSizePolicy mySize( QSizePolicy::Minimum, QSizePolicy::Expanding );
  22. //    setSizePolicy( mySize );
  23.     setFrameStyle( QFrame::Box | QFrame::Sunken );
  24. }
  25.  
  26. MyOrientation::~MyOrientation()
  27. {
  28. }
  29.  
  30. void MyOrientation::newOrient( int tiltX, int tiltY )
  31. {    
  32.     double PI = 3.14159265359;
  33.     int realWidth,
  34.         realHeight,
  35.         hypot,    // a faux hypoteneus, to mess with calculations
  36.         shaX,
  37.     shaY;
  38.     static int oldX = 0,
  39.            oldY = 0;
  40.     realWidth = width() - 2 * frameWidth();
  41.     realHeight = height() - 2 * frameWidth();
  42.  
  43.     
  44.  
  45.     QRect cr( 0 + frameWidth(), 0 + frameWidth(), realWidth, realHeight );
  46.     QPixmap pix( cr.size() );
  47.     pix.fill( this, cr.topLeft() );
  48.     QPainter p( &pix );
  49.     
  50.     if ( realWidth > realHeight )
  51.     hypot = realHeight / 2;
  52.     else
  53.     hypot = realWidth / 2;
  54.  
  55.     // create a shadow...
  56.     shaX = int(hypot * sin( tiltX * (PI / 180) ));
  57.     shaY = int(hypot * sin( tiltY * (PI / 180) ));
  58.  
  59.     p.translate( realWidth / 2, realHeight / 2 );
  60.     p.setPen( backgroundColor() );
  61.     p.drawLine( 0, 0, oldX, oldY );
  62.     p.setPen( foregroundColor() );
  63.     p.drawLine( 0, 0,shaX, shaY );
  64.     oldX = shaX;
  65.     oldY = shaY;
  66.     p.end();
  67.  
  68.     QPainter p2( this );
  69.     p2.drawPixmap( cr.topLeft(), pix );
  70.     p2.end();
  71. }
  72.  
  73.  
  74. StatsCanvas::StatsCanvas( QWidget *parent, const char* name )
  75.   : Canvas( parent, name, WRepaintNoErase )
  76. {
  77.     QSizePolicy mySize( QSizePolicy::Expanding, QSizePolicy::Minimum );
  78.     setSizePolicy( mySize );
  79. }
  80.  
  81. StatsCanvas::~StatsCanvas()
  82. {
  83. }
  84.  
  85. void StatsCanvas::tabletEvent( QTabletEvent *e )
  86. {
  87.     static QRect oldR( -1, -1, -1, -1);
  88.     QPainter p;
  89.     
  90.     e->accept();
  91.     r.setRect( e->x() - e->pressure() / 2,
  92.     e->y() - e->pressure() / 2, e->pressure(), e->pressure() );
  93.     QRect tmpR = r | oldR;
  94.     oldR = r;
  95.     
  96.     update( tmpR );
  97.     emit signalNewTilt( e->xTilt(), e->yTilt() );
  98.     emit signalNewDev( e->device() );
  99.     emit signalNewLoc( e->x(), e->y() );
  100.     emit signalNewPressure( e->pressure() );
  101. }
  102.  
  103. void StatsCanvas::mouseMoveEvent( QMouseEvent *e )
  104. {
  105.     // do nothing
  106.     QWidget::mouseMoveEvent( e );
  107. }
  108.  
  109.  
  110. void StatsCanvas::mouseReleaseEvent( QMouseEvent *e )
  111. {
  112.     Canvas::mouseReleaseEvent( e );
  113.     clearScreen();
  114.     // a bad cheat to get rid of the old data...
  115.     emit signalNewTilt( 0, 0 );
  116. }
  117.  
  118. void StatsCanvas::paintEvent( QPaintEvent *e )
  119. {
  120.     QPainter p;
  121.     p.begin( &buffer );
  122.     p.fillRect( e->rect(), colorGroup().base() );
  123.     
  124.     // draw a circle if we have the tablet down
  125.     if ( mousePressed ) {
  126.     p.setBrush( red );
  127.     p.drawEllipse( r );
  128.     }
  129.     bitBlt( this, e->rect().x(), e->rect().y(), &buffer, e->rect().x(), e->rect().y(),
  130.         e->rect().width(), e->rect().height() );
  131.     p.end();
  132. }
  133.  
  134. TabletStats::TabletStats( QWidget *parent, const char *name )
  135.     : TabletStatsBase( parent, name )
  136. {
  137.     lblXPos->setMinimumSize( lblXPos->sizeHint() );
  138.     lblYPos->setMinimumSize( lblYPos->sizeHint() );
  139.     lblPressure->setMinimumSize( lblPressure->sizeHint() );
  140.     lblDev->setMinimumSize( lblDev->sizeHint() );
  141.     lblXTilt->setMinimumSize( lblXTilt->sizeHint() );
  142.     lblYTilt->setMinimumSize( lblYTilt->sizeHint() );
  143.  
  144.     QObject::connect( statCan, SIGNAL(signalNewTilt(int, int)),
  145.                   orient, SLOT(newOrient(int, int)) );
  146.     QObject::connect( statCan, SIGNAL(signalNewTilt(int, int)),
  147.                   this, SLOT(slotTiltChanged(int, int)) );
  148.     QObject::connect( statCan, SIGNAL(signalNewDev(int)),
  149.                       this, SLOT(slotDevChanged(int)) );
  150.     QObject::connect( statCan, SIGNAL(signalNewLoc(int,int)),
  151.                       this, SLOT( slotLocationChanged(int,int)) );
  152. }
  153.  
  154. TabletStats::~TabletStats()
  155. {
  156. }
  157.  
  158. void TabletStats::slotDevChanged( int newDev )
  159. {
  160.     if ( newDev == QTabletEvent::Stylus )
  161.     lblDev->setText( tr("Stylus") );
  162.     else if ( newDev == QTabletEvent::Eraser )
  163.     lblDev->setText( tr("Eraser") );
  164. }
  165.  
  166. void TabletStats::slotLocationChanged( int newX, int newY )
  167. {
  168.     lblXPos->setNum( newX );
  169.     lblYPos->setNum( newY );
  170. }
  171.  
  172. void TabletStats::slotTiltChanged( int newTiltX, int newTiltY )
  173. {
  174.     lblXTilt->setNum( newTiltX );
  175.     lblYTilt->setNum( newTiltY );
  176. }
  177.