Files
RAGECOOP-V/Tools/CefTest/Program.cs
sardelka9515 745b212b42 cleanup
2022-11-16 17:40:07 +08:00

151 lines
5.2 KiB
C#

using System;
using System.Drawing;
using System.Security.Permissions;
using System.Windows.Forms;
using RageCoop.Client.CefHost;
using SharpD2D;
using SharpD2D.Windows;
using SharpDX.Direct2D1;
using SharpDX.DXGI;
using AlphaMode = SharpDX.Direct2D1.AlphaMode;
using Bitmap = System.Drawing.Bitmap;
namespace CefTest
{
internal class Program
{
[SecurityPermission(SecurityAction.Demand)]
private static void Main(string[] args)
{
WindowHelper.DisableScalingGlobal();
TimerService.EnableHighPrecisionTimers();
CefController.Initialize(
@"M:\SandBox-Shared\repos\RAGECOOP\RAGECOOP-V\bin\Debug\Client\SubProcess\RageCoop.Client.CefHost.exe");
CefController.OnCefMessage += s => Console.WriteLine(s);
Test2();
}
private static void Test1()
{
var controller2 = CefController.Create(1, new Size(1920, 1080), out var adapter2, BufferMode.Dirty);
Application.Run(new Test(adapter2, controller2));
}
private static void Test2()
{
var controller = CefController.Create(0, new Size(1920, 1080), out var adapter, BufferMode.Full);
controller.FrameRate = 60;
Application.Run(new Test2(adapter, controller));
}
}
internal class Test2 : Test
{
private readonly D2DMedia _con;
public Test2(CefAdapter adapter, CefController controller) : base(adapter, controller)
{
Text = "test2: d2d";
_con = new D2DMedia { Size = Size };
Controls.Add(_con);
SizeChanged += (s, e) => { _con.Size = Size; };
_con.KeyDown += CefKeyDown;
_con.MouseDown += (s, e) => MouseKey(e, false);
_con.MouseUp += (s, e) => MouseKey(e, true);
_con.MouseMove += (s, e) =>
controller?.SendMouseMove(Cursor.Position.X, Cursor.Position.Y - (Height - ClientRectangle.Height));
}
protected override void CefPaint(int bufferSize, Rectangle dirtyRect)
{
try
{
lock (_adapter)
{
var size = _adapter.Size;
_con.UpdateAndPaint(size.Width, size.Height, size.Width * 4, _adapter.PtrBuffer,
new PixelFormat(Format.B8G8R8A8_UNorm, AlphaMode.Premultiplied));
}
}
catch (Exception ex)
{
Console.WriteLine(ex);
}
}
}
internal class Test : Form
{
protected readonly CefAdapter _adapter;
protected readonly CefController _controller;
protected readonly Graphics _graphics;
public Test(CefAdapter adapter, CefController controller)
{
Text = "test1: partial update";
Size = adapter.Size;
_adapter = adapter;
_controller = controller;
_adapter.OnPaint += CefPaint;
controller.LoadUrl("https://www.youtube.com/watch?v=LXb3EKWsInQ");
KeyDown += CefKeyDown;
MouseDown += (s, e) => MouseKey(e, false);
MouseUp += (s, e) => MouseKey(e, true);
MouseMove += (s, e) =>
controller?.SendMouseMove(Cursor.Position.X, Cursor.Position.Y - (Height - ClientRectangle.Height));
BackColor = Color.AliceBlue;
_graphics = CreateGraphics();
AutoScaleMode = AutoScaleMode.None;
SizeChanged += (s, e) => _controller.Resize(ClientRectangle.Size);
}
public void MouseKey(MouseEventArgs e, bool up)
{
_controller?.SendMouseClick(e.X, e.Y, 0, GetFrom(e.Button), up, 1);
}
public static MouseButton GetFrom(MouseButtons b)
{
switch (b)
{
case MouseButtons.Left: return MouseButton.Left;
case MouseButtons.Middle: return MouseButton.Middle;
case MouseButtons.Right: return MouseButton.Right;
default:
return MouseButton.Left;
}
}
public void CefKeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.R)
{
_controller.LoadUrl("https://www.youtube.com/watch?v=x53lfkuP044/");
}
else if (e.KeyCode == Keys.F11)
{
if (WindowState != FormWindowState.Maximized)
{
FormBorderStyle = FormBorderStyle.None;
WindowState = FormWindowState.Maximized;
}
else
{
FormBorderStyle = FormBorderStyle.Sizable;
WindowState = FormWindowState.Normal;
}
}
}
protected virtual void CefPaint(int bufferSize, Rectangle dirtyRect)
{
lock (_adapter)
{
var draw = new Bitmap(dirtyRect.Width, dirtyRect.Height, dirtyRect.Width * 4,
System.Drawing.Imaging.PixelFormat.Format32bppArgb, _adapter.PtrBuffer);
_graphics.DrawImage(draw, dirtyRect.Location);
draw.Dispose();
}
}
}
}