//fix MAINWINDOW bug public CardDragAdorner(CardControl anchor, CardControl sourceCard, Vector mousePoint) : base(WindowManager.PlayWindow.Content as UIElement) { SourceCard = sourceCard; bool isCardInverted = anchor.IsOnTableCanvas && (Player.LocalPlayer.InvertedTable ^ anchor.IsInverted); Point cardOrigin; if (isCardInverted) { // If adjorners are f****d up, try sourceCard instead of anchor and vise versa cardOrigin = new Point(anchor.Card.Size.Width, anchor.Card.Size.Height); _mouseOffset = new Vector(anchor.Card.Size.Width - mousePoint.X, anchor.Card.Size.Height - mousePoint.Y); } else { cardOrigin = new Point(); _mouseOffset = mousePoint; } //fix MAINWINDOW bug _basePt = anchor.TranslatePoint(cardOrigin, WindowManager.PlayWindow.Content as UIElement); _faceUp = sourceCard.IsAlwaysUp || sourceCard.Card.FaceUp; _lightRedBrush = Brushes.Red.Clone(); _faceDownBrush = new ImageBrush(sourceCard.Card.GetBitmapImage(false)); var bim = new BitmapImage(); bim.BeginInit(); bim.CacheOption = BitmapCacheOption.OnLoad; bim.UriSource = new Uri(anchor.Card.Size.Front); bim.EndInit(); _faceUpBrush = _faceUp ? new VisualBrush(sourceCard.GetCardVisual()) { Viewbox = new Rect(0, 0, sourceCard.ActualWidth, sourceCard.ActualHeight), ViewboxUnits = BrushMappingMode.Absolute } : (Brush) new ImageBrush(bim); _invertTransform = new ScaleTransform { CenterX = 0.5, CenterY = 0.5 }; _faceUpBrush.RelativeTransform = _invertTransform; if (_faceUpBrush is VisualBrush) { RenderOptions.SetCachingHint(_faceUpBrush, CachingHint.Cache); } _child.BeginInit(); _child.Width = anchor.ActualWidth * CardControl.ScaleFactor.Width; _child.Height = anchor.ActualHeight * CardControl.ScaleFactor.Height; _child.Fill = _faceUp ? _faceUpBrush : _faceDownBrush; _child.StrokeThickness = 3; var transforms = new TransformGroup(); _child.RenderTransform = transforms; _rot = sourceCard.Card.Orientation; if ((_rot & CardOrientation.Rot180) != 0) { _rot180Transform = new RotateTransform(180, _child.Width / 2, _child.Height / 2); transforms.Children.Add(_rot180Transform); } if ((_rot & CardOrientation.Rot90) != 0) { _rot90Transform = isCardInverted ? new RotateTransform(90, _child.Width / 2, _child.Width / 2) : new RotateTransform(90, _child.Width / 2, _child.Height - _child.Width / 2); transforms.Children.Add(_rot90Transform); } _translate = new TranslateTransform(); transforms.Children.Add(_translate); _child.IsHitTestVisible = false; _child.EndInit(); AddVisualChild(_child); var animation = new DoubleAnimation(0.55, 0.75, new Duration(TimeSpan.FromMilliseconds(500))) { AutoReverse = true, RepeatBehavior = RepeatBehavior.Forever }; animation.Freeze(); _faceUpBrush.BeginAnimation(Brush.OpacityProperty, animation); _faceDownBrush.BeginAnimation(Brush.OpacityProperty, animation); _lightRedBrush.BeginAnimation(Brush.OpacityProperty, animation); }
//fix MAINWINDOW bug public CardDragAdorner(CardControl anchor, CardControl sourceCard, Vector mousePoint) : base(Program.PlayWindow.Content as UIElement) { SourceCard = sourceCard; bool isCardInverted = anchor.IsOnTableCanvas && (Player.LocalPlayer.InvertedTable ^ anchor.IsInverted); Point cardOrigin; if (isCardInverted) { CardDef cardDef = Program.Game.Definition.CardDefinition; cardOrigin = new Point(cardDef.Width, cardDef.Height); _mouseOffset = new Vector(cardDef.Width - mousePoint.X, cardDef.Height - mousePoint.Y); } else { cardOrigin = new Point(); _mouseOffset = mousePoint; } //fix MAINWINDOW bug _basePt = anchor.TranslatePoint(cardOrigin, Program.PlayWindow.Content as UIElement); _faceUp = sourceCard.IsAlwaysUp || sourceCard.Card.FaceUp; _lightRedBrush = Brushes.Red.Clone(); _faceDownBrush = new ImageBrush(sourceCard.Card.GetBitmapImage(false)); _faceUpBrush = _faceUp ? new VisualBrush(sourceCard.GetCardVisual()) { Viewbox = new Rect(0, 0, sourceCard.ActualWidth, sourceCard.ActualHeight), ViewboxUnits = BrushMappingMode.Absolute } : (Brush) new ImageBrush(new BitmapImage(new Uri(Program.Game.Definition.CardDefinition.Front))); _invertTransform = new ScaleTransform {CenterX = 0.5, CenterY = 0.5}; _faceUpBrush.RelativeTransform = _invertTransform; if (_faceUpBrush is VisualBrush) RenderOptions.SetCachingHint(_faceUpBrush, CachingHint.Cache); _child.BeginInit(); _child.Width = anchor.ActualWidth*CardControl.ScaleFactor.Width; _child.Height = anchor.ActualHeight*CardControl.ScaleFactor.Height; _child.Fill = _faceUp ? _faceUpBrush : _faceDownBrush; _child.StrokeThickness = 3; var transforms = new TransformGroup(); _child.RenderTransform = transforms; _rot = sourceCard.Card.Orientation; if ((_rot & CardOrientation.Rot180) != 0) { _rot180Transform = new RotateTransform(180, _child.Width/2, _child.Height/2); transforms.Children.Add(_rot180Transform); } if ((_rot & CardOrientation.Rot90) != 0) { _rot90Transform = isCardInverted ? new RotateTransform(90, _child.Width/2, _child.Width/2) : new RotateTransform(90, _child.Width/2, _child.Height - _child.Width/2); transforms.Children.Add(_rot90Transform); } _translate = new TranslateTransform(); transforms.Children.Add(_translate); _child.IsHitTestVisible = false; _child.EndInit(); AddVisualChild(_child); var animation = new DoubleAnimation(0.55, 0.75, new Duration(TimeSpan.FromMilliseconds(500))) {AutoReverse = true, RepeatBehavior = RepeatBehavior.Forever}; animation.Freeze(); _faceUpBrush.BeginAnimation(Brush.OpacityProperty, animation); _faceDownBrush.BeginAnimation(Brush.OpacityProperty, animation); _lightRedBrush.BeginAnimation(Brush.OpacityProperty, animation); }