[Examples] Improved MouseCursor example

This commit is contained in:
thefiddler 2014-05-01 17:03:47 +02:00
parent 9ee728d4fc
commit 9bd94c1f13
2 changed files with 52 additions and 1 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.3 KiB

After

Width:  |  Height:  |  Size: 925 B

View file

@ -3,6 +3,7 @@
// It is provided "as is" without express or implied warranty of any kind.
using System;
using System.Collections.Generic;
using System.Drawing;
using OpenTK;
using OpenTK.Graphics.OpenGL;
@ -17,6 +18,7 @@ namespace Examples.Tutorial
public class MouseCursorSimple : GameWindow
{
readonly MouseCursor MyCursor;
List<Vector2> lines = new List<Vector2>();
public MouseCursorSimple()
: base(800, 600)
@ -26,7 +28,7 @@ namespace Examples.Tutorial
using (Bitmap bitmap = new Bitmap("Data/Textures/cursor.png"))
{
var data = bitmap.LockBits(
new Rectangle(0, 0, bitmap.Width, bitmap.Height),
new Rectangle(2, 21, bitmap.Width, bitmap.Height),
System.Drawing.Imaging.ImageLockMode.ReadOnly,
System.Drawing.Imaging.PixelFormat.Format32bppPArgb);
@ -34,8 +36,49 @@ namespace Examples.Tutorial
0, 0, data.Width, data.Height, data.Scan0);
Cursor = MyCursor;
}
Mouse.Move += Mouse_Move;
Mouse.ButtonDown += Mouse_ButtonDown;
}
void AddLine(float x, float y)
{
// Scale mouse coordinates from
// (0, 0):(Width, Height) to
// (-1, -1):(+1, +1)
// Note, we must flip the y-coordinate
// since mouse is reported with (0, 0)
// at top-left and our projection uses
// (-1, -1) at bottom left.
x = (x- Width) / (float)Width;
y = (Height - y) / (float)Height;
lines.Add(new Vector2(2 * x + 1, 2 * y - 1));
}
#region Mouse_ButtonDown
void Mouse_ButtonDown(object sender, MouseButtonEventArgs e)
{
if (e.Button == MouseButton.Left)
{
AddLine(e.X, e.Y);
}
}
#endregion
#region Mouse_Move
void Mouse_Move(object sender, MouseMoveEventArgs e)
{
if (Mouse[MouseButton.Left])
{
AddLine(e.X, i.Y);
}
}
#endregion
#region Keyboard_KeyDown
/// <summary>
@ -144,6 +187,14 @@ namespace Examples.Tutorial
GL.End();
GL.Begin(PrimitiveType.LineStrip);
foreach (var p in lines)
{
GL.Color4(Color.White);
GL.Vertex2(p);
}
GL.End();
this.SwapBuffers();
}