Repository navigation
Expand file tree
/
Copy pathsyngutterchanges.pas
More file actions
126 lines (103 loc) · 3.25 KB
/
Copy pathsyngutterchanges.pas
File metadata and controls
126 lines (103 loc) · 3.25 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
unit SynGutterChanges;
{$I synedit.inc}
interface
uses
Classes, FPCanvas, Graphics, LCLType, LCLIntf, SynGutterBase,
SynEditMiscProcs, LazSynEditText, SynEditTypes;
type
{ TSynGutterChanges }
TSynGutterChanges = class(TSynGutterPartBase)
private
function GetModifiedColor: TColor;
function GetSavedColor: TColor;
procedure SetModifiedColor(const AValue: TColor);
procedure SetSavedColor(const AValue: TColor);
protected
function PreferedWidth: Integer; override;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure Paint(Canvas: TCanvas; AClip: TRect; FirstLine, LastLine: integer); override;
published
property ModifiedColor: TColor read GetModifiedColor write SetModifiedColor default $00E9FC; // MarkupInfo.FrameColor
property SavedColor: TColor read GetSavedColor write SetSavedColor default clGreen; // MarkupInfo.Foreground
property MarkupInfo;
property MarkupInfoCurrentLine;
end;
implementation
{ TSynGutterChanges }
constructor TSynGutterChanges.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
MarkupInfo.Background := clNone;
MarkupInfo.Foreground := clGreen;
MarkupInfo.FrameColor := $00E9FC;
MarkupInfo.InternalSaveDefaultValues;
end;
destructor TSynGutterChanges.Destroy;
begin
inherited Destroy;
end;
function TSynGutterChanges.GetModifiedColor: TColor;
begin
Result := MarkupInfo.FrameColor;
end;
function TSynGutterChanges.GetSavedColor: TColor;
begin
Result := MarkupInfo.Foreground;
end;
procedure TSynGutterChanges.SetModifiedColor(const AValue: TColor);
begin
MarkupInfo.FrameColor := AValue;
end;
procedure TSynGutterChanges.SetSavedColor(const AValue: TColor);
begin
MarkupInfo.Foreground := AValue;
end;
function TSynGutterChanges.PreferedWidth: Integer;
begin
Result := 4;
end;
procedure TSynGutterChanges.Paint(Canvas: TCanvas; AClip: TRect; FirstLine, LastLine: integer);
var
i, c, iLine: integer;
LineHeight, t: Integer;
rcLine: TRect;
AliasMode: TAntialiasingMode;
begin
if not Visible then exit;
LineHeight := SynEdit.LineHeight;
c := SynEdit.Lines.Count;
t := ToIdx(GutterArea.TextArea.TopViewedLine);
PaintBackground(Canvas, AClip);
Canvas.Pen.Width := Width;
Canvas.Pen.EndCap:= pecFlat;
AliasMode := Canvas.AntialiasingMode;
Canvas.AntialiasingMode:=amOff;
rcLine := AClip;
rcLine.Bottom := AClip.Top;
rcLine.Left := rcLine.Left + Width div 2;
for i := t + FirstLine to t + LastLine do
begin
iLine := ViewedTextBuffer.DisplayView.ViewToTextIndex(i);
if (iLine < 0) or (iLine >= c) then break;
// next line rect
rcLine.Top := rcLine.Bottom;
Inc(rcLine.Bottom, LineHeight);
case SynEdit.GetLineState(iLine) of
slsNone: ;
slsSaved:
begin
Canvas.Pen.Color := MarkupInfo.Foreground;
Canvas.Line(rcLine.Left, rcLine.Top, rcLine.Left, rcLine.Bottom);
end;
slsUnsaved:
begin
Canvas.Pen.Color := MarkupInfo.FrameColor;
Canvas.Line(rcLine.Left, rcLine.Top, rcLine.Left, rcLine.Bottom);
end;
end;
end;
Canvas.AntialiasingMode := AliasMode;
end;
end.