tpipro: use TR bg and fg color assigned from css, render table caption

git-svn-id: trunk@22561 -
This commit is contained in:
paul 2009-11-13 08:11:59 +00:00
parent 43524639c2
commit c5101d39fc

View File

@ -2139,10 +2139,13 @@ type
TIpHtmlVAlignment2 = (hva2Top, hva2Bottom, hva2Left, hva2Right); TIpHtmlVAlignment2 = (hva2Top, hva2Bottom, hva2Left, hva2Right);
{ TIpHtmlNodeCAPTION }
TIpHtmlNodeCAPTION = class(TIpHtmlNodeBlock) TIpHtmlNodeCAPTION = class(TIpHtmlNodeBlock)
private private
FAlign: TIpHtmlVAlignment2; FAlign: TIpHtmlVAlignment2;
public {!!.10} public {!!.10}
constructor Create(ParentNode: TIpHtmlNode);
property Align : TIpHtmlVAlignment2 read FAlign write FAlign; property Align : TIpHtmlVAlignment2 read FAlign write FAlign;
end; end;
@ -2324,10 +2327,14 @@ type
property Width : TIpHtmlMultiLength read FWidth write FWidth; property Width : TIpHtmlMultiLength read FWidth write FWidth;
end; end;
TIpHtmlNodeTR = class(TIpHtmlNodeCore) { TIpHtmlNodeTR }
TIpHtmlNodeTR = class(TIpHtmlNodeBlock)
private private
FAlign: TIpHtmlAlign; FAlign: TIpHtmlAlign;
FVAlign: TIpHtmlVAlign; FVAlign: TIpHtmlVAlign;
protected
procedure SetProps(const RenderProps: TIpHtmlProps); override;
public public
constructor Create(ParentNode : TIpHtmlNode); constructor Create(ParentNode : TIpHtmlNode);
property Align : TIpHtmlAlign read FAlign write FAlign; property Align : TIpHtmlAlign read FAlign write FAlign;
@ -2351,8 +2358,9 @@ type
FVAlign: TIpHtmlVAlign3; FVAlign: TIpHtmlVAlign3;
protected protected
FPadRect : TRect; FPadRect : TRect;
procedure Render( const RenderProps: TIpHtmlProps); override; procedure Render(const RenderProps: TIpHtmlProps); override;
procedure Layout(const RenderProps: TIpHtmlProps; const TargetRect : TRect); override; procedure Layout(const RenderProps: TIpHtmlProps; const TargetRect : TRect); override;
procedure SetProps(const RenderProps: TIpHtmlProps); override;
procedure CalcMinMaxWidth(const RenderProps: TIpHtmlProps; procedure CalcMinMaxWidth(const RenderProps: TIpHtmlProps;
var Min, Max: Integer); override; var Min, Max: Integer); override;
property PadRect : TRect read FPadRect; property PadRect : TRect read FPadRect;
@ -7176,6 +7184,9 @@ procedure TIpHtml.ParseTableRows(Parent: TIpHtmlNode;
var var
CurRow : TIpHtmlNodeTR; CurRow : TIpHtmlNodeTR;
{$IFDEF IP_LAZARUS}
Element: TCSSProps = nil;
{$ENDIF}
begin begin
CurRow := nil; {!!.12} CurRow := nil; {!!.12}
while not (CurToken in EndTokens) do while not (CurToken in EndTokens) do
@ -7188,6 +7199,7 @@ begin
CurRow.ParseBaseProps(Self); CurRow.ParseBaseProps(Self);
CurRow.Align := ParseAlignment; CurRow.Align := ParseAlignment;
CurRow.VAlign := ParseVAlignment; CurRow.VAlign := ParseVAlignment;
CurRow.LoadCSSProps(CurRow.Owner, Element, CurRow.Props);
NextRealToken; NextRealToken;
ParseTableRow(CurRow, ParseTableRow(CurRow,
EndTokens + [IpHtmlTagTRend, IpHtmlTagTR] - EndTokens + [IpHtmlTagTRend, IpHtmlTagTR] -
@ -7351,6 +7363,7 @@ begin
if CurToken = IpHtmlTagCAPTIONend then if CurToken = IpHtmlTagCAPTIONend then
NextToken; NextToken;
end; end;
CurTable.FCaption := CurCaption;
end; end;
ParseColgroup(CurTable); ParseColgroup(CurTable);
SkipTextTokens; {!!.10} SkipTextTokens; {!!.10}
@ -10068,12 +10081,17 @@ begin
end; end;
end; end;
procedure TIpHtmlNodeBlock.Render( procedure TIpHtmlNodeBlock.Render(const RenderProps: TIpHtmlProps);
const RenderProps: TIpHtmlProps); {$IFDEF IP_LAZARUS}
var
Elem: TCSSProps = nil;
{$ENDIF}
begin begin
if not RenderProps.IsEqualTo(Props) then begin if not RenderProps.IsEqualTo(Props) then
SetProps(RenderProps); begin
Props.Assign(RenderProps); Props.Assign(RenderProps);
LoadCSSProps(Owner, Elem, Props);
SetProps(Props);
end; end;
if ElementQueue.Count = 0 then if ElementQueue.Count = 0 then
Enqueue; Enqueue;
@ -10364,14 +10382,19 @@ end;
procedure TIpHtmlNodeBlock.CalcMinMaxWidth(const RenderProps: TIpHtmlProps; procedure TIpHtmlNodeBlock.CalcMinMaxWidth(const RenderProps: TIpHtmlProps;
var Min, Max: Integer); var Min, Max: Integer);
{$IFDEF IP_LAZARUS}
var
Elem: TCSSProps = nil;
{$ENDIF}
begin begin
if RenderProps.IsEqualTo(Props) and (FMin <> -1) and (FMax <> -1) then begin if RenderProps.IsEqualTo(Props) and (FMin <> -1) and (FMax <> -1) then begin
Min := FMin; Min := FMin;
Max := FMax; Max := FMax;
Exit; Exit;
end; end;
SetProps(RenderProps);
Props.Assign(RenderProps); Props.Assign(RenderProps);
LoadCSSProps(Owner, Elem, Props);
SetProps(Props);
if ElementQueue.Count = 0 then if ElementQueue.Count = 0 then
Enqueue; Enqueue;
CalcMinMaxQueueWidth(Props, Min, Max); CalcMinMaxQueueWidth(Props, Min, Max);
@ -10415,11 +10438,17 @@ end;
procedure TIpHtmlNodeBlock.Layout(const RenderProps: TIpHtmlProps; procedure TIpHtmlNodeBlock.Layout(const RenderProps: TIpHtmlProps;
const TargetRect: TRect); const TargetRect: TRect);
{$IFDEF IP_LAZARUS}
var
Elem: TCSSProps = nil;
{$ENDIF}
begin begin
if EqualRect(TargetRect, PageRect) then Exit; if EqualRect(TargetRect, PageRect) then Exit;
if not RenderProps.IsEqualTo(Props) then begin if not RenderProps.IsEqualTo(Props) then
SetProps(RenderProps); begin
Props.Assign(RenderProps); Props.Assign(RenderProps);
LoadCSSProps(Owner, Elem, Props);
SetProps(Props);
end; end;
if ElementQueue.Count = 0 then if ElementQueue.Count = 0 then
Enqueue; Enqueue;
@ -12858,7 +12887,7 @@ var
AL := AL0; AL := AL0;
Props.Assign(Self.Props); Props.Assign(Self.Props); // assign table props
CellRect1 := TargetRect; CellRect1 := TargetRect;
@ -13425,6 +13454,7 @@ var
z, i, j : Integer; z, i, j : Integer;
R : TRect; R : TRect;
Al : TIpHtmlVAlign3; Al : TIpHtmlVAlign3;
TRBgColor, TrTextColor: TColor;
aCanvas : TCanvas; aCanvas : TCanvas;
begin begin
aCanvas := Owner.Target; aCanvas := Owner.Target;
@ -13455,6 +13485,9 @@ begin
Al := hva3Bottom; Al := hva3Bottom;
end; end;
TrBgColor := BgColor;
TrTextColor := TextColor;
for j := 0 to Pred(FChildren.Count) do for j := 0 to Pred(FChildren.Count) do
if TIpHtmlNode(FChildren[j]) is TIpHtmlNodeTableHeaderOrCell then if TIpHtmlNode(FChildren[j]) is TIpHtmlNodeTableHeaderOrCell then
with TIpHtmlNodeTableHeaderOrCell(FChildren[j]) do begin with TIpHtmlNodeTableHeaderOrCell(FChildren[j]) do begin
@ -13465,6 +13498,14 @@ begin
else else
Al := VAlign; Al := VAlign;
end; end;
// set TR color, Render override them anyway if TD/TH have own settings
if TrBgColor <> -1 then
Props.BGColor := TrBgColor;
if TrTextColor <> -1 then
Props.FontColor := TrTextColor;
Props.VAlignment := Al; Props.VAlignment := Al;
Render(Props); Render(Props);
{paint left rule if selected} {paint left rule if selected}
@ -13553,8 +13594,8 @@ begin
RGB(128,128,128)); RGB(128,128,128));
{render caption} {render caption}
//if assigned(FCaption) then if assigned(FCaption) then
// FCaption.Render(Props); FCaption.Render(Props);
end; end;
procedure TIpHtmlNodeTABLE.SetProps(const RenderProps: TIpHtmlProps); procedure TIpHtmlNodeTABLE.SetProps(const RenderProps: TIpHtmlProps);
@ -13777,7 +13818,13 @@ begin
end; end;
{$ENDIF} {$ENDIF}
{ TIpHtmlNodeTR } procedure TIpHtmlNodeTR.SetProps(const RenderProps: TIpHtmlProps);
begin
Props.Assign(RenderProps);
Props.FontColor := TextColor;
Props.BgColor := BgColor;
inherited SetProps(Props);
end;
constructor TIpHtmlNodeTR.Create(ParentNode: TIpHtmlNode); constructor TIpHtmlNodeTR.Create(ParentNode: TIpHtmlNode);
begin begin
@ -15433,8 +15480,7 @@ var
begin begin
for i := 0 to FChildren.Count - 1 do for i := 0 to FChildren.Count - 1 do
if TIpHtmlNode(FChildren[i]) is TIpHtmlNodeBody then if TIpHtmlNode(FChildren[i]) is TIpHtmlNodeBody then
TIpHtmlNodeBody(FChildren[i]).Layout( TIpHtmlNodeBody(FChildren[i]).Layout(RenderProps, TargetRect);
RenderProps, TargetRect);
end; end;
procedure TIpHtmlNodeHtml.Render(const RenderProps: TIpHtmlProps); procedure TIpHtmlNodeHtml.Render(const RenderProps: TIpHtmlProps);
@ -15443,8 +15489,7 @@ var
begin begin
for i := 0 to FChildren.Count - 1 do for i := 0 to FChildren.Count - 1 do
if TIpHtmlNode(FChildren[i]) is TIpHtmlNodeBody then if TIpHtmlNode(FChildren[i]) is TIpHtmlNodeBody then
TIpHtmlNodeBody(FChildren[i]). TIpHtmlNodeBody(FChildren[i]).Render(RenderProps);
Render(RenderProps);
end; end;
{ TIpHtmlNodeCore } { TIpHtmlNodeCore }
@ -16517,14 +16562,18 @@ end;
procedure TIpHtmlNodeTableHeaderOrCell.CalcMinMaxWidth( procedure TIpHtmlNodeTableHeaderOrCell.CalcMinMaxWidth(
const RenderProps: TIpHtmlProps; var Min, Max: Integer); const RenderProps: TIpHtmlProps; var Min, Max: Integer);
var
TmpBGColor, TmpFontColor: TColor;
begin begin
TmpBGColor := Props.BgColor;
TmpFontColor := Props.FontColor;
Props.Assign(RenderProps); Props.Assign(RenderProps);
Props.BgColor := TmpBGColor;
Props.FontColor := TmpFontColor;
Props.Alignment := Align; Props.Alignment := Align;
if Self is TIpHtmlNodeTH then if Self is TIpHtmlNodeTH then
Props.FontStyle := Props.FontStyle + [fsBold]; Props.FontStyle := Props.FontStyle + [fsBold];
Props.VAlignment := VAlign; Props.VAlignment := VAlign;
if BgColor <> -1 then
Props.BgColor := BgColor;
if NoWrap then if NoWrap then
Props.NoBreak := True; Props.NoBreak := True;
inherited CalcMinMaxWidth(Props, Min, Max); inherited CalcMinMaxWidth(Props, Min, Max);
@ -16544,14 +16593,6 @@ begin
Props.DelayCache:=True; Props.DelayCache:=True;
{$IFDEF IP_LAZARUS} {$IFDEF IP_LAZARUS}
LoadCSSProps(Owner, Elem, Props); LoadCSSProps(Owner, Elem, Props);
{
if (Elem <> nil) then
begin
if Elem.BGColor <> -1 then BgColor := Elem.BGColor;
end
else if (Props.BgColor <> -1) then
BgColor := Props.BgColor;
}
{$ENDIF} {$ENDIF}
//DebugLn('td :', IntToStr(Integer(Props.Alignment))); //DebugLn('td :', IntToStr(Integer(Props.Alignment)));
if BgColor <> -1 then if BgColor <> -1 then
@ -16573,13 +16614,11 @@ begin
{$IFDEF IP_LAZARUS_DBG} {$IFDEF IP_LAZARUS_DBG}
DebugBox(Owner.Target, PadRect, clYellow, True); DebugBox(Owner.Target, PadRect, clYellow, True);
{$ENDIF} {$ENDIF}
if PageRectToScreen(PadRect, R) then begin if PageRectToScreen(PadRect, R) then
if (Props.BgColor <> -1) then begin begin
//Props.BgColor := BgColor; if (Props.BgColor <> -1) then
//if PtInRect(R, Owner.MousePoint) then begin
// Owner.Target.Brush.Color := clYellow Owner.Target.Brush.Color := Props.BGColor;
//else
Owner.Target.Brush.Color := Props.BGColor;
Owner.Target.FillRect(R); Owner.Target.FillRect(R);
end; end;
end; end;
@ -19703,6 +19742,16 @@ begin
{$ENDIF} {$ENDIF}
end; end;
{ TIpHtmlNodeCAPTION }
constructor TIpHtmlNodeCAPTION.Create(ParentNode: TIpHtmlNode);
begin
inherited Create(ParentNode);
{$IFDEF IP_LAZARUS}
FElementName := 'caption';
{$ENDIF}
end;
initialization initialization
{$IFDEF IP_LAZARUS} {$IFDEF IP_LAZARUS}
{$I iphtml.lrs} {$I iphtml.lrs}