[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: KDE/kdegraphics/ksnapshot
From: Ambroz Bizjak <ambrop7 () gmail ! com>
Date: 2010-07-17 0:27:03
Message-ID: 20100717002703.7B306AC76A () svn ! kde ! org
[Download RAW message or body]
SVN commit 1150873 by abizjak:
Make the selection variable actually mean the selection, not one pixel more.
Fixes off-by-one errors (revision 1149435 fixed only capture, but resolution label was wrong).
M +29 -11 regiongrabber.cpp
M +1 -0 regiongrabber.h
--- trunk/KDE/kdegraphics/ksnapshot/regiongrabber.cpp #1150872:1150873
@@ -96,7 +96,7 @@
painter.drawPixmap(0, 0, pixmap);
painter.setFont(font);
- QRect r = selection.normalized().adjusted( 0, 0, -1, -1 );
+ QRect r = selection;
if ( !selection.isNull() )
{
QRegion grey( rect() );
@@ -128,8 +128,8 @@
// The grabbed region is everything which is covered by the drawn
// rectangles (border included). This means that there is no 0px
// selection, since a 0px wide rectangle will always be drawn as a line.
- QString txt = QString( "%1x%2" ).arg( selection.width() == 0 ? 2 : selection.width() )
- .arg( selection.height() == 0 ? 2 : selection.height() );
+ QString txt = QString( "%1x%2" ).arg( selection.width() )
+ .arg( selection.height() );
QRect textRect = painter.boundingRect( rect(), Qt::AlignLeft, txt );
QRect boundingRect = textRect.adjusted( -4, 0, 0, 0);
@@ -191,8 +191,9 @@
r.setTopLeft( limitPointToRect( r.topLeft(), rect() ) );
r.setBottomRight( limitPointToRect( r.bottomRight(), rect() ) );
if ( r.width() <= 1 || r.height() <= 1 ) //this just results in ugly drawing...
- r = QRect();
- selection = r;
+ selection = QRect();
+ else
+ selection = normalizeSelection(r);
}
void RegionGrabber::mousePressEvent( QMouseEvent* e )
@@ -236,13 +237,13 @@
{
QPoint p = e->pos();
QRect r = rect();
- selection = QRect( dragStartPoint, limitPointToRect( p, r ) ).normalized();
+ selection = normalizeSelection(QRect( dragStartPoint, limitPointToRect( p, r ) ));
}
else if ( mouseOverHandle == 0 ) // moving the whole selection
{
QRect r = rect().normalized(), s = selectionBeforeDrag.normalized();
QPoint p = s.topLeft() + e->pos() - dragStartPoint;
- r.setBottomRight( r.bottomRight() - QPoint( s.width(), s.height() ) );
+ r.setBottomRight( r.bottomRight() - QPoint( s.width(), s.height() ) + QPoint( 1, 1 ) );
if ( !r.isNull() && r.isValid() )
selection.moveTo( limitPointToRect( p, r ) );
}
@@ -274,10 +275,9 @@
{
r.setRight( r.right() + offset.x() );
}
- r = r.normalized();
r.setTopLeft( limitPointToRect( r.topLeft(), rect() ) );
r.setBottomRight( limitPointToRect( r.bottomRight(), rect() ) );
- selection = r;
+ selection = normalizeSelection(r);
}
update();
}
@@ -349,7 +349,7 @@
void RegionGrabber::grabRect()
{
- QRect r = selection.normalized().adjusted( 0, 0, -1, -1 );
+ QRect r = selection;
if ( !r.isNull() && r.isValid() )
{
grabbing = true;
@@ -359,7 +359,7 @@
void RegionGrabber::updateHandles()
{
- QRect r = selection.normalized().adjusted( 0, 0, -1, -1 );
+ QRect r = selection;
int s2 = handleSize / 2;
TLHandle.moveTopLeft( r.topLeft() );
@@ -396,4 +396,22 @@
return q;
}
+QRect RegionGrabber::normalizeSelection( const QRect &s ) const
+{
+ QRect r = s;
+ if (r.width() <= 0) {
+ int l = r.left();
+ int w = r.width();
+ r.setLeft(l + w - 1);
+ r.setRight(l);
+ }
+ if (r.height() <= 0) {
+ int t = r.top();
+ int h = r.height();
+ r.setTop(t + h - 1);
+ r.setBottom(t);
+ }
+ return r;
+}
+
#include "regiongrabber.moc"
--- trunk/KDE/kdegraphics/ksnapshot/regiongrabber.h #1150872:1150873
@@ -57,6 +57,7 @@
void updateHandles();
QRegion handleMask( MaskType type ) const;
QPoint limitPointToRect( const QPoint &p, const QRect &r ) const;
+ QRect normalizeSelection( const QRect &s ) const;
void grabRect();
QRect selection;
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic