Example #1
0
        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);
        }
Example #2
0
 private void NavigateToDiscussion(bool loadFromEnd, ThemeHeader header)
 {
     this.GroupDiscussionsVM.NavigateToDiscusson(loadFromEnd, header);
 }
Example #3
0
        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();
            }
        }