SynEdit: Replace TextDrawer

This commit is contained in:
Martin 2025-04-04 16:55:33 +02:00
parent b066b08122
commit b42caeb972
18 changed files with 1225 additions and 1721 deletions

View File

@ -11,6 +11,9 @@
<UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/>
</SearchPaths>
<Other>
<CompilerMessages>
<IgnoredMessages idx6058="True" idx3123="True"/>
</CompilerMessages>
<CustomOptions Value="$(IDEBuildOptions)"/>
</Other>
</CompilerOptions>
@ -38,15 +41,19 @@ Additional licenses may be granted in each individual file. See the headers in e
</Item>
<Item>
<Filename Value="lazeditmiscprocs.pas"/>
<UnitName Value="lazeditmiscprocs"/>
<UnitName Value="LazEditMiscProcs"/>
</Item>
<Item>
<Filename Value="lazedithighlighterutils.pas"/>
<UnitName Value="lazedithighlighterutils"/>
<UnitName Value="LazEditHighlighterUtils"/>
</Item>
<Item>
<Filename Value="lazedittextgridpainter.pas"/>
<UnitName Value="LazEditTextGridPainter"/>
</Item>
<Item>
<Filename Value="lazedittextattributes.pas"/>
<UnitName Value="lazedittextattributes"/>
<UnitName Value="LazEditTextAttributes"/>
</Item>
</Files>
<RequiredPkgs>

View File

@ -9,7 +9,7 @@ interface
uses
TextMateGrammar, xHyperLinksDecorator, xregexpr, xregexpr_unicodedata, LazEditMiscProcs,
LazEditHighlighterUtils, LazEditTextAttributes;
LazEditHighlighterUtils, LazEditTextGridPainter, LazEditTextAttributes;
implementation

View File

@ -70,6 +70,23 @@ type
);
TLazTextAttrBorderSides = set of TLazTextAttrBorderSide;
const
LazTextFrameEdgeToSides: array [TLazTextAttrFrameEdges] of TLazTextAttrBorderSides =
( [], // sfeNone
[bsLeft, bsTop, bsRight, bsBottom], // sfeAround
[bsBottom], // sfeBottom
[bsLeft] // sfeLeft
);
LazTextFrameEdgePriorities: array [TLazTextAttrFrameEdges] of integer =
( 0, // sfeNone
1, // sfeAround
2, // sfeBottom
2 // sfeLeft
);
type
{ TLazCustomEditTextAttribute }
TLazCustomEditTextAttribute = class(TPersistent)

File diff suppressed because it is too large Load Diff

View File

