mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-09-02 21:40:34 +02:00
IDE: sourceeditor: change gutter glyph size (and left gutter width) according to editor line height
git-svn-id: trunk@58332 -
This commit is contained in:
parent
ff4b08c050
commit
5ce635e1b2
@ -24,7 +24,7 @@ type
|
|||||||
procedure Init; override;
|
procedure Init; override;
|
||||||
function PreferedWidth: Integer; override;
|
function PreferedWidth: Integer; override;
|
||||||
function GetImgListRes(const ACanvas: TCanvas;
|
function GetImgListRes(const ACanvas: TCanvas;
|
||||||
const AImages: TCustomImageList): TScaledImageListResolution;
|
const AImages: TCustomImageList): TScaledImageListResolution; virtual;
|
||||||
// PaintMarks: True, if it has any Mark, that is *not* a bookmark
|
// PaintMarks: True, if it has any Mark, that is *not* a bookmark
|
||||||
function PaintMarks(aScreenLine: Integer; Canvas : TCanvas; AClip : TRect;
|
function PaintMarks(aScreenLine: Integer; Canvas : TCanvas; AClip : TRect;
|
||||||
var aFirstCustomColumnIdx: integer): Boolean;
|
var aFirstCustomColumnIdx: integer): Boolean;
|
||||||
|
@ -275,6 +275,7 @@ type
|
|||||||
function CreateGutter(AOwner : TSynEditBase; ASide: TSynGutterSide;
|
function CreateGutter(AOwner : TSynEditBase; ASide: TSynGutterSide;
|
||||||
ATextDrawer: TheTextDrawer): TSynGutter; override;
|
ATextDrawer: TheTextDrawer): TSynGutter; override;
|
||||||
procedure SetHighlighter(const Value: TSynCustomHighlighter); override;
|
procedure SetHighlighter(const Value: TSynCustomHighlighter); override;
|
||||||
|
procedure FontChanged(Sender: TObject); override;
|
||||||
public
|
public
|
||||||
constructor Create(AOwner: TComponent); override;
|
constructor Create(AOwner: TComponent); override;
|
||||||
destructor Destroy; override;
|
destructor Destroy; override;
|
||||||
@ -436,6 +437,9 @@ type
|
|||||||
procedure CheckTextBuffer; // Todo: Add a notification, when TextBuffer Changes
|
procedure CheckTextBuffer; // Todo: Add a notification, when TextBuffer Changes
|
||||||
Procedure PaintLine(aScreenLine: Integer; Canvas : TCanvas; AClip : TRect); override;
|
Procedure PaintLine(aScreenLine: Integer; Canvas : TCanvas; AClip : TRect); override;
|
||||||
function PreferedWidth: Integer; override;
|
function PreferedWidth: Integer; override;
|
||||||
|
|
||||||
|
function GetImgListRes(const ACanvas: TCanvas;
|
||||||
|
const AImages: TCustomImageList): TScaledImageListResolution; override;
|
||||||
public
|
public
|
||||||
destructor Destroy; override;
|
destructor Destroy; override;
|
||||||
procedure BeginSetDebugMarks;
|
procedure BeginSetDebugMarks;
|
||||||
@ -1538,6 +1542,13 @@ begin
|
|||||||
{$pop}
|
{$pop}
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TIDESynEditor.FontChanged(Sender: TObject);
|
||||||
|
begin
|
||||||
|
FLeftGutterArea.Gutter.DoAutoSize;
|
||||||
|
FRightGutterArea.Gutter.DoAutoSize;
|
||||||
|
inherited FontChanged(Sender);
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TIDESynEditor.GetTopInfoMarkupForLine(Sender: TObject; Line: integer;
|
procedure TIDESynEditor.GetTopInfoMarkupForLine(Sender: TObject; Line: integer;
|
||||||
var Special: boolean; aMarkup: TSynSelectedColor);
|
var Special: boolean; aMarkup: TSynSelectedColor);
|
||||||
begin
|
begin
|
||||||
@ -2165,47 +2176,52 @@ end;
|
|||||||
|
|
||||||
procedure TIDESynGutter.CreateDefaultGutterParts;
|
procedure TIDESynGutter.CreateDefaultGutterParts;
|
||||||
begin
|
begin
|
||||||
if Side = gsLeft then begin
|
IncChangeLock;
|
||||||
with TIDESynGutterMarks.Create(Parts) do
|
try
|
||||||
Name := 'SynGutterMarks1';
|
if Side = gsLeft then begin
|
||||||
with TSynGutterLineNumber.Create(Parts) do
|
with TIDESynGutterMarks.Create(Parts) do
|
||||||
Name := 'SynGutterLineNumber1';
|
Name := 'SynGutterMarks1';
|
||||||
with TSynGutterChanges.Create(Parts) do
|
with TSynGutterLineNumber.Create(Parts) do
|
||||||
Name := 'SynGutterChanges1';
|
Name := 'SynGutterLineNumber1';
|
||||||
with TSynGutterSeparator.Create(Parts) do
|
with TSynGutterChanges.Create(Parts) do
|
||||||
Name := 'SynGutterSeparator1';
|
Name := 'SynGutterChanges1';
|
||||||
with TIDESynGutterCodeFolding.Create(Parts) do
|
with TSynGutterSeparator.Create(Parts) do
|
||||||
Name := 'SynGutterCodeFolding1';
|
Name := 'SynGutterSeparator1';
|
||||||
end
|
with TIDESynGutterCodeFolding.Create(Parts) do
|
||||||
else begin
|
Name := 'SynGutterCodeFolding1';
|
||||||
{$IFDEF WithSynDebugGutter}
|
end
|
||||||
with TSynGutterSeparator.Create(Parts) do
|
else begin
|
||||||
Name := 'SynGutterSeparatorR1';
|
{$IFDEF WithSynDebugGutter}
|
||||||
DebugGutter := TIDESynGutterDebugHL.Create(Parts);
|
with TSynGutterSeparator.Create(Parts) do
|
||||||
with DebugGutter do
|
Name := 'SynGutterSeparatorR1';
|
||||||
Name := 'TIDESynGutterDebugHL';
|
DebugGutter := TIDESynGutterDebugHL.Create(Parts);
|
||||||
{$ENDIF}
|
with DebugGutter do
|
||||||
with TSynGutterSeparator.Create(Parts) do
|
Name := 'TIDESynGutterDebugHL';
|
||||||
Name := 'SynGutterSeparatorR2';
|
{$ENDIF}
|
||||||
with TSynGutterLineOverview.Create(Parts) do begin
|
with TSynGutterSeparator.Create(Parts) do
|
||||||
Name := 'SynGutterLineOverview1';
|
Name := 'SynGutterSeparatorR2';
|
||||||
with TIDESynGutterLOvProviderIDEMarks.Create(Providers) do
|
with TSynGutterLineOverview.Create(Parts) do begin
|
||||||
Priority := 20;
|
Name := 'SynGutterLineOverview1';
|
||||||
with TSynGutterLOvProviderModifiedLines.Create(Providers) do
|
with TIDESynGutterLOvProviderIDEMarks.Create(Providers) do
|
||||||
Priority := 9;
|
Priority := 20;
|
||||||
with TSynGutterLOvProviderCurrentPage.Create(Providers) do begin
|
with TSynGutterLOvProviderModifiedLines.Create(Providers) do
|
||||||
Priority := 1;
|
Priority := 9;
|
||||||
FoldedTextBuffer := TSynEditFoldedView(TIDESynEditor(Self.SynEdit).FoldedTextBuffer);
|
with TSynGutterLOvProviderCurrentPage.Create(Providers) do begin
|
||||||
|
Priority := 1;
|
||||||
|
FoldedTextBuffer := TSynEditFoldedView(TIDESynEditor(Self.SynEdit).FoldedTextBuffer);
|
||||||
|
end;
|
||||||
|
with TIDESynGutterLOvProviderPascal.Create(Providers) do
|
||||||
|
Priority := 0;
|
||||||
|
end;
|
||||||
|
with TSynGutterSeparator.Create(Parts) do begin
|
||||||
|
Name := 'SynGutterSeparatorR3';
|
||||||
|
AutoSize := False;
|
||||||
|
Width := 1;
|
||||||
|
LineWidth := 0;
|
||||||
end;
|
end;
|
||||||
with TIDESynGutterLOvProviderPascal.Create(Providers) do
|
|
||||||
Priority := 0;
|
|
||||||
end;
|
|
||||||
with TSynGutterSeparator.Create(Parts) do begin
|
|
||||||
Name := 'SynGutterSeparatorR3';
|
|
||||||
AutoSize := False;
|
|
||||||
Width := 1;
|
|
||||||
LineWidth := 0;
|
|
||||||
end;
|
end;
|
||||||
|
finally
|
||||||
|
DecChangeLock;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -2265,10 +2281,14 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
function TIDESynGutterMarks.PreferedWidth: Integer;
|
function TIDESynGutterMarks.PreferedWidth: Integer;
|
||||||
|
var
|
||||||
|
img: TScaledImageListResolution;
|
||||||
begin
|
begin
|
||||||
if Assigned(SourceEditorMarks) and Assigned(SourceEditorMarks.ImgList) then
|
if Assigned(SourceEditorMarks) and Assigned(SourceEditorMarks.ImgList) then
|
||||||
Result := SourceEditorMarks.ImgList.Width * 2 + FBookMarkOpt.LeftMargin
|
begin
|
||||||
else
|
img := GetImgListRes(nil, SourceEditorMarks.ImgList);
|
||||||
|
Result := SynEdit.ScaleFontTo96(img.Width * 2) + FBookMarkOpt.LeftMargin; // PreferedWidth needs width at 96 PPI
|
||||||
|
end else
|
||||||
Result := inherited PreferedWidth;
|
Result := inherited PreferedWidth;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -2300,6 +2320,43 @@ begin
|
|||||||
TSynEdit(SynEdit).InvalidateGutter;
|
TSynEdit(SynEdit).InvalidateGutter;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function TIDESynGutterMarks.GetImgListRes(const ACanvas: TCanvas;
|
||||||
|
const AImages: TCustomImageList): TScaledImageListResolution;
|
||||||
|
const
|
||||||
|
AllowedHeights: array[0..5] of Integer = (8, 11, 16, 22, 33, 44);
|
||||||
|
var
|
||||||
|
Scale: Double;
|
||||||
|
PPI, LineHeight, I, ImageHeight: Integer;
|
||||||
|
begin
|
||||||
|
// image height must be equal to width
|
||||||
|
if AImages.Width<>AImages.Height then
|
||||||
|
raise Exception.Create('Internal error: AImages.Width<>AImages.Height');
|
||||||
|
|
||||||
|
Scale := 1;
|
||||||
|
PPI := 96;
|
||||||
|
if SynEdit is TSynEdit then
|
||||||
|
begin
|
||||||
|
LineHeight := TSynEdit(SynEdit).LineHeight;
|
||||||
|
ImageHeight := Low(AllowedHeights);
|
||||||
|
for I := High(AllowedHeights) downto Low(AllowedHeights) do
|
||||||
|
if AllowedHeights[I]<LineHeight then
|
||||||
|
begin
|
||||||
|
ImageHeight := AllowedHeights[I];
|
||||||
|
break;
|
||||||
|
end;
|
||||||
|
// don't set PPI here -> we don't want to scale the image anymore
|
||||||
|
end else
|
||||||
|
begin
|
||||||
|
ImageHeight := AImages.Height;
|
||||||
|
if ACanvas is TControlCanvas then
|
||||||
|
PPI := TControlCanvas(ACanvas).Control.Font.PixelsPerInch;
|
||||||
|
end;
|
||||||
|
|
||||||
|
if ACanvas is TControlCanvas then
|
||||||
|
Scale := TControlCanvas(ACanvas).Control.GetCanvasScaleFactor;
|
||||||
|
Result := AImages.ResolutionForPPI[ImageHeight, PPI, Scale];
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TIDESynGutterMarks.SetDebugMarks(AFirstLinePos, ALastLinePos: Integer);
|
procedure TIDESynGutterMarks.SetDebugMarks(AFirstLinePos, ALastLinePos: Integer);
|
||||||
var
|
var
|
||||||
i: LongInt;
|
i: LongInt;
|
||||||
|
Loading…
Reference in New Issue
Block a user