private PainterEventArgs(FilesConfigInfo fileConfigInfo, string fileName, string densityKey, Size? documentSize, Exception exception)
 {
     FileConfigInfo = fileConfigInfo;
     FileName = fileName;
     DensityKey = densityKey;
     DocumentSize = documentSize;
     Exception = exception;
 }
        /// <summary>
        /// Создать конфигурацию для директории
        /// </summary>
        /// <param name="directoryInfo">DirectoryInfo</param>
        /// <returns>Конфигурация</returns>
        private DirectoriesConfigInfo CreateDirectoryConfigInfo(DirectoryInfo directoryInfo)
        {
            DirectoriesConfigInfo directoryConfigInfo = new DirectoriesConfigInfo(directoryInfo);
            XmlConfigReadingResult configReadingResult = null;

            var configFile = FindConfigFile(directoryInfo);
            if (configFile != null)
            {
                configReadingResult = ReadXmlConfigurationFile(configFile.FullName);

                directoryConfigInfo.ConfigInfo = configReadingResult != null ? configReadingResult.ConfigDirectoryInfo : new ConfigInfo();
            }

            foreach (var directory in directoryInfo.GetDirectories())
            {
                directoryConfigInfo.Nodes.Add(CreateDirectoryConfigInfo(directory));
            }

            foreach (var file in directoryInfo.GetFiles())
            {
                if (Path.GetExtension(file.Name).Contains("svg"))
                {
                    var fileConfigInfo = new FilesConfigInfo(file);
                    if (configReadingResult != null)
                    {
                        var configFileInfo = configReadingResult.ConfigFileInfoCollection.FirstOrDefault(f => f.FileName == Path.GetFileNameWithoutExtension(file.Name));
                        if (configFileInfo != null)
                        {
                            fileConfigInfo.ConfigInfo = configFileInfo;
                        }
                        else
                        {
                            fileConfigInfo.ConfigInfo = configReadingResult.ConfigDirectoryInfo;
                        }

                    }
                    directoryConfigInfo.Nodes.Add(fileConfigInfo);
                }
            }
            return directoryConfigInfo;
        }
 public PainterEventArgs(FilesConfigInfo fileConfigInfo, string fileName, string densityKey, Size documentSize)
     : this(fileConfigInfo, fileName, densityKey, documentSize, null)
 {
 }
 private void RaiseFilePainted(FilesConfigInfo fileConfigInfo, string fileName, string densityKey, Size documentSize)
 {
     RaiseFilePainted(new PainterEventArgs(fileConfigInfo, fileName, densityKey, documentSize));
 }
        /// <summary>
        /// Разукрасить и сохраниь
        /// </summary>
        /// <param name="outputDirectoryPath">Выходная директория</param>
        /// <param name="fileConfigInfo">конфигурационная информация о файле</param>
        private void PaintAndSaveFile(String outputDirectoryPath, FilesConfigInfo fileConfigInfo)
        {
            var size = fileConfigInfo.ConfigInfo.Size;
            var sourceColor = fileConfigInfo.ConfigInfo.SourceColor;
            var color = fileConfigInfo.ConfigInfo.Color;
            var unitType = fileConfigInfo.ConfigInfo.SizeUnitType;
            try
            {
                var svgDocument = SvgDocument.Open(fileConfigInfo.FileInfo.FullName);
                ReColorDocument(ref svgDocument, sourceColor, color);

                if (unitType.Equals(SizeUnitType.Dp))
                {
                    foreach (var densityInfo in AndroidDensities.DensityCollection)
                    {
                        ReSizeDocument(ref svgDocument, size, densityInfo.Density);
                        var documentSize = new Size(svgDocument.Width, svgDocument.Height);

                        var filePath = CreateDirectoryAndFilePath(outputDirectoryPath, fileConfigInfo, densityInfo);
                        SaveDocumentAsPngFile(ref svgDocument, filePath, ImageFormat.Png);

                        RaiseFilePainted(fileConfigInfo, Path.GetFileName(filePath), densityInfo.Key, documentSize);
                    }
                }
                else
                {
                    foreach (var densityInfo in AndroidDensities.DensityCollection)
                    {
                        ReSizeDocument(ref svgDocument, size, AndroidDensities.mdpi.Density);
                        var documentSize = new Size(svgDocument.Width, svgDocument.Height);

                        var filePath = CreateDirectoryAndFilePath(outputDirectoryPath, fileConfigInfo, densityInfo);
                        SaveDocumentAsPngFile(ref svgDocument, filePath, ImageFormat.Png);

                        RaiseFilePainted(fileConfigInfo, Path.GetFileName(filePath), densityInfo.Key, documentSize);
                    }
                }
            }
            catch (Exception ex)
            {
                RaiseFilePainted(ex);
            }
        }
        /// <summary>
        /// Создать директорию для файлов и сформировать путь для сохранения файла
        /// </summary>
        /// <param name="outputDirectoryPath">Выходная директория</param>
        /// <param name="fileConfigInfo">FilesConfigInfo</param>
        /// <param name="densityInfo">DensityInfo</param>
        /// <param name="fileExtension">Расширения</param>
        /// <returns></returns>
        private string CreateDirectoryAndFilePath(string outputDirectoryPath, FilesConfigInfo fileConfigInfo, DensityInfo densityInfo, string fileExtension="png")
        {
            string dimension = fileConfigInfo.ConfigInfo != null ? fileConfigInfo.ConfigInfo.Dimension : String.Empty;

            if(!Directory.Exists(Path.Combine(outputDirectoryPath, AndroidDensities.GetDensityDirectoryName(densityInfo.Key, dimension))))
            {
                Directory.CreateDirectory(Path.Combine(outputDirectoryPath, AndroidDensities.GetDensityDirectoryName(densityInfo.Key, dimension)));
            }
            return Path.Combine(outputDirectoryPath,
                                AndroidDensities.GetDensityDirectoryName(densityInfo.Key, dimension), String.Format("{0}.{1}",
                                Path.GetFileNameWithoutExtension(fileConfigInfo.FileInfo.Name), fileExtension));
        }