//------------------------------------------------------------------------------ private void mUndo_Click(object sender, EventArgs e) { MultiPath mp = GetActivePath(); if (mp.Count == 0) { if (mp.owner.Count == 1) { return; } else { mp.owner.RemoveAt(mp.owner.Count - 1); } } else { MultiPathSegment mps = mp[mp.Count - 1]; if (!mps.RemoveLast()) { mp.RemoveLast(); } } UpdateBtnAndMenuState(); BmpUpdateNeeded(); }
//------------------------------------------------------------------------------ private void DisplayPanel_MouseDown(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Right) { mNewPath_Click(sender, e); MovingButtonIdx = -1; } else if (displayPanel.Cursor == Cursors.Hand) { MovingButtonIdx = GetButtonIndex(new IntPoint(e.X * scale, e.Y * scale), out MovingButtonSeg); BmpUpdateNeeded(); } else { //Add a new control point ... CurveType rbPathType = GetRadiobuttonPathType(); MultiPath mp = GetActivePath(); if (mp.Count == 0) { mp.NewMultiPathSegment(rbPathType, new Path()); } else if (rbPathType != GetCurrentPathType(mp)) { if (rbPathType != GetCurrentPathType(mp)) { Path tmp = new Path(); if (!mp.IsValid()) { MultiPathSegment mps = mp[mp.Count - 1]; foreach (IntPoint ip in mps) { tmp.Add(ip); } mp.RemoveLast(); } mp.NewMultiPathSegment(rbPathType, tmp); } } if (!mp[mp.Count - 1].Add(new IntPoint(e.X * scale, e.Y * scale))) { mp.NewMultiPathSegment(rbPathType, new Path()); mp[mp.Count - 1].Add(new IntPoint(e.X * scale, e.Y * scale)); } UpdateBtnAndMenuState(); BmpUpdateNeeded(); MovingButtonIdx = -1; } LeftButtonPressed = (e.Button == MouseButtons.Left); }