@ -8,30 +8,25 @@ unit allsynedit;
interface
uses
SynBeautifier, SynCompletion, SynEdit, SynEditAutoComplete, SynEditExport,
SynEditFoldedView, SynEditHighlighter, SynEditHighlighterFoldBase,
SynEditHighlighterXMLBase, SynEditKeyCmds, LazSynEditMouseCmdsTypes,
SynHighlighterPo, SynEditLines, SynEditMarks, SynEditMarkup,
SynEditMarkupBracket, SynEditMarkupCtrlMouseLink, SynEditMarkupHighAll,
SynEditMarkupSelection, SynEditMarkupSpecialLine, SynEditMarkupWordGroup,
SynEditMiscClasses, SynEditMiscProcs, SynEditMouseCmds, SynEditPlugins,
SynEditPointClasses, SynEditRegexSearch, SynEditSearch, SynEditStrConst,
SynEditTextBase, SynEditTextBuffer, SynEditTextBidiChars,
SynEditTextTabExpander, SynEditTextTrimmer, SynEditTypes, SynExportHTML,
SynGutter, SynGutterBase, SynGutterChanges, SynGutterCodeFolding,
SynGutterLineNumber, SynGutterLineOverview, SynGutterMarks,
SynHighlighterAny, SynHighlighterCpp, SynHighlighterCss, SynHighlighterDiff,
SynHighlighterHashEntries, SynHighlighterHTML, SynHighlighterJava,
SynHighlighterJScript, SynHighlighterLFM, SynHighlighterMulti,
SynHighlighterPas, SynHighlighterPerl, SynHighlighterPHP,
SynHighlighterPosition, SynHighlighterPython, SynHighlighterSQL,
SynHighlighterTeX, synhighlighterunixshellscript, SynHighlighterVB,
SynBeautifier, SynCompletion, SynEdit, SynEditAutoComplete, SynEditExport, SynEditFoldedView,
SynEditHighlighter, SynEditHighlighterFoldBase, SynEditHighlighterXMLBase, SynEditKeyCmds,
LazSynEditMouseCmdsTypes, SynHighlighterPo, SynEditLines, SynEditMarks, SynEditMarkup,
SynEditMarkupBracket, SynEditMarkupCtrlMouseLink, SynEditMarkupHighAll, SynEditMarkupSelection,
SynEditMarkupSpecialLine, SynEditMarkupWordGroup, SynEditMiscClasses, SynEditMiscProcs,
SynEditMouseCmds, SynEditPlugins, SynEditPointClasses, SynEditRegexSearch, SynEditSearch,
SynEditStrConst, SynEditTextBase, SynEditTextBuffer, SynEditTextBidiChars,
SynEditTextTabExpander, SynEditTextTrimmer, SynEditTypes, SynExportHTML, SynGutter,
SynGutterBase, SynGutterChanges, SynGutterCodeFolding, SynGutterLineNumber,
SynGutterLineOverview, SynGutterMarks, SynHighlighterAny, SynHighlighterCpp, SynHighlighterCss,
SynHighlighterDiff, SynHighlighterHashEntries, SynHighlighterHTML, SynHighlighterJava,
SynHighlighterJScript, SynHighlighterLFM, SynHighlighterMulti, SynHighlighterPas,
SynHighlighterPerl, SynHighlighterPHP, SynHighlighterPosition, SynHighlighterPython,
SynHighlighterSQL, SynHighlighterTeX, synhighlighterunixshellscript, SynHighlighterVB,
SynHighlighterXML, SynMacroRecorder, SynMemo, SynPluginSyncroEdit,
SynPluginSyncronizedEditBase, SynPluginTemplateEdit, LazSynEditText,
LazSynTextArea, SynTextDrawer, SynEditMarkupGutterMark, SynHighlighterBat,
SynHighlighterIni, SynEditMarkupSpecialChar, SynEditTextDoubleWidthChars,
SynEditTextSystemCharWidth, SynEditMarkupIfDef, SynPluginMultiCaret,
synhighlighterpike, SynEditMarkupFoldColoring, SynEditViewedLineMap,
SynPluginSyncronizedEditBase, SynPluginTemplateEdit, LazSynEditText, LazSynTextArea,
SynEditMarkupGutterMark, SynHighlighterBat, SynHighlighterIni, SynEditMarkupSpecialChar,
SynEditTextDoubleWidthChars, SynEditTextSystemCharWidth, SynEditMarkupIfDef,
SynPluginMultiCaret, synhighlighterpike, SynEditMarkupFoldColoring, SynEditViewedLineMap,
SynEditWrappedView, SynBeautifierPascal, LazSynIMMBase, SynPopupMenu,
SynEditTextDynTabExpander, SynTextMateSyn, LazarusPackageIntf;

View File

