Пример #1
0
        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);
        }
Пример #2
0
        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);
        }
Пример #3
0
        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);
        }
Пример #4
0
        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);
            }
        }
Пример #5
0
        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);
            }
        }
Пример #6
0
 public override int GetHashCode()
 // ReSharper disable NonReadonlyMemberInGetHashCode
 => HashCodeMaker.To32(HashCodeMaker.Make(R, G, B, A));