From 2b7967bb3fd0e35e147f64b6b4a00cdee3bfcae6 Mon Sep 17 00:00:00 2001 From: sekelsenmat Date: Fri, 5 Feb 2016 09:35:38 +0000 Subject: [PATCH] fpvectorial: Improves autofit git-svn-id: trunk@51500 - --- components/fpvectorial/fpvectorial.pas | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/components/fpvectorial/fpvectorial.pas b/components/fpvectorial/fpvectorial.pas index 8a9f68273e..37c5ecc084 100644 --- a/components/fpvectorial/fpvectorial.pas +++ b/components/fpvectorial/fpvectorial.pas @@ -471,7 +471,7 @@ type // in CalculateBoundingBox always remember to treat correctly the case of ADest=nil!!! // This cased is utilized to guess the size of a document even before getting a canvas to draw at procedure CalculateBoundingBox(ADest: TFPCustomCanvas; out ALeft, ATop, ARight, ABottom: Double); virtual; - function CalculateSizeInCanvas(ADest: TFPCustomCanvas; out ALeft, ATop, AWidth, AHeight: Integer): Boolean; + function CalculateSizeInCanvas(ADest: TFPCustomCanvas; AParent: TvPage; out ALeft, ATop, AWidth, AHeight: Integer): Boolean; procedure CalculateHeightInCanvas(ADest: TFPCustomCanvas; out AHeight: Integer); // helper functions for CalculateBoundingBox & TvRenderInfo procedure ExpandBoundingBox(ADest: TFPCustomCanvas; var ALeft, ATop, ARight, ABottom: Double); @@ -1475,6 +1475,7 @@ type ADestX: Integer = 0; ADestY: Integer = 0; AMulX: Double = 1.0; AMulY: Double = 1.0; ADoDraw: Boolean = true); virtual; abstract; procedure AutoFit(ADest: TFPCustomCanvas; AWidth, AHeight: Integer; out ADeltaX, ADeltaY: Integer; out AZoom: Double); virtual; abstract; + function GetNaturalMulY(): Double; virtual; abstract; { Debug methods } procedure GenerateDebugTree(ADestRoutine: TvDebugAddItemProc; APageItem: Pointer); virtual; abstract; end; @@ -1558,6 +1559,7 @@ type procedure Render(ADest: TFPCustomCanvas; ADestX: Integer = 0; ADestY: Integer = 0; AMulX: Double = 1.0; AMulY: Double = 1.0; ADoDraw: Boolean = true); override; procedure AutoFit(ADest: TFPCustomCanvas; AWidth, AHeight: Integer; out ADeltaX, ADeltaY: Integer; out AZoom: Double); override; + function GetNaturalMulY(): Double; override; { Debug methods } procedure GenerateDebugTree(ADestRoutine: TvDebugAddItemProc; APageItem: Pointer); override; // @@ -1602,6 +1604,7 @@ type procedure Render(ADest: TFPCustomCanvas; ADestX: Integer = 0; ADestY: Integer = 0; AMulX: Double = 1.0; AMulY: Double = 1.0; ADoDraw: Boolean = true); override; procedure AutoFit(ADest: TFPCustomCanvas; AWidth, AHeight: Integer; out ADeltaX, ADeltaY: Integer; out AZoom: Double); override; + function GetNaturalMulY(): Double; override; { Debug methods } procedure GenerateDebugTree(ADestRoutine: TvDebugAddItemProc; APageItem: Pointer); override; end; @@ -3424,13 +3427,13 @@ end; // returns false if the element is invisible function TvEntity.CalculateSizeInCanvas(ADest: TFPCustomCanvas; - out ALeft, ATop, AWidth, AHeight: Integer): Boolean; + AParent: TvPage; out ALeft, ATop, AWidth, AHeight: Integer): Boolean; var lRenderInfo: TvRenderInfo; begin Result := True; InitializeRenderInfo(lRenderInfo); - Render(ADest, lRenderInfo, 0, 0, 1, 1, False); + Render(ADest, lRenderInfo, 0, 0, 1, AParent.GetNaturalMulY(), False); ALeft := lRenderInfo.EntityCanvasMinXY.X; ATop := lRenderInfo.EntityCanvasMinXY.Y; AWidth := lRenderInfo.EntityCanvasMaxXY.X - lRenderInfo.EntityCanvasMinXY.X; @@ -9098,7 +9101,7 @@ begin for i := 0 to FEntities.Count - 1 do begin lCurEntity := TvEntity(FEntities.Items[i]); - if lCurEntity.CalculateSizeInCanvas(ADest, lLeft, lTop, lWidth, lHeight) then + if lCurEntity.CalculateSizeInCanvas(ADest, Self, lLeft, lTop, lWidth, lHeight) then begin lMinX := Min(lMinX, lLeft); lMinY := Min(lMinY, lTop); @@ -9133,6 +9136,11 @@ begin {$endif} end; +function TvVectorialPage.GetNaturalMulY: Double; +begin + Result := -1.0; +end; + procedure TvVectorialPage.GenerateDebugTree(ADestRoutine: TvDebugAddItemProc; APageItem: Pointer); var @@ -9314,6 +9322,11 @@ begin AZoom := 1; end; +function TvTextPageSequence.GetNaturalMulY: Double; +begin + Result := 1.0; +end; + procedure TvTextPageSequence.GenerateDebugTree( ADestRoutine: TvDebugAddItemProc; APageItem: Pointer); var