private void HueCanvas_MouseUp(object sender, MouseButtonEventArgs e)
 {
     HueCanvas.ReleaseMouseCapture();
 }
Beispiel #2
0
        protected override void InitializeComponent(IUIContext context, bool isPlaying)
        {
            base.InitializeComponent(context, isPlaying);

            PaintHueCanvas();
            PaintColorCanvas(CanvasHue);

            var onRedChange   = OnValueChange.Select(v => v.r);
            var onGreenChange = OnValueChange.Select(v => v.g);
            var onBlueChange  = OnValueChange.Select(v => v.b);

            OnValueChange
            .Where(_ => !_changingColor && !_changingHue)
            .Subscribe(v => CanvasColor = v, Debug.LogError)
            .AddTo(this);
            OnValueChange
            .Subscribe(v => SelectedCanvas.color = v, Debug.LogError)
            .AddTo(this);
            OnValueChange
            .Select(ColorUtility.ToHtmlStringRGB)
            .Subscribe(v => HexInput.Value = "#" + v, Debug.LogError)
            .AddTo(this);

            onRedChange
            .Select(ColorValueToString)
            .Subscribe(v => RedInput.Value = v, Debug.LogError)
            .AddTo(this);
            onGreenChange
            .Select(ColorValueToString)
            .Subscribe(v => GreenInput.Value = v, Debug.LogError)
            .AddTo(this);
            onBlueChange
            .Select(ColorValueToString)
            .Subscribe(v => BlueInput.Value = v, Debug.LogError)
            .AddTo(this);

            onRedChange
            .Subscribe(v => RedSlider.Value = v, Debug.LogError)
            .AddTo(this);
            onGreenChange
            .Subscribe(v => GreenSlider.Value = v, Debug.LogError)
            .AddTo(this);
            onBlueChange
            .Subscribe(v => BlueSlider.Value = v, Debug.LogError)
            .AddTo(this);

            if (!isPlaying)
            {
                return;
            }

            ColorCanvas
            .OnDragAsObservable()
            .Merge(ColorCanvas.OnPointerClickAsObservable())
            .Subscribe(OnColorCanvasDrag, Debug.LogError)
            .AddTo(this);
            HueCanvas
            .OnDragAsObservable()
            .Merge(HueCanvas.OnPointerClickAsObservable())
            .Subscribe(OnHueCanvasDrag, Debug.LogError)
            .AddTo(this);

            Func <List <float>, bool> validate = v => v[0] >= 0 && v[1] >= 0 && v[2] >= 0;

            var onRedEdit = RedInput.OnEdit
                            .Select(StringToColorValue)
                            .Select(v => new List <float> {
                v, GreenInputValue, BlueInputValue
            })
                            .Where(validate);
            var onGreenEdit = GreenInput.OnEdit
                              .Select(StringToColorValue)
                              .Select(v => new List <float> {
                RedInputValue, v, BlueInputValue
            })
                              .Where(validate);
            var onBlueEdit = BlueInput.OnEdit
                             .Select(StringToColorValue)
                             .Select(v => new List <float> {
                RedInputValue, GreenInputValue, v
            })
                             .Where(validate);

            var onInputChange = onRedEdit.Merge(onGreenEdit, onBlueEdit);

            // ReSharper disable once PossibleInvalidOperationException
            var onHexChange = HexInput.OnEdit
                              .Select(HexToColor)
                              .Where(v => v.HasValue)
                              .Select(v => v.Value);

            var onSliderChange = Observable
                                 .CombineLatest(
                RedSlider.OnValueChange,
                GreenSlider.OnValueChange,
                BlueSlider.OnValueChange);

            onInputChange
            .Cast <List <float>, IList <float> >()
            .Merge(onSliderChange)
            .Select(v => new Color(v[0], v[1], v[2]))
            .Merge(onHexChange)
            .Subscribe(v => Value = v, Debug.LogError)
            .AddTo(this);
        }
 private void HueCanvas_MouseDown(object sender, MouseButtonEventArgs e)
 {
     HueCanvas.CaptureMouse();
 }