
Still pretty unstable, game might crash at times. Revamp build system and other small fixes
104 lines
3.5 KiB
C#
104 lines
3.5 KiB
C#
using System.Drawing;
|
|
using System.Drawing.Imaging;
|
|
using System.Security.Permissions;
|
|
using System.Threading;
|
|
using System.Windows.Forms;
|
|
using RageCoop.Client.CefHost;
|
|
|
|
namespace CefTest
|
|
{
|
|
internal class Program
|
|
{
|
|
[SecurityPermission(SecurityAction.Demand)]
|
|
private static void Main(string[] args)
|
|
{
|
|
CefController.Initialize();
|
|
var thread = new Thread(() =>
|
|
{
|
|
var controller = CefController.Create(0, new Size(800, 600), out var adapter, BufferMode.Dirty);
|
|
Application.Run(new Test(adapter, controller));
|
|
});
|
|
thread.SetApartmentState(ApartmentState.STA);
|
|
thread.Start();
|
|
var controller2 = CefController.Create(1, new Size(800, 600), out var adapter2, BufferMode.Full);
|
|
Application.Run(new Test2(adapter2, controller2));
|
|
}
|
|
}
|
|
|
|
internal class Test2 : Test
|
|
{
|
|
public Test2(CefAdapter adapter, CefController controller) : base(adapter, controller)
|
|
{
|
|
Text = "test2: full update";
|
|
}
|
|
|
|
protected override void CefPaint(int bufferSize, Rectangle dirtyRect)
|
|
{
|
|
lock (_adapter)
|
|
{
|
|
var size = _adapter.Size;
|
|
var draw = new Bitmap(size.Width, size.Height, size.Width * 4, PixelFormat.Format32bppArgb,
|
|
_adapter.PtrBuffer);
|
|
_graphics.DrawImage(draw, Point.Empty);
|
|
draw.Dispose();
|
|
}
|
|
}
|
|
}
|
|
|
|
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";
|
|
AutoScaleMode = AutoScaleMode.None;
|
|
Application.EnableVisualStyles();
|
|
Size = adapter.Size;
|
|
_adapter = adapter;
|
|
_controller = controller;
|
|
_adapter.OnPaint += CefPaint;
|
|
controller.LoadUrl("https://www.youtube.com/watch?v=w3rQ3328Tok");
|
|
KeyDown += TestForm_KeyDown;
|
|
MouseClick += TestForm_MouseClick;
|
|
BackColor = Color.AliceBlue;
|
|
_graphics = CreateGraphics();
|
|
}
|
|
|
|
private void TestForm_MouseClick(object sender, MouseEventArgs e)
|
|
{
|
|
_controller?.SendMouseClick(e.X, e.Y, 0, GetFrom(e.Button), false, 1);
|
|
_controller?.SendMouseClick(e.X, e.Y, 0, GetFrom(e.Button), true, 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;
|
|
}
|
|
}
|
|
|
|
private void TestForm_KeyDown(object sender, KeyEventArgs e)
|
|
{
|
|
if (e.KeyCode == Keys.R) _controller.LoadUrl("https://www.youtube.com/watch?v=x53lfkuP044/");
|
|
}
|
|
|
|
protected virtual void CefPaint(int bufferSize, Rectangle dirtyRect)
|
|
{
|
|
lock (_adapter)
|
|
{
|
|
var draw = new Bitmap(dirtyRect.Width, dirtyRect.Height, dirtyRect.Width * 4,
|
|
PixelFormat.Format32bppArgb, _adapter.PtrBuffer);
|
|
_graphics.DrawImage(draw, dirtyRect.Location);
|
|
draw.Dispose();
|
|
}
|
|
}
|
|
}
|
|
} |