|
@@ -20,11 +20,14 @@ type
|
|
|
FHorizontalAlignment: TAlignment;
|
|
FHorizontalAlignment: TAlignment;
|
|
|
FItems: TListOfTStringList;
|
|
FItems: TListOfTStringList;
|
|
|
FReferenceDPI: integer;
|
|
FReferenceDPI: integer;
|
|
|
|
|
+ FTargetRasterImageList: TImageList;
|
|
|
FUseSVGAlignment: boolean;
|
|
FUseSVGAlignment: boolean;
|
|
|
FVerticalAlignment: TTextLayout;
|
|
FVerticalAlignment: TTextLayout;
|
|
|
FWidth: integer;
|
|
FWidth: integer;
|
|
|
|
|
+ FRasterized: boolean;
|
|
|
procedure ReadData(Stream: TStream);
|
|
procedure ReadData(Stream: TStream);
|
|
|
procedure SetHeight(AValue: integer);
|
|
procedure SetHeight(AValue: integer);
|
|
|
|
|
+ procedure SetTargetRasterImageList(AValue: TImageList);
|
|
|
procedure SetWidth(AValue: integer);
|
|
procedure SetWidth(AValue: integer);
|
|
|
procedure WriteData(Stream: TStream);
|
|
procedure WriteData(Stream: TStream);
|
|
|
protected
|
|
protected
|
|
@@ -34,6 +37,9 @@ type
|
|
|
function GetCount: integer;
|
|
function GetCount: integer;
|
|
|
// Get SVG string
|
|
// Get SVG string
|
|
|
function GetSVGString(AIndex: integer): string; overload;
|
|
function GetSVGString(AIndex: integer): string; overload;
|
|
|
|
|
+ procedure Rasterize;
|
|
|
|
|
+ procedure RasterizeIfNeeded;
|
|
|
|
|
+ procedure QueryRasterize;
|
|
|
public
|
|
public
|
|
|
constructor Create(AOwner: TComponent); override;
|
|
constructor Create(AOwner: TComponent); override;
|
|
|
destructor Destroy; override;
|
|
destructor Destroy; override;
|
|
@@ -81,6 +87,7 @@ type
|
|
|
property UseSVGAlignment: boolean read FUseSVGAlignment write FUseSVGAlignment default False;
|
|
property UseSVGAlignment: boolean read FUseSVGAlignment write FUseSVGAlignment default False;
|
|
|
property HorizontalAlignment: TAlignment read FHorizontalAlignment write FHorizontalAlignment default taCenter;
|
|
property HorizontalAlignment: TAlignment read FHorizontalAlignment write FHorizontalAlignment default taCenter;
|
|
|
property VerticalAlignment: TTextLayout read FVerticalAlignment write FVerticalAlignment default tlCenter;
|
|
property VerticalAlignment: TTextLayout read FVerticalAlignment write FVerticalAlignment default tlCenter;
|
|
|
|
|
+ property TargetRasterImageList: TImageList read FTargetRasterImageList write SetTargetRasterImageList default nil;
|
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
procedure Register;
|
|
procedure Register;
|
|
@@ -115,6 +122,15 @@ begin
|
|
|
if FHeight = AValue then
|
|
if FHeight = AValue then
|
|
|
Exit;
|
|
Exit;
|
|
|
FHeight := AValue;
|
|
FHeight := AValue;
|
|
|
|
|
+ QueryRasterize;
|
|
|
|
|
+end;
|
|
|
|
|
+
|
|
|
|
|
+procedure TBGRASVGImageList.SetTargetRasterImageList(AValue: TImageList);
|
|
|
|
|
+begin
|
|
|
|
|
+ if FTargetRasterImageList=AValue then Exit;
|
|
|
|
|
+ if Assigned(FTargetRasterImageList) then FTargetRasterImageList.Clear;
|
|
|
|
|
+ FTargetRasterImageList:=AValue;
|
|
|
|
|
+ QueryRasterize;
|
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
procedure TBGRASVGImageList.SetWidth(AValue: integer);
|
|
procedure TBGRASVGImageList.SetWidth(AValue: integer);
|
|
@@ -122,6 +138,7 @@ begin
|
|
|
if FWidth = AValue then
|
|
if FWidth = AValue then
|
|
|
Exit;
|
|
Exit;
|
|
|
FWidth := AValue;
|
|
FWidth := AValue;
|
|
|
|
|
+ QueryRasterize;
|
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
procedure TBGRASVGImageList.WriteData(Stream: TStream);
|
|
procedure TBGRASVGImageList.WriteData(Stream: TStream);
|
|
@@ -151,6 +168,7 @@ begin
|
|
|
FItems[index].Text := XMLConf.GetValue('Item' + i.ToString + '/SVG', '');
|
|
FItems[index].Text := XMLConf.GetValue('Item' + i.ToString + '/SVG', '');
|
|
|
end;
|
|
end;
|
|
|
finally
|
|
finally
|
|
|
|
|
+ QueryRasterize;
|
|
|
end;
|
|
end;
|
|
|
end;
|
|
end;
|
|
|
|
|
|
|
@@ -197,16 +215,19 @@ begin
|
|
|
list := TStringList.Create;
|
|
list := TStringList.Create;
|
|
|
list.Text := ASVG;
|
|
list.Text := ASVG;
|
|
|
Result := FItems.Add(list);
|
|
Result := FItems.Add(list);
|
|
|
|
|
+ QueryRasterize;
|
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
procedure TBGRASVGImageList.Remove(AIndex: integer);
|
|
procedure TBGRASVGImageList.Remove(AIndex: integer);
|
|
|
begin
|
|
begin
|
|
|
FItems.Remove(FItems[AIndex]);
|
|
FItems.Remove(FItems[AIndex]);
|
|
|
|
|
+ QueryRasterize;
|
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
procedure TBGRASVGImageList.Exchange(AIndex1, AIndex2: integer);
|
|
procedure TBGRASVGImageList.Exchange(AIndex1, AIndex2: integer);
|
|
|
begin
|
|
begin
|
|
|
FItems.Exchange(AIndex1, AIndex2);
|
|
FItems.Exchange(AIndex1, AIndex2);
|
|
|
|
|
+ QueryRasterize;
|
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
function TBGRASVGImageList.GetSVGString(AIndex: integer): string;
|
|
function TBGRASVGImageList.GetSVGString(AIndex: integer): string;
|
|
@@ -214,9 +235,41 @@ begin
|
|
|
Result := FItems[AIndex].Text;
|
|
Result := FItems[AIndex].Text;
|
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
|
|
+procedure TBGRASVGImageList.Rasterize;
|
|
|
|
|
+begin
|
|
|
|
|
+ if Assigned(FTargetRasterImageList) then
|
|
|
|
|
+ begin
|
|
|
|
|
+ FTargetRasterImageList.Width := Width;
|
|
|
|
|
+ FTargetRasterImageList.Height := Height;
|
|
|
|
|
+ {$IFDEF DARWIN}
|
|
|
|
|
+ PopulateImageList(FTargetRasterImageList, [Width, Width*2]);
|
|
|
|
|
+ {$ELSE}
|
|
|
|
|
+ PopulateImageList(FTargetRasterImageList, [Width]);
|
|
|
|
|
+ {$ENDIF}
|
|
|
|
|
+ end;
|
|
|
|
|
+end;
|
|
|
|
|
+
|
|
|
|
|
+procedure TBGRASVGImageList.RasterizeIfNeeded;
|
|
|
|
|
+begin
|
|
|
|
|
+ if not FRasterized then
|
|
|
|
|
+ begin
|
|
|
|
|
+ Rasterize;
|
|
|
|
|
+ FRasterized := true;
|
|
|
|
|
+ end;
|
|
|
|
|
+end;
|
|
|
|
|
+
|
|
|
|
|
+procedure TBGRASVGImageList.QueryRasterize;
|
|
|
|
|
+var method: TThreadMethod;
|
|
|
|
|
+begin
|
|
|
|
|
+ FRasterized := false;
|
|
|
|
|
+ method := RasterizeIfNeeded;
|
|
|
|
|
+ TThread.ForceQueue(nil, method);
|
|
|
|
|
+end;
|
|
|
|
|
+
|
|
|
procedure TBGRASVGImageList.Replace(AIndex: integer; ASVG: string);
|
|
procedure TBGRASVGImageList.Replace(AIndex: integer; ASVG: string);
|
|
|
begin
|
|
begin
|
|
|
FItems[AIndex].Text := ASVG;
|
|
FItems[AIndex].Text := ASVG;
|
|
|
|
|
+ QueryRasterize;
|
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
function TBGRASVGImageList.GetCount: integer;
|
|
function TBGRASVGImageList.GetCount: integer;
|