public void MouseDrag(Point P) { DocumentLocation dl; if (P.Y < 0 || P.Y > textArea.Bottom) { lastMouseDragPoint = P; if (!dragDelayOK) { return; } dragDelayOK = false; DocumentLocation dl2 = (selectAnchor == Selection.Start) ? Selection.End : Selection.Start; int l = dl2.LineNumber; int sl = doc[l].SubLineNum(dl2.ColumnNumber); if (doc.Offset((P.Y < 0 ? -1 : 1), ref l, ref sl)) { dl = new DocumentLocation(l, doc[l].SubLineStart(sl) + Math.Min(doc[l].GetSubLines(false)[sl].Length, doc.XCoord(dl2))); } else { return; } Clock.Update(ref mouseDragTimer, makeDragDelayOK, OFF_SCREEN_DRAG_DELAY, false); } else { if (mouseDragTimer != Clock.NULL_ALARM) { Clock.RemoveAlarm(mouseDragTimer); } mouseDragTimer = Clock.NULL_ALARM; dragDelayOK = true; dl = getDocLocFromScreenXY(getScreenXYFromPixel(P)); } if (selectAnchor == null) { if (dragging) { CaretDocLoc = dl; setCaretLocation(true); } else if (!Selection.IsEmpty && Selection.Contains(dl)) { dragging = true; CaretDocLoc = dl; setCaretLocation(true); parent.Cursor = Cursors.Hand; dragDelayOK = true; } else { dragDelayOK = true; selectAnchor = dl; } } else { Selection = new DocumentRange(selectAnchor, dl); if (!Selection.IsEmpty) { CaretDocLoc = (Selection.Start == selectAnchor) ? Selection.End : Selection.Start; setCaretLocation(true); } } setCaretLocation(true); parent.Invalidate(); }
public void MakeVisible(DocumentRange DR) { makeVisible(DR.End); makeVisible(DR.Start); }
public DocumentRange EnsureValid(DocumentRange DR) { return(new DocumentRange(EnsureValid(DR.Start), EnsureValid(DR.End))); }
private void move(MoveType MoveType, bool Select) { DocumentLocation old = CaretDocLoc; if (!Select) { Selection = DocumentRange.Empty; } undoManager.ClosePackage(); switch (MoveType) { case MoveType.Left: CaretDocLoc = doc.GetPreviousVisibleLocation(CaretDocLoc); break; case MoveType.Right: CaretDocLoc = doc.GetNextVisibleLocation(CaretDocLoc); break; case MoveType.Up: if (CaretXY == invalidXY) { setCaretLocation(true); } CaretDocLoc = getDocLocFromScreenXY(new Point(PreferredX, CaretXY.Y - 1)); break; case MoveType.Down: if (CaretXY == invalidXY) { setCaretLocation(true); } CaretDocLoc = getDocLocFromScreenXY(new Point(PreferredX, CaretXY.Y + 1)); break; case MoveType.RightWord: CaretDocLoc = doc.GetNextWord(CaretDocLoc); break; case MoveType.LeftWord: CaretDocLoc = doc.GetPreviousWord(CaretDocLoc); break; case MoveType.Home: Line l = doc[CaretDocLoc.LineNumber]; int sln = l.SubLineNum(caretDocLoc.ColumnNumber); int x = l.GetSubLines(false)[sln].FirstNonWSChar(); if (CaretDocLoc.ColumnNumber == 0 && x > 0) { CaretDocLoc = new DocumentLocation(CaretDocLoc.LineNumber, x); } else if (x > 0 && x < CaretDocLoc.ColumnNumber - l.BeginningOfSubLine(sln)) { CaretDocLoc = new DocumentLocation(CaretDocLoc.LineNumber, x + l.BeginningOfSubLine(sln)); } else { CaretDocLoc = new DocumentLocation(CaretDocLoc.LineNumber, l.BeginningOfSubLine(sln)); } break; case MoveType.End: CaretDocLoc = new DocumentLocation(CaretDocLoc.LineNumber, doc[CaretDocLoc.LineNumber].EndOfSubLine(doc[CaretDocLoc.LineNumber].SubLineNum(CaretDocLoc.ColumnNumber))); break; case MoveType.PageUp: if (CaretXY.X < 0) { makeVisible(CaretDocLoc); } { Point p = CaretXY; p.X = PreferredX; if (!offset(-NumVisibleLines)) { p.Y = 0; } CaretDocLoc = getDocLocFromScreenXY(p); } break; case MoveType.PageDown: if (CaretXY.X < 0) { makeVisible(CaretDocLoc); } { Point p = CaretXY; p.X = PreferredX; if (offset(NumVisibleLines)) { CaretDocLoc = getDocLocFromScreenXY(p); } else { CaretDocLoc = new DocumentLocation(doc, doc.NumLines - 1, doc[doc.NumLines - 1].NumVisibleSubLines - 1, PreferredX); } } break; } if (Select) { if (selectionAnchor == null) { selectionAnchor = old; } Selection = new DocumentRange(selectionAnchor, CaretDocLoc); } setCaretLocation(true); parent.Invalidate(); }
static DocumentRange() { Empty = new DocumentRange(DocumentLocation.BOF, DocumentLocation.BOF); }