protected override void OnWindowPositionChanged(Rect rcBoundingBox)
        {
            base.OnWindowPositionChanged(rcBoundingBox);

            if (ParentScrollViewer == null)
            {
                return;
            }

            GeneralTransform tr = RootVisual.TransformToDescendant(ParentScrollViewer);
            var scrollRect      = new Rect(new Size(ParentScrollViewer.ViewportWidth, ParentScrollViewer.ViewportHeight));

            var intersect = Rect.Intersect(scrollRect, tr.TransformBounds(rcBoundingBox));

            if (!intersect.IsEmpty)
            {
                tr        = ParentScrollViewer.TransformToDescendant(this);
                intersect = tr.TransformBounds(intersect);
            }
            else
            {
                intersect = new Rect();
            }

            int x1 = (int)Math.Round(intersect.Left);
            int y1 = (int)Math.Round(intersect.Top);
            int x2 = (int)Math.Round(intersect.Right);
            int y2 = (int)Math.Round(intersect.Bottom);

            SetRegion(x1, y1, x2, y2);
        }
Esempio n. 2
0
        protected override void OnWindowPositionChanged(Rect rcBoundingBox)
        {
            base.OnWindowPositionChanged(rcBoundingBox);

            if (ParentScrollViewer == null)
            {
                return;
            }

            try
            {
                GeneralTransform tr = ParentScrollViewer.TransformToAncestor(MainWindow);
                var scrollRect      = new Rect(new Size(ParentScrollViewer.ViewportWidth, ParentScrollViewer.ViewportHeight));
                scrollRect = tr.TransformBounds(scrollRect);

                var intersect = Rect.Intersect(scrollRect, rcBoundingBox);
                if (!intersect.IsEmpty)
                {
                    tr        = MainWindow.TransformToDescendant(this);
                    intersect = tr.TransformBounds(intersect);
                }

                SetRegion(intersect);
            }
            catch (Exception e)
            {
                Console.WriteLine($"{e.GetType().ToString()}: {e.Message}");
            }
        }
