remember last grabbed screen area
authorClaus Gittinger <cg@exept.de>
Tue, 03 Nov 2009 13:39:46 +0100
changeset 2707 6610854318eb
parent 2706 2ab6062e33ab
child 2708 c180af16b1b3
remember last grabbed screen area
ImageEditor.st
--- a/ImageEditor.st	Tue Nov 03 13:11:56 2009 +0100
+++ b/ImageEditor.st	Tue Nov 03 13:39:46 2009 +0100
@@ -14,7 +14,7 @@
 ResourceSpecEditor subclass:#ImageEditor
 	instanceVariableNames:'imageEditView colorMapMode editMode mouseKeyColorMode
 		selectedColorIndex postOpenAction imageSeqNr drawingColormap
-		lastShiftUsedWrap'
+		lastShiftUsedWrap lastGrabbedScreenArea'
 	classVariableNames:'LastDirectory LastSizeString MaskClipboard LastColormapMode
 		DefaultRelativeSizes'
 	poolDictionaries:''
@@ -2338,16 +2338,34 @@
             translateLabel: true
           )
          (MenuItem
-            activeHelpKey: fileGrabImageFromScreen
-            label: 'Grab from Screen...'
-            itemValue: grabScreenImage
+            label: 'Grab'
             translateLabel: true
-          )
-         (MenuItem
-            activeHelpKey: fileGrabImageFromWindow
-            label: 'Grab from Window...'
-            itemValue: grabWindowImage
-            translateLabel: true
+            submenu: 
+           (Menu
+              (
+               (MenuItem
+                  activeHelpKey: fileGrabImageFromWindow
+                  label: 'Grab from Window...'
+                  itemValue: grabWindowImage
+                  translateLabel: true
+                )
+               (MenuItem
+                  activeHelpKey: fileGrabImageFromScreen
+                  label: 'Grab from Screen...'
+                  itemValue: grabScreenImage
+                  translateLabel: true
+                )
+               (MenuItem
+                  activeHelpKey: fileGrabImageFromScreen
+                  enabled: hasLastGrabScreenArea
+                  label: 'Grab Again from same Screen Area'
+                  itemValue: grabScreenImageFromLastArea
+                  translateLabel: true
+                )
+               )
+              nil
+              nil
+            )
           )
          (MenuItem
             enabled: imageHasNextImage
@@ -3967,6 +3985,10 @@
 
 !ImageEditor methodsFor:'queries'!
 
+hasLastGrabScreenArea
+    ^ [ lastGrabbedScreenArea notNil ]
+!
+
 hasMask
     ^ colorMapMode value notNil and:[colorMapMode value startsWith:'mask']
 
@@ -5925,7 +5947,24 @@
 grabScreenImage
     "let user choose an area and grab that are for editing"
 
-    self grabScreenImageUsing:[ Image fromUser ].
+    self grabScreenImageUsing:[ 
+        |r|
+
+        [Screen current leftButtonPressed] whileTrue:[Delay waitForSeconds:0.05].
+        r := Rectangle fromUser.
+        r width == 0 ifTrue:[^ nil].
+        r height == 0 ifTrue:[^ nil].
+        lastGrabbedScreenArea := r.
+        ^ Image fromScreen:r
+    ].
+!
+
+grabScreenImageFromLastArea
+    "grab again from the previous area for editing"
+
+    self grabScreenImageUsing:[ 
+        ^ Image fromScreen:lastGrabbedScreenArea
+    ].
 !
 
 grabScreenImageUsing:aBlock