[kde-doc-english] [ksnapshot] /: Reuse previous region for subsequent snapshots
Christoph Feck
christoph at maxiom.de
Tue May 21 22:17:24 UTC 2013
Git commit 7485e210b2db48f7b59f1165cb5322519a0710c9 by Christoph Feck, on behalf of Jérôme Borme.
Committed on 22/05/2013 at 00:12.
Pushed by cfeck into branch 'master'.
Reuse previous region for subsequent snapshots
FEATURE: 233404
FIXED-IN: 4.11
M +7 -0 doc/index.docbook
M +5 -2 freeregiongrabber.cpp
M +2 -1 freeregiongrabber.h
M +2 -1 kbackgroundsnapshot.cpp
M +16 -2 ksnapshot.cpp
M +5 -0 ksnapshot.h
M +5 -2 regiongrabber.cpp
M +2 -1 regiongrabber.h
http://commits.kde.org/ksnapshot/7485e210b2db48f7b59f1165cb5322519a0710c9
diff --git a/doc/index.docbook b/doc/index.docbook
index 5ff4a2f..a52fab1 100644
--- a/doc/index.docbook
+++ b/doc/index.docbook
@@ -236,6 +236,13 @@ to capture the screenshot.
<para>If you have multiple screens, <guilabel>Current Screen</guilabel> captures
the screen containing the mouse cursor when the screenshot is taken.</para>
+
+<para>When keeping &ksnapshot; open to take several snapshots using <guibutton>
+Rectangular Region</guibutton> or <guibutton>Freehand Region</guibutton>,
+the subsequent snapshots will be initialized with the last shape used with this
+function (since you launched &ksnapshot;). You have then the possibility to adjust the
+handles of the rectangular shape, to move the freehand region, or to completely replace the
+shape by starting to draw a new one at a different place of the screen.</para>
</sect1>
<sect1 id="additional-features">
diff --git a/freeregiongrabber.cpp b/freeregiongrabber.cpp
index b25c968..f7f1924 100644
--- a/freeregiongrabber.cpp
+++ b/freeregiongrabber.cpp
@@ -29,9 +29,9 @@
#include <klocale.h>
#include <KWindowSystem>
-FreeRegionGrabber::FreeRegionGrabber( ) :
+FreeRegionGrabber::FreeRegionGrabber( const QPolygon &startFreeRegion ) :
QWidget( 0, Qt::X11BypassWindowManagerHint | Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint | Qt::Tool ),
- selection(), mouseDown( false ), newSelection( false ),
+ selection( startFreeRegion ), mouseDown( false ), newSelection( false ),
handleSize( 10 ), mouseOverHandle( 0 ),
showHelp( true ), grabbing( false )
{
@@ -263,8 +263,10 @@ void FreeRegionGrabber::mouseDoubleClickEvent( QMouseEvent* )
void FreeRegionGrabber::keyPressEvent( QKeyEvent* e )
{
+ QPolygon pol = selection;
if ( e->key() == Qt::Key_Escape )
{
+ emit freeRegionUpdated( pol );
emit freeRegionGrabbed( QPixmap() );
}
else if ( e->key() == Qt::Key_Enter || e->key() == Qt::Key_Return )
@@ -307,6 +309,7 @@ void FreeRegionGrabber::grabRect()
pt.drawPixmap(pixmap2.rect(), pixmap, pol.boundingRect());
pt.end();
+ emit freeRegionUpdated(pol);
emit freeRegionGrabbed(pixmap2);
}
}
diff --git a/freeregiongrabber.h b/freeregiongrabber.h
index 1af2c43..0a327c3 100644
--- a/freeregiongrabber.h
+++ b/freeregiongrabber.h
@@ -33,7 +33,7 @@ class FreeRegionGrabber : public QWidget
Q_OBJECT
public:
- FreeRegionGrabber();
+ FreeRegionGrabber( const QPolygon &startFreeRegion );
~FreeRegionGrabber();
protected slots:
@@ -41,6 +41,7 @@ protected slots:
signals:
void freeRegionGrabbed( const QPixmap & );
+ void freeRegionUpdated( const QPolygon & );
protected:
void paintEvent( QPaintEvent* e );
diff --git a/kbackgroundsnapshot.cpp b/kbackgroundsnapshot.cpp
index 160a284..9d81ba1 100644
--- a/kbackgroundsnapshot.cpp
+++ b/kbackgroundsnapshot.cpp
@@ -139,7 +139,8 @@ void KBackgroundSnapshot::slotGrab()
void KBackgroundSnapshot::grabRegion()
{
- rgnGrab = new RegionGrabber();
+ QRect emptySelection;
+ rgnGrab = new RegionGrabber(emptySelection);
connect( rgnGrab, SIGNAL(regionGrabbed(QPixmap)),
SLOT(slotRegionGrabbed(QPixmap)) );
diff --git a/ksnapshot.cpp b/ksnapshot.cpp
index f5f3e40..a685cd3 100644
--- a/ksnapshot.cpp
+++ b/ksnapshot.cpp
@@ -586,6 +586,16 @@ void KSnapshot::slotRegionGrabbed( const QPixmap &pix )
show();
}
+void KSnapshot::slotRegionUpdated( const QRect &selection )
+{
+ lastRegion = selection;
+}
+
+void KSnapshot::slotFreeRegionUpdated( const QPolygon &selection )
+{
+ lastFreeRegion = selection;
+}
+
void KSnapshot::slotWindowGrabbed( const QPixmap &pix )
{
if ( !pix.isNull() )
@@ -645,17 +655,21 @@ void KSnapshot::updatePreview()
void KSnapshot::grabRegion()
{
- rgnGrab = new RegionGrabber();
+ rgnGrab = new RegionGrabber(lastRegion);
connect( rgnGrab, SIGNAL(regionGrabbed(QPixmap)),
SLOT(slotRegionGrabbed(QPixmap)) );
+ connect( rgnGrab, SIGNAL(regionUpdated(QRect)),
+ SLOT(slotRegionUpdated(QRect)) );
}
void KSnapshot::grabFreeRegion()
{
- freeRgnGrab = new FreeRegionGrabber();
+ freeRgnGrab = new FreeRegionGrabber(lastFreeRegion);
connect( freeRgnGrab, SIGNAL(freeRegionGrabbed(QPixmap)),
SLOT(slotRegionGrabbed(QPixmap)) );
+ connect( freeRgnGrab, SIGNAL(freeRegionUpdated(QPolygon)),
+ SLOT(slotFreeRegionUpdated(QPolygon)) );
}
diff --git a/ksnapshot.h b/ksnapshot.h
index cc51252..8b5fe29 100644
--- a/ksnapshot.h
+++ b/ksnapshot.h
@@ -103,6 +103,8 @@ private slots:
void updateCaption();
void updatePreview();
void slotRegionGrabbed( const QPixmap & );
+ void slotRegionUpdated( const QRect & );
+ void slotFreeRegionUpdated( const QPolygon & );
void slotWindowGrabbed( const QPixmap & );
void slotModeChanged( int mode );
void setPreview( const QPixmap &pm );
@@ -139,6 +141,9 @@ private:
QPoint savedPosition;
bool haveXFixes;
bool includeAlpha;
+ QPolygon lastFreeRegion;
+ QRect lastRegion;
+
#ifdef KIPI_FOUND
KIPI::PluginLoader* mPluginLoader;
friend KUrl::List KSnapshotImageCollectionShared::images();
diff --git a/regiongrabber.cpp b/regiongrabber.cpp
index 028bf09..fb038a3 100644
--- a/regiongrabber.cpp
+++ b/regiongrabber.cpp
@@ -28,9 +28,9 @@
#include <klocale.h>
#include <KWindowSystem>
-RegionGrabber::RegionGrabber( ) :
+RegionGrabber::RegionGrabber( const QRect &startSelection ) :
QWidget( 0, Qt::X11BypassWindowManagerHint | Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint | Qt::Tool ),
- selection(), mouseDown( false ), newSelection( false ),
+ selection( startSelection ), mouseDown( false ), newSelection( false ),
handleSize( 10 ), mouseOverHandle( 0 ),
showHelp( true ), grabbing( false ),
TLHandle(0,0,handleSize,handleSize), TRHandle(0,0,handleSize,handleSize),
@@ -334,8 +334,10 @@ void RegionGrabber::mouseDoubleClickEvent( QMouseEvent* )
void RegionGrabber::keyPressEvent( QKeyEvent* e )
{
+ QRect r = selection;
if ( e->key() == Qt::Key_Escape )
{
+ emit regionUpdated( r );
emit regionGrabbed( QPixmap() );
}
else if ( e->key() == Qt::Key_Enter || e->key() == Qt::Key_Return )
@@ -354,6 +356,7 @@ void RegionGrabber::grabRect()
if ( !r.isNull() && r.isValid() )
{
grabbing = true;
+ emit regionUpdated( r );
emit regionGrabbed( pixmap.copy(r) );
}
}
diff --git a/regiongrabber.h b/regiongrabber.h
index 3d408e4..3ade77b 100644
--- a/regiongrabber.h
+++ b/regiongrabber.h
@@ -36,7 +36,7 @@ class RegionGrabber : public QWidget
enum MaskType { StrokeMask, FillMask };
public:
- RegionGrabber();
+ RegionGrabber( const QRect &startSelection );
~RegionGrabber();
protected slots:
@@ -44,6 +44,7 @@ protected slots:
signals:
void regionGrabbed( const QPixmap & );
+ void regionUpdated( const QRect & );
protected:
void paintEvent( QPaintEvent* e );
More information about the kde-doc-english
mailing list