@ -12,8 +12,9 @@ uses
// LazUtils
LazMethodList,
// SynEdit
SynEditTypes, SynEditMiscProcs, SynEditMiscClasses, LazSynEditText,
SynEditMarkup, SynEditHighlighter, SynTextDrawer, LazEditMiscProcs, LazEditTextAttributes;
SynEditTypes, SynEditMiscProcs, SynEditMiscClasses, LazSynEditText, SynEditMarkup,
SynEditHighlighter, LazEditMiscProcs, LazEditTextAttributes,
LazEditTextGridPainter;
type
@ -121,7 +122,7 @@ type
FTextHeight: integer;
FCanvas: TCanvas;
FTextDrawer: TheTextDrawer;
FTextDrawer: TLazEditTextGridPainter;
FEtoBuf: TEtoBuffer;
FTheLinesView: TSynEditStrings;
FHighlighter: TSynCustomHighlighter;
@ -158,7 +159,7 @@ type
FirstCol, LastCol: integer); virtual;
property Canvas: TCanvas read FCanvas;
public
constructor Create(AOwner: TSynEditBase; ATextDrawer: TheTextDrawer);
constructor Create(AOwner: TSynEditBase; ATextDrawer: TLazEditTextGridPainter);
destructor Destroy; override;
procedure Assign(Src: TLazSynSurface); override;
procedure InvalidateLines(FirstTextLine, LastTextLine: TLineIdx; AScreenLineOffset: Integer = 0); override;
@ -188,7 +189,7 @@ type
property TheLinesView: TSynEditStrings read FTheLinesView write FTheLinesView;
property Highlighter: TSynCustomHighlighter read FHighlighter write FHighlighter;
property MarkupManager: TSynEditMarkupManager read FMarkupManager write FMarkupManager;
property TextDrawer: TheTextDrawer read FTextDrawer;
property TextDrawer: TLazEditTextGridPainter read FTextDrawer;
public
property TextBounds: TRect read FTextBounds;
@ -1453,7 +1454,7 @@ begin
if Result.Y < 0 then Result.Y := 0;
end;
constructor TLazSynTextArea.Create(AOwner: TSynEditBase; ATextDrawer: TheTextDrawer);
constructor TLazSynTextArea.Create(AOwner: TSynEditBase; ATextDrawer: TLazEditTextGridPainter);
var
i: TLazSynBorderSide;
begin
@ -1661,7 +1662,6 @@ var
EraseLeft, DrawLeft: Integer; // LeftSide for EraseBackground, Text
CurLine: integer; // Screen-line index for the loop
CurTextIndex: Integer; // Current Index in text
dc: HDC;
CharWidths: TPhysicalCharWidths;
CWLen: Integer;
@ -1683,9 +1683,9 @@ var
NeedExpansion, NeedTransform: Boolean;
begin
Attr := ATokenInfo.Attr;
FTextDrawer.SetForeColor(Attr.Foreground);
FTextDrawer.SetBackColor(Attr.Background);
FTextDrawer.SetStyle (Attr.Style);
FTextDrawer.ForeColor := Attr.Foreground;
FTextDrawer.BackColor := Attr.Background;
FTextDrawer.Style := Attr.Style;
HasFrame := False;
for s := low(TLazSynBorderSide) to high(TLazSynBorderSide) do begin
HasFrame := HasFrame or (Attr.FrameSideColors[s] <> clNone);
@ -1723,8 +1723,7 @@ var
FTextDrawer.FillRect(tok);
end;
// draw edge (use rcLine / rcToken may be reduced)
LCLIntf.MoveToEx(dc, nRightEdge, rcLine.Top, nil);
LCLIntf.LineTo (dc, nRightEdge, rcLine.Bottom + 1);
FTextDrawer.DrawLine(nRightEdge, rcLine.Top, nRightEdge, rcLine.Bottom+1, ColorToRGB(RightEdgeColor));
end
else
if HasFrame then begin
@ -1800,7 +1799,7 @@ var
then begin
FEtoBuf := FTextDrawer.Eto;
FEtoBuf.SetMinLength(Len + ATokenInfo.ExpandedExtraBytes + 1);
c := FTextDrawer.GetCharWidth;
c := FTextDrawer.CharWidth;
end
else
c := 0;
@ -1936,9 +1935,9 @@ var
rcToken := rcLine;
// Delete the whole Line
fTextDrawer.BackColor := colEditorBG;
SetBkColor(dc, ColorToRGB(colEditorBG));
rcLine.Left := EraseLeft;
InternalFillRect(dc, rcLine);
//rcLine.Right := DrawLeft; // TODO?
FTextDrawer.FillRect(rcLine);
rcLine.Left := DrawLeft;
LineBufferRtlLogPos := -1;
@ -2008,9 +2007,6 @@ begin
Canvas.Pen.Color := RightEdgeColor; // used for code folding too
Canvas.Pen.Width := 1;
// Do everything else with API calls. This (maybe) realizes the new pen color.
dc := Canvas.Handle;
SetBkMode(dc, TRANSPARENT);
// Adjust the invalid area to not include the gutter (nor the 2 ixel offset to the guttter).
EraseLeft := AClip.Left;
@ -2032,30 +2028,27 @@ begin
DisplayView.InitHighlighterTokens(FHighlighter);
fTextDrawer.Style := []; //Font.Style;
fTextDrawer.BeginDrawing(dc);
fTextDrawer.BeginPaint;
try
PaintLines;
if (AClip.Top < AClip.Bottom) then begin
// Delete the remaining area
AClip.Left := EraseLeft;
FTextDrawer.BackColor := ColorToRGB(colEditorBG);
FTextDrawer.FillRect(AClip);
AClip.Left := DrawLeft;
// Draw the right edge if necessary.
if bDoRightEdge then
FTextDrawer.DrawLine(nRightEdge, AClip.Top, nRightEdge, AClip.Bottom+1, ColorToRGB(RightEdgeColor));
end;
finally
fTextDrawer.EndDrawing;
fTextDrawer.EndPaint;
DisplayView.FinishHighlighterTokens;
ReAllocMem(LineBuffer, 0);
end;
end;
if (AClip.Top < AClip.Bottom) then begin
// Delete the remaining area
SetBkColor(dc, ColorToRGB(colEditorBG));
AClip.Left := EraseLeft;
InternalFillRect(dc, AClip);
AClip.Left := DrawLeft;
// Draw the right edge if necessary.
if bDoRightEdge then begin
LCLIntf.MoveToEx(dc, nRightEdge, AClip.Top, nil);
LCLIntf.LineTo(dc, nRightEdge, AClip.Bottom + 1);
end;
end;
fMarkupManager.EndMarkup;
FTokenBreaker.Finish;
end;

View File

