[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    koffice/karbon/plugins/tools/CalligraphyTool
From:       Fela Winkelmolen <fela.kde () gmail ! com>
Date:       2008-07-02 8:43:26
Message-ID: 1214988206.713653.9158.nullmailer () svn ! kde ! org
[Download RAW message or body]

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;
 
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic