Ejemplo n.º 1
0
        public void Dispose()
        {
            _disposer.DisposeAll();
            PaletteView?.Dispose();
            PaletteTexture?.Dispose();
            CommonResourceSet?.Dispose();

            PaletteView       = null;
            PaletteTexture    = null;
            CommonResourceSet = null;
        }
Ejemplo n.º 2
0
        public void DestroyDeviceObjects()
        {
            _disposer.DisposeAll();
            PaletteView?.Dispose();
            PaletteTexture?.Dispose();
            CommonResourceSet?.Dispose();

            PaletteView       = null;
            PaletteTexture    = null;
            CommonResourceSet = null;
        }
Ejemplo n.º 3
0
 private void paletteToolStripMenuItem_Click(object sender, EventArgs e)
 {
     if (paletteView == null || paletteView.IsDisposed)
     {
         paletteView = new PaletteView();
         paletteView.Show();
     }
     else
     {
         paletteView.Show();
         paletteView.BringToFront();
     }
 }
Ejemplo n.º 4
0
        private void OnColorPaletteControlSelected(Color color, PaletteIndex paletteIndex, int colorPosition)
        {
            if (DataContext is MapViewModel viewModel)
            {
                if (!viewModel.IsActive)
                {
                    return;
                }
            }

            SolidColorBrush scb = new SolidColorBrush
            {
                Color = color
            };

            PaletteView palette = null;

            switch (paletteIndex)
            {
            case PaletteIndex.Palette0: palette = palette0; break;

            case PaletteIndex.Palette1: palette = palette1; break;

            case PaletteIndex.Palette2: palette = palette2; break;

            case PaletteIndex.Palette3: palette = palette3; break;
            }

            switch (colorPosition)
            {
            case 0: palette.cvsColor0.Background = scb; break;

            case 1: palette.cvsColor1.Background = scb; break;

            case 2: palette.cvsColor2.Background = scb; break;

            case 3: palette.cvsColor3.Background = scb; break;
            }
        }
Ejemplo n.º 5
0
 private void PaletteRefreshMenuItem_Click(object sender, EventArgs e)
 {
     PaletteView.Refresh();
 }
Ejemplo n.º 6
0
 private void CopyPaletteToClipboardMenuItem_Click(object sender, EventArgs e)
 {
     PaletteView.ScreenshotToClipboard();
 }
Ejemplo n.º 7
0
 private void SavePaletteScreenshotMenuItem_Click(object sender, EventArgs e)
 {
     PaletteView.Screenshot();
 }
Ejemplo n.º 8
0
        private unsafe void Generate(bool now = false)
        {
            if (!IsHandleCreated || IsDisposed)
            {
                return;
            }

            if (Global.Emulator.Frame % RefreshRate.Value == 0 || now)
            {
                int  b0;
                int  b1;
                byte value;
                int  cvalue;

                if (CheckChange())
                {
                    _forceChange = false;

                    // Pattern Viewer
                    for (var i = 0; i < 16; i++)
                    {
                        PaletteView.BgPalettesPrev[i].Value     = PaletteView.BgPalettes[i].Value;
                        PaletteView.SpritePalettesPrev[i].Value = PaletteView.SpritePalettes[i].Value;
                        PaletteView.BgPalettes[i].Value         = _nes.LookupColor(_nes.ppu.PALRAM[PaletteView.BgPalettes[i].Address]);
                        PaletteView.SpritePalettes[i].Value     = _nes.LookupColor(_nes.ppu.PALRAM[PaletteView.SpritePalettes[i].Address]);
                    }

                    if (PaletteView.HasChanged())
                    {
                        PaletteView.Refresh();
                    }

                    DrawPatternView(PatternView, _ppuBus);
                }

                var bmpdata2  = SpriteView.sprites.LockBits(new Rectangle(new Point(0, 0), SpriteView.sprites.Size), ImageLockMode.WriteOnly, PixelFormat.Format32bppArgb);
                var framebuf2 = (int *)bmpdata2.Scan0.ToPointer();

                int  pt_add = _nes.ppu.reg_2000.obj_pattern_hi ? 0x1000 : 0;
                bool is8x16 = _nes.ppu.reg_2000.obj_size_16;


                // Sprite Viewer
                for (int n = 0; n < 4; n++)
                {
                    for (int r = 0; r < 16; r++)
                    {
                        int BaseAddr = (r << 2) + (n << 6);
                        int TileNum  = _nes.ppu.OAM[BaseAddr + 1];
                        int patternAddr;

                        if (is8x16)
                        {
                            patternAddr  = (TileNum >> 1) * 0x20;
                            patternAddr += 0x1000 * (TileNum & 1);
                        }
                        else
                        {
                            patternAddr  = TileNum * 0x10;
                            patternAddr += pt_add;
                        }

                        int Attributes = _nes.ppu.OAM[BaseAddr + 2];
                        int Palette    = Attributes & 0x03;

                        for (int x = 0; x < 8; x++)
                        {
                            for (int y = 0; y < 8; y++)
                            {
                                int address = patternAddr + y;
                                b0     = (byte)((_ppuBus[address] >> (7 - x)) & 1);
                                b1     = (byte)((_ppuBus[address + 8] >> (7 - x)) & 1);
                                value  = (byte)(b0 + (b1 << 1));
                                cvalue = _nes.LookupColor(_nes.ppu.PALRAM[16 + value + (Palette << 2)]);

                                int adr = (x + (r * 16)) + (y + (n * 24)) * (bmpdata2.Stride >> 2);
                                framebuf2[adr] = cvalue;
                            }

                            if (is8x16)
                            {
                                patternAddr += 0x10;
                                for (int y = 0; y < 8; y++)
                                {
                                    int address = patternAddr + y;
                                    b0     = (byte)((_ppuBus[address] >> (7 - x)) & 1);
                                    b1     = (byte)((_ppuBus[address + 8] >> (7 - x)) & 1);
                                    value  = (byte)(b0 + (b1 << 1));
                                    cvalue = _nes.LookupColor(_nes.ppu.PALRAM[16 + value + (Palette << 2)]);

                                    int adr = (x + (r << 4)) + ((y + 8) + (n * 24)) * (bmpdata2.Stride >> 2);
                                    framebuf2[adr] = cvalue;
                                }

                                patternAddr -= 0x10;
                            }
                        }
                    }
                }

                SpriteView.sprites.UnlockBits(bmpdata2);
                SpriteView.Refresh();

                HandleSpriteViewMouseMove(SpriteView.PointToClient(MousePosition));
                HandlePaletteViewMouseMove(PaletteView.PointToClient(MousePosition));
            }
        }
