private void Grid_Tap_2(object sender, System.Windows.Input.GestureEventArgs e) { ThemeHeader dataContext = (sender as FrameworkElement).DataContext as ThemeHeader; if (dataContext == null) { return; } this.NavigateToDiscussion(true, dataContext); }
private void NavigateToDiscussion(bool loadFromEnd, ThemeHeader header) { this.GroupDiscussionsVM.NavigateToDiscusson(loadFromEnd, header); }
public ThemeFile(byte[] Data) { EndianBinaryReader er = new EndianBinaryReader(new MemoryStream(Data), Endianness.LittleEndian); try { header = new ThemeHeader(er); topHeight = 256; bottomHeight = 256; switch (header.topScreenDrawType) { case 1: //solid color er.BaseStream.Position = header.topScreenSolidColorDataOffset; //7 bytes here, first 4 is rgba, other 3 unknown (possible overlay colour ??) Byte r = er.ReadByte(); Byte g = er.ReadByte(); Byte b = er.ReadByte(); Byte a1 = er.ReadByte(); //alpha makes the colours appear lighter because the 3ds does blending topSolidColor = Color.FromArgb(a1, r, g, b); break; case 2: //wierd 64x64 overlay mode topWidth = 64; topHeight = 64; topClampWidth = 64; topClampHeight = 64; break; case 3: //texture switch (header.topScreenFrameType) { case 0: //tex1 case 3: //tex1 topWidth = 1024; topClampWidth = 1008; topClampHeight = 240; break; case 1: //tex0 topWidth = 512; topClampWidth = 412; topClampHeight = 240; break; } break; } switch (header.bottomScreenDrawType) { case 1: //solid color er.BaseStream.Position = header.bottomScreenSolidOrTextureOffset; //7 bytes here, first 4 is rgba, other 3 unknown (possible overlay colour ??) Byte r = er.ReadByte(); Byte g = er.ReadByte(); Byte b = er.ReadByte(); Byte a1 = er.ReadByte(); //alpha makes the colours appear lighter because the 3ds does blending bottomSolidColor = Color.FromArgb(a1, r, g, b); break; case 3: //texture switch (header.bottomScreenFrameType) { case 0: //tex4 case 3: //tex4 bottomWidth = 1024; bottomClampWidth = 1008; bottomClampHeight = 240; break; case 1: //tex2 bottomWidth = 512; bottomClampWidth = 320; bottomClampHeight = 240; break; case 4: //tex3 //both animated.? case 2: //tex3 bottomWidth = 1024; bottomClampWidth = 960; bottomClampHeight = 240; break; } break; } er.BaseStream.Position = header.topScreenTextureOffset; if (header.topScreenDrawType == 2) // in draw type 2 theyre are 2 alpha images, one at topscreentextureoffset and the other at the colour offset, they need to be drawn onto the gradient background { topOverlayAlphaTexture = er.ReadBytes(alphaTextureWidth * alphaTextureHeight); er.BaseStream.Position = header.topScreenAdditionalTextureOffset; topBackgroundAlphaTexture = er.ReadBytes(alphaTextureWidth * alphaTextureHeight); //TODO figure out colour data for gradients etc er.BaseStream.Position = header.topScreenSolidColorDataOffset; Byte type = er.ReadByte(); Byte r1 = er.ReadByte(); Byte g1 = er.ReadByte(); Byte b1 = er.ReadByte(); Byte r2 = er.ReadByte(); Byte g2 = er.ReadByte(); Byte b2 = er.ReadByte(); Console.WriteLine("type? " + type); Console.WriteLine("color " + r1 + " " + g1 + " " + b1); Console.WriteLine("color " + r2 + " " + g2 + " " + b2); } else { topScreenTexture = er.ReadBytes((topHeight * topWidth) * 2); } er.BaseStream.Position = header.bottomScreenSolidOrTextureOffset; bottomScreenTexture = er.ReadBytes((bottomHeight * bottomWidth) * 2); er.BaseStream.Position = header.openedFolderTextureOffset; openFolderTexture = er.ReadBytes((folderWidth * folderHeight) * 4); er.BaseStream.Position = header.closedFolderTextureOffset; closedFolderTexture = er.ReadBytes((folderWidth * folderHeight) * 4); er.BaseStream.Position = header.iconBorder48pxOffset; iconBorder48pxTexture = er.ReadBytes((iconBorder48pxWidth * iconBorder48pxHeight) * 4); er.BaseStream.Position = header.iconBorder24pxOffset; iconBorder24pxTexture = er.ReadBytes((iconBorder24pxWidth * iconBorder24pxHeight) * 4); er.BaseStream.Position = header.audioSectionOffset; audioSection = new AudioSection(er); } finally { er.Close(); } }
public ThemeNew(byte[] Data) { EndianBinaryReaderEx er = new EndianBinaryReaderEx(new MemoryStream(Data), Endianness.LittleEndian); try { Header = new ThemeHeader(er); if (Header.TopBGColorOffset != 0) { er.BaseStream.Position = Header.TopBGColorOffset; TopBGColor = new ThemeTopBGColor(er); } if (Header.TopBGTexture0Offset != 0) { er.BaseStream.Position = Header.TopBGTexture0Offset; Bitmap b; switch (Header.TopBGType) { case ThemeHeader.BGType.Wallpaper: switch (Header.TopBGMoveType) { case ThemeHeader.BGMoveType.Normal: case ThemeHeader.BGMoveType.Floating: TopBGTexture0 = er.ReadBytes(1024 * 256 * 2); //b = GPU.Textures.ToBitmap(TopBGTexture0, 1008, 240, GPU.Textures.ImageFormat.RGB565); break; case ThemeHeader.BGMoveType.Fixed: TopBGTexture0 = er.ReadBytes(512 * 256 * 2); //b = GPU.Textures.ToBitmap(TopBGTexture0, 412, 240, GPU.Textures.ImageFormat.RGB565); break; } break; case ThemeHeader.BGType.Pattern: TopBGTexture0 = er.ReadBytes(64 * 64); //b = GPU.Textures.ToBitmap(TopBGTexture0, 64, 64, GPU.Textures.ImageFormat.L8); break; } } if (Header.TopBGTexture1Offset != 0) { er.BaseStream.Position = Header.TopBGTexture1Offset; Bitmap b; switch (Header.TopBGType) { case ThemeHeader.BGType.Wallpaper: switch (Header.TopBGMoveType) { case ThemeHeader.BGMoveType.Normal: case ThemeHeader.BGMoveType.Floating: TopBGTexture1 = er.ReadBytes(1024 * 256 * 2); //b = GPU.Textures.ToBitmap(TopBGTexture1, 1008, 240, GPU.Textures.ImageFormat.RGB565); break; case ThemeHeader.BGMoveType.Fixed: TopBGTexture1 = er.ReadBytes(512 * 256 * 2); //b = GPU.Textures.ToBitmap(TopBGTexture1, 412, 240, GPU.Textures.ImageFormat.RGB565); break; } break; case ThemeHeader.BGType.Pattern: TopBGTexture1 = er.ReadBytes(64 * 64); //b = GPU.Textures.ToBitmap(TopBGTexture1, 64, 64, GPU.Textures.ImageFormat.L8); break; default: break; } } if (Header.BottomBGTextureOffset != 0) { er.BaseStream.Position = Header.BottomBGTextureOffset; Bitmap b; switch (Header.BottomBGType) { case ThemeHeader.BGType.Wallpaper: switch (Header.BottomBGMoveType) { case ThemeHeader.BGMoveType.Normal: case ThemeHeader.BGMoveType.Floating: TopBGTexture0 = er.ReadBytes(1024 * 256 * 2); //b = GPU.Textures.ToBitmap(TopBGTexture0, 1008, 240, GPU.Textures.ImageFormat.RGB565); break; case ThemeHeader.BGMoveType.Fixed: TopBGTexture0 = er.ReadBytes(512 * 256 * 2); //b = GPU.Textures.ToBitmap(TopBGTexture0, 412, 240, GPU.Textures.ImageFormat.RGB565); break; case ThemeHeader.BGMoveType.FlipBook1: case ThemeHeader.BGMoveType.FlipBook2: BottomBGTexture = er.ReadBytes(1024 * 256 * 2); //b = GPU.Textures.ToBitmap(BottomBGTexture, 960, 240, GPU.Textures.ImageFormat.RGB565); break; } break; default: break; } } if (Header.UseSelector && Header.SelectorColorOffset != 0) { er.BaseStream.Position = Header.SelectorColorOffset; SelectorColor = new ThemeSelectorColor(er); } if (Header.UseFolderColor && Header.FolderColorOffset != 0) { er.BaseStream.Position = Header.FolderColorOffset; FolderColor = new ThemeFolderColor(er); } if (Header.UseFolderImage) { if (Header.FolderImageClosedOffset != 0) { er.BaseStream.Position = Header.FolderImageClosedOffset; FolderImageClosed = er.ReadBytes(128 * 64 * 3); //Bitmap b = GPU.Textures.ToBitmap(FolderImageClosed, 74, 64, GPU.Textures.ImageFormat.RGB8); } if (Header.FolderImageOpenOffset != 0) { er.BaseStream.Position = Header.FolderImageOpenOffset; FolderImageOpen = er.ReadBytes(128 * 64 * 3); //Bitmap b = GPU.Textures.ToBitmap(FolderImageOpen, 82, 64, GPU.Textures.ImageFormat.RGB8); } } if (Header.UseIconBGColor && Header.IconBGColorOffset != 0) { er.BaseStream.Position = Header.IconBGColorOffset; IconBGColor = new ThemeColorShadowAlpha(er); } if (Header.UseIconBGImage) { if (Header.IconBGImageLargeOffset != 0) { er.BaseStream.Position = Header.IconBGImageLargeOffset; IconBGImageLarge = er.ReadBytes(64 * 128 * 3); //Bitmap b = GPU.Textures.ToBitmap(IconBGImageLarge, 36, 72, GPU.Textures.ImageFormat.RGB8); } if (Header.IconBGImageSmallOffset != 0) { er.BaseStream.Position = Header.IconBGImageSmallOffset; IconBGImageSmall = er.ReadBytes(32 * 64 * 3); //Bitmap b = GPU.Textures.ToBitmap(IconBGImageSmall, 25, 50, GPU.Textures.ImageFormat.RGB8); } } if (Header.UseLRButtonColor && Header.LRButtonBGColorOffset != 0) { er.BaseStream.Position = Header.LRButtonBGColorOffset; LRButtonColor = new ThemeColorShadowAlpha(er); } if (Header.UseLRButtonArrowColor && Header.LRButtonArrowColorOffset != 0) { er.BaseStream.Position = Header.LRButtonArrowColorOffset; LRButtonArrowColor = new ThemeLRButtonArrowColor(er); } if (Header.UseBottomButtonColor) { if (Header.BottomButtonDefaultColorOffset != 0) { er.BaseStream.Position = Header.BottomButtonDefaultColorOffset; BottomButtonDefaultColor = new ThemeButtonColor(er); } if (Header.BottomButtonCloseColorOffset != 0) { er.BaseStream.Position = Header.BottomButtonCloseColorOffset; BottomButtonCloseColor = new ThemeButtonColor(er); } } if (Header.TitleBalloonType == ThemeHeader.BalloonType.Color && Header.TitleBalloonColorOffset != 0) { er.BaseStream.Position = Header.TitleBalloonColorOffset; TitleBalloonColor = new ThemeTextWithBGColor(er); } if (Header.UseIconPlateColor && Header.IconPlateColorOffset != 0) { er.BaseStream.Position = Header.IconPlateColorOffset; IconPlateColor = new ThemeColorShadowAlpha(er); } if (Header.UseIconPlateBGColor && Header.IconPlateBGColorOffset != 0) { er.BaseStream.Position = Header.IconPlateBGColorOffset; IconPlateBGColor = new ThemeIconPlateBGColor(er); } if (Header.UseFolderPlateColor && Header.FolderPlateColorOffset != 0) { er.BaseStream.Position = Header.FolderPlateColorOffset; FolderPlateColor = new ThemeColorShadowAlpha(er); } if (Header.UseFolderBackButtonColor && Header.FolderBackButtonColorOffset != 0) { er.BaseStream.Position = Header.FolderBackButtonColorOffset; FolderBackButtonColor = new ThemeButtonColor(er); } if (Header.UseSettingButtonColor && Header.SettingButtonColorOffset != 0) { er.BaseStream.Position = Header.SettingButtonColorOffset; SettingsButtonColor = new ThemeSettingButtonColor(er); } if (Header.UseCameraGuideTextColor && Header.CameraGuideTextColorOffset != 0) { er.BaseStream.Position = Header.CameraGuideTextColorOffset; CameraGuideTextColor = new ThemeTextWithBGColor(er); } if (Header.UseExtendedBannerTextColor && Header.ExtendedBannerTextColorOffset != 0) { er.BaseStream.Position = Header.ExtendedBannerTextColorOffset; ExtBannerTextColor = new ThemeExtBannerTextColor(er); } if (Header.UseSoundEffects && Header.SoundEffectSectionSize != 0 && Header.SoundEffectSectionOffset != 0) { //TODO! } } finally { er.Close(); } }