*** empty log message ***
authorClaus Gittinger <cg@exept.de>
Wed, 03 Aug 2005 22:20:46 +0200
changeset 1928 06c3681a79b3
parent 1927 c5068006116d
child 1929 13237e16b048
*** empty log message ***
ImageEditor.st
--- a/ImageEditor.st	Wed Aug 03 20:06:23 2005 +0200
+++ b/ImageEditor.st	Wed Aug 03 22:20:46 2005 +0200
@@ -2913,10 +2913,23 @@
     colorMapMode setValue:colorMapModeKey.
 
     listOfColors := self listOfColors.
+
     image depth > 12 ifTrue:[
         listOfColors removeAll.
         image colorMap isEmptyOrNil ifTrue:[
             someOrAllUsedColors := image usedColorsMax:10000.
+            someOrAllUsedColors := someOrAllUsedColors asArray.
+            someOrAllUsedColors sort:[:a :b |
+                                    a redByte == b redByte ifTrue:[
+                                        a greenByte == b greenByte ifTrue:[
+                                            a blueByte < b blueByte
+                                        ] ifFalse:[
+                                            a greenByte < b greenByte 
+                                        ]
+                                    ] ifFalse:[
+                                        a redByte < b redByte 
+                                    ]
+                              ].
             listOfColors addAll:someOrAllUsedColors.
             "/ listOfColors add:Color black; add:Color white.
         ] ifFalse:[
@@ -2948,7 +2961,7 @@
 !
 
 update:something with:aParameter from:changedObject
-    |clrIndex img clr|
+    |clrIndex img clr changedColor|
 
     img := self image.
 
@@ -2978,9 +2991,15 @@
             (self hasMask) ifTrue:[
                 clrIndex := clrIndex - 1.
             ].
-
-            (img colorMap ? drawingColormap) at:clrIndex put:(changedObject at:aParameter).
-            self colorMapChanged.
+            changedColor := changedObject at:aParameter.
+            img colorMap notNil ifTrue:[
+                img colorMap at:clrIndex put:changedColor.
+                self colorMapChanged.
+            ] ifFalse:[
+                drawingColormap notNil ifTrue:[
+                    drawingColormap at:clrIndex put:changedColor.
+                ].
+            ].
             ^ self
         ].
         ^ self
@@ -3114,19 +3133,41 @@
 
 !ImageEditor methodsFor:'data access'!
 
-atColor:aOldColor put:aNewColor
+atColor:aOldColor put:newColor
     "a color changed to a new color
     "
-    |index list|
+    |index list oldColor image newImage|
 
     list  := self listOfColors.
     index := list identityIndexOf:aOldColor.
 
     index ~~ 0 ifTrue:[
-        list at:index put:aNewColor
+        oldColor := list at:index.
+        list at:index put:newColor
     ] ifFalse:[
         self error:'internal error' mayProceed:true.
-        list add:aNewColor
+        list add:newColor
+    ].
+
+    image := self image.
+    (image colorMap isNil 
+    and:[drawingColormap isNil]) ifTrue:[
+        oldColor notNil ifTrue:[
+            imageEditView makeUndo.
+            newImage := image copy.
+            newImage
+                colorsFromX:0 y:0 toX:(image width-1) y:(image height-1) 
+                do:[:x :y :clr |
+                    |newClr|
+
+                    newClr := (clr = oldColor) ifTrue:newColor ifFalse:clr.
+                    newImage colorAtX:x y:y put:newClr
+                ].
+            imageEditView image:newImage.
+            imageEditView setModified.
+            self updateImage.
+            self updateImagePreView.
+        ]
     ].
 !
 
@@ -3790,6 +3831,7 @@
                             tmpBits := oldImage bits
                         ] ifFalse:[
                             colorMapMode value:prevMode.
+                            self findColorMapMode.    
                             self warn:('Too many used colors in image (', oldImage usedColors size printString , ').').
                             ^ self
 "/                            (self confirm:('Too many used colors in image (', oldImage usedColors size printString , ').\\Dither ?' withCRs))