Esempio n. 3
0
        void ProcessExpandAnimation()
        {
            if (StartTime == null)
            {
                return;
            }
            var startTime = StartTime.Value;

            var elapsedTime = DateTime.Now.Subtract(startTime);

            if (elapsedTime < TimeSpan.Zero)
            {
                return;
            }

            var totalDuration = Duration;

            if (elapsedTime < totalDuration && this.IsVisible)
            {
                var normalizedTime = (Double)elapsedTime.Ticks / (Double)totalDuration.Ticks;
                var easing         =
                    (EasingFunction == null ?
                     normalizedTime    // if there is no easing function, use linear animation.
                        :
                     EasingFunction.Ease(normalizedTime));

                if (InitialSize != null && FinalSize != null)
                {
                    var currentWidth  = InitialSize.Value.Width + ((FinalSize.Value.Width - InitialSize.Value.Width) * easing);
                    var currentHeight = InitialSize.Value.Height + ((FinalSize.Value.Height - InitialSize.Value.Height) * easing);

                    CurrentSize = new Size(currentWidth, currentHeight);
                }

                if (InitialVerticalOffset != null && FinalVerticalOffset != null)
                {
                    var currentVerticalOffset = InitialVerticalOffset.Value + ((FinalVerticalOffset.Value - InitialVerticalOffset.Value) * easing);
                    ParentScrollViewer.ScrollToVerticalOffset(currentVerticalOffset);
                }
            }
            else
            {
                CurrentSize = FinalSize.Value;
                if (ParentScrollViewer != null && FinalVerticalOffset != null)
                {
                    ParentScrollViewer.ScrollToVerticalOffset(FinalVerticalOffset.Value);
                    InitialVerticalOffset = null;
                    FinalVerticalOffset   = null;
                }
                StartTime   = null;
                InitialSize = null;
                FinalSize   = null;
            }
        }
        protected override void OnWindowPositionChanged(Rect rcBoundingBox)
        {
            if (_lastBoundingBox.Equals(rcBoundingBox))
            {
                return;
            }
            _lastBoundingBox = rcBoundingBox;
            Graphics g      = this.Child.CreateGraphics();
            double   xScale = g.DpiX / 96.0;
            double   yScale = g.DpiY / 96.0;

            base.OnWindowPositionChanged(rcBoundingBox);
            //rcBoundingBox = new Rect(new Point(rcBoundingBox.X, rcBoundingBox.Y), new Size( rcBoundingBox.Width, rcBoundingBox.Height));
            if (ParentScrollViewer == null && !TryFindScrollViewer())
            {
                return;
            }

            GeneralTransform tr = ParentScrollViewer.TransformToAncestor(MainWindow);
            var scrollRect      = new Rect(new Size(ParentScrollViewer.ViewportWidth, ParentScrollViewer.ViewportHeight));

            scrollRect = tr.TransformBounds(scrollRect);
            scrollRect = new Rect(new Point(scrollRect.X * xScale, scrollRect.Y * yScale), new Size(scrollRect.Width * xScale, scrollRect.Height * yScale));
            var intersect = Rect.Intersect(scrollRect, rcBoundingBox);

            if (intersect.Equals(rcBoundingBox))
            {
                if (!_fullyIntersect)
                {
                    InvalidateVisual();
                }

                _fullyIntersect = true;
            }
            else
            {
                _fullyIntersect = false;
            }

            if (!intersect.IsEmpty)
            {
                tr        = MainWindow.TransformToDescendant(this);
                intersect = new Rect(new Point(intersect.X / xScale, intersect.Y / yScale), new Size(intersect.Width / xScale, intersect.Height / yScale));
                intersect = tr.TransformBounds(intersect);
                intersect = new Rect(new Point(intersect.X * xScale, intersect.Y * yScale), new Size(intersect.Width * xScale, intersect.Height * yScale));
                //InvalidateVisual();
            }
            SetRegion(intersect);
        }
    protected override void OnWindowPositionChanged(Rect rcBoundingBox)
    {
        DpiScale dpiScale = VisualTreeHelper.GetDpi(this);

        base.OnWindowPositionChanged(rcBoundingBox);
        Rect newRect = ScaleRectDownFromDPI(rcBoundingBox, dpiScale);
        Rect finalRect;

        if (ParentScrollViewer != null)
        {
            ParentScrollViewer.ScrollChanged += ParentScrollViewer_ScrollChanged;
            ParentScrollViewer.SizeChanged   += ParentScrollViewer_SizeChanged;
            ParentScrollViewer.Loaded        += ParentScrollViewer_Loaded;
        }
        if (Scrolling || Resizing)
        {
            if (ParentScrollViewer == null)
            {
                return;
            }
            MatrixTransform tr = RootVisual.TransformToDescendant(ParentScrollViewer) as MatrixTransform;

            var scrollRect = new Rect(new Size(ParentScrollViewer.ViewportWidth, ParentScrollViewer.ViewportHeight));
            var c          = tr.TransformBounds(newRect);

            var intersect = Rect.Intersect(scrollRect, c);
            if (!intersect.IsEmpty)
            {
                tr        = ParentScrollViewer.TransformToDescendant(this) as MatrixTransform;
                intersect = tr.TransformBounds(intersect);
                finalRect = ScaleRectUpToDPI(intersect, dpiScale);
            }
            else
            {
                finalRect = intersect = new Rect();
            }

            int x1 = (int)Math.Round(finalRect.X);
            int y1 = (int)Math.Round(finalRect.Y);
            int x2 = (int)Math.Round(finalRect.Right);
            int y2 = (int)Math.Round(finalRect.Bottom);
            SetRegion(x1, y1, x2, y2);
            this.Scrolling = false;
            this.Resizing  = false;
        }
        LocationChanged?.Invoke(this, new EventArgs());
    }
Esempio n. 6
0
        protected override void OnWindowPositionChanged(Rect rcBoundingBox)
        {
            DpiScale dpiScale = new DpiScale()
            {
                DpiScaleX = RenderSettings.dpiScaleX, DpiScaleY = RenderSettings.dpiScaleY
            };

            base.OnWindowPositionChanged(rcBoundingBox);

            if (ParentScrollViewer == null)
            {
                return;
            }

            Rect             newRect = ScaleRectDownFromDPI(rcBoundingBox, dpiScale);
            GeneralTransform tr      = RootVisual.TransformToDescendant(ParentScrollViewer);
            var scrollRect           = new Rect(new Size(ParentScrollViewer.ViewportWidth, ParentScrollViewer.ViewportHeight));

            var intersect = Rect.Intersect(scrollRect, tr.TransformBounds(newRect));

            if (!intersect.IsEmpty)
            {
                tr        = ParentScrollViewer.TransformToDescendant(this);
                intersect = tr.TransformBounds(intersect);
                intersect = ScaleRectUpToDPI(intersect, dpiScale);
            }
            else
            {
                intersect = new Rect();
            }

            int x1 = (int)Math.Round(intersect.Left);
            int y1 = (int)Math.Round(intersect.Top);
            int x2 = (int)Math.Round(intersect.Right);
            int y2 = (int)Math.Round(intersect.Bottom);

            SetRegion(x1, y1, x2, y2);
        }