mirror of
https://github.com/Ryujinx/Opentk.git
synced 2025-01-11 10:35:33 +00:00
[Platform] Make MouseCursor actor public
This commit is contained in:
parent
0ed1e8b6d8
commit
d013ef1868
|
@ -40,9 +40,6 @@ namespace OpenTK
|
||||||
static readonly MouseCursor empty_cursor = new MouseCursor(
|
static readonly MouseCursor empty_cursor = new MouseCursor(
|
||||||
new byte[16 * 16 * 4], 16, 16, 0, 0);
|
new byte[16 * 16 * 4], 16, 16, 0, 0);
|
||||||
|
|
||||||
byte[] rgba;
|
|
||||||
int width;
|
|
||||||
int height;
|
|
||||||
int x;
|
int x;
|
||||||
int y;
|
int y;
|
||||||
|
|
||||||
|
@ -51,27 +48,26 @@ namespace OpenTK
|
||||||
}
|
}
|
||||||
|
|
||||||
// Todo: make public when byte-order issues are resolved
|
// Todo: make public when byte-order issues are resolved
|
||||||
internal MouseCursor(byte[] rgba, int width, int height, int x, int y)
|
public MouseCursor(byte[] argb, int width, int height, int x, int y)
|
||||||
|
: base(argb, width, height)
|
||||||
{
|
{
|
||||||
if (rgba == null)
|
if (x < 0 || x >= Width || y < 0 || y >= Height)
|
||||||
throw new ArgumentNullException();
|
throw new ArgumentOutOfRangeException();
|
||||||
if (width < 0 || width > 256 || height < 0 || height > 256)
|
|
||||||
throw new ArgumentOutOfRangeException();
|
this.x = x;
|
||||||
if (rgba.Length < width * height * 4)
|
this.y = y;
|
||||||
throw new ArgumentOutOfRangeException();
|
}
|
||||||
if (x < 0 || x >= width || y < 0 || y >= height)
|
|
||||||
|
public MouseCursor(IntPtr argb, int width, int height, int x, int y)
|
||||||
|
: base(argb, width, height)
|
||||||
|
{
|
||||||
|
if (x < 0 || x >= Width || y < 0 || y >= Height)
|
||||||
throw new ArgumentOutOfRangeException();
|
throw new ArgumentOutOfRangeException();
|
||||||
|
|
||||||
this.rgba = rgba;
|
|
||||||
this.width = width;
|
|
||||||
this.height = height;
|
|
||||||
this.x = x;
|
this.x = x;
|
||||||
this.y = y;
|
this.y = y;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal byte[] Rgba { get { return rgba; } }
|
|
||||||
internal int Width { get { return width; } }
|
|
||||||
internal int Height { get { return height; } }
|
|
||||||
internal int X { get { return x; } }
|
internal int X { get { return x; } }
|
||||||
internal int Y { get { return y; } }
|
internal int Y { get { return y; } }
|
||||||
|
|
||||||
|
|
|
@ -28,6 +28,7 @@
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
namespace OpenTK
|
namespace OpenTK
|
||||||
{
|
{
|
||||||
|
@ -37,9 +38,55 @@ namespace OpenTK
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class WindowIcon
|
public class WindowIcon
|
||||||
{
|
{
|
||||||
|
byte[] argb;
|
||||||
|
int width;
|
||||||
|
int height;
|
||||||
|
|
||||||
internal protected WindowIcon()
|
internal protected WindowIcon()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
WindowIcon(int width, int height)
|
||||||
|
{
|
||||||
|
if (width < 0 || width > 256 || height < 0 || height > 256)
|
||||||
|
throw new ArgumentOutOfRangeException();
|
||||||
|
|
||||||
|
this.width = width;
|
||||||
|
this.height = height;
|
||||||
|
}
|
||||||
|
|
||||||
|
internal WindowIcon(byte[] argb, int width, int height)
|
||||||
|
: this(width, height)
|
||||||
|
{
|
||||||
|
if (argb == null)
|
||||||
|
throw new ArgumentNullException();
|
||||||
|
if (argb.Length < Width * Height * 4)
|
||||||
|
throw new ArgumentOutOfRangeException();
|
||||||
|
|
||||||
|
this.argb = argb;
|
||||||
|
}
|
||||||
|
|
||||||
|
internal WindowIcon(IntPtr argb, int width, int height)
|
||||||
|
: this(width, height)
|
||||||
|
{
|
||||||
|
if (argb == IntPtr.Zero)
|
||||||
|
throw new ArgumentNullException();
|
||||||
|
|
||||||
|
// We assume that width and height are correctly set.
|
||||||
|
// If they are not, we will read garbage and probably
|
||||||
|
// crash.
|
||||||
|
this.argb = new byte[width * height * 4];
|
||||||
|
for (int y = 0; y < height; y++)
|
||||||
|
{
|
||||||
|
var stride = width * 4;
|
||||||
|
var offset = new IntPtr(argb.ToInt64() + y * stride);
|
||||||
|
Marshal.Copy(offset, Argb, y * stride, stride);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
internal byte[] Argb { get { return argb; } }
|
||||||
|
internal int Width { get { return width; } }
|
||||||
|
internal int Height { get { return height; } }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue