[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