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); }
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); }