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); }
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); }
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(); } }
public Builder SetMaterialElement(IMaterialVisualElement materialVisualElement) { _materialVisualElement = materialVisualElement; return(this); }