예제 #1
0
 public PaletteReductionSettings(ChrPipeline pipeline, ImageRenderControl image)
 {
     _loading = true;
     Pipeline = pipeline;
     _image   = image;
     InitializeComponent();
     RefreshLayout();
     _loading = false;
 }
예제 #2
0
        private void AddPipelineButton_Click(object sender, EventArgs e)
        {
            var option = _imagePipelineChoices.Keys.ToArray()[NewPipelineType.SelectedIndex];

            switch (option)
            {
            case ImagePipelines.Chr:
                var baseFile = _file.GetRelativeDirectory() + @"/" + Path.GetFileNameWithoutExtension(_file.File.Name);
                Pipeline = new ChrPipeline(_file, baseFile + ".chr", baseFile + ".pal");
                ChrPipelinePanel.Pipeline      = Pipeline as ChrPipeline;
                PaletteReductionPanel.Pipeline = Pipeline as ChrPipeline;
                RegisterChange();
                break;
            }
            RefreshLayout();
        }
예제 #3
0
        public ImageRenderControl(string filename)
        {
            try
            {
                ImageSource = ChrPipeline.LoadImageFile(filename);
                Palette     = new List <Color>();
                RefreshPalette(ImageSource);

                _wantedWidth  = ImageSource.Width;
                _wantedHeight = ImageSource.Height;
            }
            catch (Exception ex)
            {
                ImageSource = new Bitmap(1, 1);
                Program.Error(string.Format("Could not open image file '{0}'", new FileInfo(filename).Name), ex);
            }
        }
예제 #4
0
        public ChrPipelineSettings(ChrPipeline pipeline, ImageRenderControl image)
        {
            _loading       = true;
            Pipeline       = pipeline;
            _paletteSource = image.Palette;
            InitializeComponent();
            RefreshLayout();
            _loading = false;

            PaletteEntries.OrderUpdated   += () => { SetPaletteAssignments(); };
            PaletteEntries.MouseOverColor += (colors) => { PreviewPaletteColor(colors); };
            image.PaletteChanged          += () =>
            {
                _loading = true;
                RefreshLayout();
                _loading = false;
            };
        }
예제 #5
0
        // IMPORT
        public void GetProjectModel(AsmProject project)
        {
            var errors         = new List <string>();
            var fileReferences = new Dictionary <int, AsmProjectFile>();

            project.Type = Type;
            project.Name = Name;
            if (ExtraDirectories != null)
            {
                project.Directories = ExtraDirectories
                                      .Select(d => new DirectoryInfo(Path.Combine(project.Directory.FullName, d)))
                                      .Where(d => d.Exists).ToList();
            }
            foreach (var fileHeader in Files)
            {
                var fileInfo = new FileInfo(Path.Combine(project.Directory.FullName, fileHeader.RelativePath));
                var file     = new AsmProjectFile {
                    Project = project
                };

                file.File = fileInfo;
                if (!fileInfo.Exists)
                {
                    file.Missing = true;
                }

                file.Mode = fileHeader.Mode;

                if (fileHeader.Pipeline != null)
                {
                    switch (fileHeader.Pipeline.Type)
                    {
                    case "chr":
                        // TODO: Deserialization method on the pipeline itself
                        var chrOutput     = Path.Combine(project.Directory.FullName, fileHeader.Pipeline.Output[0]);
                        var paletteOutput = fileHeader.Pipeline.Output.Length < 2 || fileHeader.Pipeline.Output[1] == null ? null : Path.Combine(project.Directory.FullName, fileHeader.Pipeline.Output[1]);

                        var pipeline = new ChrPipeline(file, chrOutput, paletteOutput, fileHeader.Pipeline.LastProcessed);
                        pipeline.SetSettings(fileHeader.Pipeline.Settings);
                        file.Pipeline = pipeline;
                        break;
                    }
                }

                fileReferences.Add(fileHeader.Id, file);
                project.Files.Add(file);
            }

            var buildConfigurations = new List <BuildConfigurationHeader>();

            if (Cartridge != null)
            {
                buildConfigurations.Add(Cartridge);
            }
            if (BuildConfigurations != null)
            {
                buildConfigurations.AddRange(BuildConfigurations);
            }

            foreach (var configurationHeader in buildConfigurations)
            {
                var cData         = configurationHeader.Data;
                var configuration = new NesCartridge
                {
                    ChrBuildPath      = cData[0],
                    PrgBuildPath      = cData[1],
                    BuildPath         = cData[2],
                    ChrFile           = cData[3],
                    DebugFile         = cData[4],
                    Filename          = cData[5],
                    LinkerConfigFile  = cData[6],
                    MapFile           = cData[7],
                    PrgFile           = cData[8],
                    Name              = cData.Length > 9 ? cData[9] : null,
                    Symbols           = cData.Length > 10 ? cData[10].Split(new [] { ',' }, StringSplitOptions.RemoveEmptyEntries).ToList() : new List <string>(),
                    CalculateChecksum = cData.Length > 11 ? cData[11] != "0" : true,
                };
                if (configurationHeader.ChrBankFileIds != null)
                {
                    foreach (var bank in configurationHeader.ChrBankFileIds)
                    {
                        var chrBank = new ChrBank();
                        foreach (var fileId in bank)
                        {
                            chrBank.Sources.Add(fileReferences[fileId]);
                        }
                        configuration.ChrBanks.Add(chrBank);
                    }
                }
                project.BuildConfigurations.Add(configuration);
            }

            if (errors.Any())
            {
                throw new Exception(string.Join(Environment.NewLine, errors));
            }
            project.Pristine = true;
        }