Пример #1
0
        public void SetVisualizing(bool ui, bool drawing)
        {
            m_IsVisualizingUI      = ui;
            m_IsVisualizingDrawing = drawing;

            if (m_VisualWindow != null)
            {
                m_VisualWindow.SetActive(ui);
            }
            else if (ui)
            {
                m_VisualWindow = new HudWindow(Title);
                HudPanel.AddWindow(m_VisualWindow);
            }

            if ((ui || drawing) && m_Visual == null)
            {
                m_Visual = GetVisualFactory().GetOrCreateVisual(Topic);
            }

            if (m_Visual != null)
            {
                m_Visual.SetDrawingEnabled(drawing);

                if (m_VisualWindow != null)
                {
                    m_VisualWindow.SetOnGUI(m_Visual.OnGUI);
                }
            }
        }
Пример #2
0
        public void LoadSaveState(SaveState save)
        {
            if (m_TopicState.ServiceResponseTopic != null && save.Subtopic == MessageSubtopic.Response)
            {
                // this save actually applies to the response topic
                m_ServiceResponseTopic.LoadSaveState(save);
                return;
            }

            if (save.HasRect && save.Rect.width > 0 && save.Rect.height > 0)
            {
                m_VisualWindow = new HudWindow(Title, save.Rect);
            }
            else if (save.ShowWindow)
            {
                m_VisualWindow = new HudWindow(Title);
            }

            if (m_VisualWindow != null)
            {
                HudPanel.AddWindow(m_VisualWindow);
            }

            SetVisualizing(save.ShowWindow, save.ShowDrawing);
        }
Пример #3
0
        private static WindowInteropHelper CreateWindowInteropHelper(HudWindow window, HudLayout hudLayout, IntPtr windowHandle)
        {
            if (hudLayout.IsSpecialMode)
            {
                return(new WindowInteropHelper(window));
            }

            return(new WindowInteropHelper(window)
            {
                Owner = windowHandle
            });
        }
Пример #4
0
        /// <summary>
        /// Calculates hudElement position in window
        /// </summary>
        /// <param name="hudElement">HUD element view model</param>
        /// <param name="window">Overlay window</param>
        /// <returns>Item1 - X, Item2 - Y</returns>
        public virtual Tuple <double, double> CalculatePositions(HudBaseToolViewModel toolViewModel, FrameworkElement toolElement, HudWindow window)
        {
            Check.ArgumentNotNull(() => toolViewModel);
            Check.ArgumentNotNull(() => window);
            Check.ArgumentNotNull(() => toolElement);

            var panelOffset = window.ViewModel.GetPanelOffset(toolViewModel);

            var xPosition = panelOffset.X != 0 ? panelOffset.X : toolViewModel.Position.X;
            var yPosition = panelOffset.Y != 0 ? panelOffset.Y : toolViewModel.Position.Y;

            var scaledXPosition = xPosition * window.ScaleX;
            var scaledYPosition = yPosition * window.ScaleY;

            // border limits
            var toolWidth = toolElement.ActualWidth != 0 && !double.IsNaN(toolElement.ActualWidth) ?
                            toolElement.ActualWidth :
                            (!double.IsNaN(toolViewModel.Width) ? toolViewModel.Width : 0);

            var toolHeight = toolElement.ActualHeight != 0 && !double.IsNaN(toolElement.ActualHeight) ?
                             toolElement.ActualHeight :
                             !double.IsNaN(toolViewModel.Height) ? toolViewModel.Height : 0;

            var widthLimit  = toolWidth >= HudDefaultSettings.MinimumDistanceToTheBorder ? HudDefaultSettings.MinimumDistanceToTheBorder : toolWidth;
            var heightLimit = toolHeight >= HudDefaultSettings.MinimumDistanceToTheBorder ? HudDefaultSettings.MinimumDistanceToTheBorder : toolHeight;

            if (toolWidth == 0 || toolWidth >= window.Width ||
                widthLimit >= window.Width || toolHeight == 0 ||
                toolHeight >= window.Height || (heightLimit + HudDefaultSettings.HudIconHeaderHeight) >= window.Height)
            {
                return(new Tuple <double, double>(scaledXPosition, scaledYPosition));
            }

            if (scaledXPosition > window.Width - widthLimit)
            {
                scaledXPosition       = window.Width - widthLimit;
                toolViewModel.OffsetX = window.ScaleX != 0 ? scaledXPosition / window.ScaleX : toolViewModel.OffsetX;
            }
            else if (scaledXPosition < widthLimit - toolWidth)
            {
                scaledXPosition       = widthLimit - toolWidth;
                toolViewModel.OffsetX = widthLimit - toolWidth;
            }

            if (scaledYPosition > window.Height - heightLimit - HudDefaultSettings.HudIconHeaderHeight)
            {
                scaledYPosition       = window.Height - heightLimit - HudDefaultSettings.HudIconHeaderHeight;
                toolViewModel.OffsetY = window.ScaleY != 0 ?
                                        ((window.Height - heightLimit) / window.ScaleY - HudDefaultSettings.HudIconHeaderHeight) :
                                        toolViewModel.OffsetY;
            }
            else if (scaledYPosition < heightLimit - toolHeight - HudDefaultSettings.HudIconHeaderHeight)
            {
                scaledYPosition       = heightLimit - toolHeight - HudDefaultSettings.HudIconHeaderHeight;
                toolViewModel.OffsetY = heightLimit - toolHeight - HudDefaultSettings.HudIconHeaderHeight;
            }

            return(new Tuple <double, double>(scaledXPosition, scaledYPosition));
        }
