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 127
|
unit SynGutterChanges;
{$I synedit.inc}
interface
uses
Classes, FPCanvas, Graphics, LCLType, LCLIntf, SynGutterBase;
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;
property SavedColor: TColor read GetSavedColor write SetSavedColor;
end;
implementation
uses
SynEdit;
{ TSynGutterChanges }
constructor TSynGutterChanges.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
MarkupInfo.Background := clNone;
MarkupInfo.Foreground := clGreen;
MarkupInfo.FrameColor := $00E9FC;
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: Integer;
rcLine: TRect;
AliasMode: TAntialiasingMode;
begin
if not Visible then exit;
LineHeight := TCustomSynEdit(SynEdit).LineHeight;
c := TCustomSynEdit(SynEdit).Lines.Count;
if MarkupInfo.Background <> clNone then
begin
Canvas.Brush.Color := MarkupInfo.Background;
Canvas.FillRect(AClip);
end;
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 := FirstLine to LastLine do
begin
iLine := FoldView.TextIndex[i];
if (iLine < 0) or (iLine >= c) then break;
// next line rect
rcLine.Top := rcLine.Bottom;
Inc(rcLine.Bottom, LineHeight);
case TCustomSynEdit(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.
|