@ -330,10 +330,6 @@ If you wish to allow use of your version of these files only under the terms of
<Filename Value="lazsyntextarea.pp"/>
<UnitName Value="LazSynTextArea"/>
</Item>
<Item>
<Filename Value="syntextdrawer.pp"/>
<UnitName Value="SynTextDrawer"/>
</Item>
<Item>
<Filename Value="syneditmarkupguttermark.pp"/>
<UnitName Value="SynEditMarkupGutterMark"/>

View File

@ -141,10 +141,10 @@ uses
SynEditFoldedView,
// Gutter
SynGutterBase, SynGutter,
SynEditMiscClasses, SynEditHighlighter, LazSynTextArea, SynTextDrawer,
SynEditMiscClasses, SynEditHighlighter, LazSynTextArea,
SynEditTextBidiChars, SynGutterCodeFolding, SynGutterChanges, SynGutterLineNumber,
SynGutterMarks, SynGutterLineOverview,
LazEditMiscProcs, LazEditTextAttributes;
LazEditMiscProcs, LazEditTextAttributes, LazEditTextGridPainter;
const
// SynDefaultFont is determined in InitSynDefaultFont()
@ -568,7 +568,7 @@ type
fWantTabs: boolean;
FLeftGutter, FRightGutter: TSynGutter;
fTabWidth: integer;
fTextDrawer: TheTextDrawer;
fTextDrawer: TLazEditTextGridPainter;
FPaintLineColor, FPaintLineColor2: TSynSelectedColor;
fStateFlags: TSynStateFlags;
fStatusChanges: TSynStatusChanges;
@ -773,7 +773,7 @@ type
procedure StatusChanged(AChanges: TSynStatusChanges); override;
property PaintLockOwner: TSynEditBase read GetPaintLockOwner write SetPaintLockOwner;
property TextDrawer: TheTextDrawer read fTextDrawer;
property TextDrawer: TLazEditTextGridPainter read fTextDrawer;
procedure DoAutoAdjustLayout(const AMode: TLayoutAdjustmentPolicy;
const AXProportion, AYProportion: Double); override;
@ -920,7 +920,7 @@ type
function FindNextUnfoldedLine(iLine: integer; Down: boolean): Integer;
// Todo: Reduce the argument list of Creategutter
function CreateGutter(AOwner : TSynEditBase; ASide: TSynGutterSide;
ATextDrawer: TheTextDrawer): TSynGutter; virtual;
ATextDrawer: TLazEditTextGridPainter): TSynGutter; virtual;
public
constructor Create(AOwner: TComponent); override;
procedure BeforeDestruction; override;
@ -2335,7 +2335,8 @@ begin
RecreateMarkList;
fTextDrawer := TheTextDrawer.Create([fsBold], fFontDummy);
fFontDummy.Style := [fsBold];
fTextDrawer := TLazEditTextGridPainter.Create(Canvas, fFontDummy);
{$IFDEF WithSynExperimentalCharWidth}
FSysCharWidthLinesView.TextDrawer := fTextDrawer;
{$ENDIF} // WithSynExperimentalCharWidth
@ -4345,7 +4346,7 @@ begin
end;
function TCustomSynEdit.CreateGutter(AOwner : TSynEditBase; ASide: TSynGutterSide;
ATextDrawer: TheTextDrawer): TSynGutter;
ATextDrawer: TLazEditTextGridPainter): TSynGutter;
begin
Result := TSynGutter.Create(AOwner, ASide, ATextDrawer);
end;
@ -8959,10 +8960,10 @@ begin
//debugln(['TCustomSynEdit.RecalcCharExtent ',fFontDummy.Name,' ',fFontDummy.Size]);
//debugln('TCustomSynEdit.RecalcCharExtent CharHeight=',dbgs(CharHeight));
fTextDrawer.BaseFont := FFontDummy;
fTextDrawer.SetBaseFont(FFontDummy);
if Assigned(fHighlighter) then
for i := 0 to Pred(fHighlighter.AttrCount) do
fTextDrawer.BaseStyle := fHighlighter.Attribute[i].Style;
fTextDrawer.AddBaseStyle(fHighlighter.Attribute[i].Style);
fTextDrawer.CharExtra := ExtraCharSpacing;
StatusChanged([scFontOrStyleChanged]); // Font or Spacing

View File

@ -311,7 +311,7 @@ end;
procedure TIDESynMarkupFoldColorDebugGutter.Paint(Canvas: TCanvas;
AClip: TRect; FirstLine, LastLine: integer);
var
TextDrawer: TheTextDrawer;
TextDrawer: TLazEditTextGridPainter;
dc: HDC;
rcLine: TRect;
LineHeight, c, i, j: Integer;

View File

