private void ShowSkills(object sender, MouseButtonEventArgs e) { e.Handled = true; if (_windowSkill == null) { _windowSkill = new Skills(this, PlayerDamageDealt, EntityInformation, Skills, _buffs, _timedEncounter) { Title = PlayerName, CloseMeter = { Content = LP.ResourceManager.GetString(PlayerDamageDealt.Source.Class.ToString(), LP.Culture) + " " + PlayerName + ": " + LP.Close } }; Window main = Window.GetWindow(this); Screen screen = Screen.FromHandle(new WindowInteropHelper(main).Handle); // Transform screen point to WPF device independent point PresentationSource source = PresentationSource.FromVisual(this); if (source?.CompositionTarget == null) { //if this can't be determined, just use the center screen logic _windowSkill.WindowStartupLocation = WindowStartupLocation.CenterScreen; } else { // WindowStartupLocation.CenterScreen sometimes put window out of screen in multi monitor environment _windowSkill.WindowStartupLocation = WindowStartupLocation.Manual; Matrix m = source.CompositionTarget.TransformToDevice; double dx = m.M11; double dy = m.M22; ((System.Windows.UIElement)_windowSkill.DpsPanel.Content).Measure(new Size(double.PositiveInfinity, double.PositiveInfinity)); var maxWidth = (((System.Windows.UIElement)_windowSkill.DpsPanel.Content).DesiredSize.Width + 6) * BasicTeraData.Instance.WindowData.Scale; Point locationFromScreen; if (screen.WorkingArea.X + screen.WorkingArea.Width > (main.Left + main.Width + maxWidth) * dx) { locationFromScreen = new Point( (main.Left + main.Width) * dx, main.Top * dy); } else if (screen.WorkingArea.X + maxWidth * dx < main.Left * dx) { locationFromScreen = new Point( (main.Left - maxWidth) * dx, main.Top * dy); } else { locationFromScreen = new Point( screen.WorkingArea.X + (screen.WorkingArea.Width - maxWidth * dx) / 2, screen.WorkingArea.Y + (screen.WorkingArea.Height - 600 * dy) / 2); } Point targetPoints = source.CompositionTarget.TransformFromDevice.Transform(locationFromScreen); _windowSkill.Left = targetPoints.X; _windowSkill.Top = targetPoints.Y; } } NetworkController.Instance.SendFullDetails = true; _windowSkill.Show(); }
private void ShowSkills(object sender, MouseButtonEventArgs e) { e.Handled = true; var skills = Skills(_timedEncounter); var allSkills = AllSkills(_timedEncounter); if (_windowSkill == null) { _windowSkill = new Skills(skills, allSkills, this, PlayerInfo, _buffs, _currentBoss, _timedEncounter, _firstHit, _lastHit) { Title = PlayerName, CloseMeter = { Content = PlayerInfo.Class + " " + PlayerName + ": CLOSE" } }; _windowSkill.Show(); return; } _windowSkill.Update(skills, allSkills, PlayerInfo, _buffs, _currentBoss, _timedEncounter, _firstHit, _lastHit); _windowSkill.Show(); }
private void ShowSkills(object sender, MouseButtonEventArgs e) { e.Handled = true; var skills = Skills(); var allSkills = AllSkills(); if (_windowSkill == null) { _windowSkill = new Skills(skills, allSkills, this, PlayerInfo) { Title = PlayerName, CloseMeter = { Content = PlayerInfo.Class + " " + PlayerName + ": CLOSE" } }; _windowSkill.Show(); return; } _windowSkill.Update(skills, allSkills, PlayerInfo); _windowSkill.Show(); }