Beispiel #1
0
        protected override void StartMove(Selection sel)
        {
            Drawable          drawable = null;
            SelectionPosition pos = SelectionPosition.BottomRight;
            bool resize = true, copycolor = true, sele = true;

            if (Tool == DrawTool.Selection)
            {
                if (Selections.Count == 0 && currentZoom != 1)
                {
                    widget.SetCursorForTool(DrawTool.Move);
                    inZooming = true;
                }
                return;
            }

            if (sel != null)
            {
                ClearSelection();
            }

            switch (Tool)
            {
            case DrawTool.Line:
                drawable = new Line(MoveStart, new Point(MoveStart.X + 1, MoveStart.Y + 1),
                                    LineType, LineStyle);
                drawable.FillColor = Color;
                pos = SelectionPosition.LineStop;
                break;

            case DrawTool.Cross:
                drawable = new Cross(MoveStart, new Point(MoveStart.X + 1, MoveStart.Y + 1),
                                     LineStyle);
                break;

            case DrawTool.Ellipse:
                drawable = new Ellipse(MoveStart, 2, 2);
                break;

            case DrawTool.Rectangle:
                drawable = new Rectangle(MoveStart, 2, 2);
                break;

            case DrawTool.CircleArea:
                drawable             = new Ellipse(MoveStart, 2, 2);
                drawable.FillColor   = Color.Copy();
                drawable.FillColor.A = byte.MaxValue / 2;
                break;

            case DrawTool.RectangleArea:
                drawable             = new Rectangle(MoveStart, 2, 2);
                drawable.FillColor   = Color.Copy();
                drawable.FillColor.A = byte.MaxValue / 2;
                break;

            case DrawTool.Counter:
                drawable           = new Counter(MoveStart, 3 * LineWidth, 0);
                drawable.FillColor = Color.Copy();
                (drawable as Counter).TextColor = Color.Grey2;
                resize = false;
                break;

            case DrawTool.Text:
            case DrawTool.Player:
            {
                int  width, heigth;
                Text text = new Text(MoveStart, 1, 1, "");
                if (ConfigureObjectEvent != null)
                {
                    ConfigureObjectEvent(text, Tool);
                }
                if (text.Value == null)
                {
                    return;
                }
                Config.DrawingToolkit.MeasureText(text.Value, out width, out heigth,
                                                  Config.Style.Font, FontSize, FontWeight.Normal);
                text.Update(new Point(MoveStart.X - width / 2, MoveStart.Y - heigth / 2),
                            width, heigth);
                text.TextColor = TextColor.Copy();
                text.FillColor = text.StrokeColor = TextBackgroundColor.Copy();
                text.TextSize  = FontSize;
                resize         = copycolor = sele = false;
                drawable       = text;
                break;
            }

            case DrawTool.Pen:
            case DrawTool.Eraser:
                handdrawing = true;
                break;

            case DrawTool.Zoom:
            {
                double newZoom = currentZoom;

                if (modifier == ButtonModifier.Shift)
                {
                    newZoom -= 0.1;
                }
                else
                {
                    newZoom += 0.1;
                }
                newZoom = Math.Max(newZoom, MinZoom);
                newZoom = Math.Min(newZoom, MaxZoom);
                Zoom(newZoom, MoveStart);
                break;
            }
            }

            if (drawable != null)
            {
                if (copycolor)
                {
                    drawable.StrokeColor = Color.Copy();
                }
                drawable.LineWidth = LineWidth;
                drawable.Style     = LineStyle;
                var selo = Add(drawable);
                drawing.Drawables.Add(drawable);
                if (Tool == DrawTool.Counter)
                {
                    UpdateCounters();
                }
                if (sele)
                {
                    if (resize)
                    {
                        UpdateSelection(new Selection(selo, pos, 5));
                    }
                    else
                    {
                        UpdateSelection(new Selection(selo, SelectionPosition.All, 5));
                    }
                    inObjectCreation = true;
                }
                widget.ReDraw();
            }
        }