You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@royale.apache.org by yi...@apache.org on 2022/07/24 15:52:18 UTC

[royale-asjs] branch develop updated: Some improvements to ColorPicker - also, start showing palette in emulation

This is an automated email from the ASF dual-hosted git repository.

yishayw pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/royale-asjs.git


The following commit(s) were added to refs/heads/develop by this push:
     new 0bcbdbc158 Some improvements to ColorPicker - also, start showing palette in emulation
     new 63db3dbcd2 Merge branch 'develop' of https://github.com/apache/royale-asjs into develop
0bcbdbc158 is described below

commit 0bcbdbc158f7610a9f98347ac5c120f2af8aee4e
Author: Yishay Weiss <yi...@hotmail.com>
AuthorDate: Sun Jul 24 18:52:00 2022 +0300

    Some improvements to ColorPicker - also, start showing palette in emulation
---
 .../Basic/src/main/resources/basic-manifest.xml    |   1 +
 .../SolidBackgroundSelectableItemRendererBead.as   |   9 +-
 .../beads/models/ArrayListColorSelectionModel.as   |  65 +++++++++++
 .../html/supportClasses/ColorItemRenderer.as       |  26 ++---
 .../MXRoyale/src/main/resources/defaults.css       |  10 +-
 .../src/main/royale/mx/controls/ColorPicker.as     |  49 +++++++-
 .../controls/colorPickerClasses/WebSafePalette.as  | 126 +++++++++++++++++++++
 7 files changed, 261 insertions(+), 25 deletions(-)

diff --git a/frameworks/projects/Basic/src/main/resources/basic-manifest.xml b/frameworks/projects/Basic/src/main/resources/basic-manifest.xml
index f62886f611..64d184c470 100644
--- a/frameworks/projects/Basic/src/main/resources/basic-manifest.xml
+++ b/frameworks/projects/Basic/src/main/resources/basic-manifest.xml
@@ -87,6 +87,7 @@
     <component id="ArraySelectionModel" class="org.apache.royale.html.beads.models.ArraySelectionModel"/>
     <component id="ArrayMultiSelectionModel" class="org.apache.royale.html.beads.models.ArrayMultiSelectionModel"/>
     <component id="ArrayColorSelectionModel" class="org.apache.royale.html.beads.models.ArrayColorSelectionModel"/>
+    <component id="ArrayListColorSelectionModel" class="org.apache.royale.html.beads.models.ArrayListColorSelectionModel"/>
     <component id="MultiSelectionCollectionViewModel" class="org.apache.royale.html.beads.models.MultiSelectionCollectionViewModel"/>
     <component id="MultiSelectionTreeModel" class="org.apache.royale.html.beads.models.MultiSelectionTreeModel"/>
     <component id="SingleSelectionCollectionViewModel" class="org.apache.royale.html.beads.models.SingleSelectionCollectionViewModel"/>
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/SolidBackgroundSelectableItemRendererBead.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/SolidBackgroundSelectableItemRendererBead.as
index 47cb962f14..2815ea38b4 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/SolidBackgroundSelectableItemRendererBead.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/SolidBackgroundSelectableItemRendererBead.as
@@ -25,6 +25,7 @@ package org.apache.royale.html.beads
     import org.apache.royale.core.IBead;
     import org.apache.royale.core.IUIBase;
     import org.apache.royale.core.IStrand;