Пример #5
0
 /// <summary>
 /// Calculates y-scale for the specified window
 /// </summary>
 /// <param name="window">Window to calculate y-scale</param>
 /// <returns>Y-scale</returns>
 public virtual double GetScaleY(HudWindow window)
 {
     return(window.Height / InitialTableSize.Y);
 }
Пример #6
0
 /// <summary>
 /// Calculates x-scale for the specified window
 /// </summary>
 /// <param name="window">Window to calculate x-scale</param>
 /// <returns>X-scale</returns>
 public virtual double GetScaleX(HudWindow window)
 {
     return(window.Width / InitialTableSize.X);
 }
Пример #7
0
        private static void CreateHudWindow(IntPtr hwnd, HudLayout hudLayout)
        {
            var thread = new Thread(() =>
            {
                try
                {
                    var hudPanelService = ServiceLocator.Current.GetInstance <IHudPanelService>(hudLayout.PokerSite.ToString());

                    var window       = new HudWindow();
                    var windowHandle = hudPanelService.GetWindowHandle(hwnd);

                    if (!WinApi.IsWindow(windowHandle))
                    {
                        LogProvider.Log.Info(typeof(HudPainter), $"Window {windowHandle} doesn't exist. HUD window can't be created.");
                        return;
                    }

                    var windowInteropHelper = CreateWindowInteropHelper(window, hudLayout, hwnd);

                    var windowItem = new HudWindowItem
                    {
                        Window        = window,
                        Handle        = windowHandle,
                        OverlayHandle = windowInteropHelper.EnsureHandle()
                    };

                    using (rwWindowsLock.Write())
                    {
                        if (windows.ContainsKey(hwnd))
                        {
                            return;
                        }

                        windows.Add(hwnd, windowItem);
                    }

                    window.Closed += (s, e) => window.Dispatcher.InvokeShutdown();
                    window.Initialize(hudLayout, hwnd);
                    window.Show();

                    WinApi.GetWindowRect(windowHandle, out RECT rect);

                    SizeF dpi = Utils.GetCurrentDpi();

                    SizeF scale = new SizeF()
                    {
                        Width  = 96f / dpi.Width,
                        Height = 96f / dpi.Height
                    };

                    window.Top    = rect.Top * scale.Height;
                    window.Left   = rect.Left * scale.Width;
                    window.Height = rect.Height * scale.Height;
                    window.Width  = rect.Width * scale.Width;

                    windowItem.IsInitialized = true;

                    PrepareWindow(windowItem, hudLayout, hwnd);

                    if (!WinApi.IsIconic(hwnd))
                    {
                        window.Refresh();
                    }

                    // workaround for unresponsive PB window after attaching HUD
                    if (hudLayout.PokerSite == EnumPokerSites.PokerBaazi)
                    {
                        WinApi.GetWindowRect(hwnd, out RECT rct);
                        WinApi.SetWindowPos(hwnd, IntPtr.Zero, 0, 0, rct.Width + 1, rct.Height + 1, Swp.NOMOVE | Swp.NOZORDER | Swp.NOACTIVATE);
                        WinApi.SetWindowPos(hwnd, IntPtr.Zero, 0, 0, rct.Width, rct.Height, Swp.NOMOVE | Swp.NOZORDER | Swp.NOACTIVATE);
                    }

                    System.Windows.Threading.Dispatcher.Run();
                }
                catch (Exception e)
                {
                    LogProvider.Log.Error(typeof(HudPainter), $"Failed to create HUD window for {hwnd}", e);
                }
            });

            thread.SetApartmentState(ApartmentState.STA);
            thread.Start();
        }
