Exemplo n.º 1
0
        public void SetElement(IMaterialVisualElement oldElement, IMaterialVisualElement newElement)
        {
            if (oldElement != null)
            {
                _context = null;
                oldElement.PropertyChanged             -= _propertyChangedHandler;
                oldElement.InvalidateGradientRequested -= InvalidateGradientsRequested;
            }

            _backgroundElement = newElement;
            if (newElement == null)
            {
                return;
            }

            _context = _renderer.View.Context;
            newElement.PropertyChanged             += _propertyChangedHandler;
            newElement.InvalidateGradientRequested += InvalidateGradientsRequested;

            if (oldElement == null)
            {
                UpdateElevation();
                UpdateTranslationZ();
                UpdateGradients();
                UpdateBorder();
                UpdateCornerRadius();
                return;
            }

            var eps = Math.Pow(10, -10);

            if (Math.Abs(oldElement.Elevation - newElement.Elevation) > eps)
            {
                UpdateElevation();
            }

            if (Math.Abs(oldElement.TranslationZ - newElement.TranslationZ) > eps)
            {
                UpdateTranslationZ();
            }

            if (Math.Abs(oldElement.Angle - newElement.Angle) > eps ||
                oldElement.GradientType != newElement.GradientType ||
                oldElement.Gradients.AreEqual(newElement.Gradients))
            {
                UpdateGradients();
            }

            if (oldElement.BorderColor != newElement.BorderColor ||
                Math.Abs(oldElement.BorderWidth - newElement.BorderWidth) > eps)
            {
                UpdateBorder();
            }

            if (oldElement.CornerRadius != newElement.CornerRadius)
            {
                UpdateCornerRadius();
            }
        }
        public void SetElement(IMaterialVisualElement oldElement, IMaterialVisualElement newElement)
        {
            if (oldElement != null)
            {
                oldElement.PropertyChanged             -= _propertyChangedHandler;
                oldElement.InvalidateGradientRequested -= InvalidateGradientsRequested;
            }

            _backgroundElement = newElement;
            if (newElement == null)
            {
                return;
            }

            newElement.PropertyChanged             += _propertyChangedHandler;
            newElement.InvalidateGradientRequested += InvalidateGradientsRequested;

            if (oldElement == null)
            {
                UpdateClipToBounds();

                InvalidateLayer();
                return;
            }

            var eps = Math.Pow(10, -10);

            if (Math.Abs(oldElement.Elevation - newElement.Elevation) > eps)
            {
                UpdateElevation();
            }

            if (Math.Abs(oldElement.Angle - newElement.Angle) > eps ||
                oldElement.GradientType != newElement.GradientType ||
                oldElement.Gradients.AreEqual(newElement.Gradients))
            {
                UpdateGradients();
            }

            if (oldElement.BorderColor != newElement.BorderColor ||
                Math.Abs(oldElement.BorderWidth - newElement.BorderWidth) > eps)
            {
                UpdateBorder();
            }

            if (oldElement.CornerRadius != newElement.CornerRadius)
            {
                UpdateCornerRadius();
            }

            if (oldElement is Layout oldLayout &&
                newElement is Layout newLayout &&
                oldLayout.IsClippedToBounds != newLayout.IsClippedToBounds)
            {
                UpdateClipToBounds();
            }
        }
        public GradientStrokeDrawable(double density, IMaterialVisualElement background = null)
        {
            Initialize();

            _density = density;

            if (background == null)
            {
                return;
            }
            SetColor(background.Color);
            SetCornerRadius(background.CornerRadius);
            SetStroke(background.BorderWidth, background.BorderColor);
            SetDashedStroke(background.DashWidth, background.DashGap);
            SetGradient(background.GradientBrush?.Gradients, background.GradientBrush?.Angle ?? 0);
            SetBorderGradient(background.BorderGradientBrush?.Gradients, background.BorderGradientBrush?.Angle ?? 0);
        }