@ -1059,7 +1059,7 @@ begin
bsRight: if not IsMatching(FCurrentEndX, EndX) then exit(clNone);
end;
if (Side in SynFrameEdgeToSides[FrameEdges])
if (Side in LazTextFrameEdgeToSides[FrameEdges])
then Result := FrameColor
else Result := clNone;
end;
@ -1086,7 +1086,7 @@ begin
bsRight: if not IsMatching(FCurrentEndX, EndX) then exit(0);
end;
if (Side in SynFrameEdgeToSides[FrameEdges])
if (Side in LazTextFrameEdgeToSides[FrameEdges])
then Result := FramePriority
else Result := 0;
end;
@ -1096,7 +1096,7 @@ begin
if FFrameSidesInitialized
then Result := FFrameSideStyles[Side]
else
if Side in SynFrameEdgeToSides[FrameEdges]
if Side in LazTextFrameEdgeToSides[FrameEdges]
then Result := FrameStyle
else Result := slsSolid;
end;
@ -1436,14 +1436,14 @@ procedure TSynSelectedColorMergeResult.MergeFrames(Other: TLazCustomEditTextAttr
// if (FrameSideColors[ASide] <> clNone) and
// ( (ASrc.FramePriority < FrameSidePriority[ASide]) or
// ( (ASrc.FramePriority = FrameSidePriority[ASide]) and
// (SynFrameEdgePriorities[ASrc.FrameEdges] < SynFrameEdgePriorities[FrameSideOrigin[ASide]]) )
// (LazTextFrameEdgePriorities[ASrc.FrameEdges] < LazTextFrameEdgePriorities[FrameSideOrigin[ASide]]) )
// )
//
//*)
// if (FrameSideColors[ASide] <> clNone) and
// ( (ASrc.FramePriority < FrameSidePriority[ASide]) or
// ( (ASrc.FramePriority = FrameSidePriority[ASide]) and
// (SynFrameEdgePriorities[ASrc.FrameEdges] < SynFrameEdgePriorities[FrameSideOrigin[ASide]]) )
// (LazTextFrameEdgePriorities[ASrc.FrameEdges] < LazTextFrameEdgePriorities[FrameSideOrigin[ASide]]) )
// )
// then
// exit;
@ -1463,7 +1463,7 @@ procedure TSynSelectedColorMergeResult.MergeFrames(Other: TLazCustomEditTextAttr
if (FMergeInfos[AInfoSide].BaseColor <> clNone) and
( (ASrc.FramePriority < FMergeInfos[AInfoSide].BasePriority) or
( (ASrc.FramePriority = FMergeInfos[AInfoSide].BasePriority) and
(SynFrameEdgePriorities[ASrc.FrameEdges] < SynFrameEdgePriorities[FrameSideOrigin[ASide]]) )
(LazTextFrameEdgePriorities[ASrc.FrameEdges] < LazTextFrameEdgePriorities[FrameSideOrigin[ASide]]) )
)
then
exit;
@ -1473,7 +1473,7 @@ procedure TSynSelectedColorMergeResult.MergeFrames(Other: TLazCustomEditTextAttr
FFrameSidePriority[ASide] := ASrc.FramePriority; // used for style (style may be taken, from an alpha frame
if ( (ASrc.FramePriority > FFrameSidePriority[ASide]) or
( (ASrc.FramePriority = FFrameSidePriority[ASide]) and
(SynFrameEdgePriorities[ASrc.FrameEdges] >= SynFrameEdgePriorities[FrameSideOrigin[ASide]]) )
(LazTextFrameEdgePriorities[ASrc.FrameEdges] >= LazTextFrameEdgePriorities[FrameSideOrigin[ASide]]) )
)
then
FFrameSideStyles[ASide] := ASrc.FrameStyle;

View File

@ -42,8 +42,8 @@ uses
Types,
{$ENDIF}
{$endif}
LazSynEditText, SynTextDrawer, LazUTF8, Controls, Graphics,
LazLoggerBase;
LazSynEditText, LazUTF8, Controls, Graphics,
LazLoggerBase, LazEditTextGridPainter;
type
@ -53,7 +53,7 @@ type
private
FCharWidth: Integer;
FHandleOwner: TCanvas;
fTextDrawer: TheTextDrawer;
fTextDrawer: TLazEditTextGridPainter;
protected
{$IFDEF WindowsDesktop} // Do nothing on other OS/ parent handles default
procedure DoGetPhysicalCharWidths(Line: PChar; LineLen, Index: Integer; PWidths: PPhysicalCharWidth); override;
@ -62,7 +62,7 @@ type
constructor Create(AHandleOwner: TCanvas);
property HandleOwner: TCanvas read FHandleOwner;
property CharWidth: Integer read FCharWidth write FCharWidth;
property TextDrawer: TheTextDrawer read fTextDrawer write fTextDrawer;
property TextDrawer: TLazEditTextGridPainter read fTextDrawer write fTextDrawer;
end;
implementation

View File

@ -244,20 +244,6 @@ type
FinishComboOnly: Boolean; var ComboKeyStrokes: TSynEditKeyStrokes) of object;
const
SynFrameEdgeToSides: array [TSynFrameEdges] of TLazSynBorderSides =
( [], // sfeNone
[bsLeft, bsTop, bsRight, bsBottom], // sfeAround
[bsBottom], // sfeBottom
[bsLeft] // sfeLeft
);
SynFrameEdgePriorities: array [TSynFrameEdges] of integer =
( 0, // sfeNone
1, // sfeAround
2, // sfeBottom
2 // sfeLeft
);
scTextCleared = [scCaretX, scCaretY, scLeftChar, scTopLine, scModified, scSelection];

