mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-09-07 03:20:38 +02:00
fpvectorial: Fix memory leaks in svg reader and visualtest application.
This commit is contained in:
parent
224095f27b
commit
5bc07f9b2c
@ -137,7 +137,7 @@ type
|
||||
|
||||
{ TvSVGPathList }
|
||||
|
||||
TvSVGPathList = class(TFPObjectList)
|
||||
TvSVGPathList = class(TFPList)
|
||||
public
|
||||
// parsing temporary info
|
||||
IsFirstPathMove: Boolean;
|
||||
@ -2349,7 +2349,7 @@ var
|
||||
lNodeName, lDStr: String;
|
||||
i, j: Integer;
|
||||
lCurPath: TPath;
|
||||
lPaths: TvSVGPathList;
|
||||
lPaths: TvSVGPathList = nil;
|
||||
begin
|
||||
Result := nil;
|
||||
for i := 0 to ANode.Attributes.Length - 1 do
|
||||
@ -2421,6 +2421,7 @@ begin
|
||||
TvEntityWithSubEntities(Result).Name := ANode.Attributes.Item[i].NodeValue;
|
||||
end;
|
||||
end;
|
||||
lPaths.Free;
|
||||
end;
|
||||
|
||||
// Documentation: http://www.w3.org/TR/SVG/paths.html
|
||||
|
@ -9,6 +9,7 @@
|
||||
</Flags>
|
||||
<SessionStorage Value="InProjectDir"/>
|
||||
<Title Value="visualtest"/>
|
||||
<Scaled Value="True"/>
|
||||
<ResourceType Value="res"/>
|
||||
<UseXPManifest Value="True"/>
|
||||
<Icon Value="0"/>
|
||||
@ -72,8 +73,14 @@
|
||||
<Linking>
|
||||
<Debugging>
|
||||
<DebugInfoType Value="dsDwarf3"/>
|
||||
<UseHeaptrc Value="True"/>
|
||||
<UseExternalDbgSyms Value="True"/>
|
||||
</Debugging>
|
||||
<Options>
|
||||
<Win32>
|
||||
<GraphicApplication Value="True"/>
|
||||
</Win32>
|
||||
</Options>
|
||||
</Linking>
|
||||
</CompilerOptions>
|
||||
<Debugging>
|
||||
|
@ -13,6 +13,7 @@ uses
|
||||
|
||||
begin
|
||||
RequireDerivedFormResource := True;
|
||||
Application.Scaled:=True;
|
||||
Application.Initialize;
|
||||
Application.CreateForm(TMainForm, MainForm);
|
||||
Application.Run;
|
||||
|
@ -38,6 +38,7 @@ object MainForm: TMainForm
|
||||
StateImages = ImageList
|
||||
TabOrder = 0
|
||||
OnCustomDrawItem = TreeCustomDrawItem
|
||||
OnDeletion = TreeDeletion
|
||||
OnGetImageIndex = TreeGetImageIndex
|
||||
OnGetSelectedIndex = TreeGetSelectedIndex
|
||||
OnSelectionChanged = TreeSelectionChanged
|
||||
|
@ -27,6 +27,7 @@ type
|
||||
RenderState: array[0..1] of TRenderState; // 0 = svg, 1 = wmf
|
||||
constructor Create(ARenderEvent: TRenderEvent; ARefFilename: String;
|
||||
AIntParam: Integer = MaxInt);
|
||||
destructor Destroy; override;
|
||||
end;
|
||||
|
||||
TRenderCoords = (rcBottomLeftCoords, rcTopLeftCoords);
|
||||
@ -88,6 +89,7 @@ type
|
||||
procedure rgTestResultsSelectionChanged(Sender: TObject);
|
||||
procedure TreeCustomDrawItem(Sender: TCustomTreeView; Node: TTreeNode;
|
||||
State: TCustomDrawState; var DefaultDraw: Boolean);
|
||||
procedure TreeDeletion(Sender: TObject; Node: TTreeNode);
|
||||
procedure TreeGetImageIndex(Sender: TObject; Node: TTreeNode);
|
||||
procedure TreeGetSelectedIndex(Sender: TObject; Node: TTreeNode);
|
||||
procedure TreeSelectionChanged(Sender: TObject);
|
||||
@ -196,6 +198,11 @@ begin
|
||||
IntParam := AIntParam;
|
||||
end;
|
||||
|
||||
destructor TRenderParams.Destroy;
|
||||
begin
|
||||
RefFile := '';
|
||||
inherited;
|
||||
end;
|
||||
|
||||
{ TMainForm }
|
||||
|
||||
@ -207,12 +214,12 @@ var
|
||||
renderParams: TRenderParams;
|
||||
page: TvVectorialPage;
|
||||
begin
|
||||
renderParams := TRenderParams(Tree.Selected.Data);
|
||||
if RenderParams = nil then
|
||||
if (Tree.Selected = nil) or (Tree.Selected.Data = nil) then
|
||||
exit;
|
||||
if FDoc[rcBottomLeftCoords] = nil then
|
||||
exit;
|
||||
|
||||
renderParams := TRenderParams(Tree.Selected.Data);
|
||||
page := FDoc[rcBottomLeftCoords].GetPageAsVectorial(0);
|
||||
|
||||
bmp := TBitmap.Create;
|
||||
@ -247,10 +254,11 @@ var
|
||||
fmt: TvVectorialFormat;
|
||||
ext: String;
|
||||
begin
|
||||
renderParams := TRenderParams(Tree.Selected.Data);
|
||||
if RenderParams = nil then
|
||||
if (Tree.Selected = nil) or (Tree.Selected.Data = nil) then
|
||||
exit;
|
||||
|
||||
renderParams := TRenderParams(Tree.Selected.Data);
|
||||
|
||||
fmt := GetFileFormat;
|
||||
ext := GetFileFormatExt;
|
||||
folder := GetImagesFolder(ext);
|
||||
@ -280,10 +288,10 @@ var
|
||||
begin
|
||||
BtnSaveToFilesClick(nil);
|
||||
|
||||
renderParams := TRenderParams(Tree.Selected.Data);
|
||||
if renderParams = nil then
|
||||
if (Tree.Selected = nil) or (Tree.Selected.Data = nil) then
|
||||
exit;
|
||||
|
||||
renderParams := TRenderParams(Tree.Selected.Data);
|
||||
ext := GetFileFormatExt;
|
||||
folder := GetImagesFolder(ext);
|
||||
|
||||
@ -353,25 +361,13 @@ end;
|
||||
|
||||
procedure TMainForm.FormDestroy(Sender: TObject);
|
||||
var
|
||||
parentnode, node: TTreeNode;
|
||||
rc: TRenderCoords;
|
||||
begin
|
||||
parentnode := Tree.Items.GetFirstNode;
|
||||
while parentnode <> nil do begin
|
||||
node := parentnode.GetFirstChild;
|
||||
while node <> nil do begin
|
||||
TObject(node.Data).Free;
|
||||
node := node.GetNextSibling;
|
||||
end;
|
||||
parentnode := parentnode.GetNextSibling;
|
||||
end;
|
||||
|
||||
for rc in TRenderCoords do begin
|
||||
FreeAndNil(FDoc[rc]);
|
||||
FreeAndNil(FDocFromSVG[rc]);
|
||||
FreeAndNil(FDocFromWMF[rc]);
|
||||
end;
|
||||
|
||||
WriteIni;
|
||||
end;
|
||||
|
||||
@ -474,16 +470,11 @@ begin
|
||||
end;
|
||||
|
||||
procedure TMainForm.rgTestResultsSelectionChanged(Sender: TObject);
|
||||
var
|
||||
renderParams: TRenderParams;
|
||||
begin
|
||||
if FLockResults > 0 then
|
||||
exit;
|
||||
if (Tree.Selected <> nil) and (Tree.Selected.Data <> nil) then
|
||||
begin
|
||||
renderParams := TRenderParams(Tree.Selected.Data);
|
||||
|
||||
//renderParams.RenderState[CbFileFormat.ItemIndex] := TRenderState(rgTestResults.ItemIndex);
|
||||
TreeGetImageIndex(nil, Tree.Selected);
|
||||
Tree.Invalidate;
|
||||
end;
|
||||
@ -1181,6 +1172,15 @@ begin
|
||||
DefaultDraw := true;
|
||||
end;
|
||||
|
||||
procedure TMainForm.TreeDeletion(Sender: TObject; Node: TTreeNode);
|
||||
begin
|
||||
if (TObject(Node.Data) is TRenderParams) then
|
||||
begin
|
||||
TRenderParams(Node.Data).Free;
|
||||
Node.Data := nil;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TMainForm.TreeGetImageIndex(Sender: TObject; Node: TTreeNode);
|
||||
var
|
||||
renderParams: TRenderParams;
|
||||
|
Loading…
Reference in New Issue
Block a user