LCL: ChildSizing, fix computation of MaxWidth/Heigh for cells

This commit is contained in:
Martin 2024-03-22 15:42:20 +01:00
parent 3caf5b699b
commit 65809d7515

View File

@ -1653,10 +1653,13 @@ var
CurChild: TAutoSizeBox;
CurBorder: integer;
LastChild: TAutoSizeBox;
HasChildWithoutMax: array [TAutoSizeBoxOrientation] of Boolean;
begin
if DoInit then InitSums;
Orthogonal:=SizeBoxOrthogonal[Orientation];
if ChildCount[Orientation]>0 then begin
HasChildWithoutMax[asboHorizontal] := False;
HasChildWithoutMax[asboVertical] := False;
for i:=0 to ChildCount[Orientation]-1 do begin
CurChild:=Children[Orientation][i];
@ -1671,22 +1674,28 @@ begin
inc(MinimumSize[Orientation],CurBorder);
inc(PreferredSize[Orientation],CurBorder);
// add item size in Orientation
if MaximumSize[Orientation]>0 then begin
if CurChild.MaximumSize[Orientation]>0 then
inc(MaximumSize[Orientation],CurChild.MaximumSize[Orientation])
else
if not HasChildWithoutMax[Orientation] then begin
if CurChild.MaximumSize[Orientation]>0 then begin
inc(MaximumSize[Orientation],CurChild.MaximumSize[Orientation]);
end
else begin
MaximumSize[Orientation]:=0;
HasChildWithoutMax[Orientation] := True;
end;
end;
inc(MinimumSize[Orientation],CurChild.MinimumSize[Orientation]);
inc(PreferredSize[Orientation],CurChild.PreferredSize[Orientation]);
// maximize in Orthogonal
if MaximumSize[Orthogonal]>0 then begin
if CurChild.MaximumSize[Orthogonal]>0 then
if not HasChildWithoutMax[Orthogonal] then begin
if CurChild.MaximumSize[Orthogonal]>0 then begin
MaximumSize[Orthogonal]:=Max(MaximumSize[Orthogonal],
CurChild.MaximumSize[Orthogonal])
else
CurChild.MaximumSize[Orthogonal]);
end
else begin
MaximumSize[Orthogonal]:=0;
HasChildWithoutMax[Orthogonal] := True;
end;
end;
MinimumSize[Orthogonal]:=Max(MinimumSize[Orthogonal],
CurChild.MinimumSize[Orthogonal]);