View File

@ -5,10 +5,10 @@ unit SynGutter;
interface
uses
SysUtils, Classes, Controls, Graphics, LCLType, LCLIntf, Menus,
SynEditMarks, SynEditTypes, SynEditMiscClasses, SynEditMiscProcs, LazSynTextArea,
SynTextDrawer, SynGutterBase, SynGutterLineNumber, SynGutterCodeFolding,
SynGutterMarks, SynGutterChanges, SynEditMouseCmds, SynGutterLineOverview;
SysUtils, Classes, Controls, Graphics, LCLType, LCLIntf, Menus, SynEditMarks, SynEditTypes,
SynEditMiscClasses, SynEditMiscProcs, LazSynTextArea, SynGutterBase,
SynGutterLineNumber, SynGutterCodeFolding, SynGutterMarks, SynGutterChanges, SynEditMouseCmds,
SynGutterLineOverview, LazEditTextGridPainter, LazEditTextAttributes;
type
@ -32,7 +32,7 @@ type
property GutterArea;
public
constructor Create(AOwner : TSynEditBase; ASide: TSynGutterSide;
ATextDrawer: TheTextDrawer);
ATextDrawer: TLazEditTextGridPainter);
destructor Destroy; override;
procedure Paint(Canvas: TCanvas; Surface:TLazSynGutterArea; AClip: TRect; FirstLine, LastLine: integer);
function HasCustomPopupMenu(out PopMenu: TPopupMenu): Boolean;
@ -179,7 +179,7 @@ end;
{ TSynGutter }
constructor TSynGutter.Create(AOwner: TSynEditBase; ASide: TSynGutterSide;
ATextDrawer: TheTextDrawer);
ATextDrawer: TLazEditTextGridPainter);
begin
inherited;
if not(csLoading in AOwner.ComponentState) then
@ -276,10 +276,10 @@ begin
rcClip := AClip;
t := Surface.TextBounds.Top;
// Clear all
TextDrawer.BeginDrawing(dc);
TextDrawer.SetBackColor(Color);
TextDrawer.SetForeColor(SynEdit.Font.Color);
TextDrawer.SetFrameColor(clNone);
TextDrawer.BeginCustomCanvas(Canvas);
TextDrawer.BackColor := Color;
TextDrawer.ForeColor := SynEdit.Font.Color;
TextDrawer.SetFrame(clNone, slsSolid);
if aCaretRow >= 0 then
rcClip.Bottom := t + aCaretRow * SynEdit.LineHeight;
with rcClip do
@ -292,11 +292,11 @@ begin
rcClip.Bottom := rcClip.Top;
rcClip.top := rcClip.Top - SynEdit.LineHeight;
TextDrawer.SetBackColor(MarkupInfoCurLineMerged.Background);
TextDrawer.BackColor := MarkupInfoCurLineMerged.Background;
with rcClip do
TextDrawer.ExtTextOut(Left, Top, ETO_OPAQUE, rcClip, nil, 0);
end;
TextDrawer.EndDrawing;
TextDrawer.EndCustomCanvas;
AClip.Left := Surface.Left + LeftOffset;
AClip.Top := t + FirstLine * SynEdit.LineHeight;

View File

