private static void ListBoxChanged(Event <HTMLSelectElement> arg) { ImageInputSenderID = arg.CurrentTarget.Id; ImageInputSenderID = ImageInputSenderID.Substring(0, ImageInputSenderID.Length - 4); var tex = t.GetTexture(ImageInputSenderID); t.TopScreenFrameType = (uint)TopFrameType.SelectedIndex; t.BotScreenFrameType = (uint)BotFrameType.SelectedIndex; if (t.TopScreenFrameType == 2) { t.TopScreenFrameType = 1; //Invalid value fix } if (ImageInputSenderID == Theme.Name_TopScr && !(tex.tex.Width == t.TopImageType.s.x && tex.tex.Height == t.TopImageType.s.y)) { tex.tex = ImageEncoding.WhiteImage(t.TopScreenImageID); UpdateShownImg(t.TopImageType, ImageInputSenderID, tex.tex); Document.GetElementById <HTMLLabelElement>(ImageInputSenderID + "-LBL").TextContent = ImageInputSenderID.Replace('-', ' ') + " (" + t.TopImageType.s.x.ToString() + "x" + t.TopImageType.s.y.ToString() + ")"; } else if (ImageInputSenderID == Theme.Name_BotScr && !(tex.tex.Width == t.BotImageType.s.x && tex.tex.Height == t.BotImageType.s.y)) { tex.tex = ImageEncoding.WhiteImage(t.BotScreenImageID); UpdateShownImg(t.BotImageType, ImageInputSenderID, tex.tex); Document.GetElementById <HTMLLabelElement>(ImageInputSenderID + "-LBL").TextContent = ImageInputSenderID.Replace('-', ' ') + " (" + t.BotImageType.s.x.ToString() + "x" + t.BotImageType.s.y.ToString() + ")"; } OnResized(null); }
public static Theme EmptyTheme() { Theme t = new Theme(); t.TopScreenDrawType = 3; t.TopScreenFrameType = 1; t.BotScreenDrawType = 3; t.BotScreenFrameType = 1; t.textures[0].tex = ImageEncoding.WhiteImage(t.TopScreenImageID); t.textures[1].tex = ImageEncoding.WhiteImage(t.BotScreenImageID); return(t); }
public static Theme ReadTheme(Stream s) { Theme t = new Theme(); BinaryReader bin = new BinaryReader(s); bin.BaseStream.Position = 0x5; t.BGM = bin.ReadByte() != 0; #region ReadImages bin.BaseStream.Position = 0xC; t.TopScreenDrawType = bin.ReadUInt32(); t.TopScreenFrameType = bin.ReadUInt32(); if (t.TopScreenDrawType == 3) { bin.BaseStream.Position = 0x18; uint offset = bin.ReadUInt32(); bin.BaseStream.Position = offset; t.GetTexture(Name_TopScr).tex = ImageEncoding.getImage(bin, t.TopScreenImageID); } bin.BaseStream.Position = 0x20; t.BotScreenDrawType = bin.ReadUInt32(); t.BotScreenFrameType = bin.ReadUInt32(); if (t.BotScreenDrawType == 3) { bin.BaseStream.Position = 0x28; uint offset = bin.ReadUInt32(); bin.BaseStream.Position = offset; t.GetTexture(Name_BotScr).tex = ImageEncoding.getImage(bin, t.BotScreenImageID); } bin.BaseStream.Position = 0x3C; if (bin.ReadUInt32() != 0) { uint offs1 = bin.ReadUInt32(); uint offs2 = bin.ReadUInt32(); bin.BaseStream.Position = offs1; t.GetTexture(Name_Folder).tex = ImageEncoding.getImage(bin, 7); bin.BaseStream.Position = offs2; t.GetTexture(Name_FolderOpn).tex = ImageEncoding.getImage(bin, 8); } bin.BaseStream.Position = 0x50; if (bin.ReadUInt32() != 0) { uint offs1 = bin.ReadUInt32(); uint offs2 = bin.ReadUInt32(); bin.BaseStream.Position = offs1; t.GetTexture(Name_IcnBig).tex = ImageEncoding.getImage(bin, 9); bin.BaseStream.Position = offs2; t.GetTexture(Name_IcnSmall).tex = ImageEncoding.getImage(bin, 10); } #endregion #region ReadColorData for (int i = 0; i < ColorFieldsOffsets.Length; i++) { int off = ColorFieldsOffsets[i]; if (off == 0x00) { continue; //ignore if 0x00 because it's second part of 0x6C } bin.BaseStream.Position = off; if (bin.ReadInt32() != 1) { continue; } t.ColorFields[i].ReadFromStream(bin); if (off == 0x6C) { t.ColorFields[i + 1].ReadFromStream(bin); } } #endregion return(t); }
public byte[] MakeTheme() { MemoryStream mem = new MemoryStream(); BinaryWriter bin = new BinaryWriter(mem); #region WriteHeader bin.Write(1); bin.Write((byte)0); bin.Write((byte)(BGM ? 1 : 0)); bin.Write(0); bin.Write((short)0); bin.Write(TopScreenDrawType); bin.Write(TopScreenFrameType); bin.Write(0); bin.Write(0); bin.Write(0); bin.Write(BotScreenDrawType); bin.Write(BotScreenFrameType); //0x24 bin.Write(0); bin.Write(0); bin.Write(0); bin.Write(0); bin.Write(0); bool writeTex78 = textures[2].tex != null && textures[3].tex != null; bin.Write((int)(writeTex78 ? 1 : 0)); bin.Write(0); bin.Write(0); bin.Write(0); bin.Write(0); bool writeTex910 = textures[4].tex != null && textures[5].tex != null; bin.Write((int)(writeTex910 ? 1 : 0)); bin.Write(0); bin.Write(0); for (int i = 0; i < 27; i++) { bin.Write(0); } #endregion #region WriteColors for (int i = 0; i < ColorFieldsOffsets.Length; i++) { if (!ColorFields[i].IsEnabled || ColorFieldsOffsets[i] == 0) { continue; } uint offset = (uint)bin.BaseStream.Position; bin.Write(ColorFields[i].GetData()); uint NextOffset = (uint)bin.BaseStream.Position; bin.BaseStream.Position = ColorFieldsOffsets[i]; bin.Write(1); //flag enabled bin.Write(offset); if (ColorFieldsOffsets[i] == 0x6C) { bin.Write(NextOffset); //the second block will be written here } bin.BaseStream.Position = NextOffset; if (ColorFieldsOffsets[i] == 0x6C) { bin.Write(ColorFields[i + 1].GetData()); } } #endregion #region writeImages //top { if (textures[0].tex == null) { textures[0].tex = ImageEncoding.WhiteImage(TopScreenImageID); } uint offset = (uint)bin.BaseStream.Position; bin.Write(ImageEncoding.bitmapToRawImg(textures[0].tex, TopScreenImageID)); uint NextOffset = (uint)bin.BaseStream.Position; bin.BaseStream.Position = 0x18; bin.Write(offset); bin.BaseStream.Position = NextOffset; } { //bottom screen if (textures[1].tex == null) { textures[1].tex = ImageEncoding.WhiteImage(BotScreenImageID); } uint offset = (uint)bin.BaseStream.Position; bin.Write(ImageEncoding.bitmapToRawImg(textures[1].tex, BotScreenImageID)); uint NextOffset = (uint)bin.BaseStream.Position; bin.BaseStream.Position = 0x28; bin.Write(offset); bin.BaseStream.Position = NextOffset; } if (writeTex78) { //FolderTextures uint offset = (uint)bin.BaseStream.Position; bin.Write(ImageEncoding.bitmapToRawImg(textures[2].tex, 7)); uint NextOffset = (uint)bin.BaseStream.Position; bin.BaseStream.Position = 0x40; bin.Write(offset); bin.BaseStream.Position = NextOffset; offset = (uint)bin.BaseStream.Position; bin.Write(ImageEncoding.bitmapToRawImg(textures[3].tex, 8)); NextOffset = (uint)bin.BaseStream.Position; bin.BaseStream.Position = 0x44; bin.Write(offset); bin.BaseStream.Position = NextOffset; } if (writeTex910) { //Icon textures uint offset = (uint)bin.BaseStream.Position; bin.Write(ImageEncoding.bitmapToRawImg(textures[4].tex, 9)); uint NextOffset = (uint)bin.BaseStream.Position; bin.BaseStream.Position = 0x54; bin.Write(offset); bin.BaseStream.Position = NextOffset; offset = (uint)bin.BaseStream.Position; bin.Write(ImageEncoding.bitmapToRawImg(textures[5].tex, 10)); NextOffset = (uint)bin.BaseStream.Position; bin.BaseStream.Position = 0x58; bin.Write(offset); bin.BaseStream.Position = NextOffset; } #endregion while ((bin.BaseStream.Position % 8) != 0) { bin.Write((byte)0x00); //padding } return(mem.ToArray()); }