return total;
}
+ private void SetSelectionVisible (bool value)
+ {
+ selection_visible = value;
+
+ // cursor and selection are enemies, we can't have both in the same room at the same time
+ if (owner.IsHandleCreated)
+ XplatUI.CaretVisible (owner.Handle, !selection_visible);
+ }
+
private void DecrementLines(int line_no) {
int current;
this.RecalculateDocument(owner.CreateGraphicsInternal());
PositionCaret(0, 0);
- selection_visible = false;
+ SetSelectionVisible (false);
+
selection_start.line = this.document;
selection_start.pos = 0;
selection_start.tag = selection_start.line.tags;
XplatUI.CreateCaret(owner.Handle, caret_width, caret.height);
XplatUI.SetCaretPos(owner.Handle, (int)caret.tag.line.widths[caret.pos] + caret.line.align_shift - viewport_x, caret.line.Y + caret.tag.shift - viewport_y + caret_shift);
- if (!selection_visible) {
- XplatUI.CaretVisible(owner.Handle, true);
- } else {
- XplatUI.CaretVisible(owner.Handle, false);
- }
+ DisplayCaret ();
}
}
if (owner.Focused) {
XplatUI.CreateCaret(owner.Handle, caret_width, caret.height);
XplatUI.SetCaretPos(owner.Handle, (int)caret.tag.line.widths[caret.pos] + caret.line.align_shift - viewport_x, caret.line.Y + caret.tag.shift - viewport_y + caret_shift);
- XplatUI.CaretVisible(owner.Handle, true);
+ DisplayCaret ();
}
if (CaretMoved != null) CaretMoved(this, EventArgs.Empty);
}
XplatUI.SetCaretPos(owner.Handle, (int)caret.tag.line.widths[caret.pos] + caret.line.align_shift - viewport_x, caret.line.Y + caret.tag.shift - viewport_y + caret_shift);
- XplatUI.CaretVisible(owner.Handle, true);
+
+ DisplayCaret ();
if (CaretMoved != null) CaretMoved(this, EventArgs.Empty);
}
return;
}
- if (owner.Focused) {
+ if (owner.Focused && !selection_visible) {
XplatUI.CaretVisible(owner.Handle, true);
}
}
pixel = (int)caret.line.widths[caret.pos];
PositionCaret(pixel, GetLine(caret.line.line_no - 1).Y);
- if (!owner.IsHandleCreated) {
- return;
- }
- XplatUI.CaretVisible(owner.Handle, true);
+
+ DisplayCaret ();
}
return;
}
pixel = (int)caret.line.widths[caret.pos];
PositionCaret(pixel, GetLine(caret.line.line_no + 1).Y);
- if (!owner.IsHandleCreated) {
- return;
- }
- XplatUI.CaretVisible(owner.Handle, true);
+
+ DisplayCaret ();
}
return;
}
owner.vscroll.Value = 0;
line = GetLine(1);
PositionCaret(line, 0);
- XplatUI.CaretVisible(owner.Handle, true);
+ DisplayCaret ();
owner.Invalidate();
return;
}
} else {
owner.vscroll.Value = new_y;
}
- XplatUI.CaretVisible(owner.Handle, true);
+
+ DisplayCaret ();
+
owner.Invalidate();
return;
}
owner.vscroll.Value = owner.vscroll.Maximum;
line = GetLine(lines);
PositionCaret(line, line.Text.Length);
- XplatUI.CaretVisible(owner.Handle, true);
+ DisplayCaret ();
owner.Invalidate();
return;
}
} else {
owner.vscroll.Value = new_y;
}
- XplatUI.CaretVisible(owner.Handle, true);
+ DisplayCaret ();
owner.Invalidate();
return;
}
case CaretDirection.CtrlPgUp: {
PositionCaret(0, viewport_y);
- if (!owner.IsHandleCreated) {
- return;
- }
- XplatUI.CaretVisible(owner.Handle, true);
+ DisplayCaret ();
return;
}
line = tag.line;
}
PositionCaret(line, line.Text.Length);
- if (!owner.IsHandleCreated) {
- return;
- }
- XplatUI.CaretVisible(owner.Handle, true);
+ DisplayCaret ();
return;
}
} else {
PositionCaret(line, pos + ins[0].Length);
}
- if (owner.IsHandleCreated) {
- XplatUI.CaretVisible(owner.Handle, true);
- }
+ DisplayCaret ();
}
}
}
}
- if (selection_start == selection_end) {
- selection_visible = false;
- } else {
- selection_visible = true;
- }
+ SetSelectionVisible (!(selection_start == selection_end));
}
internal void SetSelectionToCaret(bool start) {
}
}
- if (selection_start == selection_end) {
- selection_visible = false;
- } else {
- selection_visible = true;
- }
+ SetSelectionVisible (!(selection_start == selection_end));
}
internal void SetSelection(Line start, int start_pos, Line end, int end_pos) {
selection_anchor.pos = start_pos;
if (((start == end) && (start_pos == end_pos)) || start == null || end == null) {
- selection_visible = false;
+ SetSelectionVisible (false);
} else {
- selection_visible = true;
-
+ SetSelectionVisible (true);
}
}
selection_end_anchor = false;
if ((selection_end.line != selection_start.line) || (selection_end.pos != selection_start.pos)) {
- selection_visible = true;
+ SetSelectionVisible (true);
// This could be calculated better
Invalidate(selection_start.line, selection_start.pos, selection_end.line, selection_end.pos);
} else {
- selection_visible = false;
+ SetSelectionVisible (false);
}
}
}
if ((selection_end.line != selection_start.line) || (selection_end.pos != selection_start.pos)) {
- selection_visible = true;
+ SetSelectionVisible (true);
Invalidate(selection_start.line, selection_start.pos, selection_end.line, selection_end.pos);
} else {
- selection_visible = false;
+ SetSelectionVisible (false);
// ?? Do I need to invalidate here, tests seem to work without it, but I don't think they should :-s
}
}
selection_anchor.pos = start_pos;
selection_end_anchor = false;
- selection_visible = false;
+ SetSelectionVisible (false);
}
internal void InvalidateSelectionArea() {
selection_end.pos = selection_start.pos;
selection_end.tag = selection_start.tag;
- selection_visible = false;
+ SetSelectionVisible (false);
}
internal void CharIndexToLineTag(int index, out Line line_out, out LineTag tag_out, out int pos) {
XplatUI.DestroyCaret(document.owner.Handle);
XplatUI.CreateCaret(document.owner.Handle, 2, document.caret.height);
XplatUI.SetCaretPos(document.owner.Handle, (int)document.caret.tag.line.widths[document.caret.pos] + document.caret.line.align_shift - document.viewport_x, document.caret.line.Y + document.caret.tag.shift - document.viewport_y + Document.caret_shift);
- XplatUI.CaretVisible(document.owner.Handle, true);
+
+ document.DisplayCaret ();
}
// FIXME - enable call