@ -11,8 +11,8 @@ uses
// LazUtils
LazMethodList,
// SynEdit
SynEditMarks, SynEditMiscClasses, SynTextDrawer, SynEditMouseCmds,
LazSynTextArea, SynEditHighlighter;
SynEditMarks, SynEditMiscClasses, SynEditMouseCmds,
LazSynTextArea, SynEditHighlighter, LazEditTextGridPainter;
type
@ -33,7 +33,7 @@ type
FGutterPartList: TSynGutterPartListBase;
FSide: TSynGutterSide;
FSynEdit: TSynEditBase;
FTextDrawer: TheTextDrawer;
FTextDrawer: TLazEditTextGridPainter;
FColor: TSynSelectedColor;
FCurrentLineColor: TSynHighlighterAttributesModifier;
FMarkupInfoCurLineMerged: TSynSelectedColorMergeResult;
@ -85,7 +85,7 @@ type
property MarkupInfoCurLineMerged: TSynSelectedColorMergeResult read FMarkupInfoCurLineMerged;
property CaretRow: integer read FCaretRow; // vaild only during paint
public
constructor Create(AOwner : TSynEditBase; ASide: TSynGutterSide; ATextDrawer: TheTextDrawer);
constructor Create(AOwner : TSynEditBase; ASide: TSynGutterSide; ATextDrawer: TLazEditTextGridPainter);
destructor Destroy; override;
procedure Assign(Source: TPersistent); override;
procedure RecalcBounds;
@ -116,7 +116,7 @@ type
public
// properties available for the GutterPartClasses
property SynEdit: TSynEditBase read FSynEdit;
property TextDrawer: TheTextDrawer read FTextDrawer;
property TextDrawer: TLazEditTextGridPainter read FTextDrawer;
property Color: TColor read GetColor write SetColor default clBtnFace;
property CurrentLineColor: TSynHighlighterAttributesModifier read FCurrentLineColor write SetCurrentLineColor;
property MouseActions: TSynEditMouseActions
@ -260,7 +260,7 @@ implementation
{ TSynGutterBase }
constructor TSynGutterBase.Create(AOwner: TSynEditBase; ASide: TSynGutterSide;
ATextDrawer: TheTextDrawer);
ATextDrawer: TLazEditTextGridPainter);
begin
FOnResizeHandler := TMethodList.Create;
FOnChangeHandler := TMethodList.Create;

View File

