diff -r 7979a71001d0 -r 2392df0934bc ImageEditor.st --- a/ImageEditor.st Sun May 09 18:19:59 1999 +0200 +++ b/ImageEditor.st Mon May 10 13:07:40 1999 +0200 @@ -861,379 +861,376 @@ - ^ - - #(#Menu - - #( - #(#MenuItem - #label: 'About' - #translateLabel: true - #activeHelpKey: #about - #labelImage: #(#ResourceRetriever nil #menuIcon) - #submenuChannel: #menuAbout + ^ + #(#Menu + #( + #(#MenuItem + #label: 'About' + #translateLabel: true + #activeHelpKey: #about + #labelImage: #(#ResourceRetriever nil #menuIcon) + #submenuChannel: #menuAbout + ) + #(#MenuItem + #label: 'File' + #translateLabel: true + #activeHelpKey: #file + #submenu: + #(#Menu + #( + #(#MenuItem + #label: 'New...' + #translateLabel: true + #value: #doNewImage + #activeHelpKey: #fileNewImage + ) + #(#MenuItem + #label: '-' + ) + #(#MenuItem + #label: 'Load...' + #translateLabel: true + #value: #doLoadFromClass + #activeHelpKey: #fileLoadFromClass + ) + #(#MenuItem + #label: 'Load From File...' + #translateLabel: true + #value: #doLoadFromFile + #activeHelpKey: #fileLoadFromFile + ) + #(#MenuItem + #label: 'Grab From Screen' + #translateLabel: true + #value: #grabScreenImage + #activeHelpKey: #fileGrabImage + ) + #(#MenuItem + #label: '-' + ) + #(#MenuItem + #label: 'Save' + #translateLabel: true + #value: #doSaveMethod + #activeHelpKey: #fileSaveMethod + #enabled: #imageIsLoadedAndClassDefined + ) + #(#MenuItem + #label: 'Save As...' + #translateLabel: true + #value: #doSaveMethodAs + #activeHelpKey: #fileSaveMethodAs + #enabled: #imageIsLoaded + ) + #(#MenuItem + #label: '-' + ) + #(#MenuItem + #label: 'Save To File...' + #translateLabel: true + #value: #doSaveImageFileAs + #activeHelpKey: #fileSaveAs + #enabled: #imageIsLoaded + ) + #(#MenuItem + #label: 'Save Mask To File...' + #translateLabel: true + #value: #doSaveImageMaskFileAs + #activeHelpKey: #fileSaveMaskAs + #enabled: #imageIsLoaded + ) + #(#MenuItem + #label: '-' + ) + #(#MenuItem + #label: 'Print' + #translateLabel: true + #value: #doPrint + #activeHelpKey: #filePrint + #enabled: #imageIsLoaded + ) + #(#MenuItem + #label: '-' + ) + #(#MenuItem + #label: 'Browse Class' + #translateLabel: true + #value: #doBrowseClass + #activeHelpKey: #fileBrowseClass + #enabled: #hasClassDefined + ) + #(#MenuItem + #label: '-' + ) + #(#MenuItem + #label: 'Exit' + #translateLabel: true + #value: #closeRequest + #activeHelpKey: #fileExit + ) + ) + nil + nil ) - #(#MenuItem - #label: 'File' - #translateLabel: true - #activeHelpKey: #file - #submenu: + ) + #(#MenuItem + #label: 'Edit' + #translateLabel: true + #activeHelpKey: #edit + #enabled: #imageIsLoaded + #submenu: + #(#Menu + #( + #(#MenuItem + #label: 'Undo' + #translateLabel: true + #value: #doUndo + #activeHelpKey: #editUndo + #enabled: #valueOfCanUndo + ) + #(#MenuItem + #label: '-' + ) + #(#MenuItem + #label: 'Flip - Vertical' + #translateLabel: true + #value: #doFlipVertical + #activeHelpKey: #editFlipVertical + ) + #(#MenuItem + #label: 'Flip - Horizontal' + #translateLabel: true + #value: #doFlipHorizontal + #activeHelpKey: #editFlipHorizontal + ) + #(#MenuItem + #label: '-' + ) + #(#MenuItem + #label: 'Resize...' + #translateLabel: true + #value: #doResizeImage + #activeHelpKey: #editResize + ) + #(#MenuItem + #label: 'Magnify...' + #translateLabel: true + #value: #doMagnifyImage + #activeHelpKey: #editMagnifyImage + ) + #(#MenuItem + #label: 'Rotate...' + #translateLabel: true + #value: #doRotateImage + #activeHelpKey: #editRotate + ) + #(#MenuItem + #label: '-' + ) + #(#MenuItem + #label: 'Crop' + #translateLabel: true + #submenu: #(#Menu - - #( - #(#MenuItem - #label: 'New...' - #translateLabel: true - #value: #doNewImage - #activeHelpKey: #fileNewImage - ) - #(#MenuItem - #label: '-' - ) - #(#MenuItem - #label: 'Load...' - #translateLabel: true - #value: #doLoadFromClass - #activeHelpKey: #fileLoadFromClass - ) - #(#MenuItem - #label: 'Load From File...' - #translateLabel: true - #value: #doLoadFromFile - #activeHelpKey: #fileLoadFromFile - ) - #(#MenuItem - #label: 'Grab From Screen' - #translateLabel: true - #value: #grabScreenImage - #activeHelpKey: #fileGrabImage - ) - #(#MenuItem - #label: '-' - ) - #(#MenuItem - #label: 'Save' - #translateLabel: true - #value: #doSaveMethod - #activeHelpKey: #fileSaveMethod - #enabled: #imageIsLoadedAndClassDefined - ) - #(#MenuItem - #label: 'Save As...' - #translateLabel: true - #value: #doSaveMethodAs - #activeHelpKey: #fileSaveMethodAs - #enabled: #imageIsLoaded - ) - #(#MenuItem - #label: '-' - ) - #(#MenuItem - #label: 'Save To File...' - #translateLabel: true - #value: #doSaveImageFileAs - #activeHelpKey: #fileSaveAs - #enabled: #imageIsLoaded - ) - #(#MenuItem - #label: 'Save Mask To File...' - #translateLabel: true - #value: #doSaveImageMaskFileAs - #activeHelpKey: #fileSaveMaskAs - #enabled: #imageIsLoaded - ) - #(#MenuItem - #label: '-' + #( + #(#MenuItem + #label: 'All' + #translateLabel: true + #value: #doCropAll + #activeHelpKey: #cropAll ) - #(#MenuItem - #label: 'Print' - #translateLabel: true - #value: #doPrint - #activeHelpKey: #filePrint - #enabled: #imageIsLoaded - ) - #(#MenuItem - #label: '-' - ) - #(#MenuItem - #label: 'Browse Class' - #translateLabel: true - #value: #doBrowseClass - #activeHelpKey: #fileBrowseClass - #enabled: #hasClassDefined - ) - #(#MenuItem - #label: '-' - ) - #(#MenuItem - #label: 'Exit' - #translateLabel: true - #value: #closeRequest - #activeHelpKey: #fileExit - ) - ) nil - nil - ) - ) - #(#MenuItem - #label: 'Edit' - #translateLabel: true - #activeHelpKey: #edit - #enabled: #imageIsLoaded - #submenu: - #(#Menu - - #( - #(#MenuItem - #label: 'Undo' - #translateLabel: true - #value: #doUndo - #activeHelpKey: #editUndo - #enabled: #valueOfCanUndo - ) - #(#MenuItem - #label: '-' - ) - #(#MenuItem - #label: 'Flip - Vertical' - #translateLabel: true - #value: #doFlipVertical - #activeHelpKey: #editFlipVertical - ) - #(#MenuItem - #label: 'Flip - Horizontal' - #translateLabel: true - #value: #doFlipHorizontal - #activeHelpKey: #editFlipHorizontal - ) - #(#MenuItem - #label: '-' - ) - #(#MenuItem - #label: 'Resize...' - #translateLabel: true - #value: #doResizeImage - #activeHelpKey: #editResize - ) - #(#MenuItem - #label: 'Magnify...' - #translateLabel: true - #value: #doMagnifyImage - #activeHelpKey: #editMagnifyImage - ) - #(#MenuItem - #label: 'Rotate...' - #translateLabel: true - #value: #doRotateImage - #activeHelpKey: #editRotate - ) - #(#MenuItem - #label: '-' + #(#MenuItem + #label: '-' ) - #(#MenuItem - #label: 'Crop' - #translateLabel: true - #submenu: - #(#Menu - - #( - #(#MenuItem - #label: 'All' - #translateLabel: true - #value: #doCropAll - #activeHelpKey: #cropAll - ) - #(#MenuItem - #label: '-' - ) - #(#MenuItem - #label: 'Left' - #translateLabel: true - #value: #doCropLeft - #activeHelpKey: #cropLeft - ) - #(#MenuItem - #label: 'Right' - #translateLabel: true - #value: #doCropRight - #activeHelpKey: #cropRight - ) - #(#MenuItem - #label: 'Top' - #translateLabel: true - #value: #doCropTop - #activeHelpKey: #cropTop - ) - #(#MenuItem - #label: 'Bottom' - #translateLabel: true - #value: #doCropBottom - #activeHelpKey: #cropBottom - ) - #(#MenuItem - #label: '-' - ) - #(#MenuItem - #label: 'Manual...' - #translateLabel: true - #value: #doCropManual - #activeHelpKey: #cropManual - ) - ) nil - nil - ) + #(#MenuItem + #label: 'Left' + #translateLabel: true + #value: #doCropLeft + #activeHelpKey: #cropLeft + ) + #(#MenuItem + #label: 'Right' + #translateLabel: true + #value: #doCropRight + #activeHelpKey: #cropRight ) - ) nil - nil - ) - ) - #(#MenuItem - #label: 'ColorMap' - #translateLabel: true - #activeHelpKey: #colorMap - #enabled: #imageIsLoaded - #submenu: - #(#Menu - - #( - #(#MenuItem - #label: '8-Plane' - #translateLabel: true - #value: #colorMapMode: - #activeHelpKey: #colorMap8 - #argument: '8-plane' - #choice: #colorMapMode - #choiceValue: '8-plane' + #(#MenuItem + #label: 'Top' + #translateLabel: true + #value: #doCropTop + #activeHelpKey: #cropTop ) - #(#MenuItem - #label: '4-Plane' - #translateLabel: true - #value: #colorMapMode: - #activeHelpKey: #colorMap4 - #argument: '4-plane' - #choice: #colorMapMode - #choiceValue: '4-plane' + #(#MenuItem + #label: 'Bottom' + #translateLabel: true + #value: #doCropBottom + #activeHelpKey: #cropBottom ) - #(#MenuItem - #label: '2-Plane' - #translateLabel: true - #value: #colorMapMode: - #activeHelpKey: #colorMap2 - #argument: '2-plane' - #choice: #colorMapMode - #choiceValue: '2-plane' + #(#MenuItem + #label: '-' ) - #(#MenuItem - #label: '1-Plane' - #translateLabel: true - #value: #colorMapMode: - #activeHelpKey: #colorMap1 - #argument: '1-plane' - #choice: #colorMapMode - #choiceValue: '1-plane' + #(#MenuItem + #label: 'Manual...' + #translateLabel: true + #value: #doCropManual + #activeHelpKey: #cropManual ) - #(#MenuItem - #label: '-' - ) - #(#MenuItem - #label: '8-Plane + Mask' - #translateLabel: true - #value: #colorMapMode: - #activeHelpKey: #colorMap8M - #argument: '8-plane + mask' - #choice: #colorMapMode - #choiceValue: '8-plane + mask' - ) - #(#MenuItem - #label: '4-Plane + Mask' - #translateLabel: true - #value: #colorMapMode: - #activeHelpKey: #colorMap4M - #argument: '4-plane + mask' - #choice: #colorMapMode - #choiceValue: '4-plane + mask' - ) - #(#MenuItem - #label: '2-Plane + Mask' - #translateLabel: true - #value: #colorMapMode: - #activeHelpKey: #colorMap2M - #argument: '2-plane + mask' - #choice: #colorMapMode - #choiceValue: '2-plane + mask' - ) - #(#MenuItem - #label: '1-Plane + Mask' - #translateLabel: true - #value: #colorMapMode: - #activeHelpKey: #colorMap1M - #argument: '1-plane + mask' - #choice: #colorMapMode - #choiceValue: '1-plane + mask' - ) - #(#MenuItem - #label: '-' - ) - #(#MenuItem - #label: 'Compress colormap' - #translateLabel: true - #value: #compressColorMap - #activeHelpKey: #compressColormap - #enabled: #hasColormap - ) - #(#MenuItem - #label: 'Sort colormap' - #translateLabel: true - #value: #sortColorMap - #enabled: #hasColormap - ) - ) nil + ) + nil nil + ) ) + ) + nil + nil ) - #(#MenuItem - #label: 'Settings' - #translateLabel: true - #submenu: - #(#Menu - - #( - #(#MenuItem - #label: 'Grid Magnification...' - #translateLabel: true - #value: #doChangeGridMagnification - #activeHelpKey: #settingsGridMagnification - ) -"/ #(#MenuItem -"/ #label: '-' -"/ ) -"/ #(#MenuItem -"/ #label: 'Fonts' -"/ #translateLabel: true -"/ #submenuChannel: #menuFont -"/ ) - ) nil - nil + ) + #(#MenuItem + #label: 'ColorMap' + #translateLabel: true + #activeHelpKey: #colorMap + #enabled: #imageIsLoaded + #submenu: + #(#Menu + #( + #(#MenuItem + #label: '8-Plane' + #translateLabel: true + #value: #colorMapMode: + #activeHelpKey: #colorMap8 + #argument: '8-plane' + #choice: #colorMapMode + #choiceValue: '8-plane' + ) + #(#MenuItem + #label: '4-Plane' + #translateLabel: true + #value: #colorMapMode: + #activeHelpKey: #colorMap4 + #argument: '4-plane' + #choice: #colorMapMode + #choiceValue: '4-plane' + ) + #(#MenuItem + #label: '2-Plane' + #translateLabel: true + #value: #colorMapMode: + #activeHelpKey: #colorMap2 + #argument: '2-plane' + #choice: #colorMapMode + #choiceValue: '2-plane' + ) + #(#MenuItem + #label: '1-Plane' + #translateLabel: true + #value: #colorMapMode: + #activeHelpKey: #colorMap1 + #argument: '1-plane' + #choice: #colorMapMode + #choiceValue: '1-plane' + ) + #(#MenuItem + #label: '-' + ) + #(#MenuItem + #label: '8-Plane + Mask' + #translateLabel: true + #value: #colorMapMode: + #activeHelpKey: #colorMap8M + #argument: '8-plane + mask' + #choice: #colorMapMode + #choiceValue: '8-plane + mask' + ) + #(#MenuItem + #label: '4-Plane + Mask' + #translateLabel: true + #value: #colorMapMode: + #activeHelpKey: #colorMap4M + #argument: '4-plane + mask' + #choice: #colorMapMode + #choiceValue: '4-plane + mask' ) - ) - #(#MenuItem - #label: 'History' - #translateLabel: true - #activeHelpKey: #history - #submenuChannel: #menuHistory + #(#MenuItem + #label: '2-Plane + Mask' + #translateLabel: true + #value: #colorMapMode: + #activeHelpKey: #colorMap2M + #argument: '2-plane + mask' + #choice: #colorMapMode + #choiceValue: '2-plane + mask' + ) + #(#MenuItem + #label: '1-Plane + Mask' + #translateLabel: true + #value: #colorMapMode: + #activeHelpKey: #colorMap1M + #argument: '1-plane + mask' + #choice: #colorMapMode + #choiceValue: '1-plane + mask' + ) + #(#MenuItem + #label: '-' + ) + #(#MenuItem + #label: 'Compress colormap' + #translateLabel: true + #value: #compressColorMap + #activeHelpKey: #compressColormap + #enabled: #hasColormap + ) + #(#MenuItem + #label: 'Sort colormap' + #translateLabel: true + #value: #sortColorMap + #enabled: #hasColormap + ) + #(#MenuItem + #label: '-' + ) + #(#MenuItem + #label: 'Reduce number of colors...' + #translateLabel: true + #value: #reduceNumberOfColors + ) + ) + nil + nil ) - #(#MenuItem - #label: 'Help' - #translateLabel: true - #startGroup: #right - #activeHelpKey: #help - #submenuChannel: #menuHelp + ) + #(#MenuItem + #label: 'Settings' + #translateLabel: true + #submenu: + #(#Menu + #( + #(#MenuItem + #label: 'Grid Magnification...' + #translateLabel: true + #value: #doChangeGridMagnification + #activeHelpKey: #settingsGridMagnification + ) + ) + nil + nil ) - ) nil - nil + ) + #(#MenuItem + #label: 'History' + #translateLabel: true + #activeHelpKey: #history + #submenuChannel: #menuHistory + ) + #(#MenuItem + #label: 'Help' + #translateLabel: true + #startGroup: #right + #activeHelpKey: #help + #submenuChannel: #menuHelp + ) + ) + nil + nil ) - - "Modified: / 30.9.1998 / 23:53:12 / cg" ! menuMouseButtonColors @@ -1590,6 +1587,12 @@ ^ self ]. ]. + + changedObject == imageEditView undoImages ifTrue:[ + self valueOfCanUndo value:(changedObject notEmpty). + ^ self. + ]. + super update:something with:aParameter from:changedObject "Modified: / 18.8.1998 / 17:18:42 / cg" @@ -1946,6 +1949,7 @@ evaluate the postOpenAction" imageEditView masterApplication: self. + imageEditView undoImages addDependent:self. imageEditView imageInfoHolder:(self imageInfoHolder). imageEditView activityInfoHolder:(self activityInfoHolder). @@ -2108,6 +2112,7 @@ oldImage depth == 8 ifTrue:[ tmpBits := oldImage bits ] ifFalse:[ + colorMapMode value:prevMode. self warn:('Too many colors in image ( ', oldImage usedColors size printString , ').'). ^ self ] @@ -2331,6 +2336,33 @@ "Modified: / 15.9.1998 / 17:53:32 / cg" ! +reduceNumberOfColors + |s n anyChange img| + + s := Dialog request:'Number of color bits to strip (1-7) ?'. + s isNil ifTrue:[^ self]. + n := Integer readFrom:s onError:0. + (n between:1 and:7) ifFalse:[ + Dialog warn:'Image unchanged'. + ^ self + ]. + + imageEditView makeUndo. + self withExecuteCursorDo:[ + anyChange := imageEditView reduceColorResolutionBy:n. + anyChange ifFalse:[ + Dialog warn:'Image unchanged'. + ] ifTrue:[ + img := imageEditView image. + imageEditView image:img. + self listOfColors contents:(img colorMap). + self findColorMapMode. + self updateLabelsAndHistory. + Dialog information:(img usedColors size printString , ' colors used.') + ] + ]. +! + sortColorMap "calculates a new color map for the image, sorting colors"