mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-09-08 10:39:15 +02:00
fpvectorial: Improves list rendering
git-svn-id: trunk@48987 -
This commit is contained in:
parent
2561459506
commit
dbf8095904
@ -1007,15 +1007,16 @@ type
|
|||||||
|
|
||||||
constructor Create(APage: TvPage); override; // MJT 31/08 added override;
|
constructor Create(APage: TvPage); override; // MJT 31/08 added override;
|
||||||
destructor Destroy; override;
|
destructor Destroy; override;
|
||||||
|
// helper function to add the most often used sub-entities
|
||||||
function AddParagraph(ASimpleText: string): TvParagraph;
|
function AddParagraph(ASimpleText: string): TvParagraph;
|
||||||
function AddList : TvList;
|
function AddList: TvList;
|
||||||
function GetLevel : Integer;
|
// other helper functions
|
||||||
|
function GetLevel: Integer;
|
||||||
function GetBulletSize: Double;
|
function GetBulletSize: Double;
|
||||||
procedure DrawBullet(ADest: TFPCustomCanvas; var ARenderInfo: TvRenderInfo;
|
procedure DrawBullet(ADest: TFPCustomCanvas; var ARenderInfo: TvRenderInfo;
|
||||||
ALevel: Integer; AX, AY: Double; ADestX: Integer = 0; ADestY: Integer = 0;
|
ALevel: Integer; AX, AY: Double; ADestX: Integer = 0; ADestY: Integer = 0;
|
||||||
AMulX: Double = 1.0; AMulY: Double = 1.0; ADoDraw: Boolean = True);
|
AMulX: Double = 1.0; AMulY: Double = 1.0; ADoDraw: Boolean = True);
|
||||||
|
// overrides
|
||||||
//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; ADoDraw: Boolean = True); 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;}
|
||||||
@ -3218,6 +3219,7 @@ constructor TvEntityWithPenBrushAndFont.Create(APage: TvPage);
|
|||||||
begin
|
begin
|
||||||
inherited Create(APage);
|
inherited Create(APage);
|
||||||
Font.Color := colBlack;
|
Font.Color := colBlack;
|
||||||
|
Font.Size := 10;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TvEntityWithPenBrushAndFont.ApplyFontToCanvas(ADest: TFPCustomCanvas;
|
procedure TvEntityWithPenBrushAndFont.ApplyFontToCanvas(ADest: TFPCustomCanvas;
|
||||||
@ -3992,6 +3994,7 @@ var
|
|||||||
lSize: TSize;
|
lSize: TSize;
|
||||||
lWidth, lHeight: Integer;
|
lWidth, lHeight: Integer;
|
||||||
lRenderInfo: TvRenderInfo;
|
lRenderInfo: TvRenderInfo;
|
||||||
|
lText: String;
|
||||||
{$ifdef USE_LCL_CANVAS}
|
{$ifdef USE_LCL_CANVAS}
|
||||||
ACanvas: TCanvas absolute ADest;
|
ACanvas: TCanvas absolute ADest;
|
||||||
{$endif}
|
{$endif}
|
||||||
@ -4008,7 +4011,8 @@ begin
|
|||||||
|
|
||||||
for i := 0 to Value.Count-1 do
|
for i := 0 to Value.Count-1 do
|
||||||
begin
|
begin
|
||||||
lSize := ACanvas.TextExtent(Value.Strings[i]);
|
lText := Value.Strings[i];
|
||||||
|
lSize := ACanvas.TextExtent(lText);
|
||||||
lWidth := Max(lWidth, lSize.cx);
|
lWidth := Max(lWidth, lSize.cx);
|
||||||
lSize := ACanvas.TextExtent(Str_Line_Height_Tester);
|
lSize := ACanvas.TextExtent(Str_Line_Height_Tester);
|
||||||
lHeight := lHeight + lSize.cy + 2;
|
lHeight := lHeight + lSize.cy + 2;
|
||||||
@ -6358,12 +6362,12 @@ begin
|
|||||||
case lLevel of
|
case lLevel of
|
||||||
0, 1:
|
0, 1:
|
||||||
begin
|
begin
|
||||||
ADest.Ellipse(CoordToCanvasX(AX + lBulletSpacing), CoordToCanvasY(AY + lBulletSpacing),
|
ADest.Ellipse(CoordToCanvasX(AX + lBulletSpacing), CoordToCanvasY(AY + lBulletSpacing*4), // ToDo: Figure out why this needs to be like that for curved_text.html to render well
|
||||||
CoordToCanvasX(AX + lBulletSpacing*2), CoordToCanvasY(AY + lBulletSpacing*2));
|
CoordToCanvasX(AX + lBulletSpacing*2), CoordToCanvasY(AY + lBulletSpacing*5));
|
||||||
end;
|
end;
|
||||||
else
|
else
|
||||||
ADest.Rectangle(CoordToCanvasX(AX + lBulletSpacing), CoordToCanvasY(AY + lBulletSpacing),
|
ADest.Rectangle(CoordToCanvasX(AX + lBulletSpacing), CoordToCanvasY(AY + lBulletSpacing*4),
|
||||||
CoordToCanvasX(AX + lBulletSpacing*2), CoordToCanvasY(AY + lBulletSpacing*2));
|
CoordToCanvasX(AX + lBulletSpacing*2), CoordToCanvasY(AY + lBulletSpacing*5));
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -6386,24 +6390,32 @@ var
|
|||||||
lList: TvList absolute lEntity;
|
lList: TvList absolute lEntity;
|
||||||
lEntityRenderInfo: TvRenderInfo;
|
lEntityRenderInfo: TvRenderInfo;
|
||||||
CurX, CurY, lBulletSize, lItemHeight: Double;
|
CurX, CurY, lBulletSize, lItemHeight: Double;
|
||||||
|
lHeight_px: Integer;
|
||||||
begin
|
begin
|
||||||
InitializeRenderInfo(ARenderInfo);
|
InitializeRenderInfo(ARenderInfo);
|
||||||
|
|
||||||
// Don't call inherited Render(ADest, ARenderInfo, ADestX, ADestY, AMulX, AMulY, ADoDraw);
|
// Don't call inherited Render(ADest, ARenderInfo, ADestX, ADestY, AMulX, AMulY, ADoDraw);
|
||||||
|
|
||||||
lBulletSize := GetBulletSize();
|
lBulletSize := GetBulletSize() * Abs(AMulX);
|
||||||
CurX := X + lBulletSize;
|
CurX := X + lBulletSize;
|
||||||
CurY := Y;
|
CurY := Y;
|
||||||
|
|
||||||
lEntity := GetFirstEntity();
|
lEntity := GetFirstEntity();
|
||||||
while lEntity <> nil do
|
while lEntity <> nil do
|
||||||
begin
|
begin
|
||||||
|
// handle both directions of drawing
|
||||||
|
lHeight_px := 0;
|
||||||
|
//if lEntity.GetEntityFeatures().DrawsUpwards then
|
||||||
|
lEntity.CalculateHeightInCanvas(ADest, lHeight_px);
|
||||||
|
|
||||||
|
// draw the bullet (if necessary)
|
||||||
if lEntity is TvParagraph then
|
if lEntity is TvParagraph then
|
||||||
begin
|
begin
|
||||||
DrawBullet(ADest, lEntityRenderInfo, GetLevel(),
|
DrawBullet(ADest, lEntityRenderInfo, GetLevel(),
|
||||||
X, CurY, ADestX, ADestY, AMulX, AMulY, ADoDraw);
|
X, CurY, ADestX, ADestY+lHeight_px, AMulX, AMulY, ADoDraw);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
// attempt to centralize the item
|
||||||
lEntity.X := CurX;
|
lEntity.X := CurX;
|
||||||
lEntity.Y := CurY;
|
lEntity.Y := CurY;
|
||||||
lItemHeight := lEntity.GetHeight(ADest);
|
lItemHeight := lEntity.GetHeight(ADest);
|
||||||
@ -6412,10 +6424,12 @@ begin
|
|||||||
lItemHeight := lBulletSize;
|
lItemHeight := lBulletSize;
|
||||||
lEntity.Y := lEntity.CentralizeY_InHeight(ADest, lBulletSize);
|
lEntity.Y := lEntity.CentralizeY_InHeight(ADest, lBulletSize);
|
||||||
end;
|
end;
|
||||||
lEntity.Render(ADest, lEntityRenderInfo, ADestX, ADestY, AMulX, AMulY, ADoDraw);
|
|
||||||
|
|
||||||
|
// draw the item
|
||||||
|
lEntity.Render(ADest, lEntityRenderInfo, ADestX, ADestY+lHeight_px, AMulX, AMulY, ADoDraw);
|
||||||
|
|
||||||
|
// prepare next loop iteration
|
||||||
MergeRenderInfo(lEntityRenderInfo, ARenderInfo);
|
MergeRenderInfo(lEntityRenderInfo, ARenderInfo);
|
||||||
|
|
||||||
CurY := CurY + lItemHeight;
|
CurY := CurY + lItemHeight;
|
||||||
lEntity := GetNextEntity();
|
lEntity := GetNextEntity();
|
||||||
end;
|
end;
|
||||||
|
Loading…
Reference in New Issue
Block a user