protected DoubleColor GetDoubleColor(
            ColorWheelBase wl,
            double degree,
            double currentRadius,
            double gradRadius
            )
        {
            DoubleColor val;
            AHSL        hsl;
            DoubleColor dc = wl.GetColor(degree);

            switch (PaintMethod)
            {
            case WheelPaintMethod.Brightness:
                val = dc.ToAHSB().Alter(null, 1.0, currentRadius / gradRadius).Double();
                break;

            case WheelPaintMethod.InverseLuminance:
                hsl           = dc.ToAHSL();
                hsl.Luminance = currentRadius / gradRadius;
                val           = hsl.Double();
                break;

            case WheelPaintMethod.Luminance:
                hsl           = dc.ToAHSL();
                hsl.Luminance = 1.0 - currentRadius / gradRadius;
                val           = hsl.Double();
                break;

            case WheelPaintMethod.Saturation:
                val = dc.ToAHSB().Alter(null, currentRadius / gradRadius).Double();
                break;

            default:
                throw new NotImplementedException();
            }

            return(val);
        }
        public void UpdateColor(
            Color color
            )
        {
            DoubleColor c = color.Double();

            if (!String.IsNullOrEmpty(SliderColorComponent))
            {
                DoubleColor begin;
                DoubleColor end;

                m_isGradient = true;

                switch (SliderColorComponent.ToLower())
                {
                case "r":
                    begin = c.Alter(0);
                    end   = c.Alter(255);
                    break;

                case "g":
                    begin = c.Alter(null, 0);
                    end   = c.Alter(null, 255);
                    break;

                case "b":
                    begin = c.Alter(null, null, 0);
                    end   = c.Alter(null, null, 255);
                    break;

                case "alpha":
                case "a":
                    begin = c.Alter(null, null, null, 0);
                    end   = c.Alter(null, null, null, 255);
                    break;

                case "saturation":
                case "sat":
                    begin = c.ToAHSB().Alter(null, 0).Double();
                    end   = c.ToAHSB().Alter(null, 1).Double();
                    break;

                case "brightness":
                case "bri":
                    begin = c.ToAHSB().Alter(null, null, 0).Double();
                    end   = c.ToAHSB().Alter(null, null, 1).Double();
                    break;

                case "hue":
                    m_calc       = (double loc) => ColorWheel.GetColor(loc);
                    m_isGradient = false;
                    begin        = c;
                    end          = c;
                    break;

                default:
                    Debug.Assert(false);

                    begin = Colors.Yellow.Double();
                    end   = Colors.Green.Double();
                    break;
                }

                if (m_begin != begin.ToColor() || m_end != end.ToColor())
                {
                    m_begin = begin.ToColor();
                    m_end   = end.ToColor();

                    UpdateImage();
                }
            }
        }