Ejemplo n.º 9
0
        private void InitializeComponent()
        {
            #region Commands

            saveCommand = new Command {
                Image = ImageResources.Actions.Save
            };
            saveAsCommand = new Command {
                Image = ImageResources.Actions.SaveAs
            };
            exportCommand = new Command {
                Image = ImageResources.Actions.ImageExport
            };
            importCommand = new Command {
                Image = ImageResources.Actions.ImageImport
            };

            #endregion

            #region Controls

            #region Buttons

            saveButton = new ButtonToolStripItem
            {
                ToolTip = "Save",
                Command = saveCommand,
            };

            saveAsButton = new ButtonToolStripItem
            {
                ToolTip = "Save As",
                Command = saveAsCommand,
            };

            exportButton = new ButtonToolStripItem
            {
                ToolTip = "Export image",
                Command = exportCommand,
            };

            importButton = new ButtonToolStripItem
            {
                ToolTip = "Import image data",
                Command = importCommand,
            };

            #endregion

            #region Default

            imageList = new ListBox
            {
                ItemImageBinding = Binding.Property <Image>(nameof(ImageElement.Thumbnail)),
                ItemTextBinding  = Binding.Property <string>(nameof(ImageElement.Text)),
            };

            imageView = new ImageViewEx {
                BackgroundColor = KnownColors.DarkGreen
            };
            imagePalette = new PaletteView {
                Size = new Size(200, -1),
            };

            var widthLabel = new Label {
                Text = "Width:"
            };
            var heightLabel = new Label {
                Text = "Height:"
            };
            var formatLabel = new Label {
                Text = "Format:"
            };
            var paletteLabel = new Label {
                Text = "Palette:"
            };

            width    = new Label();
            height   = new Label();
            formats  = new ComboBox();
            palettes = new ComboBox();

            #endregion

            #region Toolstrip

            var mainToolStrip = new ToolStrip
            {
                Padding = 3,
                Items   =
                {
                    saveButton,
                    saveAsButton,
                    new SplitterToolStripItem(),
                    exportButton,
                    importButton
                }
            };

            #endregion

            #region Layouts

            var imageLayout = new StackLayout
            {
                Spacing     = 3,
                Orientation = Orientation.Vertical,
                HorizontalContentAlignment = HorizontalAlignment.Stretch,
                Items =
                {
                    new StackLayoutItem(imageView)
                    {
                        Expand = true, HorizontalAlignment = HorizontalAlignment.Stretch
                    },
                    new TableLayout
                    {
                        Spacing = new Size(3, 3),
                        Rows    =
                        {
                            new TableRow
                            {
                                Cells =
                                {
                                    widthLabel,
                                    width,
                                    heightLabel,
                                    height,
                                    new TableCell {
                                        ScaleWidth = true
                                    }
                                }
                            },
                            new TableRow
                            {
                                Cells =
                                {
                                    formatLabel,
                                    formats,
                                    paletteLabel,
                                    palettes,
                                    new TableCell {
                                        ScaleWidth = true
                                    }
                                }
                            }
                        }
                    }
                }
            };

            var listLayout = new StackLayout
            {
                Spacing = 3,
                VerticalContentAlignment = VerticalAlignment.Stretch,
                Orientation = Orientation.Vertical,
                Items       =
                {
                    new StackLayoutItem(imageList, true)
                    {
                        HorizontalAlignment = HorizontalAlignment.Stretch
                    },
                    new StackLayoutItem(imagePalette, true)
                }
            };

            var mainLayout = new TableLayout
            {
                Spacing = new Size(3, 3),
                Rows    =
                {
                    new TableRow
                    {
                        Cells =
                        {
                            new TableCell(imageLayout)
                            {
                                ScaleWidth = true
                            },
                            listLayout
                        }
                    }
                }
            };

            #endregion

            #endregion

            Content = new TableLayout
            {
                Rows =
                {
                    new TableRow(mainToolStrip),
                    mainLayout
                }
            };
        }