Пример #8
0
        public Plugin()
        {
            _pluginConfiguration = (PluginConfiguration)(PluginInterface.GetPluginConfig() ?? new PluginConfiguration());

            PluginInterface.UiBuilder.BuildFonts += UiBuilderOnBuildFonts;
            PluginInterface.UiBuilder.RebuildFonts();

            _hudWindowWindow     = new HudWindow(_pluginConfiguration);
            _configurationWindow = new ConfigurationWindow(this, _pluginConfiguration);

            var items = new[]
            {
                "CleanCurves",
                "GlowArc",
                "RivetBar"
            };

            foreach (var item in items)
            {
                LoadStyle(item, Path.Combine(PluginInterface.AssemblyLocation.DirectoryName !, "Styles"), false);
            }

            if (!string.IsNullOrEmpty(_pluginConfiguration.UserStylePath))
            {
                if (!Directory.Exists(_pluginConfiguration.UserStylePath))
                {
                    PluginLog.Error($"{_pluginConfiguration.UserStylePath} was not found.");
                }
                else
                {
                    foreach (var item in Directory.GetDirectories(_pluginConfiguration.UserStylePath))
                    {
                        LoadStyle(item, _pluginConfiguration.UserStylePath, true);
                    }
                }
            }

            if (_pluginConfiguration.IsUserStyle && !UserStyles.ContainsKey(_pluginConfiguration.SelectedStyle))
            {
                _pluginConfiguration.IsUserStyle   = false;
                _pluginConfiguration.SelectedStyle = items[0];
                _pluginConfiguration.Save();
            }

            if (_pluginConfiguration.IsUserStyle)
            {
                _pluginConfiguration.BarImage           = UserStyles[_pluginConfiguration.SelectedStyle][0];
                _pluginConfiguration.BarBackgroundImage =
                    UserStyles[_pluginConfiguration.SelectedStyle][1];
                _pluginConfiguration.BarCastImage           = UserStyles[_pluginConfiguration.SelectedStyle][2];
                _pluginConfiguration.BarCastBackgroundImage =
                    UserStyles[_pluginConfiguration.SelectedStyle][3];
            }
            else
            {
                _pluginConfiguration.BarImage           = Styles[_pluginConfiguration.SelectedStyle][0];
                _pluginConfiguration.BarBackgroundImage =
                    Styles[_pluginConfiguration.SelectedStyle][1];
                _pluginConfiguration.BarCastImage           = Styles[_pluginConfiguration.SelectedStyle][2];
                _pluginConfiguration.BarCastBackgroundImage =
                    Styles[_pluginConfiguration.SelectedStyle][3];
            }

            CommandManager.AddHandler("/pside", new CommandInfo(PluginCommand)
            {
                HelpMessage = "Opens configuration window",
                ShowInHelp  = true
            });

            PluginInterface.UiBuilder.Draw         += UiBuilderOnOnBuildUi;
            PluginInterface.UiBuilder.OpenConfigUi += UiBuilderOnOnOpenConfigUi;
        }
Пример #9
0
 /// <summary>
 /// Calculates x-scale for the specified Winamax windowk
 /// </summary>
 /// <param name="window"></param>
 /// <returns></returns>
 public override double GetScaleX(HudWindow window)
 {
     return(base.GetScaleY(window));
 }