protected void InitializeUltralight()
        {
            // setup logging
            LoggerLogMessageCallback cb = LoggerCallback;

            Ultralight.SetLogger(new Logger {
                LogMessage = cb
            });

            using var cfg = new Config();

            var cachePath = Path.Combine(AssetDirectory, "Cache");

            cfg.SetCachePath(cachePath);

            var resourcePath = Path.Combine(AssetDirectory, "resources");

            cfg.SetResourcePath(resourcePath);

            cfg.SetUseGpuRenderer(false);
            cfg.SetEnableImages(true);
            cfg.SetEnableJavaScript(true);

            AppCore.EnablePlatformFontLoader();
            AppCore.EnablePlatformFileSystem(AssetDirectory);
            _renderer = new Renderer(cfg);
        }
        public static unsafe void Main(string[] args)
        {
            // setup logging
            LoggerLogMessageCallback cb = LoggerCallback;

            Ultralight.PlatformSetLogger(new Logger {
                LogMessage = cb
            });

            if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
            {
                Ansi.WindowsConsole.TryEnableVirtualTerminalProcessing();
            }

            if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX))
            {
                NativeLibrary.SetDllImportResolver(typeof(Ultralight).Assembly,
                                                   (name, assembly, path) => name switch {
                    "Ultralight" => NativeLibrary.Load("libUltralight.dylib"),
                    "AppCore" => NativeLibrary.Load("libAppCore.dylib"),
                    "WebCore" => NativeLibrary.Load("libWebCore.dylib"),
                    _ => default
                });
Beispiel #3
0
        public static unsafe void Main(string[] args)
        {
            // setup logging
            LoggerLogMessageCallback cb = LoggerCallback;

            Ultralight.SetLogger(new Logger {
                LogMessage = cb
            });

            if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
            {
                Console.OutputEncoding = Encoding.UTF8;
                Ansi.WindowsConsole.TryEnableVirtualTerminalProcessing();
            }

            var asmPath = typeof(DemoProgram).Assembly.Location;
            var asmDir  = Path.GetDirectoryName(asmPath) !;
            var tempDir = Path.GetTempPath();
            // find a place to stash instance storage
            string storagePath;

            do
            {
                storagePath = Path.Combine(tempDir, Guid.NewGuid().ToString());
            } while (Directory.Exists(storagePath) || File.Exists(storagePath));

            var cfg = Config.Create();

            {
                var cachePath = String.Create(Path.Combine(storagePath, "Cache"));
                cfg->SetCachePath(cachePath);
                cachePath->Destroy();
            }

            {
                var resourcePath = String.Create(Path.Combine(asmDir, "resources"));
                cfg->SetResourcePath(resourcePath);
                resourcePath->Destroy();
            }

            cfg->SetUseGpuRenderer(false);
            cfg->SetEnableImages(true);
            cfg->SetEnableJavaScript(false);

            AppCore.EnablePlatformFontLoader();

            {
                var assetsPath = String.Create(Path.Combine(asmDir, "assets"));
                AppCore.EnablePlatformFileSystem(assetsPath);
                assetsPath->Destroy();
            }

            var renderer    = Renderer.Create(cfg);
            var sessionName = String.Create("Demo");
            var session     = Session.Create(renderer, false, sessionName);

            var view = View.Create(renderer, 640, 480, false, session, false);

            {
                var htmlString = String.Create("<i>Loading...</i>");
                Console.WriteLine($"Loading HTML: {htmlString->Read()}");
                view->LoadHtml(htmlString);
                htmlString->Destroy();
            }

            var loaded = false;

            view->SetFinishLoadingCallback((data, caller, frameId, isMainFrame, url) => {
                Console.WriteLine($"Loading Finished, URL: 0x{(ulong) url:X8}  {url->Read()}");

                loaded = true;
            }, null);

            while (!loaded)
            {
                Ultralight.Update(renderer);
                Ultralight.Render(renderer);
            }

            /*
             * {
             * var surface = view->GetSurface();
             * var bitmap = surface->GetBitmap();
             * var pixels = bitmap->LockPixels();
             * RenderAnsi<Bgra32>(pixels, bitmap->GetWidth(), bitmap->GetHeight(), bitmap->GetBpp());
             * Console.WriteLine();
             * bitmap->UnlockPixels();
             * bitmap->SwapRedBlueChannels();
             * //bitmap->WritePng("Loading.png");
             * }
             */

            loaded = false;

            {
                var urlString = String.Create("file:///index.html");
                Console.WriteLine($"Loading URL: {urlString->Read()}");
                view->LoadUrl(urlString);
                urlString->Destroy();
            }

            while (!loaded)
            {
                //Ultralight.Update(renderer);
                renderer->Update();
                //Ultralight.Render(renderer);
                renderer->Render();
            }

            {
                var urlStrPtr = view->GetUrl();
                Console.WriteLine($"After Loaded View GetURL: 0x{(ulong) urlStrPtr:X8} {urlStrPtr->Read()}");
            }

            {
                var surface = view->GetSurface();
                var bitmap  = surface->GetBitmap();
                var pixels  = bitmap->LockPixels();
                RenderAnsi <Bgra32>(pixels, bitmap->GetWidth(), bitmap->GetHeight());
                bitmap->UnlockPixels();
                bitmap->SwapRedBlueChannels();
                //bitmap->WritePng("Loaded.png");
            }

            view->Destroy();

            session->Destroy();
            renderer->Destroy();
            cfg->Destroy();

            try {
                Directory.Delete(storagePath, true);
            }
            catch {
                /* ok */
            }

            //Console.WriteLine("Press any key to exit.");
            //Console.ReadKey(true);
        }
        public static void Main(string[] args)
        {
            // setup logging
            LoggerLogMessageCallback cb = LoggerCallback;

            Ultralight.SetLogger(new Logger {
                LogMessage = cb
            });

            if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
            {
                Console.OutputEncoding = Encoding.UTF8;
                Ansi.WindowsConsole.TryEnableVirtualTerminalProcessing();
            }

            var asmPath = new Uri(typeof(DemoProgram).Assembly.CodeBase !).LocalPath;
            var asmDir  = Path.GetDirectoryName(asmPath) !;
            var tempDir = Path.GetTempPath();
            // find a place to stash instance storage
            string storagePath;

            do
            {
                storagePath = Path.Combine(tempDir, Guid.NewGuid().ToString());
            } while (Directory.Exists(storagePath) || File.Exists(storagePath));

            {
                using var cfg = new Config();

                var cachePath = Path.Combine(storagePath, "Cache");
                cfg.SetCachePath(cachePath);

                var resourcePath = Path.Combine(asmDir, "resources");
                cfg.SetResourcePath(resourcePath);

                cfg.SetUseGpuRenderer(false);
                cfg.SetEnableImages(true);
                cfg.SetEnableJavaScript(false);

                AppCore.EnablePlatformFontLoader();

                {
                    var assetsPath = Path.Combine(asmDir, "assets");
                    AppCore.EnablePlatformFileSystem(assetsPath);
                }

                using var renderer = new Renderer(cfg);
                var sessionName = "Demo";
                using var session = new Session(renderer, false, sessionName);

                using var view = new View(renderer, 640, 480, false, session);

                {
                    var htmlString = "<i>Loading...</i>";
                    Console.WriteLine($"Loading HTML: {htmlString}");
                    view.LoadHtml(htmlString);
                }

                var loaded = false;

                view.SetFinishLoadingCallback((data, caller, frameId, isMainFrame, url) => {
                    Console.WriteLine($"Loading Finished, URL: {url}");

                    loaded = true;
                }, default);

                while (!loaded)
                {
                    renderer.Update();
                    renderer.Render();
                }

                loaded = false;

                {
                    var urlString = "file:///index.html";
                    Console.WriteLine($"Loading URL: {urlString}");
                    view.LoadUrl(urlString);
                }

                while (!loaded)
                {
                    renderer.Update();
                    renderer.Render();
                }

                {
                    var urlStr = view.GetUrl();
                    Console.WriteLine($"After Loaded View GetURL: {urlStr}");
                }

                {
                    var surface = view.GetSurface();
                    var bitmap  = surface.GetBitmap();
                    var pixels  = bitmap.LockPixels();
                    RenderAnsi <Bgra32>(pixels, bitmap.GetWidth(), bitmap.GetHeight(), 2, borderless: true);
                    bitmap.UnlockPixels();
                    //bitmap.SwapRedBlueChannels();
                    //bitmap.WritePng("Loaded.png");
                }
            }

            try {
                Directory.Delete(storagePath, true);
            }
            catch {
                /* ok */
            }

            if (!Environment.UserInteractive || Console.IsInputRedirected)
            {
                return;
            }

            Console.Write("Press any key to exit.");
            Console.ReadKey(true);
            Console.WriteLine();
        }