@ -6,8 +6,8 @@ interface
uses
Classes, SysUtils, Graphics, LCLType, LCLIntf, SynGutterBase,
SynEditMiscProcs, SynTextDrawer, SynEditMouseCmds,
LazSynEditText, SynEditTypes;
SynEditMiscProcs, SynEditMouseCmds,
LazSynEditText, SynEditTypes, LazEditTextGridPainter, LazEditTextAttributes;
type
@ -28,7 +28,7 @@ type
TSynGutterLineNumber = class(TSynGutterPartBase)
private
FTextDrawer: TheTextDrawer;
FTextDrawer: TLazEditTextGridPainter;
FDigitCount: integer;
FAutoSizeDigitCount: integer;
@ -235,7 +235,6 @@ var
i, c, iLine: integer;
rcLine: TRect;
s: string;
dc: HDC;
LineInfo: TSynEditGutterLineInfo;
LineHeight, EveryNLine: Integer;
t: TLinePos;
@ -249,12 +248,11 @@ begin
// Changed to use fTextDrawer.BeginDrawing and fTextDrawer.EndDrawing only
// when absolutely necessary. Note: Never change brush / pen / font of the
// canvas inside of this block (only through methods of fTextDrawer)!
dc := Canvas.Handle;
FTextDrawer.BeginDrawing(dc);
FTextDrawer.BeginCustomCanvas(Canvas);
try
FTextDrawer.SetBackColor(MarkupInfoInternal.Background);
fTextDrawer.SetForeColor(MarkupInfoInternal.Foreground);
fTextDrawer.SetFrameColor(MarkupInfoInternal.FrameColor);
FTextDrawer.BackColor := MarkupInfoInternal.Background;
fTextDrawer.ForeColor := MarkupInfoInternal.Foreground;
fTextDrawer.SetFrame(MarkupInfoInternal.FrameColor, slsSolid);
fTextDrawer.Style := MarkupInfoInternal.Style;
// prepare the rect initially
rcLine := AClip;
@ -285,16 +283,16 @@ begin
s := '';
// erase the background and draw the line number string in one go
if i - t = CaretRow then begin
FTextDrawer.SetBackColor(MarkupInfoCurLineMerged.Background);
fTextDrawer.SetForeColor(MarkupInfoCurLineMerged.Foreground);
fTextDrawer.SetFrameColor(MarkupInfoCurLineMerged.FrameColor);
FTextDrawer.BackColor := MarkupInfoCurLineMerged.Background;
fTextDrawer.ForeColor := MarkupInfoCurLineMerged.Foreground;
fTextDrawer.SetFrame(MarkupInfoCurLineMerged.FrameColor, slsSolid);
fTextDrawer.Style := MarkupInfoCurLineMerged.Style;
end
else
if i - t = CaretRow+1 then begin
FTextDrawer.SetBackColor(MarkupInfoInternal.Background);
fTextDrawer.SetForeColor(MarkupInfoInternal.Foreground);
fTextDrawer.SetFrameColor(MarkupInfoInternal.FrameColor);
FTextDrawer.BackColor := MarkupInfoInternal.Background;
fTextDrawer.ForeColor := MarkupInfoInternal.Foreground;
fTextDrawer.SetFrame(MarkupInfoInternal.FrameColor, slsSolid);
fTextDrawer.Style := MarkupInfoInternal.Style;
end;
fTextDrawer.ExtTextOut(rcLine.Left, rcLine.Top, ETO_OPAQUE or ETO_CLIPPED, rcLine,
@ -304,9 +302,9 @@ begin
// now erase the remaining area if any
if AClip.Bottom > rcLine.Bottom then
begin
FTextDrawer.SetBackColor(MarkupInfoInternal.Background);
fTextDrawer.SetForeColor(MarkupInfoInternal.Foreground);
fTextDrawer.SetFrameColor(MarkupInfoInternal.FrameColor);
FTextDrawer.BackColor := MarkupInfoInternal.Background;
fTextDrawer.ForeColor := MarkupInfoInternal.Foreground;
fTextDrawer.SetFrame(MarkupInfoInternal.FrameColor, slsSolid);
fTextDrawer.Style := MarkupInfoInternal.Style;
rcLine.Top := rcLine.Bottom;
rcLine.Bottom := AClip.Bottom;
@ -314,7 +312,7 @@ begin
fTextDrawer.ExtTextOut(Left, Top, ETO_OPAQUE, rcLine, nil, 0);
end;
finally
fTextDrawer.EndDrawing;
fTextDrawer.EndCustomCanvas;
end;
end;

File diff suppressed because it is too large Load Diff

View File

@ -56,7 +56,7 @@ uses
SynEditTypes, SynGutterLineNumber, SynGutterCodeFolding, SynGutterMarks,
SynGutterChanges, SynGutterLineOverview, SynEditMarkup,
SynEditMarkupGutterMark, SynEditMarkupSpecialLine, SynEditTextBuffer,
SynEditFoldedView, SynTextDrawer, SynEditTextBase, LazSynEditText,
SynEditFoldedView, SynEditTextBase, LazSynEditText,
SynPluginTemplateEdit, SynPluginSyncroEdit, LazSynTextArea,
SynEditHighlighter, SynEditHighlighterFoldBase, SynHighlighterPas,
SynEditMarkupHighAll, SynEditKeyCmds, SynEditMarkupIfDef, SynEditMiscProcs,
@ -64,7 +64,7 @@ uses
SynEditMarkupFoldColoring, SynEditTextTabExpander, SynEditMouseCmds, SynEditWrappedView,
LazEditTextAttributes,
// IDE
etSrcEditMarks, LazarusIDEStrConsts, SourceMarks;
etSrcEditMarks, LazarusIDEStrConsts, SourceMarks, LazEditTextGridPainter;
type
@ -315,7 +315,7 @@ type
protected
procedure DoOnStatusChange(Changes: TSynStatusChanges); override;
function CreateGutter(AOwner : TSynEditBase; ASide: TSynGutterSide;
ATextDrawer: TheTextDrawer): TSynGutter; override;
ATextDrawer: TLazEditTextGridPainter): TSynGutter; override;
procedure SetHighlighter(const Value: TSynCustomHighlighter); override;
procedure AddLineWrapView;
procedure RemoveLineWrapView;
@ -1128,7 +1128,7 @@ end;
procedure TIDESynGutterDebugHL.PaintFoldLvl(Canvas: TCanvas; AClip: TRect; FirstLine,
LastLine: integer);
var
TextDrawer: TheTextDrawer;
TextDrawer: TLazEditTextGridPainter;
c, i, iLine, LineHeight: Integer;
rcLine: TRect;
dc: HDC;
@ -1188,7 +1188,7 @@ end;
procedure TIDESynGutterDebugHL.PaintCharWidths(Canvas: TCanvas; AClip: TRect; FirstLine,
LastLine: integer);
var
TextDrawer: TheTextDrawer;
TextDrawer: TLazEditTextGridPainter;
c, i, iLine, LineHeight: Integer;
rcLine: TRect;
dc: HDC;
@ -1986,7 +1986,7 @@ begin
end;
function TIDESynEditor.CreateGutter(AOwner: TSynEditBase; ASide: TSynGutterSide;
ATextDrawer: TheTextDrawer): TSynGutter;
ATextDrawer: TLazEditTextGridPainter): TSynGutter;
begin
Result := TIDESynGutter.Create(AOwner, ASide, ATextDrawer);
end;

View File

@ -12,7 +12,7 @@ uses
// IdeIntf
EditorSyntaxHighlighterDef,
// SynEdit
SynEditTypes, SynTextDrawer, SynHighlighterPas, LazEditTextAttributes,
SynEditTypes, SynHighlighterPas, LazEditTextAttributes,
// IdeConfig
EnvironmentOpts,
// IDE