--- 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