public static Pen GetPen(ByteColor color, double thickness) { var hashCode = HashCodeMaker.Make(color, thickness); if (_borderPens.TryGetValue(hashCode, out var p)) { return(p); } p = new Pen(GetSolidColorBrush(color), thickness); p.Freeze(); _borderPens.Add(hashCode, p); return(p); }
public static SolidColorBrush GetSolidColorBrush(ByteColor color) { var hashCode = HashCodeMaker.Make(color); if (_solidColorBrushes.TryGetValue(hashCode, out var b)) { return(b); } b = new SolidColorBrush(color.ToColor()); b.Freeze(); _solidColorBrushes.Add(hashCode, b); return(b); }
public static Pen GetCapPen(ByteColor color, double thickness) { var hashCode = HashCodeMaker.Make(color, thickness); if (_capPens.TryGetValue(hashCode, out var p)) { return(p); } p = new Pen(GetSolidColorBrush(color), thickness) { StartLineCap = PenLineCap.Round, EndLineCap = PenLineCap.Round }; p.Freeze(); _capPens.Add(hashCode, p); return(p); }
public static Geometry GetClipGeom(Visual visual, double w, double h, double cornerRadius, bool isWidthBorder) { unchecked { var hashCode = HashCodeMaker.Make(w, h, cornerRadius, isWidthBorder); if (_clipGeoms.TryGetValue(hashCode, out var c)) { return(c); } if (isWidthBorder) { c = new RectangleGeometry { RadiusX = cornerRadius, RadiusY = cornerRadius, Rect = visual.RoundLayoutRect( FrameworkElementExtensions.BorderWidth * 0.5, FrameworkElementExtensions.BorderWidth * 0.5, w - FrameworkElementExtensions.BorderWidth, h - FrameworkElementExtensions.BorderWidth) }; } else { c = new RectangleGeometry { RadiusX = cornerRadius, RadiusY = cornerRadius, Rect = visual.RoundLayoutRect(0, 0, w, h) }; } c.Freeze(); _clipGeoms.Add(hashCode, c); return(c); } }
public static Pen GetDashedPen(ByteColor color, double thickness) { unchecked { var hashCode = HashCodeMaker.Make(color, thickness); if (_dashedPens.TryGetValue(hashCode, out var p)) { return(p); } p = new Pen(GetSolidColorBrush(color), thickness) { DashStyle = DashStyles.Dash }; p.Freeze(); _dashedPens.Add(hashCode, p); return(p); } }
public override int GetHashCode() // ReSharper disable NonReadonlyMemberInGetHashCode => HashCodeMaker.To32(HashCodeMaker.Make(R, G, B, A));