private StructureValueCollection SerializeSize(ResourceSize size) { var result = new StructureValueCollection(); result.SetInteger("overall size", (uint)size.Size); return(result); }
private ResourceSize LoadSize(StructureValueCollection values, int index, IReader reader) { var result = new ResourceSize(); result.Index = index; result.Size = (int)values.GetInteger("overall size"); result.Parts.AddRange(LoadSizeParts(values, reader)); return(result); }
public static int GetDrawableResourceId(Context context, string resourceName, ResourceSize resourceSize) { string formattedResourceName = resourceName.Replace(".png", ""); if (resourceSize == ResourceSize.Medium) { formattedResourceName += "_med"; } else if (resourceSize == ResourceSize.Large) { formattedResourceName += "_lg"; } return context.Resources.GetIdentifier(formattedResourceName, "drawable", context.PackageName); }
private static ExtractedResourceInfo ReadResource(IReader reader, byte version) { if (version > 2) { throw new InvalidOperationException("Unrecognized \"rsrc\" block version"); } var originalIndex = new DatumIndex(reader.ReadUInt32()); var resource = new ExtractedResourceInfo(originalIndex); resource.Flags = reader.ReadUInt32(); resource.Type = reader.ReadAscii(); if (string.IsNullOrEmpty(resource.Type)) { resource.Type = null; } resource.Info = ReadByteArray(reader); resource.OriginalParentTagIndex = new DatumIndex(reader.ReadUInt32()); byte hasLocation = reader.ReadByte(); if (hasLocation != 0) { resource.Location = new ExtractedResourcePointer(); resource.Location.OriginalPrimaryPageIndex = reader.ReadInt32(); resource.Location.PrimaryOffset = reader.ReadInt32(); if (version > 1) { var size = reader.ReadInt32(); if (size != -1) { ResourceSize newSize = new ResourceSize(); newSize.Size = size; byte partCount = reader.ReadByte(); for (int i = 0; i < partCount; i++) { ResourceSizePart newPart = new ResourceSizePart(); newPart.Offset = reader.ReadInt32(); newPart.Size = reader.ReadInt32(); newSize.Parts.Add(newPart); } resource.Location.PrimarySize = newSize; } else { resource.Location.PrimarySize = null; } } else { resource.Location.PrimarySize = null; reader.Skip(4); } resource.Location.OriginalSecondaryPageIndex = reader.ReadInt32(); resource.Location.SecondaryOffset = reader.ReadInt32(); if (version > 1) { var size = reader.ReadInt32(); if (size != -1) { ResourceSize newSize = new ResourceSize(); newSize.Size = size; byte partCount = reader.ReadByte(); for (int i = 0; i < partCount; i++) { ResourceSizePart newPart = new ResourceSizePart(); newPart.Offset = reader.ReadInt32(); newPart.Size = reader.ReadInt32(); newSize.Parts.Add(newPart); } resource.Location.SecondarySize = newSize; } else { resource.Location.SecondarySize = null; } } else { resource.Location.SecondarySize = null; reader.Skip(4); } if (version > 1) { resource.Location.OriginalTertiaryPageIndex = reader.ReadInt32(); resource.Location.TertiaryOffset = reader.ReadInt32(); var size = reader.ReadInt32(); if (size != -1) { ResourceSize newSize = new ResourceSize(); newSize.Size = size; byte partCount = reader.ReadByte(); for (int i = 0; i < partCount; i++) { ResourceSizePart newPart = new ResourceSizePart(); newPart.Offset = reader.ReadInt32(); newPart.Size = reader.ReadInt32(); newSize.Parts.Add(newPart); } resource.Location.TertiarySize = newSize; } else { resource.Location.TertiarySize = null; } } } if (version == 1) { reader.BaseStream.Position += 4; resource.ResourceBits = reader.ReadUInt16(); reader.BaseStream.Position += 2; } else { resource.ResourceBits = reader.ReadInt32(); } resource.BaseDefinitionAddress = reader.ReadInt32(); int numResourceFixups = reader.ReadInt32(); for (int i = 0; i < numResourceFixups; i++) { var fixup = new ResourceFixup(); fixup.Offset = reader.ReadInt32(); fixup.Address = reader.ReadUInt32(); resource.ResourceFixups.Add(fixup); } int numDefinitionFixups = reader.ReadInt32(); for (int i = 0; i < numDefinitionFixups; i++) { var fixup = new ResourceDefinitionFixup(); fixup.Offset = reader.ReadInt32(); fixup.Type = reader.ReadInt32(); resource.DefinitionFixups.Add(fixup); } return(resource); }