# HG changeset patch # User Claus Gittinger # Date 1228322843 -3600 # Node ID bbe9cdf5dac47c0353975f6503d35b5b72ec52f7 # Parent 079201bf7154659268421819a704f74a7d753ffe *** empty log message *** diff -r 079201bf7154 -r bbe9cdf5dac4 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