TurboPower_ipro: Fix line spacings when <br> tag is used.

git-svn-id: trunk@58905 -
This commit is contained in:
wp 2018-09-07 18:41:40 +00:00
parent a37df13898
commit 64b5cbf0b6

View File

@ -341,6 +341,7 @@ type
procedure HideUnmarkedControl; virtual; procedure HideUnmarkedControl; virtual;
procedure EnumChildren(EnumProc: TIpHtmlNodeEnumProc; UserData: Pointer); virtual; procedure EnumChildren(EnumProc: TIpHtmlNodeEnumProc; UserData: Pointer); virtual;
procedure AppendSelection(var S : string; var Completed: Boolean); virtual; procedure AppendSelection(var S : string; var Completed: Boolean); virtual;
function GetMargin(AMargin: TIpHtmlElemMargin; ADefault: Integer): Integer; virtual;
public public
constructor Create(ParentNode : TIpHtmlNode); constructor Create(ParentNode : TIpHtmlNode);
destructor Destroy; override; destructor Destroy; override;
@ -378,6 +379,7 @@ type
procedure ReportMapRects(M : TRectMethod); override; procedure ReportMapRects(M : TRectMethod); override;
procedure AppendSelection(var S : string; var Completed: Boolean); override; procedure AppendSelection(var S : string; var Completed: Boolean); override;
procedure EnumChildren(EnumProc: TIpHtmlNodeEnumProc; UserData: Pointer); override; procedure EnumChildren(EnumProc: TIpHtmlNodeEnumProc; UserData: Pointer); override;
function GetMargin(AMargin: TIpHtmlElemMargin; ADefault: Integer): Integer; override;
public public
constructor Create(ParentNode : TIpHtmlNode); constructor Create(ParentNode : TIpHtmlNode);
destructor Destroy; override; destructor Destroy; override;
@ -1121,6 +1123,7 @@ type
FId: string; FId: string;
protected protected
procedure SetClear(const Value: TIpHtmlBreakClear); procedure SetClear(const Value: TIpHtmlBreakClear);
function GetMargin(AMargin: TIpHtmlElemMargin; ADefault:Integer): Integer; override;
public public
constructor Create(ParentNode: TIpHtmlNode); constructor Create(ParentNode: TIpHtmlNode);
procedure Enqueue; override; procedure Enqueue; override;
@ -3986,13 +3989,19 @@ begin
prevelem := PIpHtmlElement(FElementQueue[i-1]); prevelem := PIpHtmlElement(FElementQueue[i-1]);
case PIpHtmlElement(FElementQueue[i])^.ElementType of case PIpHtmlElement(FElementQueue[i])^.ElementType of
etSoftLF: etSoftLF:
if (prevelem.ElementType in [etSoftLF, etHardLF]) then begin if (prevelem.ElementType in [etHardLF, etSoftLF]) then begin
prevelem.LFHeight := MaxI2(prevelem.LFHeight, elem.LFHeight); prevelem.LFHeight := MaxI2(prevelem.LFHeight, elem.LFHeight);
FElementQueue.Delete(i); FElementQueue.Delete(i);
end; end;
etHardLF: etHardLF:
if (prevelem.ElementType in [etSoftLF, etHardLF]) then if (prevelem.ElementType = etSoftLF) then begin
prevelem.LFHeight := MaxI2(prevelem.LFHeight, elem.LFHeight); prevelem.LFHeight := MaxI2(prevelem.LFHeight, elem.LFHeight);
FElementQueue.Delete(i-1);
end else
if (prevelem.ElementType = etHardLF) then begin
prevelem.LFHeight := prevelem.LFHeight + elem.LFHeight;
FElementQueue.Delete(i);
end;
end; end;
dec(i); dec(i);
end; end;
@ -4245,17 +4254,7 @@ begin
end; end;
procedure TIpHtmlNode.MakeVisible; procedure TIpHtmlNode.MakeVisible;
var
elem: PIpHtmlElement;
R: TRect;
begin begin
(*
elem := FOwner.FindFirstElementOfNode(self);
if elem <> nil then begin
R := elem.WordRect2;
FOwner.MakeVisible(R{$IFDEF IP_LAZARUS}, true {$ENDIF});
end;
*)
end; end;
procedure TIpHtmlNode.SetProps(const RenderProps: TIpHtmlProps); procedure TIpHtmlNode.SetProps(const RenderProps: TIpHtmlProps);
@ -4266,6 +4265,12 @@ procedure TIpHtmlNode.UnmarkControl;
begin begin
end; end;
function TIpHtmlNode.GetMargin(AMargin: TIpHtmlElemMargin; ADefault: Integer): Integer;
begin
Result := ADefault;
end;
{Attribute support code} {Attribute support code}
function GetPropertyValue(PI: PPropInfo; const AObject: TObject): string; function GetPropertyValue(PI: PPropInfo; const AObject: TObject): string;
@ -4680,6 +4685,16 @@ begin
end; end;
end; end;
function TIpHtmlNodeMulti.GetMargin(AMargin: TIpHtmlElemMargin;
ADefault: Integer): Integer;
begin
if AMargin.Style = hemsPx then
Result := round(AMargin.Size)
else
Result := ADefault;
end;
{ TIpHtmlNodeBODY } { TIpHtmlNodeBODY }
constructor TIpHtmlNodeBODY.Create(ParentNode : TIpHtmlNode); constructor TIpHtmlNodeBODY.Create(ParentNode : TIpHtmlNode);
@ -9724,14 +9739,6 @@ begin
inherited SetProps(Props); inherited SetProps(Props);
end; end;
function GetMargin(AMargin: TIpHtmlElemMargin; ADefault: Integer): Integer;
begin
if AMargin.Style = hemsPx then
Result := round(AMargin.Size)
else
Result := ADefault;
end;
procedure TIpHtmlNodeP.Enqueue; procedure TIpHtmlNodeP.Enqueue;
var var
elem: PIpHtmlElement; elem: PIpHtmlElement;
@ -10074,19 +10081,45 @@ end;
{ TIpHtmlNodeBR } { TIpHtmlNodeBR }
procedure TIpHtmlNodeBR.Enqueue; procedure TIpHtmlNodeBR.Enqueue;
var
h: Integer;
elem: PIpHtmlElement;
begin begin
if (ParentNode is TIpHtmlNodeP) or
(ParentNode is TIpHtmlNodeLI) or
(ParentNode is TIpHtmlNodePRE) or
(ParentNode is TIpHtmlNodeDIV)
then
h := 0
else
h := Props.FontSize;
case Clear of case Clear of
hbcNone : hbcNone :
EnqueueElement(Owner.HardLF); begin
hbcLeft : elem := Owner.BuildLinefeedEntry(etHardLF, h);
EnqueueElement(Owner.HardLFClearLeft); EnqueueElement(elem);
hbcRight : end;
EnqueueElement(Owner.HardLFClearRight); hbcLeft :
hbcAll : EnqueueElement(Owner.HardLFClearLeft);
EnqueueElement(Owner.HardLFClearBoth); hbcRight :
EnqueueElement(Owner.HardLFClearRight);
hbcAll :
EnqueueElement(Owner.HardLFClearBoth);
end; end;
end; end;
function TIpHtmlNodeBR.GetMargin(AMargin: TIpHtmlElemMargin; ADefault: Integer): Integer;
var
default: Integer;
begin
if (ParentNode is TIpHtmlNodeP) then
default := 0
else
default := ADefault;
Result := inherited GetMargin(AMargin, default);
end;
procedure TIpHtmlNodeBR.SetClear(const Value: TIpHtmlBreakClear); procedure TIpHtmlNodeBR.SetClear(const Value: TIpHtmlBreakClear);
begin begin
FClear := Value; FClear := Value;