private void TilesetControl_MouseMove(object sender, MouseEventArgs e) { int w = Width / tile_width * tile_width; int h = Height / tile_height * tile_height; if (_is_multi && _multi_select && e.X > 0 && e.Y > 0 && e.X < w && e.Y < h) { short Current = GetTileIndexAt(e.X, e.Y); if (Current != -1 && !SelectedTiles.Contains(Current)) { SelectedTiles.Add(Current); SelectedX.Add(e.X / tile_width / Zoom); SelectedY.Add(e.Y / tile_height / Zoom); Refresh(); } } if (CanDrag && do_drag && _selection != -1) { int xx = drag_start.X - e.X; int yy = drag_start.Y - e.Y; if (Math.Sqrt(xx * xx + yy * yy) > 4) { Frame frame = new Frame(); frame.Index = (short)_selection; DoDragDrop(new DataObject("ImageFrame", frame), DragDropEffects.All); do_drag = false; } } }
private void TilesetControl_MouseDown(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left || e.Button == MouseButtons.Right) { drag_start = e.Location; do_drag = true; if (!_ctrl) { SelectedTiles.Clear(); // if no ctrl-click, clear the selection. SelectedX.Clear(); SelectedY.Clear(); SelectedIndices = SelectedTiles.ToArray(); } short Current = GetTileIndexAt(e.X, e.Y); if (Current != -1) { if (!_is_multi) { _selection = Current; } if (!SelectedTiles.Contains(Current)) { SelectedTiles.Add(Current); SelectedX.Add(e.X / tile_width / Zoom); SelectedY.Add(e.Y / tile_height / Zoom); } else if (_ctrl) { SelectedTiles.Remove(Current); SelectedX.Remove(e.X / tile_width / Zoom); SelectedY.Remove(e.Y / tile_height / Zoom); } } _multi_select = true; Refresh(); } }