+    import org.apache.royale.utils.CSSUtils;
 
 	/**
 	 *  UnselectableElement bead prevents from text selection of html element
@@ -68,13 +69,9 @@ package org.apache.royale.html.beads
             }
             COMPILE::JS
             {
+                super.updateRenderer();
                 var element:HTMLElement = (_strand as IUIBase).element;
-                if (selected)
-                    element.style.backgroundColor = '#9C9C9C';
-                else if (hovered)
-                    element.style.backgroundColor = '#ECECEC';
-                else
-                    element.style.backgroundColor = 'transparent';
+                element.style.backgroundColor = CSSUtils.attributeFromColor(useColor);
             }
         }
         
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/ArrayListColorSelectionModel.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/ArrayListColorSelectionModel.as
new file mode 100644
index 0000000000..4fdee77634
--- /dev/null
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/models/ArrayListColorSelectionModel.as
@@ -0,0 +1,65 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+package org.apache.royale.html.beads.models
+{
+	import org.apache.royale.core.IColorModel;
+	import org.apache.royale.events.Event;
+
+    /**
+     *  The ArrayListColorSelectionModel class is a color selection model for
+     *  a dataProvider that is an array list.
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 10.2
+     *  @playerversion AIR 2.6
+     *  @productversion Royale 0.9.10
+     */
+	public class ArrayListColorSelectionModel extends ArrayListSelectionModel implements IColorModel
+	{
+        /**
+         *  Constructor.
+         *  
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion Royale 0.9.10
+         */
+		public function ArrayListColorSelectionModel()
+		{
+			super();
+			addEventListener("selectedItemChanged", dispatchChangeEvent);
+			addEventListener("selectedIndexChanged", dispatchChangeEvent);
+		}
+		
+		protected function dispatchChangeEvent(event:Event):void
+		{
+			dispatchEvent(new Event("change"));
+		}
+		
+		public function get color():Number
+		{
+			return selectedItem == null ? NaN : Number(selectedItem);
+		}
+		public function set color(value:Number):void
+		{
+			selectedItem = value;
+		}
+		
+	}
+}
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/ColorItemRenderer.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/ColorItemRenderer.as
index 547ad8b305..bc2236cbde 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/ColorItemRenderer.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/ColorItemRenderer.as
@@ -66,19 +66,19 @@ package org.apache.royale.html.supportClasses
 		override public function set data(value:Object):void
 		{
 			super.data = value;
-            
-            var color:uint;
-            if (!isNaN(uint(data)))
-            {
-                color = uint(data);
-            } else if (dataField)
-            {
-                color = uint(data[dataField]);
-            } else
-            {
-                color = 0x000000;
-            }
-            backgroundBead.backgroundColor = color;
+			var color:uint;
+			if (!isNaN(uint(data)))
+			{
+				color = uint(data);
+			} else if (dataField)
+			{
+				color = uint(data[dataField]);
+			} else
+			{
+				color = 0x000000;
+			}
+			backgroundBead.backgroundColor = color;
+			backgroundBead.updateRenderer();
 		}
 	}
 }
diff --git a/frameworks/projects/MXRoyale/src/main/resources/defaults.css b/frameworks/projects/MXRoyale/src/main/resources/defaults.css
index 68236d5501..8aafb41356 100644
--- a/frameworks/projects/MXRoyale/src/main/resources/defaults.css
+++ b/frameworks/projects/MXRoyale/src/main/resources/defaults.css
@@ -206,10 +206,16 @@ CheckBox
 
 ColorPicker
 {
-	IBeadModel: ClassReference("org.apache.royale.html.beads.models.ColorModel");
+	IBeadModel: ClassReference("org.apache.royale.html.beads.models.ArrayListColorSelectionModel");
 	IBeadView: ClassReference("org.apache.royale.html.beads.ColorPickerView");
 	IBeadController: ClassReference("org.apache.royale.html.beads.controllers.ComboBoxController");
-	IPopUp: ClassReference("org.apache.royale.html.supportClasses.ColorPickerPopUp");
+	IPopUp: ClassReference("org.apache.royale.html.supportClasses.ColorPickerPopUpWithPalette");
+}
+
+Basic|ColorPalette
+{
+	IBeadModel: ClassReference("org.apache.royale.html.beads.models.ArrayListSelectionModel");
+	IDataProviderItemRendererMapper: ClassReference("org.apache.royale.html.beads.DataItemRendererFactoryForArrayList");
 }
 
 ComboBox
diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/ColorPicker.as b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/ColorPicker.as
index 3db9f5d5e0..1e8364a61a 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/ColorPicker.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/ColorPicker.as
@@ -23,6 +23,8 @@ package mx.controls
     import org.apache.royale.core.IColorModel;
 	//import mx.controls.ComboBase;
     import mx.core.UIComponent;
+    import mx.controls.colorPickerClasses.WebSafePalette;
+    import org.apache.royale.core.ISelectionModel;
 /*
 import flash.display.DisplayObject;
 import flash.events.Event;
@@ -34,7 +36,6 @@ import flash.geom.Rectangle;
 import flash.ui.Keyboard;
 import flash.utils.getTimer;
 import mx.controls.colorPickerClasses.SwatchPanel;
-import mx.controls.colorPickerClasses.WebSafePalette;
 import mx.core.LayoutDirection;
 import mx.core.UIComponent;
 import mx.core.UIComponentGlobals;
@@ -502,8 +503,8 @@ public class ColorPicker extends UIComponent //ComboBase
         super();
 
         typeNames = "ColorPicker";
-        //if (!isModelInited)
-        //    loadDefaultPalette();
+        if (!isModelInited)
+           loadDefaultPalette();
 
         // Make editable false so that focus doesn't go
         // to the comboBase's textInput which is not used by CP
@@ -555,7 +556,7 @@ public class ColorPicker extends UIComponent //ComboBase
     /**
      *  @private
      */
