# HG changeset patch # User Claus Gittinger # Date 1084279788 -7200 # Node ID 36b4fcf69f1cd22cc039f70ff2b69b6b4e9e5490 # Parent 170a0f24260b946c8f2be78c858eec7fb73415e2 removed container diff -r 170a0f24260b -r 36b4fcf69f1c ColorEditor.st --- a/ColorEditor.st Tue May 11 14:49:21 2004 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,596 +0,0 @@ -" - COPYRIGHT (c) 1995 by eXept Software AG - All Rights Reserved - - This software is furnished under a license and may be used - only in accordance with the terms of that license and with the - inclusion of the above copyright notice. This software may not - be provided or otherwise made available to, or used by, any - other person. No title to or ownership of the software is - hereby transferred. -" - -"{ Package: 'stx:libtool2' }" - -SimpleDialog subclass:#ColorEditor - instanceVariableNames:'red green blue hue light saturation colorNameHolder' - classVariableNames:'' - poolDictionaries:'' - category:'Interface-UIPainter' -! - -!ColorEditor class methodsFor:'documentation'! - -copyright -" - COPYRIGHT (c) 1995 by eXept Software AG - All Rights Reserved - - This software is furnished under a license and may be used - only in accordance with the terms of that license and with the - inclusion of the above copyright notice. This software may not - be provided or otherwise made available to, or used by, any - other person. No title to or ownership of the software is - hereby transferred. -" -! - -documentation -" - An edit-dialog for colors. -" -! - -examples -" - [exBegin] - |editor color| - - editor := ColorEditor new. - editor color:(Color green). - editor open. - editor accepted ifTrue:[ - editor color inspect. - ] - [exEnd] -" -! ! - -!ColorEditor class methodsFor:'interface specs'! - -windowSpec - "This resource specification was automatically generated - by the UIPainter of ST/X." - - "Do not manually edit this!! If it is corrupted, - the UIPainter may not be able to read the specification." - - " - UIPainter new openOnClass:ColorEditor andSelector:#windowSpec - ColorEditor new openInterface:#windowSpec - ColorEditor open - " - - - - ^ - #(FullSpec - name: windowSpec - window: - (WindowSpec - label: 'Define Color' - name: 'Define Color' - min: (Point 340 260) - max: (Point nil 260) - bounds: (Rectangle 0 0 453 260) - ) - component: - (SpecCollection - collection: ( - (VerticalPanelViewSpec - name: 'RGBLabelPanel' - layout: (LayoutFrame 0 0 0 0 58 0 76 0) - horizontalLayout: fit - verticalLayout: spreadSpace - horizontalSpace: 3 - verticalSpace: 3 - component: - (SpecCollection - collection: ( - (LabelSpec - label: 'Red:' - name: 'RedLabel' - translateLabel: true - adjust: right - useDefaultExtent: true - ) - (LabelSpec - label: 'Green:' - name: 'GreenLabel' - translateLabel: true - adjust: right - useDefaultExtent: true - ) - (LabelSpec - label: 'Blue:' - name: 'BlueLabel' - translateLabel: true - adjust: right - useDefaultExtent: true - ) - ) - - ) - ) - (VerticalPanelViewSpec - name: 'RGBSliderPanel' - layout: (LayoutFrame 62 0 0 0 -166 1 76 0) - horizontalLayout: fit - verticalLayout: spreadSpace - horizontalSpace: 3 - verticalSpace: 3 - component: - (SpecCollection - collection: ( - (SliderSpec - name: 'RedSlider' - tabable: false - model: red - orientation: horizontal - stop: 255 - step: 1 - backgroundColor: (Color 100.0 0.0 0.0) - extent: (Point 225 16) - ) - (SliderSpec - name: 'GreenSlider' - tabable: false - model: green - orientation: horizontal - stop: 255 - step: 1 - backgroundColor: (Color 0.0 100.0 0.0) - extent: (Point 225 16) - ) - (SliderSpec - name: 'BlueSlider' - tabable: false - model: blue - orientation: horizontal - stop: 255 - step: 1 - backgroundColor: (Color 0.0 0.0 100.0) - extent: (Point 225 16) - ) - ) - - ) - ) - (VerticalPanelViewSpec - name: 'RGBFieldPanel' - layout: (LayoutFrame -161 1 0 0 -123 1 76 0) - horizontalLayout: fit - verticalLayout: spreadSpace - horizontalSpace: 3 - verticalSpace: 3 - component: - (SpecCollection - collection: ( - (InputFieldSpec - name: 'RedField' - model: red - type: numberInRange - numChars: 3 - minValue: 0 - maxValue: 255 - acceptOnPointerLeave: false - extent: (Point 38 20) - ) - (InputFieldSpec - name: 'GreenField' - model: green - type: numberInRange - numChars: 3 - minValue: 0 - maxValue: 255 - acceptOnPointerLeave: false - extent: (Point 38 20) - ) - (InputFieldSpec - name: 'BlueField' - model: blue - type: numberInRange - numChars: 3 - minValue: 0 - maxValue: 255 - acceptOnPointerLeave: false - extent: (Point 38 20) - ) - ) - - ) - ) - (VerticalPanelViewSpec - name: 'HLSLabelPanel' - layout: (LayoutFrame 0 0 86 0 58 0 163 0) - horizontalLayout: fit - verticalLayout: spreadSpace - horizontalSpace: 3 - verticalSpace: 3 - component: - (SpecCollection - collection: ( - (LabelSpec - label: 'Hue:' - name: 'Label1' - translateLabel: true - adjust: right - useDefaultExtent: true - ) - (LabelSpec - label: 'Light:' - name: 'Label2' - translateLabel: true - adjust: right - useDefaultExtent: true - ) - (LabelSpec - label: 'Sat:' - name: 'Label3' - translateLabel: true - adjust: right - useDefaultExtent: true - ) - ) - - ) - ) - (VerticalPanelViewSpec - name: 'HLSSliderPanel' - layout: (LayoutFrame 62 0 86 0 -166 1 163 0) - horizontalLayout: fit - verticalLayout: spreadSpace - horizontalSpace: 3 - verticalSpace: 3 - component: - (SpecCollection - collection: ( - (SliderSpec - name: 'Slider1' - tabable: false - model: hue - orientation: horizontal - stop: 359 - step: 1 - keyboardStep: 1 - extent: (Point 225 16) - ) - (SliderSpec - name: 'Slider2' - tabable: false - model: light - orientation: horizontal - step: 1 - backgroundColor: (Color 66.9993 66.9993 66.9993) - keyboardStep: 1 - extent: (Point 225 16) - ) - (SliderSpec - name: 'Slider3' - tabable: false - model: saturation - orientation: horizontal - step: 1 - backgroundColor: (Color 66.9993 66.9993 66.9993) - keyboardStep: 1 - extent: (Point 225 16) - ) - ) - - ) - ) - (VerticalPanelViewSpec - name: 'HLSFieldPanel' - layout: (LayoutFrame -161 1 86 0 -123 1 163 0) - horizontalLayout: fit - verticalLayout: spreadSpace - horizontalSpace: 3 - verticalSpace: 3 - component: - (SpecCollection - collection: ( - (InputFieldSpec - name: 'EntryField1' - model: hue - type: numberInRange - numChars: 3 - minValue: 0 - maxValue: 359 - acceptOnPointerLeave: false - extent: (Point 38 20) - ) - (InputFieldSpec - name: 'EntryField2' - model: light - type: numberInRange - numChars: 3 - minValue: 0 - maxValue: 100 - acceptOnPointerLeave: false - extent: (Point 38 20) - ) - (InputFieldSpec - name: 'EntryField3' - model: saturation - type: numberInRange - numChars: 3 - minValue: 0 - maxValue: 100 - acceptOnPointerLeave: false - extent: (Point 38 20) - ) - ) - - ) - ) - (ViewSpec - name: 'Box1' - layout: (LayoutFrame -117 1 4 0.0 -3 1.0 -39 1.0) - level: 1 - component: - (SpecCollection - collection: ( - (LabelSpec - label: 'Preview' - name: 'PreviewBox' - layout: (LayoutFrame 2 0.0 2 0.0 -2 1.0 -2 1.0) - level: -1 - translateLabel: true - ) - ) - - ) - ) - (LabelSpec - label: 'Color Name:' - name: 'ColorNameLabel' - layout: (LayoutFrame 0 0 190 0 106 0 212 0) - translateLabel: true - adjust: right - ) - (InputFieldSpec - name: 'ColorNameField' - layout: (LayoutFrame 110 0 190 0 -123 1 212 0) - model: colorNameHolder - immediateAccept: true - acceptOnReturn: true - acceptOnTab: true - acceptOnLostFocus: true - acceptOnPointerLeave: false - ) - (HorizontalPanelViewSpec - name: 'HorizontalPanel1' - layout: (LayoutFrame 0 0.0 -32 1 0 1.0 0 1.0) - horizontalLayout: fitSpace - verticalLayout: centerMax - horizontalSpace: 3 - verticalSpace: 3 - reverseOrderIfOKAtLeft: true - component: - (SpecCollection - collection: ( - (ActionButtonSpec - label: 'Cancel' - name: 'CancelButton' - translateLabel: true - resizeForLabel: false - tabable: true - model: cancel - useDefaultExtent: true - ) - (ActionButtonSpec - label: 'OK' - name: 'OKButton' - translateLabel: true - resizeForLabel: false - tabable: true - model: accept - isDefault: true - defaultable: true - useDefaultExtent: true - ) - ) - - ) - ) - ) - - ) - ) -! ! - -!ColorEditor methodsFor:'accessing'! - -color - ^Color redByte:(red value) greenByte:(green value) blueByte:(blue value) -! - -color:aColor - aColor notNil ifTrue:[ - self red value:aColor redByte. - self green value:aColor greenByte. - self blue value:aColor blueByte. - ] -! - -colorName - ^ colorNameHolder value -! ! - -!ColorEditor methodsFor:'actions'! - -colorChanged - |box clr| - - box := self componentAt: #PreviewBox. - box isNil ifTrue:[^ self "called before setup"]. - - clr := self color. - box backgroundColor:clr. - box foregroundColor:(clr brightness < 0.5 - ifTrue:[Color white] - ifFalse:[Color black]). -! - -colorNameChanged - "compute rgb and hls (if possible)" - - |clr h| - - clr := Color name:colorNameHolder value ifIllegal:nil. - clr isNil ifTrue:[ - ^ self - ]. - - red value:clr redByte withoutNotifying:self. - green value:clr greenByte withoutNotifying:self. - blue value:clr blueByte withoutNotifying:self. - - h := clr hue. - h notNil ifTrue:[ - hue value:(h rounded) withoutNotifying:self. - ]. - light value:(clr light rounded) withoutNotifying:self. - saturation value:(clr saturation rounded) withoutNotifying:self. - - self colorChanged -! - -hlsSliderChanged - "compute rgb" - - Color withRGBFromHue:hue value light:light value saturation:saturation value do:[:r :g :b | - red value:(r * 255 / 100) rounded withoutNotifying:self. - green value:(g * 255 / 100) rounded withoutNotifying:self. - blue value:(b * 255 / 100) rounded withoutNotifying:self. - ]. - colorNameHolder value:'' withoutNotifying:self. - self colorChanged -! - -rgbSliderChanged - "compute hls" - - |r g b| - - r := self red value. - g := self green value. - b := self blue value. - - Color withHLSFromRed:(r * 100 / 255) green:(g * 100 / 255) blue:(b * 100 / 255) do:[:h :l :s | - h isNil ifTrue:[ - "/ achromatic - ] ifFalse:[ - self hue value:(h rounded) withoutNotifying:self. - ]. - self light value:(l rounded) withoutNotifying:self. - self saturation value:(s rounded) withoutNotifying:self. - ]. - self colorNameHolder value:'' withoutNotifying:self. - self colorChanged -! ! - -!ColorEditor methodsFor:'aspects'! - -blue - blue isNil ifTrue:[ - blue := 0 asValue. - blue addDependent:self. - ]. - ^blue -! - -colorNameHolder - colorNameHolder isNil ifTrue:[ - colorNameHolder := '' asValue. - colorNameHolder addDependent:self. - ]. - ^colorNameHolder -! - -green - green isNil ifTrue:[ - green := 0 asValue. - green addDependent:self. - ]. - ^green -! - -hue - hue isNil ifTrue:[ - hue := 0 asValue. - hue addDependent:self. - ]. - ^hue -! - -light - light isNil ifTrue:[ - light := 0 asValue. - light addDependent:self. - ]. - ^light -! - -red - red isNil ifTrue:[ - red := 0 asValue. - red addDependent:self. - ]. - ^red -! - -saturation - saturation isNil ifTrue:[ - saturation := 0 asValue. - saturation addDependent:self. - ]. - ^saturation -! ! - -!ColorEditor methodsFor:'change & update'! - -update:something with:aParameter from:changedObject - (changedObject == red - or:[changedObject == green - or:[changedObject == blue]]) ifTrue:[ - ^ self rgbSliderChanged - ]. - - (changedObject == hue - or:[changedObject == light - or:[changedObject == saturation]]) ifTrue:[ - ^ self hlsSliderChanged - ]. - - (changedObject == colorNameHolder) ifTrue:[ - ^ self colorNameChanged - ]. - - ^ super update:something with:aParameter from:changedObject -! ! - -!ColorEditor methodsFor:'startup & release'! - -postBuildWith:aBuilder - super postBuildWith:aBuilder. - self colorChanged. - - "Modified: / 6.9.1998 / 22:55:25 / cg" -! ! - -!ColorEditor class methodsFor:'documentation'! - -version - ^ '$Header$' -! !