/**************************************************************************** ** ** 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 #include #include #include #include "tabletstats.h" MyOrientation::MyOrientation( QWidget *parent, const char *name ) : QFrame( parent, name, WRepaintNoErase ) { // QSizePolicy mySize( QSizePolicy::Minimum, QSizePolicy::Expanding ); // setSizePolicy( mySize ); setFrameStyle( QFrame::Box | QFrame::Sunken ); } MyOrientation::~MyOrientation() { } void MyOrientation::newOrient( int tiltX, int tiltY ) { double PI = 3.14159265359; int realWidth, realHeight, hypot, // a faux hypoteneus, to mess with calculations shaX, shaY; static int oldX = 0, oldY = 0; realWidth = width() - 2 * frameWidth(); realHeight = height() - 2 * frameWidth(); QRect cr( 0 + frameWidth(), 0 + frameWidth(), realWidth, realHeight ); QPixmap pix( cr.size() ); pix.fill( this, cr.topLeft() ); QPainter p( &pix ); if ( realWidth > realHeight ) hypot = realHeight / 2; else hypot = realWidth / 2; // create a shadow... shaX = int(hypot * sin( tiltX * (PI / 180) )); shaY = int(hypot * sin( tiltY * (PI / 180) )); p.translate( realWidth / 2, realHeight / 2 ); p.setPen( backgroundColor() ); p.drawLine( 0, 0, oldX, oldY ); p.setPen( foregroundColor() ); p.drawLine( 0, 0,shaX, shaY ); oldX = shaX; oldY = shaY; p.end(); QPainter p2( this ); p2.drawPixmap( cr.topLeft(), pix ); p2.end(); } StatsCanvas::StatsCanvas( QWidget *parent, const char* name ) : Canvas( parent, name, WRepaintNoErase ) { QSizePolicy mySize( QSizePolicy::Expanding, QSizePolicy::Minimum ); setSizePolicy( mySize ); } StatsCanvas::~StatsCanvas() { } void StatsCanvas::tabletEvent( QTabletEvent *e ) { static QRect oldR( -1, -1, -1, -1); QPainter p; e->accept(); switch( e->type() ) { case QEvent::TabletPress: tqDebug( "Tablet Press" ); mousePressed = TRUE; break; case QEvent::TabletRelease: tqDebug( "Tablet Release" ); mousePressed = FALSE; clearScreen(); break; default: break; } r.setRect( e->x() - e->pressure() / 2, e->y() - e->pressure() / 2, e->pressure(), e->pressure() ); QRect tmpR = r | oldR; oldR = r; update( tmpR ); emit signalNewTilt( e->xTilt(), e->yTilt() ); emit signalNewDev( e->device() ); emit signalNewLoc( e->x(), e->y() ); emit signalNewPressure( e->pressure() ); } void StatsCanvas::mouseMoveEvent( QMouseEvent *e ) { tqDebug( "Mouse Move" ); // do nothing QWidget::mouseMoveEvent( e ); } void StatsCanvas::mousePressEvent( QMouseEvent *e ) { tqDebug( "Mouse Press" ); QWidget::mousePressEvent( e ); } void StatsCanvas::mouseReleaseEvent( QMouseEvent *e ) { tqDebug( "Mouse Release" ); QWidget::mouseReleaseEvent( e ); } void StatsCanvas::paintEvent( QPaintEvent *e ) { QPainter p; p.begin( &buffer ); p.fillRect( e->rect(), colorGroup().base() ); // draw a circle if we have the tablet down if ( mousePressed ) { p.setBrush( red ); p.drawEllipse( r ); } bitBlt( this, e->rect().x(), e->rect().y(), &buffer, e->rect().x(), e->rect().y(), e->rect().width(), e->rect().height() ); p.end(); } TabletStats::TabletStats( QWidget *parent, const char *name ) : TabletStatsBase( parent, name ) { lblXPos->setMinimumSize( lblXPos->sizeHint() ); lblYPos->setMinimumSize( lblYPos->sizeHint() ); lblPressure->setMinimumSize( lblPressure->sizeHint() ); lblDev->setMinimumSize( lblDev->sizeHint() ); lblXTilt->setMinimumSize( lblXTilt->sizeHint() ); lblYTilt->setMinimumSize( lblYTilt->sizeHint() ); QObject::connect( statCan, SIGNAL(signalNewTilt(int, int)), orient, SLOT(newOrient(int, int)) ); QObject::connect( statCan, SIGNAL(signalNewTilt(int, int)), this, SLOT(slotTiltChanged(int, int)) ); QObject::connect( statCan, SIGNAL(signalNewDev(int)), this, SLOT(slotDevChanged(int)) ); QObject::connect( statCan, SIGNAL(signalNewLoc(int,int)), this, SLOT( slotLocationChanged(int,int)) ); } TabletStats::~TabletStats() { } void TabletStats::slotDevChanged( int newDev ) { if ( newDev == QTabletEvent::Stylus ) lblDev->setText( tr("Stylus") ); else if ( newDev == QTabletEvent::Eraser ) lblDev->setText( tr("Eraser") ); } void TabletStats::slotLocationChanged( int newX, int newY ) { lblXPos->setNum( newX ); lblYPos->setNum( newY ); } void TabletStats::slotTiltChanged( int newTiltX, int newTiltY ) { lblXTilt->setNum( newTiltX ); lblYTilt->setNum( newTiltY ); }