예제 #1
0
        public void RemoveEffect(IOverlayInfo overlayInfo, Size?defaultOverlaySize, OverlayEffectConfiguration config)
        {
            var overlaySize = overlayInfo?.OverlaySize;

            overlaySize = overlaySize ?? defaultOverlaySize;

            EndEffect(overlayInfo, overlaySize.Value, config);
        }
예제 #2
0
        public void ApplyEffect(IOverlayInfo overlayInfo, Size?defaultOverlaySize, OverlayEffectConfiguration config)
        {
            //validate
            var overlaySize = overlayInfo?.OverlaySize;

            overlaySize = overlaySize ?? defaultOverlaySize;
            if (overlaySize == null)
            {
                return;
            }

            StartEffect(overlayInfo, overlaySize.Value, config);
        }
        protected override void StartEffect(IOverlayInfo overlayInfo, Size overlaySize, OverlayEffectConfiguration config)
        {
            //validate
            var settings = config as ToolTipEffect;

            if (settings == null)
            {
                return;
            }
            if (settings.Template == null)
            {
                return;
            }

            _overlaySize    = overlaySize;
            _overlayRect    = overlayInfo?.Rect;
            _overlayPolygon = overlayInfo?.Entity as PolygonInfo;

            var tooltip = overlayInfo?.ToolTip;

            if (tooltip != null)
            {
                //end current tooltip
                if (_currentOverlayInfo != null)
                {
                    EndEffect(_currentOverlayInfo, overlaySize, config);
                }

                //create template
                var toolTipControl = settings.Template.LoadContent() as FrameworkElement;
                toolTipControl.DataContext = tooltip;
                toolTipControl.Loaded     += ToolTipControl_Loaded;

                if (settings.ToolTipMode == ToolTipMode.Extended)
                {
                    var panel = new StackPanel()
                    {
                        Background      = Application.Current.Resources["SystemControlBackgroundChromeMediumLowBrush"] as Brush,
                        BorderBrush     = Application.Current.Resources["SystemControlForegroundChromeHighBrush"] as Brush,
                        BorderThickness = new Thickness(1)
                    };

                    ImageSource imageSource = (OverlayPresenter as OverlayPresenter)?.Source;
                    if (imageSource != null)
                    {
                        _image = new Image()
                        {
                            Source = imageSource, Width = (double)(imageSource as BitmapImage)?.PixelWidth, Height = (double)(imageSource as BitmapImage)?.PixelHeight
                        };
                        _imageView = new Viewbox()
                        {
                            Child = _image, Stretch = Stretch.None
                        };
                        _view = new Viewbox {
                            Child = _imageView
                        };
                        panel.Children.Add(_view);
                    }
                    panel.Children.Add(toolTipControl);
                    _popup.Child = panel;
                }
                else
                {
                    _popup.Child = toolTipControl;
                }

                //show popup
                _popup.IsOpen = true;

                _currentOverlayInfo = overlayInfo;
            }
        }
        public override bool?ShouldApply(IOverlayInfo overlayInfo, Size?overlaySize, OverlayInfoState state, OverlayEffectConfiguration config, bool presenterSelected)
        {
            _presenterSelected = presenterSelected;
            _toolTipMode       = (config as ToolTipEffect)?.ToolTipMode ?? ToolTipMode.Standard;

            return(state == OverlayInfoState.Selected && (presenterSelected || _toolTipMode == ToolTipMode.Extended));
        }
 protected override void EndEffect(IOverlayInfo overlayInfo, Size?overlaySize, OverlayEffectConfiguration config)
 {
     //remove popup
     if (_currentOverlayInfo == overlayInfo)
     {
         if (_popup.IsOpen)
         {
             _popup.IsOpen = false;
         }
         _currentOverlayInfo = null;
     }
 }
예제 #6
0
        protected override void StartEffect(IOverlayInfo overlayInfo, Size overlaySize, OverlayEffectConfiguration config)
        {
            //validate
            var settings = config as ZoomEffect;

            if (settings == null)
            {
                return;
            }

            //start new movement
            var zoom  = 1d;
            var focus = new Point();

            if (overlayInfo != null)
            {
                var bounds = overlayInfo.Rect;

                //calculate zoom
                var viewerRatio = OverlayPresenter.RenderSize.Width / OverlayPresenter.RenderSize.Height;
                var boundRatio  = bounds.Width / bounds.Height;
                if (viewerRatio < boundRatio)
                {
                    //zoom by width
                    zoom = OverlayPresenter.RenderSize.Width / bounds.Width;
                }
                else
                {
                    //zoom by height
                    zoom = OverlayPresenter.RenderSize.Height / bounds.Height;
                }
                zoom = Math.Min(zoom, settings.MaxZoom); //max zoom
                zoom = Math.Max(zoom, settings.MinZoom); //min zoom

                //focus on center
                var boundCenter  = new Point(bounds.Left + (bounds.Width / 2), bounds.Top + (bounds.Height / 2));
                var target       = TransformPoint(boundCenter, overlaySize);
                var viewerCenter = new Point(OverlayPresenter.RenderSize.Width / 2, OverlayPresenter.RenderSize.Height / 2);
                focus = new Point(-(target.X * zoom) + viewerCenter.X, -(target.Y * zoom) + viewerCenter.Y);
            }
            _animations[2] = _animations[0];
            _animations[3] = _animations[1];
            _animations[0] = new ScaleTransformAnimation(zoom, zoom, settings.Duration, BaseAnimation.DefaultInOut);
            _animations[1] = new TranslateTransformAnimation(focus.X, focus.Y, settings.Duration, BaseAnimation.DefaultInOut);
            _animations[0].Activate(OverlayPresenter);
            _animations[1].Activate(OverlayPresenter);
        }
예제 #7
0
 public override bool?ShouldApply(IOverlayInfo overlayInfo, Size?overlaySize, OverlayInfoState state, OverlayEffectConfiguration config, bool presenterSelected)
 {
     //only works when not selected from the image
     if (!presenterSelected)
     {
         return(state == OverlayInfoState.Selected);
     }
     return(null);
 }
예제 #8
0
 protected override void EndEffect(IOverlayInfo overlayInfo, Size?overlaySize, OverlayEffectConfiguration config)
 {
     StartEffect(null, overlaySize.GetValueOrDefault(), config);
 }
예제 #9
0
 public abstract bool?ShouldApply(IOverlayInfo overlayInfo, Size?overlaySize, OverlayInfoState state, OverlayEffectConfiguration config, bool presenterSelected);
예제 #10
0
 protected abstract void EndEffect(IOverlayInfo overlayInfo, Size?overlaySize, OverlayEffectConfiguration config);