From kde-commits Wed Jul 02 08:43:26 2008 From: Fela Winkelmolen Date: Wed, 02 Jul 2008 08:43:26 +0000 To: kde-commits Subject: koffice/karbon/plugins/tools/CalligraphyTool Message-Id: <1214988206.713653.9158.nullmailer () svn ! kde ! org> X-MARC-Message: https://marc.info/?l=kde-commits&m=121498821811598 SVN commit 827075 by fela: Add drag support. M +31 -10 KarbonCalligraphyTool.cpp M +4 -2 KarbonCalligraphyTool.h --- trunk/koffice/karbon/plugins/tools/CalligraphyTool/KarbonCalligraphyTool.cpp #827074:827075 @@ -53,7 +53,8 @@ KarbonCalligraphyTool::KarbonCalligraphyTool(KoCanvasBase *canvas) : KoTool( canvas ), m_shape( 0 ), m_strokeWidth( 50 ), m_angle( M_PI/6.0 ), - m_thinning( 0.0 ), m_mass( 20.0 ), m_isDrawing( false ), m_speed(0, 0) + m_thinning( 0.0 ), m_mass( 17.0 ), m_drag( 1.0), + m_isDrawing( false ), m_speed(0, 0) { } @@ -146,9 +147,10 @@ QPointF force = event->point - m_lastPoint; QPointF dSpeed = force/m_mass; - m_speed = m_speed/3.0 + dSpeed; + m_speed += dSpeed; m_lastPoint = m_lastPoint + m_speed; + m_speed *= (1.0 - m_drag); // calculate the modulo of the speed double speed = std::sqrt( pow(m_speed.x(), 2) + pow(m_speed.y(), 2) ); @@ -198,7 +200,7 @@ QDoubleSpinBox *thinningBox = new QDoubleSpinBox; thinningBox->setRange( -1.0, 1.0 ); thinningBox->setSingleStep( 0.1 ); - thinningBox->setValue( 0.0 ); + thinningBox->setValue( m_thinning*2.0 ); thinningLayout->addWidget( thinningLabel ); thinningLayout->addWidget( thinningBox ); layout->addLayout( thinningLayout ); @@ -214,13 +216,24 @@ QHBoxLayout *massLayout = new QHBoxLayout( optionWidget ); QLabel *massLabel = new QLabel( i18n( "Mass" ), optionWidget ); - QSpinBox *massBox = new QSpinBox; - massBox->setRange( 1, 20 ); - massBox->setValue( qRound(sqrt(m_mass)) ); + QDoubleSpinBox *massBox = new QDoubleSpinBox; + massBox->setRange( 0.0, 20.0 ); + massBox->setDecimals(1); + massBox->setValue( sqrt(m_mass - 1) ); massLayout->addWidget( massLabel ); massLayout->addWidget( massBox ); layout->addLayout( massLayout ); + QHBoxLayout *dragLayout = new QHBoxLayout( optionWidget ); + QLabel *dragLabel = new QLabel( i18n( "Drag" ), optionWidget ); + QDoubleSpinBox *dragBox = new QDoubleSpinBox; + dragBox->setRange( 0.0, 1.0 ); + dragBox->setSingleStep( 0.1 ); + dragBox->setValue( m_drag ); + dragLayout->addWidget( dragLabel ); + dragLayout->addWidget( dragBox ); + layout->addLayout( dragLayout ); + connect( widthBox, SIGNAL(valueChanged(double)), this, SLOT(setStrokeWidth(double))); @@ -230,9 +243,12 @@ connect( angleBox, SIGNAL(valueChanged(int)), this, SLOT(setAngle(int))); - connect( massBox, SIGNAL(valueChanged(int)), - this, SLOT(setMass(int))); + connect( massBox, SIGNAL(valueChanged(double)), + this, SLOT(setMass(double))); + connect( dragBox, SIGNAL(valueChanged(double)), + this, SLOT(setDrag(double))); + return optionWidget; } @@ -251,7 +267,12 @@ m_angle = angle/180.0*M_PI; } -void KarbonCalligraphyTool::setMass( int mass ) +void KarbonCalligraphyTool::setMass( double mass ) { - m_mass = mass * mass; + m_mass = mass * mass + 1; } + +void KarbonCalligraphyTool::setDrag( double drag ) +{ + m_drag = drag; +} --- trunk/koffice/karbon/plugins/tools/CalligraphyTool/KarbonCalligraphyTool.h #827074:827075 @@ -48,8 +48,9 @@ private slots: void setStrokeWidth( double width ); void setThinning( double thinning ); - void setAngle( int angle ); // angle in degrees - void setMass( int mass ); // mass in user friendly format + void setAngle( int angle ); // set theangle in degrees + void setMass( double mass ); // set the mass in user friendly format + void setDrag( double drag ); private: void addPoint( KoPointerEvent *event ); @@ -61,6 +62,7 @@ double m_angle; // angle in radians double m_thinning; double m_mass; // in raw format (not user friendly) + double m_drag; // from 0.0 to 1.0 bool m_isDrawing;