From 15318cad33835e4e2dc620d033e43cd930676cdd Mon Sep 17 00:00:00 2001 From: kergoth Date: Fri, 25 Jan 2002 22:14:26 +0000 Subject: Initial revision --- (limited to 'core/settings/citytime/stylusnormalizer.cpp') diff --git a/core/settings/citytime/stylusnormalizer.cpp b/core/settings/citytime/stylusnormalizer.cpp new file mode 100644 index 0000000..62de28b --- a/dev/null +++ b/core/settings/citytime/stylusnormalizer.cpp @@ -0,0 +1,98 @@ +/********************************************************************** +** Copyright (C) 2000 Trolltech AS. All rights reserved. +** +** This file is part of Qtopia Environment. +** +** This file may be distributed and/or modified under the terms of the +** GNU General Public License version 2 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. +** +** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +** +** See http://www.trolltech.com/gpl/ for GPL licensing information. +** +** Contact info@trolltech.com if any conditions of this licensing are +** not clear to you. +** +**********************************************************************/ + +#include +#include + +#include "stylusnormalizer.h" + +static const int FLUSHTIME = 100; + +_StylusEvent::_StylusEvent( const QPoint& newPt ) + : _pt( newPt ), + _t( QTime::currentTime() ) +{ +} + +_StylusEvent::~_StylusEvent() +{ +} + +StylusNormalizer::StylusNormalizer( QWidget *parent, const char* name ) + : QWidget( parent, name ), + _next( 0 ), + bFirst( true ) +{ + // initialize _ptList + int i; + for (i = 0; i < SAMPLES; i++ ) { + _ptList[i].setPoint( -1, -1 ); + } + _tExpire = new QTimer( this ); + QObject::connect( _tExpire, SIGNAL( timeout() ), + this, SLOT( slotAveragePoint() ) ); +} + +StylusNormalizer::~StylusNormalizer() +{ +} + +void StylusNormalizer::addEvent( const QPoint& pt ) +{ + _ptList[_next].setPoint( pt ); + _ptList[_next++].setTime( QTime::currentTime() ); + if ( _next >= SAMPLES ) { + _next = 0; + } + // make a single mouse click work + if ( bFirst ) { + slotAveragePoint(); + bFirst = false; + } +} + +void StylusNormalizer::slotAveragePoint( void ) +{ + QPoint pt( 0, 0 ); + QTime tCurr = QTime::currentTime(); + int i, + size; + size = 0; + for ( i = 0; i < SAMPLES; i++ ) { + if ( ( (_ptList[i]).time().msecsTo( tCurr ) < FLUSHTIME ) && + ( _ptList[i].point() != QPoint( -1, -1 ) ) ) { + pt += _ptList[i].point(); + size++; + } + } + if ( size > 0 ) + emit signalNewPoint( pt /= size ); +} + +void StylusNormalizer::start( void ) +{ + _tExpire->start( FLUSHTIME ); +} + +void StylusNormalizer::stop( void ) +{ + _tExpire->stop(); + bFirst = true; +} \ No newline at end of file -- cgit v0.9.0.2