public void UpdateEffects(IOverlayInfo overlayInfo, Size?overlaySize, OverlayInfoState state, bool presenterSelected, IList <OverlayEffectConfiguration> effects) { foreach (var effect in effects) { if (_effects.ContainsKey(effect.GetType())) { //get processor var processor = _effects[effect.GetType()]; //determine if it should run var shouldApply = processor.ShouldApply(overlayInfo, overlaySize, state, effect, presenterSelected); if (shouldApply != null) { if (shouldApply.Value) { //apply effect processor.ApplyEffect(overlayInfo, overlaySize, effect); } else { //remove effect processor.RemoveEffect(overlayInfo, overlaySize, effect); } } } } }
void UpdateOverlayInfo(object value) { if (_overlayInfo != null) { _overlayInfo.VisualStateChanged -= OnVisualStateChanged; _overlayInfo = null; } _overlayInfo = value as IOverlayInfo; if (_overlayInfo != null) { _overlayInfo.VisualStateChanged += OnVisualStateChanged; PointerEntered += (i, arg) => { if (HighlightEnabled) { _overlayInfo.IsSelected = true; } }; PointerExited += (i, arg) => { if (HighlightEnabled) { _overlayInfo.IsSelected = false; } }; } }
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)); }
public void RemoveEffect(IOverlayInfo overlayInfo, Size?defaultOverlaySize, OverlayEffectConfiguration config) { var overlaySize = overlayInfo?.OverlaySize; overlaySize = overlaySize ?? defaultOverlaySize; EndEffect(overlayInfo, overlaySize.Value, config); }
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); }
private void OnDataContextChanged(FrameworkElement sender, DataContextChangedEventArgs e) { //set overlay from datacontext var overlayInfo = e.NewValue as IOverlayInfo; if (overlayInfo != null) { OverlayInfo = overlayInfo; } }
protected override void EndEffect(IOverlayInfo overlayInfo, Size?overlaySize, OverlayEffectConfiguration config) { //remove popup if (_currentOverlayInfo == overlayInfo) { if (_popup.IsOpen) { _popup.IsOpen = false; } _currentOverlayInfo = null; } }
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 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); }
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; } }
protected override void EndEffect(IOverlayInfo overlayInfo, Size?overlaySize, OverlayEffectConfiguration config) { StartEffect(null, overlaySize.GetValueOrDefault(), config); }
public abstract bool?ShouldApply(IOverlayInfo overlayInfo, Size?overlaySize, OverlayInfoState state, OverlayEffectConfiguration config, bool presenterSelected);
protected abstract void EndEffect(IOverlayInfo overlayInfo, Size?overlaySize, OverlayEffectConfiguration config);