public static void Draw() { CursorEntry cursor = Cursor.GetCursor(); if (cursor == null) { return; } cursor.Draw(Engine.m_xMouse, Engine.m_yMouse); }
private static unsafe CursorEntry LoadCursor(int idCursor, int idType) { IHue hue; int itemId; switch (idType) { case 0: hue = Hues.Default; itemId = 8298 + idCursor; break; case 1: hue = Hues.Default; itemId = 8275 + idCursor; break; case 2: hue = Hues.Load(35181); itemId = 8298 + idCursor; break; default: return((CursorEntry)null); } Texture texture = hue.GetItem(itemId); if (texture == null || texture.IsEmpty()) { return(new CursorEntry(0, 0, 0, 0, Texture.Empty)); } if (texture.m_Factory != null) { texture.m_Factory.Remove(texture); texture.m_Factory = (TextureFactory)null; texture.m_FactoryArgs = (object[])null; } int xOffset = 0; int yOffset = 0; if (idType < 2) { LockData lockData = texture.Lock(LockFlags.ReadWrite); int num1 = lockData.Width; int num2 = lockData.Height; int num3 = lockData.Pitch >> 1; short * numPtr1 = (short *)lockData.pvSrc; short * numPtr2 = (short *)((IntPtr)lockData.pvSrc + ((num2 - 1) * num3) * 2); for (int index = 0; index < num1; ++index) { if (((int)*numPtr1 & (int)short.MaxValue) == 992) { xOffset = index; } *numPtr1++ = (short)0; *numPtr2++ = (short)0; } short *numPtr3 = (short *)lockData.pvSrc; short *numPtr4 = (short *)((IntPtr)lockData.pvSrc + (num1 - 1) * 2); for (int index = 0; index < num2; ++index) { if (((int)*numPtr3 & (int)short.MaxValue) == 992) { yOffset = index; } *numPtr3 = (short)0; *numPtr4 = (short)0; numPtr3 += num3; numPtr4 += num3; } texture.Unlock(); } else { CursorEntry cursorEntry = Cursor.m_Cursors[idCursor, 1] ?? Cursor.m_Cursors[idCursor, 0] ?? (Cursor.m_Cursors[idCursor, 1] = Cursor.LoadCursor(idCursor, 1)); xOffset = cursorEntry.m_xOffset; yOffset = cursorEntry.m_yOffset; LockData lockData = texture.Lock(LockFlags.ReadWrite); int num1 = lockData.Width; int num2 = lockData.Height; int num3 = lockData.Pitch >> 1; short * numPtr1 = (short *)lockData.pvSrc; short * numPtr2 = (short *)((IntPtr)lockData.pvSrc + ((num2 - 1) * num3) * 2); for (int index = 0; index < num1; ++index) { *numPtr1++ = (short)0; *numPtr2++ = (short)0; } short *numPtr3 = (short *)lockData.pvSrc; short *numPtr4 = (short *)((IntPtr)lockData.pvSrc + (num1 - 1) * 2); for (int index = 0; index < num2; ++index) { *numPtr3 = (short)0; *numPtr4 = (short)0; numPtr3 += num3; numPtr4 += num3; } texture.Unlock(); } return(new CursorEntry(idCursor, idType, xOffset, yOffset, texture)); }