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

List:       kde-commits
Subject:    koffice/lib/kofficeui
From:       Thorsten Zachmann <t.zachmann () zagge ! de>
Date:       2005-11-05 10:43:05
Message-ID: 1131187385.188042.16652.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 477838 by zachmann:

o Added function to snap a point
o Fix negated values
o Don't report to small diffs


 M  +108 -3    koGuides.cpp  
 M  +14 -1     koGuides.h  


--- trunk/koffice/lib/kofficeui/koGuides.cpp #477837:477838
@@ -378,7 +378,7 @@
                     hClosest = *it;
                 }
             }
-            tmp = rect.bottom() - (*it)->position;
+            tmp = (*it)->position - rect.bottom();
             if ( QABS( tmp ) < m_zoomHandler->unzoomItY( snap ) )
             {
                 if(QABS( tmp ) < diff.y())
@@ -399,7 +399,7 @@
                     vClosest = *it;
                 }
             }
-            tmp = rect.right() - (*it)->position;
+            tmp = (*it)->position - rect.right();
             if ( QABS( tmp ) < m_zoomHandler->unzoomItX( snap ) )
             {
                 if(QABS( tmp ) < diff.x())
@@ -448,7 +448,7 @@
                     vClosest = *it;
                 }
             }
-            tmp = rect.right() - (*it)->position;
+            tmp = (*it)->position - rect.right();
             if ( QABS( tmp ) < m_zoomHandler->unzoomItX( snap ) )
             {
                 if(QABS( tmp ) < diff.x())
@@ -482,6 +482,102 @@
     return diff;
 }
 
+
+KoPoint KoGuides::snapToGuideLines( KoPoint &pos, int snap)
+{
+    bool needRepaint = false;
+    KoPoint diff( 10000, 10000 );
+    KoGuideLine *vClosest=0;
+    KoGuideLine *hClosest=0;
+
+    QValueList<KoGuideLine *>::const_iterator it = m_guideLines.begin();
+    for ( ; it != m_guideLines.end(); ++it )
+    {
+        if(( *it )->snapping)
+            needRepaint = true;
+
+        ( *it )->snapping = false;
+
+        if ( ( *it )->orientation == Qt::Horizontal )
+        {
+            double tmp = (*it)->position - pos.y();
+            if ( QABS( tmp ) < m_zoomHandler->unzoomItY( snap ) )
+            {
+                if(QABS( tmp ) < diff.y())
+                {
+                    diff.setY( tmp );
+                    hClosest = *it;
+                }
+            }
+        }
+        else
+        {
+            double tmp = (*it)->position - pos.x();
+            if ( QABS( tmp ) < m_zoomHandler->unzoomItX( snap ) )
+            {
+                if(QABS( tmp ) < diff.x())
+                {
+                    diff.setX( tmp );
+                    vClosest = *it;
+                }
+            }
+        }
+    }
+
+    it = m_selectedGuideLines.begin();
+    for ( ; it != m_selectedGuideLines.end(); ++it )
+    {
+        ( *it )->snapping = false;
+
+        if ( ( *it )->orientation == Qt::Horizontal )
+        {
+            double tmp = (*it)->position - pos.y();
+            if ( QABS( tmp ) < m_zoomHandler->unzoomItY( snap ) )
+            {
+                if(QABS( tmp ) < diff.y())
+                {
+                    diff.setY( tmp );
+                    hClosest = *it;
+                }
+            }
+        }
+        else
+        {
+            double tmp = (*it)->position - pos.x();
+            if ( QABS( tmp ) < m_zoomHandler->unzoomItX( snap ) )
+            {
+                if(QABS( tmp ) < diff.x())
+                {
+                    diff.setX( tmp );
+                    vClosest = *it;
+                }
+            }
+        }
+     }
+
+    if( vClosest )
+    {
+        vClosest->snapping = true;
+        needRepaint=true;
+    }
+    else
+        diff.setX( 0 );
+
+    if( hClosest )
+    {
+        hClosest->snapping = true;
+        needRepaint=true;
+    }
+    else
+        diff.setY( 0 );
+
+    if(needRepaint && m_autoStyle)
+        paint();
+
+    return diff;
+}
+
+
 KoPoint KoGuides::diffGuide( KoRect &rect, double diffx, double diffy )
 {
     KoPoint move( 0, 0 );
@@ -626,6 +722,15 @@
         }
     }
 
+    if ( QABS( move.x() ) < 1E-10 ) 
+    {
+        move.setX( 0 );
+    }
+    if ( QABS( move.y() ) < 1E-10 ) 
+    {
+        move.setY( 0 );
+    }
+
     return move;
 }
 
--- trunk/koffice/lib/kofficeui/koGuides.h #477837:477838
@@ -41,8 +41,9 @@
      *
      * @param view The view in which the guides will be shown
      * @param zoomHandler The zoom handler of the view
+     * @param autoStyle TODO
      */
-    KoGuides( KoView *view, KoZoomHandler *zoomHandler, bool autoStyle=false );
+    KoGuides( KoView *view, KoZoomHandler *zoomHandler, bool autoStyle = false );
 
     /**
      * @brief Destructor
@@ -142,6 +143,18 @@
     KoPoint snapToGuideLines( KoRect &rect, int snap );
 
     /**
+     * @brief Snap rect to guidelines
+     *
+     * This looks fo a guide which is in reach for the guide as defined in snap.
+     *
+     * @param pos the position which should be snapped
+     * @param snap the distance the guide should snap
+     *
+     * @return the distance to the guide or ( 0, 0 ) if there is no guide to snap to.
+     */
+    KoPoint snapToGuideLines( KoPoint &pos, int snap );
+
+    /**
      * @brief Find the next guide distance to snap to
      *
      * @param rect the rect which should be snapped
[prev in list] [next in list] [prev in thread] [next in thread] 

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