private void VixenPreviewControl_MouseUp(object sender, MouseEventArgs e) { HighlightedElements.Clear(); if (_mouseCaptured) { if (_currentTool != Tools.Select) { // If control is pressed, deselect the shape and immediately allow drawing another shape if ((Control.ModifierKeys & Keys.Control) != 0) { _selectedDisplayItem.Shape.MouseUp(sender, e); DeSelectSelectedDisplayItem(); } else { _currentTool = Tools.Select; } } if (_selectedDisplayItem != null) { _selectedDisplayItem.Shape.MouseUp(sender, e); OnSelectDisplayItem(this, _selectedDisplayItem); } // Ok, if this is true, we've got a rubber band and something is selected, now what? else if (SelectedDisplayItems.Count > 0) { // If we only have one item, just select it and go on. if (SelectedDisplayItems.Count == 1) { _selectedDisplayItem = SelectedDisplayItems[0]; _selectedDisplayItem.Shape.Select(true); OnSelectDisplayItem(this, _selectedDisplayItem); SelectedDisplayItems.Clear(); } else { // Do nothing... } } } ResetMouse(); }
/// <summary> /// This is used in edit mode only!! /// Need to make it go away so we only have one render engine /// </summary> public void RenderInForeground() { renderTimer.Reset(); renderTimer.Start(); if (_background != null) { //FastPixel fp = new FastPixel(_background.Width, _background.Height); FastPixel fp = new FastPixel(new Bitmap(_alphaBackground)); Bitmap floodBG = null; if (UseFloods) { floodBG = PreviewTools.Copy32BPPBitmapSafe(_blankAlphaBackground); //floodBG = new Bitmap(_blankAlphaBackground); //floodBG = new Bitmap(_blankAlphaBackground.Width, _blankAlphaBackground.Height); //Graphics g = Graphics.FromImage(floodBG); //g.CompositingMode = System.Drawing.Drawing2D.CompositingMode.SourceCopy; //SolidBrush brush = new SolidBrush(Color.FromArgb(50, 255, 0, 0)); //g.FillEllipse(brush, new Rectangle(200, 200, 300, 300)); //g.DrawImage(_blankAlphaBackground, 0, 0); //g.FillRectangle(_backgroundBrush, new Rectangle(0, 0, _blankAlphaBackground.Width, _blankAlphaBackground.Height)); } fp.Lock(); foreach (DisplayItem displayItem in DisplayItems) { //if (UseFloods && displayItem.Shape.StringType == PreviewBaseShape.StringTypes.Flood) //{ // displayItem.Shape.Draw(floodBG, _editMode, null); //} //else //{ if (_editMode) { displayItem.Draw(fp, true, HighlightedElements, SelectedDisplayItems.Contains(displayItem)); } else { displayItem.Draw(fp, false, null, false); } //} } fp.Unlock(true); // Finally, are we drawing a banded rectangle? if (_mouseCaptured && _selectedDisplayItem == null) { Graphics g = Graphics.FromImage(fp.Bitmap); g.DrawRectangle(Pens.White, _bandRect); } //lock (renderLock) //{ // First, draw our background image opaque bufferedGraphics.Graphics.CompositingMode = System.Drawing.Drawing2D.CompositingMode.SourceCopy; //bufferedGraphics.Graphics.DrawImage(_background, 0, 0, _background.Width, _background.Height); if (UseFloods) { bufferedGraphics.Graphics.DrawImage(_background, 0, 0, _background.Width, _background.Height); } else { //bufferedGraphics.Graphics.DrawImage(_alphaBackground, 0, 0, _alphaBackground.Width, _alphaBackground.Height); } //bufferedGraphics.Graphics.CompositingMode = System.Drawing.Drawing2D.CompositingMode.SourceOver; if (UseFloods) { bufferedGraphics.Graphics.DrawImage(floodBG, 0, 0, _blankAlphaBackground.Width, _blankAlphaBackground.Height); } // Now, draw our "pixel" image using alpha blending bufferedGraphics.Graphics.DrawImage(fp.Bitmap, 0, 0, fp.Width, fp.Height); //} } bufferedGraphics.Render(Graphics.FromHwnd(this.Handle)); renderTimer.Stop(); lastRenderUpdateTime = renderTimer.ElapsedMilliseconds; }
private void VixenPreviewControl_KeyUp(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Delete) { Delete(); } // Copy else if (e.KeyCode == Keys.C && e.Modifiers == Keys.Control) { Copy(); } else if (e.KeyCode == Keys.X && e.Modifiers == Keys.Control) { Cut(); } else if (e.KeyCode == Keys.V && e.Modifiers == Keys.Control) { if (Paste()) { // move the prop to the mouse position Point moveToPoint = PointToClient(MousePosition); _selectedDisplayItem.Shape.MoveTo(moveToPoint.X, moveToPoint.Y); StartMove(moveToPoint.X, moveToPoint.Y); } } else if (e.KeyCode == Keys.Up) { if (_selectedDisplayItem != null) { _selectedDisplayItem.Shape.Nudge(0, -1); } else if (SelectedDisplayItems.Count > 0) { foreach (DisplayItem item in DisplayItems) { if (SelectedDisplayItems.Contains(item)) { item.Shape.Nudge(0, -1); } } } } else if (e.KeyCode == Keys.Down) { if (_selectedDisplayItem != null) { _selectedDisplayItem.Shape.Nudge(0, 1); } else if (SelectedDisplayItems.Count > 0) { foreach (DisplayItem item in DisplayItems) { if (SelectedDisplayItems.Contains(item)) { item.Shape.Nudge(0, 1); } } } } else if (e.KeyCode == Keys.Right) { if (_selectedDisplayItem != null) { _selectedDisplayItem.Shape.Nudge(1, 0); } else if (SelectedDisplayItems.Count > 0) { foreach (DisplayItem item in DisplayItems) { if (SelectedDisplayItems.Contains(item)) { item.Shape.Nudge(1, 0); } } } } else if (e.KeyCode == Keys.Left) { if (_selectedDisplayItem != null) { _selectedDisplayItem.Shape.Nudge(-1, 0); } else if (SelectedDisplayItems.Count > 0) { foreach (DisplayItem item in DisplayItems) { if (SelectedDisplayItems.Contains(item)) { item.Shape.Nudge(-1, 0); } } } } else if (e.KeyCode == Keys.Escape) { // not sure how to handle this yet... // would work fine if we were always live moving. // if we are standard mving, we don't want to delete the item when escape is pressed! //if (_mouseCaptured) { //Capture = false; //_mouseCaptured = false; //DisplayItems.Remove(_selectedDisplayItem); //DeSelectSelectedDisplayItem(); } }
private void VixenPreviewControl_MouseMove(object sender, MouseEventArgs e) { if (_editMode) { PreviewPoint point = new PreviewPoint(e.X, e.Y); dragCurrent.X = e.X; dragCurrent.Y = e.Y; changeX = e.X - dragStart.X; changeY = e.Y - dragStart.Y; // Are we moving a single display item? if (_mouseCaptured && _selectedDisplayItem != null) { _selectedDisplayItem.Shape.MouseMove(dragCurrent.X, dragCurrent.Y, changeX, changeY); } // If we get here, we're drwing a rubber band else if (_banding) { _bandRect.Location = dragStart; _bandRect.Width = changeX; _bandRect.Height = changeY; foreach (DisplayItem item in DisplayItems) { if (item.Shape.ShapeInRect(_bandRect)) { if (!SelectedDisplayItems.Contains(item)) { SelectedDisplayItems.Add(item); } } else if (SelectedDisplayItems.Contains(item)) { SelectedDisplayItems.Remove(item); } } } // Are we moving a group of display items? else if (_mouseCaptured && _selectedDisplayItem == null && SelectedDisplayItems.Count > 1) { foreach (DisplayItem item in SelectedDisplayItems) { item.Shape.MouseMove(dragCurrent.X, dragCurrent.Y, changeX, changeY); } } else { if (_selectedDisplayItem != null) { PreviewPoint selectPoint = _selectedDisplayItem.Shape.PointInSelectPoint(point); if (selectPoint != null) { Cursor.Current = Cursors.Cross; } else if (_selectedDisplayItem.Shape.PointInShape(point)) { Cursor.Current = Cursors.SizeAll; } else { Cursor.Current = Cursors.Default; } } else if (SelectedDisplayItems.Count > 0) { if (MouseOverSelectedDisplayItems(e.X, e.Y)) { Cursor.Current = Cursors.SizeAll; } } } } }
private void VixenPreviewControl_MouseDown(object sender, MouseEventArgs e) { if (_editMode) { if (e.Button == System.Windows.Forms.MouseButtons.Left) { PreviewPoint point = new PreviewPoint(e.X, e.Y); if (_currentTool == Tools.Select) { // Is there a single dislay item selected? if (_selectedDisplayItem != null) { //if (_selectedDisplayItem.GetType().ToString().Contains("PreviewCustom")) //{ // Console.WriteLine(_selectedDisplayItem.GetType().ToString()); //} // Lets see if we've got a drag point. PreviewPoint selectedPoint = _selectedDisplayItem.Shape.PointInSelectPoint(point); if (selectedPoint != null) { dragStart.X = e.X; dragStart.Y = e.Y; _selectedDisplayItem.Shape.SetSelectPoint(selectedPoint); Capture = true; _mouseCaptured = true; } // If we're not resizing, see if we're moving a single shape else if (_selectedDisplayItem.Shape.PointInShape(point)) { StartMove(e.X, e.Y); } // If we get here, we're outside the shape, deselect else { DeSelectSelectedDisplayItem(); } } // Are there multiple items selected? // If so, we're moving, can't resize them... else if (SelectedDisplayItems.Count > 1) { if (MouseOverSelectedDisplayItems(e.X, e.Y)) { //_selectedDisplayItem.Shape.SetSelectPoint(null); StartMove(e.X, e.Y); } else { SelectedDisplayItems.Clear(); } } if (!_mouseCaptured) { _selectedDisplayItem = DisplayItemAtPoint(point); if (_selectedDisplayItem != null) { _selectedDisplayItem.Shape.Select(true); OnSelectDisplayItem(this, _selectedDisplayItem); } } // If we get this far, and we've got nothing selected, we're drawing a rubber band! if (_selectedDisplayItem == null && SelectedDisplayItems.Count == 0) { // Capture the mouse in case we want to draw a rubber band dragStart.X = e.X; dragStart.Y = e.Y; Capture = true; _mouseCaptured = true; SelectedDisplayItems.Clear(); _bandRect.Width = 0; _bandRect.Height = 0; _banding = true; } } // If we're not Selecting items, we're drawing them else { DisplayItem newDisplayItem = null; if (_currentTool == Tools.String) { newDisplayItem = new DisplayItem(); newDisplayItem.Shape = new PreviewLine(new PreviewPoint(e.X, e.Y), new PreviewPoint(e.X, e.Y), 50, elementsForm.SelectedNode); } else if (_currentTool == Tools.Arch) { newDisplayItem = new DisplayItem(); newDisplayItem.Shape = new PreviewArch(new PreviewPoint(e.X, e.Y), elementsForm.SelectedNode); } else if (_currentTool == Tools.Rectangle) { newDisplayItem = new DisplayItem(); newDisplayItem.Shape = new PreviewRectangle(new PreviewPoint(e.X, e.Y), elementsForm.SelectedNode); } else if (_currentTool == Tools.Single) { newDisplayItem = new DisplayItem(); newDisplayItem.Shape = new PreviewSingle(new PreviewPoint(e.X, e.Y), elementsForm.SelectedNode); } else if (_currentTool == Tools.Ellipse) { newDisplayItem = new DisplayItem(); newDisplayItem.Shape = new PreviewEllipse(new PreviewPoint(e.X, e.Y), 50, elementsForm.SelectedNode); } else if (_currentTool == Tools.Triangle) { newDisplayItem = new DisplayItem(); newDisplayItem.Shape = new PreviewTriangle(new PreviewPoint(e.X, e.Y), elementsForm.SelectedNode); } else if (_currentTool == Tools.Net) { newDisplayItem = new DisplayItem(); newDisplayItem.Shape = new PreviewNet(new PreviewPoint(e.X, e.Y), elementsForm.SelectedNode); } else if (_currentTool == Tools.Cane) { newDisplayItem = new DisplayItem(); newDisplayItem.Shape = new PreviewCane(new PreviewPoint(e.X, e.Y), elementsForm.SelectedNode); } else if (_currentTool == Tools.Star) { newDisplayItem = new DisplayItem(); newDisplayItem.Shape = new PreviewStar(new PreviewPoint(e.X, e.Y), elementsForm.SelectedNode); } else if (_currentTool == Tools.Flood) { newDisplayItem = new DisplayItem(); newDisplayItem.Shape = new PreviewFlood(new PreviewPoint(e.X, e.Y), elementsForm.SelectedNode); } else if (_currentTool == Tools.MegaTree) { newDisplayItem = new DisplayItem(); newDisplayItem.Shape = new PreviewMegaTree(new PreviewPoint(e.X, e.Y), elementsForm.SelectedNode); } // Now add the newely created display item to the screen. if (newDisplayItem != null) { AddDisplayItem(newDisplayItem); _selectedDisplayItem = newDisplayItem; _selectedDisplayItem.Shape.PixelSize = 3; _selectedDisplayItem.Shape.Select(true); _selectedDisplayItem.Shape.SelectDefaultSelectPoint(); dragStart.X = e.X; dragStart.Y = e.Y; Capture = true; _mouseCaptured = true; } } } else if (e.Button == System.Windows.Forms.MouseButtons.Right) { } } }