Exemple #1
0
        private async void SolutionEvents_Opened()
        {
            foreach (Project project in ProjectHelpers.GetAllProjects())
            {
                if (project.ProjectItems.Count == 0)
                {
                    continue;
                }

                string folder = ProjectHelpers.GetRootFolder(project);
                Func <string, bool, Task> bundleFunc = new BundleFilesMenu().UpdateBundleAsync;
                Func <string, bool, Task> spriteFunc = new SpriteImageMenu().UpdateSpriteAsync;

                foreach (string file in Directory.EnumerateFiles(folder, "*.*", SearchOption.AllDirectories)
                         .Where(s => s.EndsWith(".bundle") || s.EndsWith(".sprite")))
                {
                    if (ProjectHelpers.GetProjectItem(file) == null)
                    {
                        continue;
                    }

                    if (file.EndsWith(".bundle", StringComparison.OrdinalIgnoreCase))
                    {
                        await BundleGenerator.WatchFiles(await BundleDocument.FromFile(file), bundleFunc);
                    }
                    else
                    {
                        await SpriteGenerator.WatchFiles(await SpriteDocument.FromFile(file), spriteFunc);
                    }
                }
            }
        }
        public static IEnumerable<SpriteFragment> CreateImage(SpriteDocument sprite, out string imageFile)
        {
            imageFile = Path.ChangeExtension(sprite.FileName, sprite.FileExtension);
            ProjectHelpers.CheckOutFileFromSourceControl(imageFile);

            Dictionary<string, Image> images = GetImages(sprite);

            int width = sprite.IsVertical ? images.Values.Max(i => i.Width) : images.Values.Sum(i => i.Width);
            int height = sprite.IsVertical ? images.Values.Sum(img => img.Height) : images.Values.Max(img => img.Height);

            List<SpriteFragment> fragments = new List<SpriteFragment>();

            using (var bitmap = new Bitmap(width, height))
            {
                using (Graphics canvas = Graphics.FromImage(bitmap))
                {
                    if (sprite.IsVertical)
                        Vertical(images, fragments, canvas);
                    else
                        Horizontal(images, fragments, canvas);
                }

                bitmap.Save(imageFile, PasteImage.GetImageFormat("." + sprite.FileExtension));
            }

            return fragments;
        }
Exemple #3
0
        public static IEnumerable <SpriteFragment> CreateImage(SpriteDocument sprite, out string imageFile)
        {
            imageFile = Path.ChangeExtension(sprite.FileName, sprite.FileExtension);
            ProjectHelpers.CheckOutFileFromSourceControl(imageFile);

            Dictionary <string, Image> images = GetImages(sprite);

            int width  = sprite.IsVertical ? images.Values.Max(i => i.Width) : images.Values.Sum(i => i.Width);
            int height = sprite.IsVertical ? images.Values.Sum(img => img.Height) : images.Values.Max(img => img.Height);

            List <SpriteFragment> fragments = new List <SpriteFragment>();

            using (var bitmap = new Bitmap(width, height))
            {
                using (Graphics canvas = Graphics.FromImage(bitmap))
                {
                    if (sprite.IsVertical)
                    {
                        Vertical(images, fragments, canvas);
                    }
                    else
                    {
                        Horizontal(images, fragments, canvas);
                    }
                }

                bitmap.Save(imageFile, PasteImage.GetImageFormat("." + sprite.FileExtension));
            }

            return(fragments);
        }
        public static SpriteDocument FromFile(string fileName)
        {
            XDocument doc = XDocument.Load(fileName);
            string root = ProjectHelpers.GetProjectFolder(fileName);
            string folder = Path.GetDirectoryName(root);

            var imageFiles = from f in doc.Descendants("file")
                             select ProjectHelpers.ToAbsoluteFilePath(f.Value, root, folder);

            SpriteDocument sprite = new SpriteDocument(fileName, imageFiles.ToArray());
            sprite.Optimize = doc.Descendants("optimize").First().Value.Equals("true", StringComparison.OrdinalIgnoreCase);
            sprite.IsVertical = doc.Descendants("orientation").First().Value.Equals("vertical", StringComparison.OrdinalIgnoreCase);
            sprite.FileExtension = doc.Descendants("outputType").First().Value;

            return sprite;
        }
        public static SpriteDocument FromFile(string fileName)
        {
            XDocument doc    = XDocument.Load(fileName);
            string    root   = ProjectHelpers.GetProjectFolder(fileName);
            string    folder = Path.GetDirectoryName(root);

            var imageFiles = from f in doc.Descendants("file")
                             select ProjectHelpers.ToAbsoluteFilePath(f.Value, root, folder);

            SpriteDocument sprite = new SpriteDocument(fileName, imageFiles.ToArray());

            sprite.Optimize      = doc.Descendants("optimize").First().Value.Equals("true", StringComparison.OrdinalIgnoreCase);
            sprite.IsVertical    = doc.Descendants("orientation").First().Value.Equals("vertical", StringComparison.OrdinalIgnoreCase);
            sprite.FileExtension = doc.Descendants("outputType").First().Value;

            return(sprite);
        }
        private static Dictionary<string, Image> GetImages(SpriteDocument sprite)
        {
            Dictionary<string, Image> images = new Dictionary<string, Image>();

            foreach (string file in sprite.ImageFiles)
            {
                Image image = Image.FromFile(file);

                // Only touch the resolution of the image if it isn't 96. 
                // That way we keep the original image 'as is' in all other cases.
                if (Math.Round(image.VerticalResolution) != 96F || Math.Round(image.HorizontalResolution) != 96F)
                    image = new Bitmap(image);

                images.Add(file, image);
            }

            return images;
        }
        private async Task GenerateAsync(SpriteDocument sprite)
        {
            _dte.StatusBar.Text = "Generating sprite...";

            string imageFile;
            var    fragments = SpriteGenerator.CreateImage(sprite, out imageFile);

            ProjectHelpers.AddFileToActiveProject(sprite.FileName);
            ProjectHelpers.AddFileToProject(sprite.FileName, imageFile);

            Export(fragments, imageFile);

            if (sprite.Optimize)
            {
                await new ImageCompressor().CompressFilesAsync(imageFile);
            }

            _dte.StatusBar.Text = "Sprite generated";
        }
