private void HueCanvas_MouseUp(object sender, MouseButtonEventArgs e) { HueCanvas.ReleaseMouseCapture(); }
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(); }