You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

ChromiumRenderer.cs 2.8 KiB

8 months ago
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. using CefSharp;
  2. using CefSharp.OffScreen;
  3. using DamnOverSharp.Renderers.Graphic;
  4. using System.Diagnostics;
  5. using System.Drawing;
  6. using System.Threading;
  7. using System.Threading.Tasks;
  8. namespace DamnOverSharp.Renderers.Chromium
  9. {
  10. public class ChromiumRenderer
  11. {
  12. public System.Windows.Size RenderSize = new System.Windows.Size(1920, 1080);
  13. public System.Windows.Point RenderPosition = new System.Windows.Point(0, 0);
  14. public bool AllowTransparency { get; private set; } = true;
  15. public System.Windows.Point InteractionOffset
  16. {
  17. get => InternalChromiumInteractionManager.Offset;
  18. set => InternalChromiumInteractionManager.Offset = value;
  19. }
  20. internal GraphicRenderer InternalBitmapRenderer;
  21. internal ChromiumInteractionManager InternalChromiumInteractionManager;
  22. internal ChromiumWebBrowser InternalBrowser;
  23. private bool IsDisposed = false;
  24. public ChromiumRenderer(string processName, System.Windows.Size renderSize, System.Windows.Point renderPosition, bool allowTransparency)
  25. {
  26. RenderSize = renderSize;
  27. RenderPosition = renderPosition;
  28. AllowTransparency = allowTransparency;
  29. InternalBitmapRenderer = new GraphicRenderer(processName);
  30. InternalChromiumInteractionManager = new ChromiumInteractionManager(this);
  31. CefSettings settings = new CefSettings();
  32. settings.CefCommandLineArgs["autoplay-policy"] = "no-user-gesture-required";
  33. Cef.Initialize(settings);
  34. InternalBrowser = new ChromiumWebBrowser(address: "https://www.google.com") { Size = new Size((int)renderSize.Width, (int)renderSize.Height) };
  35. Task.Run(() =>
  36. {
  37. while (!IsDisposed)
  38. {
  39. UpdateVisual();
  40. Thread.Sleep(1);
  41. }
  42. });
  43. Task.Run(() =>
  44. {
  45. while (!IsDisposed)
  46. {
  47. InternalChromiumInteractionManager.GlobalMouseMove(null, null);
  48. Thread.Sleep(1);
  49. }
  50. });
  51. }
  52. public void UpdateVisual()
  53. {
  54. if (InternalBrowser != null && InternalBrowser.IsBrowserInitialized)
  55. {
  56. using (Bitmap bmp = InternalBrowser.ScreenshotOrNull())
  57. {
  58. if (bmp != null)
  59. {
  60. InternalBitmapRenderer.Draw(bmp, new Point((int)RenderPosition.X, (int)RenderPosition.Y), AllowTransparency);
  61. }
  62. }
  63. }
  64. }
  65. public void Destroy()
  66. {
  67. IsDisposed = true;
  68. Thread.Sleep(100);
  69. InternalChromiumInteractionManager.Destroy();
  70. InternalBitmapRenderer.Destroy();
  71. }
  72. }
  73. }