implemented eoAlwaysVisibleCaret from Martin Smat

git-svn-id: trunk@8777 -
This commit is contained in:
mattias 2006-02-19 21:56:46 +00:00
parent 83c73c3f8e
commit 16accc1b02
4 changed files with 32 additions and 1 deletions

View File

@ -201,7 +201,8 @@ type
{$IFDEF SYN_LAZARUS}
TSynEditorOption2 = (
eoCaretSkipsSelection // caret skips selection on VK_LEFT/VK_RIGHT
eoCaretSkipsSelection, // caret skips selection on VK_LEFT/VK_RIGHT
eoAlwaysVisibleCaret // Move caret to be always visible when scrolling
);
TSynEditorOptions2 = set of TSynEditorOption2;
{$ENDIF}
@ -757,6 +758,7 @@ type
PhysicalPos: integer): integer;
function PhysicalToLogicalCol(const Line: string;
PhysicalPos, StartBytePos, StartPhysicalPos: integer): integer;
procedure MoveCaretToVisibleArea;
function NextTokenPos: TPoint; virtual;
{$ELSE}
function LogicalToPhysicalPos(p: TPoint): TPoint;
@ -5495,6 +5497,18 @@ begin
end;
end;
{$IFDEF SYN_LAZARUS}
procedure TCustomSynEdit.MoveCaretToVisibleArea;
begin
if caretX < fLeftChar then caretX := fLeftChar
else if caretX >= fLeftChar + fCharsInWindow then
caretX := fLeftChar + fCharsInWindow - 1;
if caretY < fTopLine then caretY := fTopLine
else if caretY >= fTopLine + fLinesInWindow then
caretY := fTopLine + fLinesInWindow - 1;
end;
{$ENDIF}
procedure TCustomSynEdit.UpdateCaret;
var
CX, CY: Integer;
@ -5512,6 +5526,10 @@ begin
Include(fStateFlags, sfCaretChanged)
else begin
Exclude(fStateFlags, sfCaretChanged);
{$IFDEF SYN_LAZARUS}
if eoAlwaysVisibleCaret in fOptions2 then
MoveCaretToVisibleArea;
{$ENDIF}
CX := CaretXPix + FCaretOffset.X;
CY := CaretYPix + FCaretOffset.Y;
if (CX >= fGutterWidth)

View File

@ -1282,6 +1282,8 @@ begin
case SynEditOpt2 of
eoCaretSkipsSelection:
SynEditOptName := 'CaretSkipsSelection';
eoAlwaysVisibleCaret:
SynEditOptName := 'AlwaysVisibleCaret';
else
SynEditOptName := '';
end;
@ -1448,6 +1450,8 @@ begin
case SynEditOpt2 of
eoCaretSkipsSelection:
SynEditOptName := 'CaretSkipsSelection';
eoAlwaysVisibleCaret:
SynEditOptName := 'AlwaysVisibleCaret';
else
SynEditOptName := '';
end;
@ -2560,6 +2564,7 @@ begin
SetOption(dlgTrimTrailingSpaces, eoTrimTrailingSpaces);
SetOption2(dlgCaretSkipsSelection, eoCaretSkipsSelection);
SetOption2(dlgAlwaysVisibleCaret, eoAlwaysVisibleCaret);
for a := Low(PreviewEdits) to High(PreviewEdits) do
if PreviewEdits[a] <> Nil then
@ -3509,6 +3514,7 @@ begin
Items.Add(dlgScrollPastEndFile);
Items.Add(dlgScrollPastEndLine);
Items.Add(dlgHomeKeyJumpsToNearestStart);
Items.Add(dlgAlwaysVisibleCaret);
// tabs
Items.Add(dlgSmartTabs);
Items.Add(dlgTabsToSpaces);
@ -3570,6 +3576,8 @@ begin
eoEnhanceHomeKey in EditorOpts.SynEditOptions;
Checked[Items.IndexOf(dlgCaretSkipsSelection)] :=
eoCaretSkipsSelection in EditorOpts.SynEditOptions2;
Checked[Items.IndexOf(dlgAlwaysVisibleCaret)] :=
eoAlwaysVisibleCaret in EditorOpts.SynEditOptions2;
end;
with BlockIndentComboBox do

View File

@ -851,6 +851,7 @@ resourcestring
lisLazarusPackage = 'Lazarus package';
lisLazarusProjectSource = 'Lazarus project source';
dlgAltSetClMode = 'Alt-Key sets column mode';
dlgAlwaysVisibleCaret = 'Always visible caret';
dlgAutoIdent = 'Auto indent';
dlgBracHighlight = 'Bracket highlighting';
dlgDragDropEd = 'Drag Drop editing';

View File

@ -8870,3 +8870,7 @@ msgstr ""
msgid "Save session information in"
msgstr ""
#: lazarusidestrconsts:dlgalwaysvisiblecaret
msgid "Always visible caret"
msgstr ""