示例#1
0
        public static void Draw()
        {
            CursorEntry cursor = Cursor.GetCursor();

            if (cursor == null)
            {
                return;
            }
            cursor.Draw(Engine.m_xMouse, Engine.m_yMouse);
        }
示例#2
0
        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));
        }