Index: lang/actionscript/colorpicker/kugyu/ColorCircle.as
===================================================================
--- lang/actionscript/colorpicker/kugyu/ColorCircle.as (revision 7192)
+++ lang/actionscript/colorpicker/kugyu/ColorCircle.as (revision 7193)
@@ -4,23 +4,86 @@
 	public class ColorCircle extends Sprite
 	{
+		private static const radToDeg:Number = 180.0/Math.PI;
+		
 		private var mImg:Bitmap;
 		private var mImgData:BitmapData;
+		private var mCursor:Sprite;
+		
+		private var mH:Number;
+		private var mS:Number;
+		private var mV:Number;
+		private var mCenter:int;
 
 		function ColorCircle(R:int)
 		{
+			mCenter = R;
+			mV = 1;
+			
 			addChild(
 				generateColors(graphics, R*2)
 			);
+			
+			addChild(mCursor = createCursor());
+			
+			setHSV(0, 0, 1);
+		}
+		
+		private function createCursor():Sprite
+		{
+			var s:Sprite = new Sprite();
+			var g:Graphics = s.graphics;
+			
+			g.lineStyle(1, 0);
+			g.beginFill(0xffffff);
+			g.drawCircle(0, 0, 2);
+			g.endFill();
+			
+			return s;
+		}
+		
+		public function setHSV(H:Number, S:Number, V:Number):void
+		{
+			if (S<0) S=0;
+			if (S>1) S=1;
+			
+			mH = H;
+			mS = S;
+			mV = V;
+			
+			updateCursor();
+		}
+		
+		public function updateCursor():void
+		{
+			var x:Number = int(Math.cos(mH) * mS * Number(mCenter));
+			var y:Number = int(Math.sin(mH) * mS * Number(mCenter));
+			
+			mCursor.x = x + mCenter;
+			mCursor.y = y + mCenter;
+		}
+		
+		public function setByMousePos():void
+		{
+			var x:Number = mouseX - mCenter;
+			var y:Number = mouseY - mCenter;
+			
+			var S:Number = Math.sqrt(x*x + y*y) / Number(mCenter);
+			var H:Number = Math.atan2(y, x);
+			setHSV(H, S, mV);
+		}
+		
+		public function get rgb():uint
+		{
+			return ColorConv.HSVtoRGB(mH*radToDeg, mS, mV);
 		}
 		
 		private function generateColors(g:Graphics, size:int):Bitmap
 		{
-			mImgData = new BitmapData(size, size);
+			mImgData = new BitmapData(size, size, true, 0);
 			mImg = new Bitmap(mImgData);
 			
 			var x:int;
 			var y:int;
-			var center:int = size/2;
-			var radToDeg:Number = 180.0/Math.PI;
+			var center:int = mCenter;
 			
 			for (y = 0;y < size;y++)
@@ -39,5 +102,5 @@
 					
 					
-					mImgData.setPixel32(x, y, (uint(alpha*255)<<24)|ColorConv.HSVtoRGB(H*radToDeg, S, 0.8));
+					mImgData.setPixel32(x, y, (uint(alpha*255)<<24)|ColorConv.HSVtoRGB(H*radToDeg, S, mV));
 				}
 			}
Index: lang/actionscript/colorpicker/kugyu/ColorPicker.as
===================================================================
--- lang/actionscript/colorpicker/kugyu/ColorPicker.as (revision 7188)
+++ lang/actionscript/colorpicker/kugyu/ColorPicker.as (revision 7193)
@@ -2,4 +2,5 @@
 {
 	import flash.display.*;
+	import flash.events.*;
 	public class ColorPicker extends Sprite
 	{
@@ -7,18 +8,23 @@
 		function ColorPicker(w:int, h:int)
 		{
-			drawBase(graphics, w, h);
-			
+		
 			mCircle = new ColorCircle(int(h/2.2));
+			mCircle.addEventListener(MouseEvent.MOUSE_DOWN, onCircleMouseDown);
 			addChild(mCircle);
+			updatePreview(graphics);
+		}
+
+		protected function onCircleMouseDown(e:MouseEvent):void
+		{
+			mCircle.setByMousePos();
+			updatePreview(graphics);
 		}
 		
-		private function drawBase(g:Graphics, w:int, h:int):void
+		private function updatePreview(g:Graphics):void
 		{
-			g.beginFill(0xffffff);
-			g.drawRect(0, 0, w, h);
+			g.beginFill(mCircle.rgb);
+			g.drawRect(0, 0, 20, 20);
 			g.endFill();
 		}
-		
-
 	}
 }