-    //private var isModelInited:Boolean = false;
+    private var isModelInited:Boolean = false;
 
     /**
      *  @private
@@ -689,6 +690,46 @@ public class ColorPicker extends UIComponent //ComboBase
     {
         (model as IColorModel).color = uint(value);
     }
+
+    /**
+     *  @private
+     *  Load Default Palette
+     */
+    private function loadDefaultPalette():void
+    {
+        // Initialize default swatch list
+        if (!dataProvider || dataProvider.length < 1)
+        {
+            var wsp:WebSafePalette = new WebSafePalette();
+            dataProvider = wsp.getList();
+        }
+    }
+    //----------------------------------
+    //  dataProvider
+    //----------------------------------
+
+    [Bindable("collectionChange")]
+    [Inspectable(category="Data")]
+
+    /**
+     *  @private
+     *  The dataProvider for the ColorPicker control.
+     *  The default dataProvider is an Array that includes all
+     *  the web-safe colors.
+     *
+     *  @helpid 4929
+     */
+    public function set dataProvider(value:Object):void
+    {
+        (model as ISelectionModel).dataProvider = value;
+        isModelInited = true;
+    }
+
+    public function get dataProvider():Object
+    {
+        return (model as ISelectionModel).dataProvider;
+    }
+
 }
 
 } 
diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/colorPickerClasses/WebSafePalette.as b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/colorPickerClasses/WebSafePalette.as
new file mode 100644
index 0000000000..3b27db4b7f
--- /dev/null
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/colorPickerClasses/WebSafePalette.as
@@ -0,0 +1,126 @@
+
+////////////////////////////////////////////////////////////////////////////////
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+
+package mx.controls.colorPickerClasses
+{
+
+import mx.collections.ArrayList;
+import mx.collections.IList;
+
+[ExcludeClass]
+
+/**
+ *  @private
+ */
+public class WebSafePalette
+{
+//     include "../../core/Version.as";
+
+	//--------------------------------------------------------------------------
+    //
+    //  Constructor
+    //
+    //--------------------------------------------------------------------------
+
+    /**
+     *  Constructor.
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    public function WebSafePalette()
+    {
+		super();
+    }
+    
+    //--------------------------------------------------------------------------
+    //
+    //  Methods
+    //
+    //--------------------------------------------------------------------------
+    
+    /**
+     *  @private
+     */
+    public function getList():IList /* of Number */
+    {
+		// Dynamically generate the default websafe color palette.
+        var dp:IList = new ArrayList();
+        
+		var n:Number = 0;
+        
+		var spacer:Number = 0x000000;
+        
+		var c1:Array = [ 0x000000, 0x333333, 0x666666, 0x999999,
+						 0xCCCCCC, 0xFFFFFF, 0xFF0000, 0x00FF00,
+						 0x0000FF, 0xFFFF00, 0x00FFFF, 0xFF00FF ];
+        
+		var ra:Array = [ "00", "00", "00", "00", "00", "00",
+						 "33", "33", "33", "33", "33", "33",
+						 "66", "66", "66", "66", "66", "66" ];
+        
+		var rb:Array = [ "99", "99", "99", "99", "99", "99",
+						 "CC", "CC", "CC", "CC", "CC", "CC",
+						 "FF", "FF", "FF", "FF", "FF", "FF" ];
+        
+		var g:Array = [ "00", "33", "66", "99", "CC", "FF",
+						"00", "33", "66", "99", "CC", "FF",
+						"00", "33", "66", "99", "CC", "FF" ];
+        
+		var b:Array = [ "00", "33", "66", "99", "CC", "FF",
+						"00", "33", "66", "99", "CC", "FF" ];
+
+        for (var x:int = 0; x < 12; x++)
+        {
+            for (var j:int = 0; j < 20; j++)
+            {
+                var item:Number;
+                
+				if (j == 0)
+                {
+                    item = c1[x];
+                    
+                }
+                else if (j == 1)
+                {
+                    item = spacer;
+                }
+                else
+                {
+                    var r:String;
+                    if (x < 6)
+                        r = ra[j - 2];
+                    else
+                        r = rb[j - 2];
+                    item = Number("0x" + r + g[j - 2] + b[x]);
+                }
+                
+				dp.addItem(item);
+                n++;
+            }
+        }
+
+        return dp;
+    }
+}
+
+}