Skip to content

Commit cf67d11

Browse files
committed
fix: glitches with padding in completion proposal, and non-restored width
Refs #2534
1 parent 2572681 commit cf67d11

2 files changed

Lines changed: 35 additions & 54 deletions

File tree

source/extra_controls.pas

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ TExtForm = class(TForm)
2525
class procedure RestoreListSetup(List: TLazVirtualStringTree);
2626
function ScaleSize(x: Extended): Integer; overload;
2727
class function ScaleSize(x: Extended; Control: TControl): Integer; overload;
28+
// Returns a PPI-aware width of a space character
29+
function Space(Multiply: Integer=1): Integer;
2830
class procedure PageControlTabHighlight(PageControl: TPageControl);
2931
class procedure ShowPopup(ClickedControl: TControl; PopupMenu: TPopupMenu);
3032
end;
@@ -280,6 +282,11 @@ class function TExtForm.ScaleSize(x: Extended; Control: TControl): Integer;
280282
Result := Control.Scale96ToForm(Round(x));
281283
end;
282284

285+
function TExtForm.Space(Multiply: Integer=1): Integer;
286+
begin
287+
Result := Canvas.TextWidth(' ') * Multiply;
288+
end;
289+
283290

284291
class procedure TExtForm.PageControlTabHighlight(PageControl: TPageControl);
285292
var

source/main.pas

Lines changed: 28 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -1315,9 +1315,7 @@ TMainForm = class(TExtForm)
13151315
FCommandStatsServerUptime: Integer;
13161316
FVariableNames, FSessionVars, FGlobalVars: TStringList;
13171317
FProposalItems: TProposalItemList;
1318-
FProposalCol1Width: Integer;
1319-
FProposalCol2Width: Integer;
1320-
FProposalCol3Width: Integer;
1318+
FProposalLeftWidth: Integer;
13211319
FProposalTriggeredByDot: Boolean;
13221320

13231321
procedure SetDelimiter(Value: String);
@@ -1802,8 +1800,7 @@ procedure TMainForm.FormDestroy(Sender: TObject);
18021800
AppSettings.WriteString(asDelimiter, FDelimiter);
18031801
AppSettings.WriteInt(asQuerymemoheight, ScaleFormToDesign(pnlQueryMemo.Height));
18041802
AppSettings.WriteInt(asQueryhelperswidth, ScaleFormToDesign(pnlQueryHelpers.Width));
1805-
// This saves a too small width (mostly 15), probably because the proposal is not visible now:
1806-
AppSettings.WriteInt(asCompletionProposalWidth, ScaleFormToDesign(SynCompletionProposal.Width));
1803+
AppSettings.WriteInt(asCompletionProposalWidth, ScaleFormToDesign(SynCompletionProposal.TheForm.Width));
18071804
AppSettings.WriteInt(asCompletionProposalNbLinesInWindow, SynCompletionProposal.LinesInWindow);
18081805
AppSettings.WriteInt(asDbtreewidth, ScaleFormToDesign(pnlLeft.width));
18091806
AppSettings.WriteBool(asGroupTreeObjects, actGroupObjects.Checked);
@@ -2080,7 +2077,7 @@ procedure TMainForm.FormCreate(Sender: TObject);
20802077
// We already store and restore the dimensions DPI aware.
20812078
{SynCompletionProposal.Form.Scaled := False;
20822079
SynCompletionProposal.TimerInterval := AppSettings.ReadInt(asCompletionProposalInterval);}
2083-
//SynCompletionProposal.Width := AppSettings.ReadInt(asCompletionProposalWidth);
2080+
SynCompletionProposal.TheForm.Width := Max(AppSettings.ReadInt(asCompletionProposalWidth), 50);
20842081
SynCompletionProposal.LinesInWindow := AppSettings.ReadInt(asCompletionProposalNbLinesInWindow);
20852082
FProposalItems := TProposalItemList.Create;
20862083
FProposalTriggeredByDot := False;
@@ -3599,37 +3596,23 @@ function TMainForm.SynCompletionProposalMeasureItem(const AKey: string;
35993596
ACanvas: TCanvas; Selected: boolean; Index: integer): TPoint;
36003597
var
36013598
i, X, Y: Integer;
3602-
It: TProposalItem;
3599+
Item: TProposalItem;
36033600
begin
3604-
FProposalCol1Width := 0;
3605-
FProposalCol2Width := 0;
3606-
3607-
ACanvas.Font.Style := [fsBold];
3608-
for i := 0 to SynCompletionProposal.ItemList.Count - 1 do
3609-
begin
3610-
It := FProposalItems[SynCompletionProposal.IndexFromVisibleIndex(i)];
3611-
FProposalCol1Width := Max(FProposalCol1Width, ACanvas.TextWidth(It.LeftText));
3612-
end;
3601+
// Calculate how much vertical and horizontal space the control reserves for this row
3602+
FProposalLeftWidth := 0;
36133603

