mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-22 13:39:30 +02:00
fpvectorial: Starts support for html and rendering support for lists
git-svn-id: trunk@48984 -
This commit is contained in:
parent
013aae61e4
commit
d74381d94a
@ -1007,11 +1007,14 @@ type
|
|||||||
function AddParagraph(ASimpleText: string): TvParagraph;
|
function AddParagraph(ASimpleText: string): TvParagraph;
|
||||||
function AddList : TvList;
|
function AddList : TvList;
|
||||||
function Level : Integer;
|
function Level : Integer;
|
||||||
|
class procedure DrawBullet(ADest: TFPCustomCanvas; var ARenderInfo: TvRenderInfo;
|
||||||
|
ALevel: Integer; AX, AY: Double; ADestX: Integer = 0; ADestY: Integer = 0;
|
||||||
|
AMulX: Double = 1.0; AMulY: Double = 1.0; ADoDraw: Boolean = True);
|
||||||
|
|
||||||
{function TryToSelect(APos: TPoint; var ASubpart: Cardinal): TvFindEntityResult; override;
|
//function TryToSelect(APos: TPoint; var ASubpart: Cardinal): TvFindEntityResult; override;
|
||||||
procedure Render(ADest: TFPCustomCanvas; var ARenderInfo: TvRenderInfo; ADestX: Integer = 0;
|
procedure Render(ADest: TFPCustomCanvas; var ARenderInfo: TvRenderInfo; ADestX: Integer = 0;
|
||||||
ADestY: Integer = 0; AMulX: Double = 1.0; AMulY: Double = 1.0); override;
|
ADestY: Integer = 0; AMulX: Double = 1.0; AMulY: Double = 1.0; ADoDraw: Boolean = True); override;
|
||||||
function GenerateDebugTree(ADestRoutine: TvDebugAddItemProc; APageItem: Pointer): Pointer; override;}
|
//function GenerateDebugTree(ADestRoutine: TvDebugAddItemProc; APageItem: Pointer): Pointer; override;}
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{@@
|
{@@
|
||||||
@ -6284,6 +6287,83 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
class procedure TvList.DrawBullet(ADest: TFPCustomCanvas;
|
||||||
|
var ARenderInfo: TvRenderInfo; ALevel: Integer; AX, AY: Double;
|
||||||
|
ADestX: Integer; ADestY: Integer; AMulX: Double; AMulY: Double;
|
||||||
|
ADoDraw: Boolean);
|
||||||
|
|
||||||
|
function CoordToCanvasX(ACoord: Double): Integer;
|
||||||
|
begin
|
||||||
|
Result := Round(ADestX + AmulX * ACoord);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function CoordToCanvasY(ACoord: Double): Integer;
|
||||||
|
begin
|
||||||
|
Result := Round(ADestY + AmulY * ACoord);
|
||||||
|
end;
|
||||||
|
|
||||||
|
begin
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TvList.Render(ADest: TFPCustomCanvas; var ARenderInfo: TvRenderInfo; ADestX: Integer = 0;
|
||||||
|
ADestY: Integer = 0; AMulX: Double = 1.0; AMulY: Double = 1.0; ADoDraw: Boolean = True);
|
||||||
|
|
||||||
|
function CoordToCanvasX(ACoord: Double): Integer;
|
||||||
|
begin
|
||||||
|
Result := Round(ADestX + AmulX * ACoord);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function CoordToCanvasY(ACoord: Double): Integer;
|
||||||
|
begin
|
||||||
|
Result := Round(ADestY + AmulY * ACoord);
|
||||||
|
end;
|
||||||
|
|
||||||
|
var
|
||||||
|
lEntity: TvEntity;
|
||||||
|
lPara: TvParagraph absolute lEntity;
|
||||||
|
lList: TvList absolute lEntity;
|
||||||
|
lEntityRenderInfo: TvRenderInfo;
|
||||||
|
CurX, CurY: Double;
|
||||||
|
begin
|
||||||
|
InitializeRenderInfo(ARenderInfo);
|
||||||
|
|
||||||
|
// Don't call inherited Render(ADest, ARenderInfo, ADestX, ADestY, AMulX, AMulY, ADoDraw);
|
||||||
|
lEntity := GetFirstEntity();
|
||||||
|
while lEntity <> nil do
|
||||||
|
begin
|
||||||
|
if lEntity is TvParagraph then
|
||||||
|
begin
|
||||||
|
{lText.Render(ADest, lEntityRenderInfo, CurX, ADestY + lHeight_px, AMulX, AMulY, ADoDraw);
|
||||||
|
lText.CalculateBoundingBox(ADest, lLeft, lTop, lRight, lBottom);
|
||||||
|
lCurWidth := lCurWidth + Abs(lRight - lLeft);
|
||||||
|
lFirstText := False;
|
||||||
|
lPrevText := lText;
|
||||||
|
|
||||||
|
lText.X := OldTextX;
|
||||||
|
lText.Y := OldTextY;
|
||||||
|
if lResetOldStyle then
|
||||||
|
TvText(lEntity).Style := nil; }
|
||||||
|
end
|
||||||
|
else if lEntity is TvList then
|
||||||
|
begin
|
||||||
|
{OldTextX := lText.X;
|
||||||
|
OldTextY := lText.Y;
|
||||||
|
lEntity.X := CoordToCanvasX(lEntity.X + X + lCurWidth);
|
||||||
|
lEntity.Y := lEntity.Y + Y;
|
||||||
|
|
||||||
|
lEntity.Render(ADest, lEntityRenderInfo, ADestX, ADestY + lHeight_px, AMulX, AMulY, ADoDraw);
|
||||||
|
|
||||||
|
lEntity.X := OldTextX;
|
||||||
|
lEntity.Y := OldTextY; }
|
||||||
|
end;
|
||||||
|
|
||||||
|
MergeRenderInfo(lEntityRenderInfo, ARenderInfo);
|
||||||
|
|
||||||
|
lEntity := GetNextEntity();
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
{ TvRichText }
|
{ TvRichText }
|
||||||
|
|
||||||
constructor TvRichText.Create(APage: TvPage);
|
constructor TvRichText.Create(APage: TvPage);
|
||||||
|
@ -37,6 +37,7 @@ type
|
|||||||
function ReadMathFromNode(ANode: TDOMNode; AData: TvTextPageSequence; ADoc: TvVectorialDocument): TvEntity;
|
function ReadMathFromNode(ANode: TDOMNode; AData: TvTextPageSequence; ADoc: TvVectorialDocument): TvEntity;
|
||||||
function ReadTableFromNode(ANode: TDOMNode; AData: TvTextPageSequence; ADoc: TvVectorialDocument): TvEntity;
|
function ReadTableFromNode(ANode: TDOMNode; AData: TvTextPageSequence; ADoc: TvVectorialDocument): TvEntity;
|
||||||
function ReadTableRowNode(ATable: TvTable; ANode: TDOMNode; AData: TvTextPageSequence; ADoc: TvVectorialDocument): TvEntity;
|
function ReadTableRowNode(ATable: TvTable; ANode: TDOMNode; AData: TvTextPageSequence; ADoc: TvVectorialDocument): TvEntity;
|
||||||
|
function ReadUListFromNode(ANode: TDOMNode; AData: TvTextPageSequence; ADoc: TvVectorialDocument): TvEntity;
|
||||||
public
|
public
|
||||||
{ General reading methods }
|
{ General reading methods }
|
||||||
constructor Create; override;
|
constructor Create; override;
|
||||||
@ -100,6 +101,7 @@ begin
|
|||||||
AData.AddParagraph().AddText(LineEnding);
|
AData.AddParagraph().AddText(LineEnding);
|
||||||
Result := nil;
|
Result := nil;
|
||||||
end;
|
end;
|
||||||
|
'ul': Result := ReadUListFromNode(ANode, AData, ADoc);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -437,6 +439,36 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function TvHTMLVectorialReader.ReadUListFromNode(ANode: TDOMNode;
|
||||||
|
AData: TvTextPageSequence; ADoc: TvVectorialDocument): TvEntity;
|
||||||
|
var
|
||||||
|
lCurNode: TDOMNode;
|
||||||
|
lNodeName, lNodeValue: DOMString;
|
||||||
|
lNodeText: string;
|
||||||
|
//
|
||||||
|
lList: TvList;
|
||||||
|
lCurPara: TvParagraph;
|
||||||
|
begin
|
||||||
|
Result := nil;
|
||||||
|
lList := AData.AddList();
|
||||||
|
|
||||||
|
lCurNode := ANode.FirstChild;
|
||||||
|
while Assigned(lCurNode) do
|
||||||
|
begin
|
||||||
|
lNodeName := lCurNode.NodeName;
|
||||||
|
lNodeValue := lCurNode.NodeValue;
|
||||||
|
case lNodeName of
|
||||||
|
'li':
|
||||||
|
begin
|
||||||
|
lNodeText := GetTextContentFromNode(lCurNode);
|
||||||
|
lCurPara := lList.AddParagraph(lNodeText);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
lCurNode := lCurNode.NextSibling;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
constructor TvHTMLVectorialReader.Create;
|
constructor TvHTMLVectorialReader.Create;
|
||||||
begin
|
begin
|
||||||
inherited Create;
|
inherited Create;
|
||||||
|
Loading…
Reference in New Issue
Block a user