*** empty log message ***
authorClaus Gittinger <cg@exept.de>
Wed, 03 Dec 2008 17:47:23 +0100
changeset 2438 bbe9cdf5dac4
parent 2437 079201bf7154
child 2439 9f6c2575f2b1
*** empty log message ***
ImageEditor.st
--- a/ImageEditor.st	Sat Nov 29 00:23:48 2008 +0100
+++ b/ImageEditor.st	Wed Dec 03 17:47:23 2008 +0100
@@ -743,7 +743,7 @@
           label: 'HLS Edit Dialog'
           name: 'HLS Edit Dialog'
           min: (Point 10 10)
-          bounds: (Rectangle 0 0 312 183)
+          bounds: (Rectangle 0 0 312 258)
         )
         component: 
        (SpecCollection
@@ -827,11 +827,31 @@
               step: 1
             )
            (LabelSpec
+              label: 'Color Shift'
+              name: 'Label2'
+              layout: (LayoutFrame 5 0 110 0 -15 0.5 132 0)
+              translateLabel: true
+            )
+           (LabelSpec
               name: 'HueColorLabel'
-              layout: (LayoutFrame 10 0.0 109 0 -10 1.0 148 0)
+              layout: (LayoutFrame 18 0.0 133 0 -41 0.5 217 0)
+              level: -1
               backgroundChannel: hlsColor
               translateLabel: true
             )
+           (LabelSpec
+              label: 'Preview'
+              name: 'Label3'
+              layout: (LayoutFrame 5 0.5 110 0 -5 1 132 0)
+              translateLabel: true
+            )
+           (LabelSpec
+              name: 'PreviewLabel'
+              layout: (LayoutFrame 36 0.5 133 0 -23 1.0 217 0)
+              level: -1
+              translateLabel: true
+              labelChannel: previewImageHolder
+            )
            (HorizontalPanelViewSpec
               name: 'HorizontalPanel1'
               layout: (LayoutFrame 0 0.0 -30 1 0 1.0 0 1)
@@ -4014,24 +4034,35 @@
 
     |bindings hueShift lightValue saturationValue originalColormap firstChange acceptChannel 
      shiftAction avgColorHolder avgColor shiftedColor shiftProcess readySema
-     originalPixels p|
+     originalPixels p previewImage previewImageHolder originalPreviewColormap originalPreviewPixels
+     anyChange |
 
     "/ compute the averageColor in the background (while asking user)
+    avgColorHolder := nil asValue.
+    previewImageHolder := nil asValue.
+
     readySema := Semaphore new.
     [
         |image|
 
         image := imageEditView image.
         originalColormap := image colorMap copy.
+        originalPixels := image bits.
         avgColor := image averageColor.
-        originalPixels := image bits.
+        avgColorHolder value:avgColor.
+
+        previewImage := self image magnifiedPreservingRatioTo:100@100.
+        previewImageHolder value: previewImage.
+        originalPreviewColormap := previewImage colorMap copy.
+        originalPreviewPixels := previewImage bits.
+
         readySema signal.
     ] forkAt:7.
 
     acceptChannel := TriggerValue new.
-    avgColorHolder := avgColor asValue.
 
     firstChange := true.
+    anyChange := false.
 
     shiftedColor := [:clr :hShift :lFactor :sFactor |
                         Color 
@@ -4048,6 +4079,7 @@
             firstChange ifTrue:[
                 imageEditView makeUndo.
                 firstChange := false.
+                anyChange := true.
             ].
             readySema notNil ifTrue:[readySema wait. readySema := nil].
 
@@ -4057,6 +4089,13 @@
 
             avgColorHolder value:(shiftedColor value:avgColor value:hShift value:lFactor value:sFactor).
 
+            previewImage
+                colorMap:originalPreviewColormap copy;
+                bits:originalPreviewPixels copy;
+                release;
+                colorMapProcessing:[:clr | shiftedColor value:clr value:hShift value:lFactor value:sFactor].
+            previewImageHolder value:nil; value:previewImage.
+
             shiftProcess notNil ifTrue:[
                 shiftProcess terminate.
                 shiftProcess waitUntilTerminated.
@@ -4089,10 +4128,11 @@
 
     bindings at:#acceptChannel put:acceptChannel.
     bindings at:#hlsColor put:avgColorHolder.
+    bindings at:#previewImageHolder put:previewImageHolder.
 
     (self openDialogInterface:#changeHLSDialogSpec withBindings:bindings) 
     ifFalse:[ 
-        firstChange ~~ true ifTrue:[
+        anyChange ifTrue:[
             imageEditView undo
         ]
     ].
@@ -4100,8 +4140,11 @@
     (p := shiftProcess) notNil ifTrue:[
         p waitUntilTerminated.
     ].
-    self updateImage.
-    self updateImagePreView.
+
+    anyChange ifTrue:[
+        self updateImage.
+        self updateImagePreView.
+    ].
 !
 
 clearMaskedPixels