3614-
ACanvas.Font.Style := [fsItalic];
3615-
for i := 0 to SynCompletionProposal.ItemList.Count - 1 do
3616-
begin
3617-
It := FProposalItems[SynCompletionProposal.IndexFromVisibleIndex(i)];
3618-
FProposalCol2Width := Max(FProposalCol2Width, ACanvas.TextWidth(It.CenterText));
3604+
ACanvas.Font.Style := [];
3605+
for i := 0 to SynCompletionProposal.ItemList.Count - 1 do begin
3606+
Item := FProposalItems[SynCompletionProposal.IndexFromVisibleIndex(i)];
3607+
FProposalLeftWidth := Max(FProposalLeftWidth, ACanvas.TextWidth(Item.LeftText));
36193608
end;
36203609

3621-
//if SynCompletionProposal.Width < 100 then begin
3622-
// SynCompletionProposal.Width := ImageListMain.Width + FProposalCol1Width + FProposalCol2Width + 100;
3623-
//end;
3624-
3625-
ACanvas.Font.Style := [];
3626-
It := FProposalItems[SynCompletionProposal.IndexFromVisibleIndex(Index)];
3627-
X := ImageListMain.Width + 5 + FProposalCol1Width + 10;
3628-
if It.RightText.IsEmpty then
3629-
Inc(X, ACanvas.TextWidth(It.CenterText))
3630-
else
3631-
Inc(X, FProposalCol2Width + 10 + ACanvas.TextWidth(It.RightText));
3632-
Y := Max(ImageListMain.Height, ACanvas.TextHeight('Wy')) + 4;
3610+
Item := FProposalItems[SynCompletionProposal.IndexFromVisibleIndex(Index)];
3611+
X := Space + ImageListMain.WidthForPPI[16, PixelsPerInch]
3612+
+ Space + FProposalLeftWidth
3613+
+ Space(2) + ACanvas.TextWidth(Item.CenterText)
3614+
+ IfThen(Item.RightText.IsEmpty, 0, Space(2) + ACanvas.TextWidth(Item.RightText));
3615+
Y := Max(ImageListMain.HeightForPPI[16, PixelsPerInch] + 2, ACanvas.TextHeight('Wy')) + Space;
36333616
Result := Point(X, Y);
36343617
end;
36353618

@@ -3642,34 +3625,25 @@ function TMainForm.SynCompletionProposalPaintItem(const AKey: string;
36423625
It := FProposalItems[SynCompletionProposal.IndexFromVisibleIndex(Index)];
36433626

36443627
if (It.ImageIndex >= 0) and (It.ImageIndex < ImageListMain.Count) then
3645-
ImageListMain.Draw(ACanvas, X + 4, Y + 2, It.ImageIndex, True);
3646-
3647-
X1 := X + ImageListMain.Width + 5;
3648-
X2 := X1 + FProposalCol1Width + 10;
3649-
X3 := X2 + FProposalCol2Width + 10;
3628+
ImageListMain.Draw(ACanvas, X + Space, Y + 1, It.ImageIndex, True);
36503629

36513630
ACanvas.Brush.Style := bsClear;
36523631

3632+
X1 := X + Space + ImageListMain.WidthForPPI[16, PixelsPerInch] + Space;
36533633
ACanvas.Font.Style := [];
3654-
if Selected then
3655-
ACanvas.Font.Color := clWhite
3656-
else
3657-
ACanvas.Font.Color := It.LeftColor;
3634+
ACanvas.Font.Color := IfThen(Selected, clWhite, It.LeftColor);
36583635
ACanvas.TextOut(X1, Y + 1, It.LeftText);
36593636

3660-
ACanvas.Font.Style := [];
3661-
if Selected then
3662-
ACanvas.Font.Color := clWhite
3663-
else
3664-
ACanvas.Font.Color := It.CenterColor;
3637+
X2 := X1 + FProposalLeftWidth + Space(2);
3638+
ACanvas.Font.Color := IfThen(Selected, clWhite, It.CenterColor);
36653639
ACanvas.TextOut(X2, Y + 1, It.CenterText);
36663640

3667-
ACanvas.Font.Style := [fsItalic];
3668-
if Selected then
3669-
ACanvas.Font.Color := clWhite
3670-
else
3671-
ACanvas.Font.Color := It.RightColor;
3672-
ACanvas.TextOut(X3, Y + 1, It.RightText);
3641+
if not It.CenterText.IsEmpty then begin
3642+
X3 := X2 + ACanvas.TextWidth(It.CenterText) + Space(2);
3643+
ACanvas.Font.Style := [fsItalic];
3644+
ACanvas.Font.Color := IfThen(Selected, clWhite, It.RightColor);
3645+
ACanvas.TextOut(X3, Y + 1, It.RightText);
3646+
end;
36733647

36743648
Result := True;
36753649
end;
@@ -12750,7 +12724,7 @@ procedure TMainForm.actResetPanelDimensionsExecute(Sender: TObject);
1275012724
end;
1275112725
AppSettings.DeleteValue(asCompletionProposalWidth);
1275212726
AppSettings.DeleteValue(asCompletionProposalNbLinesInWindow);
12753-
SynCompletionProposal.Width := AppSettings.ReadInt(asCompletionProposalWidth);
12727+
SynCompletionProposal.TheForm.Width := Max(AppSettings.ReadInt(asCompletionProposalWidth), 50);
1275412728
SynCompletionProposal.LinesInWindow := AppSettings.ReadInt(asCompletionProposalNbLinesInWindow);
1275512729
end;
1275612730

0 commit comments

Comments
 (0)