mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-19 12:29:30 +02:00
SynEdit: Replace TextDrawer
This commit is contained in:
parent
b066b08122
commit
b42caeb972
@ -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>
|
||||
|
@ -9,7 +9,7 @@ interface
|
||||
|
||||
uses
|
||||
TextMateGrammar, xHyperLinksDecorator, xregexpr, xregexpr_unicodedata, LazEditMiscProcs,
|
||||
LazEditHighlighterUtils, LazEditTextAttributes;
|
||||
LazEditHighlighterUtils, LazEditTextGridPainter, LazEditTextAttributes;
|
||||
|
||||
implementation
|
||||
|
||||
|
@ -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)
|
||||
|
1088
components/lazedit/lazedittextgridpainter.pas
Normal file
1088
components/lazedit/lazedittextgridpainter.pas
Normal file
File diff suppressed because it is too large
Load Diff
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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"/>
|
||||
|
@ -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
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
@ -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];
|
||||
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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
@ -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;
|
||||
|
@ -12,7 +12,7 @@ uses
|
||||
// IdeIntf
|
||||
EditorSyntaxHighlighterDef,
|
||||
// SynEdit
|
||||
SynEditTypes, SynTextDrawer, SynHighlighterPas, LazEditTextAttributes,
|
||||
SynEditTypes, SynHighlighterPas, LazEditTextAttributes,
|
||||
// IdeConfig
|
||||
EnvironmentOpts,
|
||||
// IDE
|
||||
|
Loading…
Reference in New Issue
Block a user