ScreenToGif/Controls/PuncturedRect.cs

(开头部分) 3KB

这里只显示每个文件的开头 60 行。登录后可以解锁完整代码。

using System;
using System.Windows;
using System.Windows.Media;
using System.Windows.Shapes;

namespace ScreenToGif.Controls
{
    /// <summary>
    /// PuncturedRectangle class.
    /// </summary>
    public class PuncturedRect : Shape
	{
		#region Dependency properties

		public static readonly DependencyProperty InteriorProperty = DependencyProperty.Register("Interior", typeof(Rect), typeof(FrameworkElement),
				new FrameworkPropertyMetadata(new Rect(0, 0, 0, 0), FrameworkPropertyMetadataOptions.AffectsRender, null, CoerceRectInterior, false), null);

        public static readonly DependencyProperty ExteriorProperty = DependencyProperty.Register("Exterior", typeof(Rect), typeof(FrameworkElement),
				new FrameworkPropertyMetadata(new Rect(0, 0, double.MaxValue, double.MaxValue),
					FrameworkPropertyMetadataOptions.AffectsMeasure |
					FrameworkPropertyMetadataOptions.AffectsArrange |
					FrameworkPropertyMetadataOptions.AffectsParentMeasure |
					FrameworkPropertyMetadataOptions.AffectsParentArrange |
					FrameworkPropertyMetadataOptions.AffectsRender,
					null, null, false), null);

        public Rect Interior
        {
            get { return (Rect)GetValue(InteriorProperty); }
            set { SetValue(InteriorProperty, value); }
        }

        public Rect Exterior
		{
			get { return (Rect)GetValue(ExteriorProperty); }
			set { SetValue(ExteriorProperty, value); }
		}

        #endregion

        private static object CoerceRectInterior(DependencyObject d, object value)
        {
            var pr = (PuncturedRect)d;
            var rcExterior = pr.Exterior;
            var rcProposed = (Rect)value;
            
            if (rcExterior.Width <= 0 || rcExterior.Height <= 0)
                return rcExterior;

            var left = Math.Max(rcProposed.Left, rcExterior.Left);
            var top = Math.Max(rcProposed.Top, rcExterior.Top);
            var width = Math.Min(rcProposed.Right, rcExterior.Right) - left;
            var height = Math.Min(rcProposed.Bottom, rcExterior.Bottom) - top;

            return new Rect(left, top, width, height);
        }

        #region Override

        protected override Geometry DefiningGeometry
后面还有 31 行代码,解锁后查看完整代码

24 小时内免费解锁 3 个项目,之后 1 积分/个。 规则说明

AI 解读

登录后可用,每次 10 积分,解读结果公开显示在下面。

还没有人解读过这个文件。