Exemple #8
0
        private static Dictionary <string, Image> GetImages(SpriteDocument sprite)
        {
            Dictionary <string, Image> images = new Dictionary <string, Image>();

            foreach (string file in sprite.ImageFiles)
            {
                Image image = Image.FromFile(file);

                // Only touch the resolution of the image if it isn't 96.
                // That way we keep the original image 'as is' in all other cases.
                if (Math.Round(image.VerticalResolution) != 96F || Math.Round(image.HorizontalResolution) != 96F)
                {
                    image = new Bitmap(image);
                }

                images.Add(file, image);
            }

            return(images);
        }
        private async Task CreateSprite()
        {
            string spriteFile;

            if (!GetFileName(out spriteFile))
                return;

            try
            {
                SpriteDocument doc = new SpriteDocument(spriteFile, _files.ToArray());
                doc.Save();
                EditorExtensionsPackage.DTE.ItemOperations.OpenFile(spriteFile);

                await Generate(doc);
            }
            catch (Exception ex)
            {
                Logger.Log(ex);
                MessageBox.Show("Error generating the sprite. See output window for details");
                _dte.StatusBar.Text = "Sprite was not created";
            }
        }
 private async Task UpdateSpriteAsync()
 {
     try
     {
         await Task.WhenAll(_sprites.Select(async file =>
         {
             SpriteDocument doc = SpriteDocument.FromFile(file);
             await GenerateAsync(doc);
         }));
     }
     catch (FileNotFoundException ex)
     {
         Logger.Log(ex.Message);
         MessageBox.Show("The file '" + Path.GetFileName(ex.Message) + "' does not exist");
         _dte.StatusBar.Text = "Sprite was not created";
     }
     catch (Exception ex)
     {
         Logger.Log(ex);
         MessageBox.Show("Error generating the sprite. See output window for details");
     }
 }
        private async Task CreateSpriteAsync()
        {
            string spriteFile;

            if (!GetFileName(out spriteFile))
            {
                return;
            }

            try
            {
                SpriteDocument doc = new SpriteDocument(spriteFile, _files.ToArray());
                doc.Save();
                EditorExtensionsPackage.DTE.ItemOperations.OpenFile(spriteFile);

                await GenerateAsync(doc);
            }
            catch (Exception ex)
            {
                Logger.Log(ex);
                MessageBox.Show("Error generating the sprite. See output window for details");
                _dte.StatusBar.Text = "Sprite was not created";
            }
        }
        private async Task Generate(SpriteDocument sprite)
        {
            _dte.StatusBar.Text = "Generating sprite...";

            string imageFile;
            var fragments = SpriteGenerator.CreateImage(sprite, out imageFile);

            ProjectHelpers.AddFileToActiveProject(sprite.FileName);
            ProjectHelpers.AddFileToProject(sprite.FileName, imageFile);

            Export(fragments, imageFile);

            if (sprite.Optimize)
                await new ImageCompressor().CompressFiles(imageFile);

            _dte.StatusBar.Text = "Sprite generated";
        }