Exemplo n.º 4
0
        public GradientStrokeDrawable(IPathProvider pathProvider, IMaterialVisualElement background = null) : base(new RectShape())
        {
            _dirty        = true;
            _pathDirty    = true;
            _clipPath     = new Path();
            _density      = BackgroundKit.Density;
            _pathProvider = pathProvider;

            if (background == null)
            {
                return;
            }
            SetColor(background.Color);
            SetStroke(background.BorderWidth, background.BorderColor);
            SetDashedStroke(background.DashWidth, background.DashGap);
            SetGradient(background.GradientBrush);
            SetBorderGradient(background.BorderGradientBrush);
        }
        public void SetBackgroundElement(IMaterialVisualElement oldMaterialElement, IMaterialVisualElement newMaterialElement)
        {
            if (oldMaterialElement != null)
            {
                oldMaterialElement.PropertyChanged                   -= OnBackgroundPropertyChanged;
                oldMaterialElement.InvalidateGradientRequested       -= InvalidateGradientsRequested;
                oldMaterialElement.InvalidateBorderGradientRequested -= InvalidateBorderGradientsRequested;
            }

            _backgroundElement = newMaterialElement;
            if (newMaterialElement == null)
            {
                return;
            }

            newMaterialElement.PropertyChanged                   += OnBackgroundPropertyChanged;
            newMaterialElement.InvalidateGradientRequested       += InvalidateGradientsRequested;
            newMaterialElement.InvalidateBorderGradientRequested += InvalidateBorderGradientsRequested;

            if (oldMaterialElement == null)
            {
                _renderer.NativeView.FindLayerOfType <GradientStrokeLayer>();

                UpdateColor();
                UpdateGradients();
                UpdateBorder();
                UpdateElevation();
                UpdateShadowColor();
                UpdateCornerRadius();
                UpdateRipple();
                InvalidateShape();

                if (!(_visualElement is MaterialShapeView))
                {
                    SetShape(null, false);
                }

                return;
            }

            var eps = Math.Pow(10, -10);

            if (oldMaterialElement.Color != newMaterialElement.Color)
            {
                UpdateColor();
            }

            if (oldMaterialElement.ShadowColor != newMaterialElement.ShadowColor)
            {
                UpdateShadowColor();
            }

            if (Math.Abs(oldMaterialElement.Elevation - newMaterialElement.Elevation) > eps)
            {
                UpdateElevation();
            }

            if (oldMaterialElement.GradientBrush != newMaterialElement.GradientBrush)
            {
                UpdateGradients();
            }

            if (oldMaterialElement.BorderColor != newMaterialElement.BorderColor ||
                Math.Abs(oldMaterialElement.BorderWidth - newMaterialElement.BorderWidth) > eps ||
                oldMaterialElement.BorderGradientBrush != newMaterialElement.BorderGradientBrush)
            {
                UpdateBorder();
            }

            if (oldMaterialElement.CornerRadius != newMaterialElement.CornerRadius)
            {
                UpdateCornerRadius();
            }

            InvalidateShape();
        }
 private void UpdateBackground(IMaterialVisualElement oldBackground, IMaterialVisualElement newBackground)
 {
     _backgroundManager?.SetBackgroundElement(oldBackground, newBackground);
 }
Exemplo n.º 7
0
        public void SetBackgroundElement(IMaterialVisualElement oldElement, IMaterialVisualElement newElement)
        {
            if (oldElement != null)
            {
                oldElement.PropertyChanged                   -= OnRendererPropertyChanged;
                oldElement.InvalidateGradientRequested       -= InvalidateGradientsRequested;
                oldElement.InvalidateBorderGradientRequested -= InvalidateBorderGradientsRequested;
            }

            _backgroundElement = newElement;

            if (newElement == null)
            {
                return;
            }

            newElement.PropertyChanged                   += OnRendererPropertyChanged;
            newElement.InvalidateGradientRequested       += InvalidateGradientsRequested;
            newElement.InvalidateBorderGradientRequested += InvalidateBorderGradientsRequested;

            if (oldElement == null)
            {
                UpdateBackground();
                UpdateElevation();
                UpdateShadowColor();
                UpdateTranslationZ();

                if (!(_visualElement is MaterialShapeView))
                {
                    SetShape(null, false);
                }

                return;
            }

            var eps = Math.Pow(10, -10);

            if (oldElement.ShadowColor != newElement.ShadowColor)
            {
                UpdateShadowColor();
            }

            if (oldElement.Color != newElement.Color)
            {
                UpdateColor();
            }

            if (Math.Abs(oldElement.Elevation - newElement.Elevation) > eps)
            {
                UpdateElevation();
            }

            if (Math.Abs(oldElement.TranslationZ - newElement.TranslationZ) > eps)
            {
                UpdateTranslationZ();
            }

            if (oldElement.GradientBrush != newElement.GradientBrush)
            {
                UpdateGradients();
            }

            if (oldElement.BorderColor != newElement.BorderColor ||
                oldElement.BorderStyle != newElement.BorderStyle ||
                Math.Abs(oldElement.BorderWidth - newElement.BorderWidth) > eps ||
                oldElement.BorderGradientBrush != newElement.BorderGradientBrush)
            {
                UpdateBorder();
            }

            if (oldElement.CornerRadius != newElement.CornerRadius)
            {
                UpdateCornerRadius();
            }

            if (oldElement.RippleColor != newElement.RippleColor ||
                oldElement.IsRippleEnabled != newElement.IsRippleEnabled)
            {
                UpdateRipple();
            }
        }
Exemplo n.º 8
0
 public Builder SetMaterialElement(IMaterialVisualElement materialVisualElement)
 {
     _materialVisualElement = materialVisualElement;
     return(this);
 }