Exemplo n.º 1
0
        public Menu(
            CefApp menuCeffApp,
            CefMainArgs mainArgs,
            InputProcessor inputProcessor,
            MenuBrowserClient browserClient,
            StateManager stateManager,
            EventBus eventBus
            )
        {
            // State Initialization
            _buttons        = (GameControllerButton[])Enum.GetValues(typeof(GameControllerButton));
            _analogs        = (GameControllerAnalog[])Enum.GetValues(typeof(GameControllerAnalog));
            _eventTokenList = new List <SubscriptionToken>();
            _eventBus       = eventBus;

#if (DEBUG)
            var logSeverity = CefLogSeverity.Error;
#else
            var logSeverity = CefLogSeverity.Error;
#endif

            var settings = new CefSettings
            {
                WindowlessRenderingEnabled = true,
                LogSeverity = logSeverity,
                NoSandbox   = true
            };

            CefRuntime.Initialize(mainArgs, settings, menuCeffApp, IntPtr.Zero);

            // Instruct CEF to not render to a window at all.
            var cefWindowInfo = CefWindowInfo.Create();
            cefWindowInfo.SetAsWindowless(IntPtr.Zero, false);

            var browserSettings = new CefBrowserSettings()
            {
                WindowlessFrameRate = 60,
            };

            _inputProcessor = inputProcessor;
            _browserClient  = browserClient;
            _browser        = CefBrowserHost.CreateBrowserSync(
                cefWindowInfo,
                _browserClient,
                browserSettings,
                "http://localhost:4200"
                );

            _eventTokenList.Add(_eventBus.Subscribe <OpenMenuEvent>(OnOpenMenuEvent));
            _eventTokenList.Add(_eventBus.Subscribe <CloseMenuEvent>(OnCloseMenuEvent));

            var game = stateManager.GetGameById("Super Mario World (USA)");
            eventBus.Publish(new LoadGameEvent(game));
        }
Exemplo n.º 2
0
        public bool CreateBrowser(BrowserSource browserSource,
                                  BrowserConfig browserConfig)
        {
            if (browserClient == null)
            {
                InitClient(browserSource);
            }

            Debug.Assert(browserClient != null);
            Debug.Assert(browserConfig != null);

            BrowserConfig = browserConfig;

            CefWindowInfo windowInfo = CefWindowInfo.Create();

            windowInfo.Width  = (int)browserConfig.BrowserSourceSettings.Width;
            windowInfo.Height = (int)browserConfig.BrowserSourceSettings.Height;
            windowInfo.SetAsWindowless(IntPtr.Zero, true);

            BrowserInstanceSettings settings = AbstractSettings.DeepClone(
                BrowserSettings.Instance.InstanceSettings);

            settings.MergeWith(browserConfig.BrowserInstanceSettings);

            CefBrowserSettings browserSettings = new CefBrowserSettings
            {
                WindowlessFrameRate        = browserConfig.BrowserSourceSettings.Fps,
                ApplicationCache           = settings.ApplicationCache,
                CaretBrowsing              = settings.CaretBrowsing,
                CursiveFontFamily          = settings.CursiveFontFamily,
                Databases                  = settings.Databases,
                DefaultEncoding            = settings.DefaultEncoding,
                DefaultFixedFontSize       = settings.DefaultFixedFontSize,
                DefaultFontSize            = settings.DefaultFontSize,
                FantasyFontFamily          = settings.FantasyFontFamily,
                FileAccessFromFileUrls     = settings.FileAccessFromFileUrls,
                FixedFontFamily            = settings.FixedFontFamily,
                ImageLoading               = settings.ImageLoading,
                ImageShrinkStandaloneToFit = settings.ImageShrinkStandaloneToFit,
                Java       = settings.Java,
                JavaScript = settings.JavaScript,
                JavaScriptAccessClipboard = settings.JavaScriptAccessClipboard,
                JavaScriptCloseWindows    = settings.JavaScriptCloseWindows,
                JavaScriptDomPaste        = settings.JavaScriptDomPaste,
                JavaScriptOpenWindows     = settings.JavaScriptOpenWindows,
                LocalStorage           = settings.LocalStorage,
                MinimumFontSize        = settings.MinimumFontSize,
                MinimumLogicalFontSize = settings.MinimumLogicalFontSize,
                Plugins             = settings.Plugins,
                RemoteFonts         = settings.RemoteFonts,
                SansSerifFontFamily = settings.SansSerifFontFamily,
                SerifFontFamily     = settings.SerifFontFamily,
                StandardFontFamily  = settings.StandardFontFamily,
                //TabToLinks = settings.TabToLinks,
                //TextAreaResize = settings.TextAreaResize,
                UniversalAccessFromFileUrls =
                    settings.UniversalAccessFromFileUrls,
                WebGL       = settings.WebGL,
                WebSecurity = settings.WebSecurity
            };

            String url = browserConfig.BrowserSourceSettings.Url;

            if (browserConfig.BrowserSourceSettings.IsApplyingTemplate)
            {
                url = "http://absolute";
            }

            lock (browserLock)
            {
                ManualResetEventSlim createdBrowserEvent =
                    new ManualResetEventSlim();
                CefRuntime.PostTask(CefThreadId.UI, BrowserTask.Create(() =>
                {
                    try
                    {
                        browser = CefBrowserHost.CreateBrowserSync(windowInfo,
                                                                   browserClient, browserSettings, new Uri(url));
                        BrowserManager.Instance.RegisterBrowser(browser.Identifier,
                                                                this);

                        // request the render process id for volume control
                        browser.SendProcessMessage(CefProcessId.Renderer,
                                                   CefProcessMessage.Create("renderProcessIdRequest"));
                    }
                    catch (Exception)
                    {
                        browser = null;
                    }
                    finally
                    {
                        createdBrowserEvent.Set();
                    }
                }));
                createdBrowserEvent.Wait();
            }

            return(browser != null);
        }