diff -r 2ab6062e33ab -r 6610854318eb 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