public override bool StartInteraction(PointF[] points) { (int column, int row) = _pixelMapper.PixelsToCoords((int)points[0].X, (int)points[0].Y); this.CurrentTool?.Execute(column, row); Invalidate(); return(true); }
public void SetSize(int width, int height) { (int columns, int rows) = _pixelMapper.PixelsToCoords(width, height); columns = Math.Max(columns, 1); rows = Math.Max(rows, 1); (_width, _height) = _pixelMapper.CoordsToPixels(columns, rows); _gameBoard.Columns = columns; _gameBoard.Rows = rows; }
public MainForm(IGame game, IPixelMapper pixelMapper, IEnumerable <ITool> tools, IEnumerable <ILayerRenderer> renderers, ITrackParameters parameters) { _game = game; _parameters = parameters; _currentTool = tools.First(); this.Text = "Trains.NET"; this.AutoScaleMode = AutoScaleMode.Font; this.StartPosition = FormStartPosition.Manual; this.Location = new Point(1086, 559); this.ClientSize = new Size(1547, 897); var splitContainer = new SplitContainer() { FixedPanel = FixedPanel.Panel1, SplitterDistance = 400, Dock = DockStyle.Fill, IsSplitterFixed = true }; var buttonPanel = new Panel() { Dock = DockStyle.Top, Padding = new Padding(5), AutoSize = true }; var rendererPanel = new Panel() { Dock = DockStyle.Top, Padding = new Padding(5), AutoSize = true }; foreach (ITool tool in tools) { buttonPanel.Controls.Add(CreateButton(tool)); } var button = new CheckBox { Text = "Configure", Height = 30, TextAlign = ContentAlignment.MiddleCenter, Dock = DockStyle.Top, Appearance = Appearance.Button }; buttonPanel.Controls.Add(button); button.CheckedChanged += (s, e) => { if (_debugForm == null) { _debugForm = CreateDebugForm(); } if (button.Checked) { _debugForm.Location = new Point(this.Left - _debugForm.Width, this.Top); _debugForm.Show(); } else { _debugForm.Hide(); } }; var skiaView = new SKControl() { Dock = DockStyle.Fill }; skiaView.MouseDown += DoMouseClick; skiaView.MouseMove += DoMouseClick; skiaView.Resize += (s, e) => _game.SetSize(skiaView.Width, skiaView.Height); skiaView.PaintSurface += (s, e) => _game.Render(e.Surface.Canvas); foreach (ILayerRenderer renderer in renderers) { rendererPanel.Controls.Add(CreateRendererCheckbox(renderer)); } splitContainer.Panel1.Controls.Add(rendererPanel); splitContainer.Panel1.Controls.Add(buttonPanel); splitContainer.Panel2.Controls.Add(skiaView); splitContainer.Panel2.Padding = new Padding(5); _timer = new Timer(); _timer.Tick += (s, e) => skiaView.Refresh(); _timer.Interval = 16; _timer.Start(); this.Controls.Add(splitContainer); void DoMouseClick(object sender, MouseEventArgs e) { if ((e.Button & MouseButtons.Left) == MouseButtons.Left) { (int column, int row) = pixelMapper.PixelsToCoords(e.X, e.Y); _currentTool.Execute(column, row); } } RadioButton CreateButton(ITool tool) { var button = new RadioButton() { Text = tool.Name, Dock = DockStyle.Top, Height = 50, Appearance = Appearance.Button, TextAlign = ContentAlignment.MiddleCenter, Checked = _currentTool == tool }; button.Click += (s, e) => _currentTool = tool; return(button); } Control CreateRendererCheckbox(ILayerRenderer renderer) { var checkbox = new CheckBox { Text = renderer.Name, Dock = DockStyle.Top, Height = 50, Appearance = Appearance.Button, TextAlign = ContentAlignment.MiddleCenter, Checked = renderer.Enabled }; checkbox.CheckedChanged += (s, e) => { renderer.Enabled = checkbox.Checked; }; return(checkbox); } }