private void drawing_Paint(object sender, PaintEventArgs e) { DrawingAreaState drawingArea = client.clientMachine.drawingArea; if (!(drawingArea is null)) { framesCounted++; drawingArea.Access(); Graphics graphics = e.Graphics; graphics.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighSpeed; // graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.Default; // graphics.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighSpeed; // graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.Low; graphics.Clear(Color.White); foreach (DrawingAreaState.DrawingObject obj in drawingArea.objects) { DrawObject(drawingArea, obj, graphics); } drawingArea.CheckPendingObjects(); foreach (DrawingAreaState.PendingObject pobj in drawingArea.pendingObjects) { DrawObject(drawingArea, pobj.obj, graphics); } foreach (KeyValuePair <string, DrawingAreaState.MousePosition> entry in drawingArea.mousePositions) { // do something with entry.Value or entry.Key DrawingAreaState.MousePosition pos = entry.Value; graphics.DrawLine(new Pen(Brushes.Black), pos.xpos * drawingArea.areaSize.X - 5, pos.ypos * drawingArea.areaSize.Y - 5, pos.xpos * drawingArea.areaSize.X + 5, pos.ypos * drawingArea.areaSize.Y + 5); graphics.DrawLine(new Pen(Brushes.Black), pos.xpos * drawingArea.areaSize.X + 5, pos.ypos * drawingArea.areaSize.Y - 5, pos.xpos * drawingArea.areaSize.X - 5, pos.ypos * drawingArea.areaSize.Y + 5); graphics.DrawString(pos.username, new Font("Courier New", 12.0f), Brushes.Black, pos.xpos * drawingArea.areaSize.X, pos.ypos * drawingArea.areaSize.Y - 25.0f); } if (!(drawingArea.tempObject is null)) { DrawObject(drawingArea, drawingArea.tempObject, graphics); } graphics.DrawString("FPS: " + FPS.ToString(), new Font("Courier New", 12.0f), Brushes.Black, 5, 5); drawingArea.Exit(); } }
private void penButton_Click(object sender, EventArgs e) { DrawingAreaState drawingArea = client.clientMachine.drawingArea; drawingArea.Access(); drawingArea.selectedTool = DrawingAreaState.Tools.PENCIL; drawingArea.Exit(); drawing.Cursor = new Cursor(new System.IO.MemoryStream(Properties.Resources.mspaint_pencil_8bit)); }
private void elipseButton_Click(object sender, EventArgs e) { DrawingAreaState drawingArea = client.clientMachine.drawingArea; drawingArea.Access(); drawingArea.selectedTool = DrawingAreaState.Tools.OVAL; drawingArea.Exit(); drawing.Cursor = new Cursor(new System.IO.MemoryStream(Properties.Resources.cross)); }
private void ThicknessBar_Scroll(object sender, EventArgs e) { DrawingAreaState drawingArea = client.clientMachine.drawingArea; drawingArea.Access(); drawingArea.thickness = (float)ThicknessBar.Value / 1000.0f; drawingArea.Exit(); ThicknessLabel.Text = "Grubość: " + drawingArea.thickness.ToString("0.000"); }
private void BGColorButton_Click(object sender, EventArgs e) { BGColor.ShowDialog(); DrawingAreaState drawingArea = client.clientMachine.drawingArea; drawingArea.Access(); drawingArea.BackgroundColor = Color.FromArgb(drawingArea.BackgroundColor.A, BGColor.Color); drawingArea.Exit(); BGColorButton.BackColor = BGColor.Color; }
private void drawing_MouseUp(object sender, MouseEventArgs e) { DrawingAreaState drawingArea = client.clientMachine.drawingArea; drawingArea.Access(); if (drawingArea.state == DrawingAreaState.State.DRAWING) { DrawingAreaState.DrawingObject obj = drawingArea.tempObject; if (client.loggedIn) { drawingArea.FinalizeObject(this, drawingArea.tempObject); switch (drawingArea.selectedTool) { case DrawingAreaState.Tools.RECTANGLE: client.clientMachine.SendRectangle((DrawingAreaState.RectangleObject)obj); break; case DrawingAreaState.Tools.OVAL: client.clientMachine.SendOval((DrawingAreaState.OvalObject)obj); break; case DrawingAreaState.Tools.PENCIL: // add one more point to end Point ms = drawingArea.mousepos_start; Point mn = drawingArea.mousepos_now; DrawingAreaState.PathObject path = (DrawingAreaState.PathObject)obj; path.anotherXposs.Add((float)(mn.X) / (float)drawingArea.areaSize.X); path.anotherYposs.Add((float)(mn.Y) / (float)drawingArea.areaSize.Y); client.clientMachine.SendPath((DrawingAreaState.PathObject)obj); break; case DrawingAreaState.Tools.LINE: client.clientMachine.SendPath((DrawingAreaState.PathObject)obj); break; } } drawingArea.tempObject = null; drawingArea.state = DrawingAreaState.State.IDLE; } drawingArea.Exit(); drawing.Refresh(); // RefreshTimer.Interval = 100; }
private void drawing_MouseDown(object sender, MouseEventArgs e) { DrawingAreaState drawingArea = client.clientMachine.drawingArea; drawingArea.Access(); if (drawingArea.state == DrawingAreaState.State.IDLE) { drawingArea.state = DrawingAreaState.State.DRAWING; drawingArea.mousepos_start = new Point(e.X, e.Y); drawingArea.mousepos_now = new Point(e.X, e.Y); switch (drawingArea.selectedTool) { case DrawingAreaState.Tools.LINE: drawingArea.tempObject = new DrawingAreaState.PathObject(-1, (float)(e.X) / (float)drawingArea.areaSize.X, (float)(e.Y) / (float)drawingArea.areaSize.Y, new List <float>(), new List <float>(), drawingArea.thickness, drawingArea.ForegroundColor); break; case DrawingAreaState.Tools.PENCIL: drawingArea.tempObject = new DrawingAreaState.PathObject(-1, (float)(e.X) / (float)drawingArea.areaSize.X, (float)(e.Y) / (float)drawingArea.areaSize.Y, new List <float>(), new List <float>(), drawingArea.thickness, drawingArea.ForegroundColor); break; case DrawingAreaState.Tools.RECTANGLE: drawingArea.tempObject = new DrawingAreaState.RectangleObject(-1, (float)(e.X) / (float)drawingArea.areaSize.X, (float)(e.Y) / (float)drawingArea.areaSize.Y, (float)0, (float)0, drawingArea.thickness, drawingArea.ForegroundColor, drawingArea.BackgroundColor); break; case DrawingAreaState.Tools.OVAL: drawingArea.tempObject = new DrawingAreaState.OvalObject(-1, (float)(e.X) / (float)drawingArea.areaSize.X, (float)(e.Y) / (float)drawingArea.areaSize.Y, (float)0, (float)0, drawingArea.thickness, drawingArea.ForegroundColor, drawingArea.BackgroundColor); break; } } drawingArea.Exit(); drawing.Refresh(); // RefreshTimer.Interval = 33; }
private void drawing_MouseMove(object sender, MouseEventArgs e) { DrawingAreaState drawingArea = client.clientMachine.drawingArea; drawingArea.Access(); drawingArea.mousePosition.X = (float)e.Location.X / (float)drawingArea.areaSize.X; drawingArea.mousePosition.Y = (float)e.Location.Y / (float)drawingArea.areaSize.Y; if (client.loggedIn && checkBox1.Checked) { if (mousePositionLastSentTime + new TimeSpan(0, 0, 0, 0, mousePositionSendInterval_ms) < DateTime.Now) { mousePositionLastSentTime = DateTime.Now; client.clientMachine.SendMousePosition(drawingArea.mousePosition); } } DrawingAreaState.State drawingAreaState = drawingArea.state; if (drawingArea.state == DrawingAreaState.State.DRAWING) { drawingArea.mousepos_now = new Point(e.X, e.Y); Point ms = drawingArea.mousepos_start; Point mn = drawingArea.mousepos_now; DrawingAreaState.DrawingObject obj = drawingArea.tempObject; switch (drawingArea.selectedTool) { case DrawingAreaState.Tools.LINE: DrawingAreaState.PathObject line = (DrawingAreaState.PathObject)obj; line.anotherXposs.Clear(); line.anotherYposs.Clear(); line.anotherXposs.Add((float)(mn.X) / (float)drawingArea.areaSize.X); line.anotherYposs.Add((float)(mn.Y) / (float)drawingArea.areaSize.Y); break; case DrawingAreaState.Tools.PENCIL: if (pencilLastSentTime + new TimeSpan(0, 0, 0, 0, pencilSendInterval_ms) < DateTime.Now) { pencilLastSentTime = DateTime.Now; DrawingAreaState.PathObject path = (DrawingAreaState.PathObject)obj; path.anotherXposs.Add((float)(mn.X) / (float)drawingArea.areaSize.X); path.anotherYposs.Add((float)(mn.Y) / (float)drawingArea.areaSize.Y); if (path.anotherXposs.Count > 300) { // dirty fix -> every 5 seconds end existing path and begin next to circumvent overflow exception. drawingArea.Exit(); drawing_MouseUp(sender, e); drawing_MouseDown(sender, e); drawingArea.Access(); } } break; case DrawingAreaState.Tools.RECTANGLE: DrawingAreaState.RectangleObject rect = (DrawingAreaState.RectangleObject)obj; rect.xpos = (mn.X - ms.X) > 0 ? ((float)ms.X / (float)drawingArea.areaSize.X) : ((float)mn.X / (float)drawingArea.areaSize.X); rect.ypos = (mn.Y - ms.Y) > 0 ? ((float)ms.Y / (float)drawingArea.areaSize.Y) : ((float)mn.Y / (float)drawingArea.areaSize.Y); rect.width = (mn.X - ms.X) > 0 ? ((float)(mn.X - ms.X) / (float)drawingArea.areaSize.X) : ((float)(ms.X - mn.X) / (float)drawingArea.areaSize.X); rect.height = (mn.Y - ms.Y) > 0 ? ((float)(mn.Y - ms.Y) / (float)drawingArea.areaSize.Y) : ((float)(ms.Y - mn.Y) / (float)drawingArea.areaSize.Y); break; case DrawingAreaState.Tools.OVAL: DrawingAreaState.OvalObject oval = (DrawingAreaState.OvalObject)obj; oval.xpos = (mn.X - ms.X) > 0 ? ((float)ms.X / (float)drawingArea.areaSize.X) : ((float)mn.X / (float)drawingArea.areaSize.X); oval.ypos = (mn.Y - ms.Y) > 0 ? ((float)ms.Y / (float)drawingArea.areaSize.Y) : ((float)mn.Y / (float)drawingArea.areaSize.Y); oval.width = (mn.X - ms.X) > 0 ? ((float)(mn.X - ms.X) / (float)drawingArea.areaSize.X) : ((float)(ms.X - mn.X) / (float)drawingArea.areaSize.X); oval.height = (mn.Y - ms.Y) > 0 ? ((float)(mn.Y - ms.Y) / (float)drawingArea.areaSize.Y) : ((float)(ms.Y - mn.Y) / (float)drawingArea.areaSize.Y); break; } } drawingArea.Exit(); if (drawingAreaState == DrawingAreaState.State.DRAWING || drawingAreaState == DrawingAreaState.State.EDITING) { drawing.Refresh(); } /* * drawingArea.Access(); * drawingArea.mousePositions["nkpkiller"] = new DrawingAreaState.MousePosition((float)(e.X) / (float)drawingArea.areaSize.X, (float)(e.Y) / (float)drawingArea.areaSize.Y, "nkpkiller"); * drawingArea.Exit(); */ Application.DoEvents(); // drawing.Refresh(); }