Ejemplo n.º 1
0
        public static TS_FP_POINTERATTRIBUTE CreateFPPointerAttribute(ushort xorBpp, ushort cacheIndex, ushort hotSpotX, ushort hotSpotY, ushort width, ushort height,
                                                                      byte[] xorMaskData = null, byte[] andMaskData = null)
        {
            TS_FP_POINTERATTRIBUTE fpPtr = new TS_FP_POINTERATTRIBUTE();

            fpPtr.updateHeader = (byte)(((int)updateCode_Values.FASTPATH_UPDATETYPE_POINTER & 0x0f)
                                        | (((int)fragmentation_Value.FASTPATH_FRAGMENT_SINGLE) << 4)
                                        | ((int)compressedType_Values.None << 6));

            fpPtr.newPointerUpdateData.xorBpp = xorBpp;
            fpPtr.newPointerUpdateData.colorPtrAttr.cacheIndex   = cacheIndex;
            fpPtr.newPointerUpdateData.colorPtrAttr.hotSpot.xPos = hotSpotX;
            fpPtr.newPointerUpdateData.colorPtrAttr.hotSpot.yPos = hotSpotY;
            fpPtr.newPointerUpdateData.colorPtrAttr.width        = width;
            fpPtr.newPointerUpdateData.colorPtrAttr.height       = height;

            if (xorMaskData != null)
            {
                fpPtr.newPointerUpdateData.colorPtrAttr.lengthXorMask = (ushort)xorMaskData.Length;
                fpPtr.newPointerUpdateData.colorPtrAttr.xorMaskData   = xorMaskData;
            }
            else
            {
                fpPtr.newPointerUpdateData.colorPtrAttr.lengthXorMask = (ushort)(((width * xorBpp + 7) / 8 + 1) / 2 * 2 * height);
                fpPtr.newPointerUpdateData.colorPtrAttr.xorMaskData   = new byte[fpPtr.newPointerUpdateData.colorPtrAttr.lengthXorMask];
                for (int i = 0; i < fpPtr.newPointerUpdateData.colorPtrAttr.lengthXorMask; i++)
                {
                    if (xorBpp == 32 && i % 4 == 3)
                    {
                        //If color depth is 32, set R, G, B to 0xff, and set A to 0x00
                        fpPtr.newPointerUpdateData.colorPtrAttr.xorMaskData[i] = 0x00;
                    }
                    else
                    {
                        fpPtr.newPointerUpdateData.colorPtrAttr.xorMaskData[i] = 0xff;
                    }
                }
            }

            if (andMaskData != null)
            {
                fpPtr.newPointerUpdateData.colorPtrAttr.lengthAndMask = (ushort)andMaskData.Length;
                fpPtr.newPointerUpdateData.colorPtrAttr.andMaskData   = andMaskData;
            }
            else
            {
                fpPtr.newPointerUpdateData.colorPtrAttr.lengthAndMask = (ushort)(((width + 7) / 8 + 1) / 2 * 2 * height);
                fpPtr.newPointerUpdateData.colorPtrAttr.andMaskData   = new byte[fpPtr.newPointerUpdateData.colorPtrAttr.lengthAndMask];
                for (int i = 0; i < fpPtr.newPointerUpdateData.colorPtrAttr.lengthAndMask; i++)
                {
                    fpPtr.newPointerUpdateData.colorPtrAttr.andMaskData[i] = 0xff;
                }
            }

            fpPtr.newPointerUpdateData.colorPtrAttr.pad = 0;
            fpPtr.size = (ushort)(17 + fpPtr.newPointerUpdateData.colorPtrAttr.lengthXorMask + fpPtr.newPointerUpdateData.colorPtrAttr.lengthAndMask);

            return(fpPtr);
        }
Ejemplo n.º 2
0
        public static TS_FP_POINTERATTRIBUTE CreateFPPointerAttribute(ushort xorBpp, ushort cacheIndex, ushort hotSpotX, ushort hotSpotY, ushort width, ushort height,
                                                                      byte[] xorMaskData = null, byte[] andMaskData = null)
        {
            TS_FP_POINTERATTRIBUTE fpPtr = new TS_FP_POINTERATTRIBUTE();

            fpPtr.updateHeader = new nested_TS_FP_UPDATE_updateHeader(updateCode_Values.FASTPATH_UPDATETYPE_POINTER);

            fpPtr.newPointerUpdateData.xorBpp = xorBpp;
            fpPtr.newPointerUpdateData.colorPtrAttr.cacheIndex   = cacheIndex;
            fpPtr.newPointerUpdateData.colorPtrAttr.hotSpot.xPos = hotSpotX;
            fpPtr.newPointerUpdateData.colorPtrAttr.hotSpot.yPos = hotSpotY;
            fpPtr.newPointerUpdateData.colorPtrAttr.width        = width;
            fpPtr.newPointerUpdateData.colorPtrAttr.height       = height;

            if (xorMaskData != null)
            {
                fpPtr.newPointerUpdateData.colorPtrAttr.lengthXorMask = (ushort)xorMaskData.Length;
                fpPtr.newPointerUpdateData.colorPtrAttr.xorMaskData   = xorMaskData;
            }
            else
            {
                fpPtr.newPointerUpdateData.colorPtrAttr.lengthXorMask = (ushort)(((width * xorBpp + 7) / 8 + 1) / 2 * 2 * height);
                fpPtr.newPointerUpdateData.colorPtrAttr.xorMaskData   = new byte[fpPtr.newPointerUpdateData.colorPtrAttr.lengthXorMask];
                for (int i = 0; i < fpPtr.newPointerUpdateData.colorPtrAttr.lengthXorMask; i++)
                {
                    if (xorBpp == 32 && i % 4 == 3)
                    {
                        //If color depth is 32, set R, G, B to 0xff, and set A to 0x00
                        fpPtr.newPointerUpdateData.colorPtrAttr.xorMaskData[i] = 0x00;
                    }
                    else
                    {
                        fpPtr.newPointerUpdateData.colorPtrAttr.xorMaskData[i] = 0xff;
                    }
                }
            }

            if (andMaskData != null)
            {
                fpPtr.newPointerUpdateData.colorPtrAttr.lengthAndMask = (ushort)andMaskData.Length;
                fpPtr.newPointerUpdateData.colorPtrAttr.andMaskData   = andMaskData;
            }
            else
            {
                fpPtr.newPointerUpdateData.colorPtrAttr.lengthAndMask = (ushort)(((width + 7) / 8 + 1) / 2 * 2 * height);
                fpPtr.newPointerUpdateData.colorPtrAttr.andMaskData   = new byte[fpPtr.newPointerUpdateData.colorPtrAttr.lengthAndMask];
                for (int i = 0; i < fpPtr.newPointerUpdateData.colorPtrAttr.lengthAndMask; i++)
                {
                    fpPtr.newPointerUpdateData.colorPtrAttr.andMaskData[i] = 0xff;
                }
            }

            fpPtr.newPointerUpdateData.colorPtrAttr.pad = 0;

            fpPtr.AssignUpdateDataAndSize();

            return(fpPtr);
        }