{"id":384,"date":"2017-03-28T05:36:28","date_gmt":"2017-03-28T05:36:28","guid":{"rendered":"http:\/\/www.bverhue.nl\/delphisvg\/?page_id=384"},"modified":"2026-05-03T04:55:04","modified_gmt":"2026-05-03T04:55:04","slug":"change-log","status":"publish","type":"page","link":"https:\/\/www.bverhue.nl\/delphisvg\/change-log\/","title":{"rendered":"Change log"},"content":{"rendered":"\n<hr class=\"wp-block-separator has-css-opacity\"\/>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Version 2.4 update 23, 3-5-2026<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Fixed a compilation error for iOS for D13, in BVE.SVG2FontCoreText.pas<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">V<strong>ersion 2.4 update 22, 12-9-2025<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Fixed a bug causing embedded fonts in CSS not being loaded<\/li>\n\n\n\n<li>Added Package files for Delphi 13<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Version 2.4 update 21, 25-7-2025<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Fixed an out-of-range error on rendering text, by filtering out unicode control characters.<\/li>\n\n\n\n<li>Fixed a bug in BVE.SVG2Elements.pas, changed procedure TSVGText.ProcessWhitespace1 to ignore the soft hyphen character U+00AD, because this resulted in een text rendering error. Also, the supported SVG version does not support word breaking.<\/li>\n\n\n\n<li>Fixed a bug in BVE.SVG2Context TSVGSchemaWriter, forced US format of decimal characters.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Version 2.4 update 20, 9-11-2023<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Added package files for Delphi 12.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Version 2.4 update 19, 1-4-2023<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">XML<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Added class method ClassRegisterDocBinding to TSVGXMLDocument to enable registering element classes before the TSVGXMLDocument object creation.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Patterns<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>The pattern tile is increased with one pixel to decrease the chance on seams. This can be enabled\/disabled with define &#8220;SvgPatternCorrectSeams&#8221;<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Text<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Fixed an &#8220;out of range&#8221; bug and some other issues in Bidi text and direction processing<\/li>\n\n\n\n<li>Made a change to &#8220;text to path&#8221; functionality, the original id of the converted text elements is transferred to the resulting g elements, previously this was set to id=&#8221;text&#8221;.<\/li>\n\n\n\n<li>Fixed a bug in BVE.SVG2GeomUtility function PtOnPoly, causing textPath on multiple paths not to continue on the next path<\/li>\n\n\n\n<li>Fixed a bug which caused invalid dy calculations on textPaths<\/li>\n\n\n\n<li>Fixed a typo in ISVGGlyphRun.Addvances -&gt; Advances<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Paths<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Fixed a bug in BVE.SVG2PathData function TSVGPathStringParser.ParseDrawToCommands, shorthand\/smooth quadratic bezier path parsing (t, T) was not correct.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">CSS<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Fixed a bug which caused errors in css parsing if comment elements &lt;!&#8211; &#8230; &#8211;&gt; where embedded in the css.<\/li>\n\n\n\n<li>Fixed a bug in css pseudo-class &#8220;nth-child&#8221;, elements are 1 based, not 0 based.<\/li>\n\n\n\n<li>Added css pseudo classes nth-of-type, first-of-type, last-of-type.<\/li>\n\n\n\n<li>Fixed a bug in CSS animation in which animation properties did not cascade.<\/li>\n\n\n\n<li>Fixed a bug in CSS animation which caused incorrect animation if the keyframe rules where not defined in increasing order in the stylesheet.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Filters<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Changed the way that ColorSpace and Premultiplied conversions on intermediate buffers are applied, this fixes a number of color and gamma errors.<\/li>\n\n\n\n<li>Fixed a bug unit in BVE.SVG2Elements, procedure TSVGObject.PaintBufferIntermediateAndApply which resulted in incorrect filter rendering in some cases.<\/li>\n\n\n\n<li>Fixed a bug in TSVGContextD2d3D11.FilterComponentTransfer resulting in Linear and Gamma functions not working.<\/li>\n\n\n\n<li>Fixed a bug in TSVGContextD2d3D11.FilterBlend, TSVGContextD2d3D11.FilterComposite, TSVGContextD2d3D11.FilterDisplacementMap which could result in a wrong translation before applying the effect.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">DLL and Multi threading<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Fixed a bug which caused FinilizeGraphics not being called if render context SVGDirect2d3D11 is used in a DLL.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Version 2.2 update 15, 12-10-2022<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Changed FreeAndNil(&lt;interface var&gt;) into &lt;interface var&gt; := nil <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Changed Type ExtendMode from Integer to D2D1_EXTEND_MODE (in case of compiler version 350 and up = D11)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Changed all enumerations, for example Brush = TBrushKind.bkSolid to TBrushKind.Solid in case of compiler version 350 and up (mostly in FMX).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"> <strong>Version 2.4 update 18, 22-12-2021<\/strong> <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Fixed a bug in BVE.SVG2Elements.pas, procedure TSVGText.SelectGlyphs, which could cause an &#8220;Out of range&#8221; exception if bidi control characters are present in text.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Fixed a number of bugs in the TSVG2ImageList &#8220;Entity&#8221; functionality and image list designer.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Added classes TSVGRenderContextFactory and TSVGFontSystemFactory to units BVE.SVG2Elements.VCL, BVE.SVG2Elements.FMX and BVE.SVG2Elements.FPC for more control on how and when the OS dependent render context types and and font system types are selected.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Added code to the TSVGRenderContextManager to check if the WIC render context is supported.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Version 2.4 update 17, 12-11-2021<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Fixed function TSVGPaint.GetAsString: TSVGUnicodeString; in BVE.SVG2Types.pas, for converting the record back to text.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Fixed function function ColorToCSSColor(Value: TColor): string; in BVE.SVG2Elements.VCL.pas, alpha component should be the last digits.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Fixed a bug in unit SVG2.Elements.pas procedure TSVGXMLDocument.ElementRegister and procedure TSVGXMLDocument.ElementUnregister, the wrong element could be registered or unregistered if there are multiple elements with the same id attribute.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Fixed a bug in XMLImportNode in unit BVE.SVG2Dom, which caused new elements with an id attribute not to be registered in the SVG document ElementIndex.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Version 2.4 update 16, 26-10-2021<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Fixed a bug in BVE.SVG2Control.FPC.pas, SVG renderings were not correctly displayed on a high retina display on MacOS.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Fixed a bug in TSVG2BaseView, unit BVE.SVG2Doc.pas, which caused mousepointer positions for SVG controls not to be calculated correctly if the monitor scaling is greater then 100%.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Fixed a bug in BVE.SVG2Elements.pas, TSVGPathShape, empty paths are now excluded from size calculations and mousepointer calculations.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Fixed a bug in PathData &#8220;ApplyMatrix&#8221;, the matrix was not applied to the variables FFirstpoint and FLastPoint in the root class.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Added a workaround for GDI+ GraphicPath.GetBounds, which returns (0,0,0,0) for path M20,20 L20,20. This should be (20,20,20,20).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Version 2.4 update 15, 23-9-2021<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Fixed a bug in TSVGFormatter: CData element was not parsed<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Fixed a bug in TSVGXMLReader.ParseCData: element closure &#8220;]&gt;&#8221; was not consumed<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Fixed a bug in TSVGXMLReader.ReadExtraBuffer: buffer length was overwritten on Freepascal<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Fixed a bug in BVE.SVG2ContextFMX.pas&#8221;: TTextAlign.taLeading was not changed in TTextAlign.Leading for D11<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Fixed a bug in BVE.SVG2ContextQuartz, datatype Single needed to be changed to CGFloat, which caused gradients not to be rendered on MacOS64<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Added method IsScaled to TSVG2BaseImageList for D11, for HDPMI compatibility<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Added TSVGContextQuartzPrintJob for render context Quartz (MacOS)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Made a global for the standard internal DPI: SVG_StdDPI in BVE.SVGTypes<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Version 2.4 update 14, 11-9-2021<\/strong> <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Fixed a bug in BVE.SVG2Doc.pas, procedure TSVG2CustomAnimationTimer.CalcFPS; that caused an arithmatic overflow in certain conditions.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Added project files for Delphi 11 Alexandria<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Removed version 2.3 from the source code zip file. If you need older versions of the package, you can send me an request by mail.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Version 2.4 update 13, 31-8-2021<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Fixed a bug in BVE.SVG2FontCoreText.pas that caused SVG fonts not to be rendered on MacOS and iOs.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Fixed a bug in BVE.SVG2Elements.FPC.pas that caused a compilation error on TSVGRenderContextManager.CreatePrintJob on FPC for MacOS.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Made some optimizations in Filter convolve algorithm.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Added missing code in BVE.SVG2ContextGP.pas for assigning and copying GDI+ pathdata.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Added a check and work around in BVE.SVG2FontGDI.pas in case glyphs are missing for a particular font.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Version 2.4 update 12, 7-7-2021<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Fixed a bug in BVE.SVG2Graphic.VCL: after calling TSVG2Graphic.LoadFromFile or TSVG2Graphic.LoadFromStream the SVG document was not automatically parsed on rendering, resulting in a blank image.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Version 2.4 update 11, 3-7-2021<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Fixed a bug in BVE.SVG2Elements.FPC TSVGRenderContextManager.CreatePrintJob: added missing parameters.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Fixed a bug that caused printer settings not being applied if printing with GDI+ render context.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Fixed a bug in the text rendering algorithm: the delta x or y of a character was ignored if an absolute x or y was also defined for the character.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Fixed a bug BVE.SVG2FontGDI.pas that caused incorrect placement of glyphs in case of very small font sizes.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Fixed a bug in calculating text positions in case of TSVGTextFormattingOption is tfoStringsWithPlacedCharacters.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Fixed a bug that caused a gradient not to be applied correctly over multi line text in case of Direct2D.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Added class function &#8220;Capabilities: TSVGRenderContextCapabilities;&#8221; to render context classes, for interrogating the capabilities of a render context.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Added class TBitmapCodecSVG to unit BVE.SVG2Elements.FMX. This is a bitmap codec for loading SVG files.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Added functionality to BVE.SVG2ContextGP.pas and BVE.SVG2FontGDI.pas for improved font selection when rendering text with GDI+.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Version 2.4 update 10, 7-6-2021<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Fixed a bug in unit BVE.SVG2ContextD2D procedure TSVGPathDataD2D.AddPathData(const aPathData: ISVGPathData; const aMatrix: TSVGMatrix); which caused the existing pathdata to be discarded.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Fixed a bug in unit BVE.SVG2PathData which resulted in FPointCount and FLastPoint not being updated after a call to AddPathData<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Fixed a bug which caused the renderer not updating the object cache after setting an attribute with TSVGElement.SetAttribute, solved by calling ObjectCacheInvalidate.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Added procedure ObjectCacheInvalidate(aParentCache: ISVGObjectCache); to ISVGObject, this decreases the object cache version and of its children, so the cache will be updated on the next render<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Added procedure SetPathDataList(aRoot: ISVGRoot; const aValue: ISVGPathDataList); to ISVGPathShape to directly set de pathdata<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Registered PidOSX64 on FMX components from DX10.1 Berlin onwards<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Version 2.4 update 9, 18-4-2021<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Added a member &#8220;property Data: Pointer&#8221; to TSVGElement (ISVGELement) to link application-defined data<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Added function &#8220;PointInStroke&#8221; to TSVGRectangle, TSVGCircle, TSVGEllipse<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Added Event &#8220;OnRenderSVGObject(const Value: TProcRenderSVGObject);&#8221; on TSVGRoot, this is called when an element is about to be rendered.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Added members &#8220;function Invalidated(const aBounds: TSVGRect): Boolean;&#8221; &#8220;procedure InvalidateRect(const aRect: TSVGRect);&#8221; and &#8220;property UpdateRectList: TList read GetUpdateRectList;&#8221; to TSVGRoot. These can be used to restrict rendering to the supplied rectangles for efficiency.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Added &#8220;rsCalcCache&#8221; to the TSVGRenderMode. When this is included in the TSVGRoot.RenderMode then only the element cache will be recalculated, no actual painting will take place.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Fixed a bug which caused TSVGPathData.Count to be inconsistent. It will now return the TSVGPathPoint count, including M and Z.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Fixed a bug in TSVGPathDataD2D.AddPathData which caused figures not be closed if open and closed figures where both present in a geometry<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Fixed a bug which caused animated elements not being updated if sroPersistentBuffers was included in the TSVGRoot.RenderOptions.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Fixed a bug in BVS.SVGDOM.pas in setAttributeNodeNS and setAttributeNS function tryFindNamedItemNS was called width a qualified name instead of a local name.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Fixed a bug in TSVGPathData that could cause an access violation, because the FPolygonList was not assigned<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Fixed a bug in the adaptive delay in TSVG2CustomAnimationTimer.CalcInterval that caused animations to run unstable<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Fixed a bug in SVG2ImageListEditor.FMX.pas which caused item selection in lists present in the FMX SVG image list component editor not to function as expected.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Fixed a bug in SVG2ImageListEditor.FMX.pas which caused updates in the StyleStringValues control in the FMX SVG image list component editor not to function as expected.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Version 2.4 update 8 amendment, 24-3-2021<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Fixed a bug in which DpiY and height parameters where swapped in TSVGContextD2dPrintJob.BeginPage<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Forgot to enable {$Define SVG_2} in CompilerSettings.inc, which will cause transform parameter in css to be disabled<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Version 2.4 update 8, 21-3-2021<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Added support for custom font collections (for text layouts GDI and DirectWrite)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Added support for rendering to (PDF) printer (for render contexts GDI+ and Direct2D and FMX canvas)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Added support for rendering text through the render context (for outputting text in stead of only glyph contours to PDF documents)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Added support for rendering to command lists (GDI+ EMF metafile and Direct2D command list) and drawing command lists<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Added events for loading external and embedded resources<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Added classes TSVGParserThread, TSVGParserQueue in unit BVE.SVG2SaxParser.pas for parsing SVG in a threads<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Added classes TSVGRenderThread, TSVGRenderQueue in unit BVE.SVG2Elements.pas for rendering SVG&#8217;s in a threads<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Added ESvgRcException, ESvgRcD2dException, ESvgRcGPException to enable intercepting render context (resp. Direct2D, GDI+) exceptions<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Removed minimize buttons from TSVG2ImageList component editor dialog<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Fixed a bug with selecting the first SVG in the TSVG2ImageList FMX component editor<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Added function to save the source SVG&#8217;s from the TSVG2ImageList FMX component editor<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Fixed a bug in the TSVGPathDataIteratorGP object, which missed a &#8220;close&#8221; command in some cases<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Fixed a bug which caused indent spaces to be included in text, when saving XML document to file<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Fixed a bug that if an attribute value was invalid, it was not ignored<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Fixed a bug that when an element was removed from a document, it&#8217;s childerd where not unregisterd from the document, which could cause an access violation.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Version 2.4 update 7, 9-2-2021<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Added options for rendering text in EMF files, see <a href=\"http:\/\/www.bverhue.nl\/SVGDoc24\/Delphi%20SVG%20control%20version%202_4.html#idRenderingToEMF\" target=\"_blank\" rel=\"noreferrer noopener\">documentation<\/a> and <a href=\"https:\/\/github.com\/BVerhue\/delphi-svg-control-examples\/tree\/master\/SVGv240\/Examples\/RenderToEMF\" target=\"_blank\" rel=\"noreferrer noopener\">RenderToEMF example<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Added property &#8220;HideDesignRect&#8221; in the SVG controls, see <a href=\"http:\/\/www.bverhue.nl\/SVGDoc24\/Delphi%20SVG%20control%20version%202_4.html#idPropertyHideDesignRect\" target=\"_blank\" rel=\"noreferrer noopener\">documentation<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Added an optimization that if a clipPath is a simple axis aligned rectangle, this will be rendered as a simple cliprect, in stead of creating an alpha bitmap buffer.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Added property &#8220;FontFaceList&#8221; on the &#8220;ICSSStyleSheet&#8221; interface, so it is possible to iterate through the font faces defined in a cascading style sheet.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Fixed a bug on TSVG2ImageList that prevented re-render of images to match monitor scale on loading of the component.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Fixed a bugs in the GDI text layout, that prevented the correct font face being selected.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Fixed a bug that caused SVG fonts defined in a style sheet not being selected.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Version 2.4 update 6, 16-1-2021<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Fixed a bug parsing CData element in BVE.SVG2XMLReader. This bug resulted in the first character of the data not being read.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Added a compiler switch &#8220;SvgCtrlExceptionsOff&#8221; in CompilerSettings.inc. If enabled than the exception that is raised if you try to load a non-existing SVG file in one of the SVG controls, will be suppressed and the error will be displayed in the SVG control window in stead. This switch is enabled by default.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Version 2.4 update 5, 3-1-2021<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Fixed a bug in TSVG2ImageList, style names where not saved.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Fixed a bug in TSVG2ImageList, custom style svg definition was not saved.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Fixed a bug in TSVG2ImageList for Fmx, if a style was deleted the images disappeared from the grid of the designer.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Fixed a bug which caused an exception if a text child has attribute display=&#8221;none&#8221; defined.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Added a check that entity names are valid in BVE.SVG2XMLReader.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Added a check that attribute names are preceded with a space in BVE.SVG2XMLReader.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Version 2.4 update 4, 13-12-2020<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Fixed bug, when used in a dll, Direct2D or GDI+ must be initialized\/finalized<br>explicitly. However, a bug prevented Direct2D to be finalized correctly which<br>resulted in the dll not to being unloaded.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Fixed bug, animations in TSVG2Control and TSVG2Image did not start automatically.<br>only when rendered first, before the animation timer was started.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Fixed bug, sometimes, on closing the application, the SVG controls are not<br>correctly unregistered from the animation timer which caused an exception.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Version 2.4 update 3, 28-10-2020<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Fixed bug, compilation error if render context GDI+ (SVGGDIP) was selected<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Changed parameter aPt in VCL &#8220;ObjectAtPt&#8221; function from TPointF to TSVGPoint<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Version 2.3 and 2.4 21-10-2020<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Fixed bug, compiler error in BVE.DX.DXGI.pas if compiled with &#8220;emit runtime type information&#8221; enabled<\/p>\n\n\n<p><strong>Version 2.2, 2.3 and 2.4 21-10-2020<\/strong><\/p>\n<p>Fixed bug, arc segments with very large radius where not rendered correct on Direct2D<\/p>\n<p><strong>Version 2.4 16-10-2020<\/strong><\/p>\n<p>Added SVG\/SMIL and CSS animation<\/p>\n<p>Added new control TSVG2DirectXControl for VCL, enabling smooth GPU enabled animation<\/p>\n<p>Added support for different XML vendor implementations<\/p>\n<p>Added functionality TextToPath<\/p>\n<p>Disabled range checking in SaveBitmapAsPng procedure in SVG2Elements.VCL<\/p>\n<p><strong>Version 2.3 update 11, 17-10-2020<\/strong><\/p>\n<p>Fixed problem with compiling in Delphi 10.4 update 1, TCall members made public in BVE.SVG2Types<\/p>\n<p><strong>Version 2.3 update 10, 12-10-2020<\/strong><\/p>\n<p>Fixed a bug in parsing the end parenthesis of &#8220;matrix(&#8230;)&#8221; in the &#8220;transform&#8221; attribute which could cause wrong transformation calculations in certain SVG images.<\/p>\n<p><strong>Version 2.3 update 9, 30-9-2020<\/strong><\/p>\n<p>Enabled reordering of SVG&#8217;s in TSVG2ImageList<\/p>\n<p>Changed order of &#8220;Ok&#8221; and &#8220;Cancel&#8221; knobs on designer of TSVG2ImageList<\/p>\n<p>Added a component editor to the SVG controls for loading large SVG file and added compression when SVG files are stored in the form file.<\/p>\n<p>Fixed bug: &#8220;Scaled&#8221; property was not copied on assign of TSVG2ImageList<\/p>\n<p>Fixed bug: Connected TSVG2LinkedImageLists are not rebuild after assign of TSVG2ImageList<\/p>\n<p>Fixed bug: On FMX the element bounds were not calculated correctly, which caused mousepointer events not being fired.<\/p>\n<p>Fixed bug: When Direct2D and GDI+ render contexts are both enabled, this causes an error when Direct2D is not available on the system. Fixed this by adding &#8220;delayed&#8221; to the external function declarations.<\/p>\n<p>Fixed some bugs in the rendering procedures.<\/p>\n<p><strong>Version 2.3 update 8, 16-9-2020<\/strong><\/p>\n<p>Fixed a new bug, introduced in update 7, for positioning the filter source background buffer<\/p>\n<p><strong>Version 2.3 update 7, 12-9-2020<\/strong><\/p>\n<p>Fixed a bug calculating position of the filter source buffer and filter background buffer.<\/p>\n<p>Fixed a problem in function &#8220;PNG4TransparentBitMap&#8221; that caused compilation errors if compiling with range checking enabled.<\/p>\n<p>Added default font names for Android in unit BVE.SVG2Types.<\/p>\n<p>Fixed a bug that caused incorrect mousepointer location calculations.<\/p>\n<p><strong>Version 2.3 update 6, 27-5-2020<\/strong><\/p>\n<p>Added packages en files for Delphi 10.4 Sydney.<\/p>\n<p><strong>Version 2.3 update 5, 7-3-2020<\/strong><\/p>\n<p>Added the Aggpas rendercontext option to FPC\/Freepascal. If CWBudde\/AggPasMod does not compile, try the forked version BVerhue\/AggPasMod.<\/p>\n<p>Fixed a SVG control sizing problem in the FPC\/Lazarus SVGViewer application<\/p>\n<p><strong>Version 2.3 update 4, 22-2-2020<\/strong><\/p>\n<p><em><strong>Important!<\/strong><\/em><\/p>\n<p>In this update the SVG components and controls are upgraded. This means that some properties are added or deleted or changed, which will give warnings when you update the SVG control packages and then open your project in the Delphi or Lazarus IDE. You should therefore make a backup of your application source including your previous version of the SVG package before upgrading.<\/p>\n<p>In principle all warnings about changed properties should be accepted. When you have used the FMX (Firemonkey) version of the TSVG2ImageList from version XE8 onwards, the SVG info will be lost and you have to import the SVG&#8217;s again after upgrading. The TSVG2ImageList for VCL and FPC\/Lazarus will give warnings but will be o.k. if you accept all warnings.<\/p>\n<p>Other changes:<\/p>\n<p>Fixed an error in the TSVGBaseBitmap.CopyFrom method. The destination rectangle was not calculated correctly which resulted in an incomplete copy.<\/p>\n<p>Fixed a problem in font selection. Sometimes text was not displayed because the font was not found locally on the system. Now more fall back fonts are defined for Windows, OsX and Linus platforms.<\/p>\n<p>Fixed an error in the lighting filters which caused an exception on freeing the root.<\/p>\n<p>Fixed an error in the box-blur algorithm that could cause an exception.<\/p>\n<p><strong>Version 2.3 update 3, 8-12-2019<\/strong><\/p>\n<p>Fixed problem with embedded raster graphics if the type (png, bmp etc.) is not explicitly mentioned in the mime type. The package will attempt to determine the type from the raw data.<\/p>\n<p>Fixed a problem with temporary bitmaps of zero size in Direct2D and Aggpas render context which threw exception errors.<\/p>\n<p>Fixed an error with anchoring text on a path.<\/p>\n<p>Fixed an error with calculating the source graphic rectangle for SVG graphics with filters.<\/p>\n<p>Fixed an error with calculating the bounding rectangle for non outer SVG elements.<\/p>\n<p><strong>Version 2.3 update 2, 31-10-2019<\/strong><\/p>\n<p>&#8211; Fixed error &#8220;Object state out of sync&#8221;. This happened if the DOM structure state changed between rendering. The fix is that the ObjectStateTree is invalidated (ObjectStateInvalid = TRUE) if an element is added or deleted or a href attribute is changed. ObjectStateInvalid = TRUE will cause a rebuild of the ObjectStateTree on the next rendering if sroEvents is included in the options.<\/p>\n<p>&#8211; Fixed error with DPI scaling for render context Direct2D and GDI+. If the monitor is set on a higher DPI scale before the applications was started the SVG image was rendered too big. Reason was an incorrect DPI setting for these render contexts which caused a doubling of the scale.<\/p>\n<p>&#8211; Fixed an cause for a compiler error in XE2 (URW1147 caused by a call to Finalyze on a TBytes object) in BVE.SVG2FontGDI.pas<\/p>\n<p><strong>Version 2.3 update 1, 21-9-2019<\/strong><\/p>\n<p>Fixed an issue with thread safety on FPC\/Lazarus<br \/>Fixed some issues with font selection<br \/>Fixed an issue with placing glyphs on a path<br \/>Fixed an issue with rendering png files on Quartz, the target needed to be cleared first.<\/p>\n<p><strong>Version 2.3, 9-9-2019<\/strong><\/p>\n<p>Added support for FPC\/Lazarus, supported platforms are now:<br \/>&#8211; Delphi VCL<br \/>&#8211; Delphi FMX<br \/>&#8211; Freepascal with Lazarus<\/p>\n<p>Changes to render contexts (RC&#8217;s):<\/p>\n<p>Added RC Quartz<br \/>&#8211; for Delphi FMX only<br \/>&#8211; Limitations:<br \/>&#8211; Spread method on gradients not supported<\/p>\n<p>Added RC BGRABitmap<br \/>&#8211; for FPC\/Lazarus only<br \/>&#8211; Limitations:<br \/>&#8211; Spread method on gradients not supported<\/p>\n<p>Added RC Direct2D (3D11) (DirectX version 11) to existing Direct2D (WIC)<br \/>&#8211; for Delphi VCL, Delphi FMX, FPC\/Lazarus<br \/>&#8211; Hardware acceleration (3D11)<\/p>\n<p>Updated RC Windows GDI+<br \/>&#8211; For Delphi VCL, FMX<br \/>&#8211; Limitations<br \/>&#8211; Radial gradient is not rendered correctly<\/p>\n<p>Added RC Graphics32<br \/>See https:\/\/github.com\/graphics32\/graphics32<br \/>&#8211; For Delphi VCL, FPC\/Lazarus<\/p>\n<p>Updated RC Aggpas<br \/>See https:\/\/github.com\/CWBudde\/AggPasMod<br \/>&#8211; For Delphi VCL, FMX<\/p>\n<p>Separated RenderContext&#8217;s and text rendering. For text rendering of system fonts and SVG fonts the following interfaces are added:<\/p>\n<p>SVGFontDirectWrite<br \/>&#8211; for Windows<\/p>\n<p>BVE.SVG2FontGDI<br \/>&#8211; for legacy Windows<\/p>\n<p>BVE.SVG2FontCoreText<br \/>&#8211; for Mac, iOS<\/p>\n<p>BVE.SVG2FontFreetype<br \/>&#8211; for Windows, Mac, Linux (freetype.dll needs to be installed)<\/p>\n<p>&#8211; Full rewrite of the SVG library:<\/p>\n<p>Based all element and attribute interfaces on IXMLNode.<br \/>Integrated the SVG parser so it can be used to build the DOM but also extend\/change the DOM after building or set attributes.<br \/>Replaced the text rendering algorithm, added support for bidirectional text, text-decoration for SVG fonts and system fonts for RC that support BIDI.<\/p>\n<p>property &#8220;DownSampleFactor&#8221; was removed from the FMX controls.<\/p>\n<p>Changed the license to subscription.<\/p>\n<p>&#8211; There is a one time fee on purchase of a license and a yearly fee for upgrades and support.<br \/>&#8211; Owners of a v2.2 license can upgrade to v2.3 and only need to pay the subscription fee.<\/p>\n<p><strong>Version 2.2 update 13, 8-12-2018<\/strong><\/p>\n<p>Fixed bug, TSVG2ImageList.VCL ClearColor attribute was lost after closing\/loading project<\/p>\n<p>Fixed bug, BeginUpdate\/EndUpdate didn&#8217;t work propertly in TSVG2ImageList.VCL<\/p>\n<p>Fixed bug, XML Reader Eval function failed if close to buffer end<\/p>\n<p>Created project files and package files for Delphi DX3 Rio<\/p>\n<p>Improved functionality for finding SVG elements by coordinates, for SVG mouse events and ObjectAt function.<\/p>\n<p>Added ChangeScale overrides to VCL SVG controls for support of DPI and monitor scale settings<\/p>\n<p>Added High DPI support to the viewer demo application for VCL for DX (Seattle) and higher<\/p>\n<p>Created a new viewer demo application for FMX for XE8 and higher<\/p>\n<p>Removed the SVGBrowser and SVGToRaster demo apps<\/p>\n<p><strong>Version 2.2 update 12, 1-8-2018<\/strong><\/p>\n<p>Fixed typo in TSVGMask assign<\/p>\n<p>Fixed bug, group opacity was not applied on use elements<\/p>\n<p>Fixed bug, if illegal char in path, parser should finish the path without error messages.<\/p>\n<p>New license terms for licenses bought after 1-8-2018<\/p>\n<p><strong>Version 2.2 update 11, 24-6-2018<\/strong><\/p>\n<p>Added &#8220;AspectRatioAlign&#8221; and &#8220;AspectRatioMeetOrSlice&#8221; properties on the SVG controls. Together with the &#8220;AuotViewbox&#8221; property these control the aspect ratio of the SVG graphic within the control.<\/p>\n<p>Added support for the &#8220;fill-rule&#8221; and &#8220;clip-rule&#8221; presentational attributes. This is supported by Direct2D and Aggpas render contexts, but not by the FMX render context and the GDi+ render context.<\/p>\n<p>Added support for decimal and hexadecimal entity parsing in BVE.SVG2XMLReader.pas<\/p>\n<p>Added support for downloading external resources from internet, this must be enabled by define &#8220;InternetAccess&#8221; in CompilerSettings.inc<\/p>\n<p>Improved parsing speed of path elements with about 30%<\/p>\n<p>Changed implementation of ISVGRenderBuffer for improved support for bitmap operations on rotated elements<\/p>\n<p>Changed bitmap buffers for BVE.SVG2Control.FMX.pas, BVE.SVG2Image.FMX.pas to support screen scale other than 1 (iOS)<\/p>\n<p>Changed behaviour of unsupported float values (null) of element parameters in BVE.SVG2SaxParser.pas and BVE.SVG2PathData.pas, in case of an unsupported value the default value of the attribute will be used.<\/p>\n<p>Fixes a bug on the FMX controls, opacity property was broken<\/p>\n<p>Fixed a bug in SVGControl (VCL and FMX) that caused an access violation if the bitmap buffer is zero size due to clipping.<\/p>\n<p>Fixed a bug &#8220;bus error&#8221; on Android, caused by &#8220;packed&#8221; directive on the TSVGPathPoint record<\/p>\n<p>Fixed a bug which could cause an access violation on the specular light filter, because of bitmap buffer size mismatch<\/p>\n<p>Fixed a bug which could cause clipPaths not being rendered correctly in case of nested clipPaths<\/p>\n<p>Fixed a bug which caused opacity attribute not being rendered correctly on gradients by Aggpas render context.<\/p>\n<p><strong>Version 2.2 update 10, 4-4-2018<\/strong><\/p>\n<p>Fixed bug: Internal search on element id was case-insensitive.<\/p>\n<p>Fixed bug: Opacity was applied double on radial and linear gradient in the render context implementation for Direct2D<\/p>\n<p>Fixed bug: Temporary bitmap buffers where not always pixel aligned with target bitmap, which resulted in color shift on edges of for example clippath.<\/p>\n<p><strong>Version 2.2 update 9, 30-1-2018<\/strong><\/p>\n<p>Fixed a bug that could lead to parsing errors if the US decimal point format settings are changed on the user&#8217;s pc.<\/p>\n<p>Fixed a bug in the TSVG2ImageList which led to small artefacts being visible in the rendered images of the image list. The problem was that the bitmaps where added premultiplied to the list, they should first be unpremultiplied.<\/p>\n<p>Added parameter &#8220;PreserveContentBitmap&#8221; to the SVGRenderToBitmap function in unit BVE.SVG2Elements.VCL. If set to TRUE, the bitmap will not be cleared (with alpha black = $00000000), but the SVG graphic will be drawn on top of the existing bitmap content. This parameter is set to a default value of FALSE.<br \/>The TSVG2ImageList object will initialize a bitmap with the clear colour and then call this function with the parameter set to TRUE, so the clear colour is preserved.<\/p>\n<p><strong>Version 2.2 update 8, 6-12-2017<\/strong><\/p>\n<p>Fixed bug in sax parser, first node is not cleared from NodeStack, which resulted in big memory consumption on repeated parsing (random star example)<\/p>\n<p>Fixed bug in triggering text event, bug in character cell bounds calculation<\/p>\n<p>Fixed a bug, introduced in Update 7, if windows system DPI is changed, the SVG rendering scale was not correct.<\/p>\n<p>On some Windows systems the Direct2D DC rendering does not work, resulting in black bitmaps. I replaced the DC rendering target with a WIC rendering target, which was already used but only for intermediate buffers.<\/p>\n<p>Fixed a bug, if an Base64 encoded embedded SVG image contains Linefeed characters (#10), this would result in a image decoding error. This is solved by adding #10 to the entity list of the XML reader in BVE.SVG2XMLReader.pas<\/p>\n<p>Added support for complex font-face-src CSS definitions and SVG elements. This now supports multiple sources and the &#8220;local&#8221; directive.<\/p>\n<p>Removed some unused code in BVE.RenderContextDirect2D.VCL.pas<\/p>\n<p><strong>Version 2.2 update 7, 20-11-2017<\/strong><\/p>\n<p>Fixed bug parsing CSS sheet id name and class name<\/p>\n<p>Fixed access violation on rendering text with GDI<\/p>\n<p>Added example RenderToEMF<\/p>\n<p><strong>Version 2.2 update 6, 7-11-2017<\/strong><\/p>\n<p>Fixed bug in parsing &#8220;Transform&#8221; attribute, comma seperator was ignored<\/p>\n<p>Fixed bug in path &#8220;t&#8221;,&#8221;T&#8221; and &#8220;s&#8221;, &#8220;S&#8221; commands<\/p>\n<p><strong>Version 2.2 update 5, 10-6-2017<\/strong><\/p>\n<p>Restructured detection of encoding in BVE.SVG2XMLReader.pas, this solves issues reading UTF-16 encoded xml files with BOM<\/p>\n<p>Fixed a bug in TSVG2Graphic which resulted in bitmap not cleared with transparent before rendering<\/p>\n<p><strong>Version 2.2 update 4, 7-6-2017<\/strong><\/p>\n<p>Fixed memory leak in BVE.SVG2XMLReader.pas, in case of BOM reading<\/p>\n<p>Disabled a debugging line that was forgotten in BVE.SVG2ImageList.VCL.pas (clear bitmap with blue color)<\/p>\n<p><strong>Version 2.2 update 3, 4-5-2017<\/strong><\/p>\n<p>Solved a bug parsing comments in CSS<\/p>\n<p>Solved a bug parsing Unicode references in glyph definitions<\/p>\n<p>Added CalcIntrinsicSize to TSVGRoot to calculate the initial size of an SVG in pixels, also if it it&#8217;s size is given in percentages or not defined at all. In controls this will now be called through the &#8220;CalcSize&#8221; procedure.<\/p>\n<p>Fixed a bug in TSVG2Graphic Draw procedure placing the bitmap origin<\/p>\n<p><strong>Version 2.2 update 2, 9-4-2017<\/strong><\/p>\n<p>Support for iso-8859-1 encoded xml files.<\/p>\n<p>Fixed missing unit in XE5 and DX2 Raster demo project files<\/p>\n<p><strong>Version 2.2 update 1, 1-4-2017<\/strong><\/p>\n<p>Lighting-color sRGB to Linear conversion<\/p>\n<p>Morphology filter output set to premultiplied<\/p>\n<p>Displacement filter, if in = in2 a temporary copy of the in2 buffer is made because in2 should not be premultiplied<\/p>\n<p><strong>Version 2.2, 24-3-2017<\/strong><\/p>\n<p>Biggest changes are:<\/p>\n<ul>\n<li>Added SVG filter effects functionality<\/li>\n<li>Added SVG events functionality<\/li>\n<li>Added a ISVGRenderContext implementation for the AggPas rasterizer and renderer<\/li>\n<li>Added project files for Delphi 10.2 Tokyo (DX2)<\/li>\n<\/ul>\n<p>Some control properties where removed:<\/p>\n<ul>\n<li>property &#8220;RenderContextType&#8221; was removed from the VCL controls<\/li>\n<li>property &#8220;Buffering&#8221; was removed from the FMX controls<\/li>\n<\/ul>\n<p>Added functionality to store multiple outer SVG docs in one TSVGRoot element that reference each other.<\/p>\n<p>Added TSVGRenderContextManager for managing the selection of a render context type and the appropriate object types for buffers and pathdata<\/p>\n<p>Created a new VCL Viewer demo application<\/p>\n<p>Replaced some types with special types to have more control, TSVGFloat for double or single, TSVGPoint for TPointF, TSVGMatrix for TMatrix, TSVGRect for TRectF, default float is now a double<\/p>\n<p>Split the style attribute list of the rendering elements into StyleAttributes, InlineStyle And StylesheetStyle, so the correct priority of styles can be implemented.<\/p>\n<p>Simplified the code by placing shared objects in the SVGRoot, in stead of passing them as parameters in functions, for example CTM (current transformation matrix), CVP (current viewport), CSA (current style attribues), CRC (current render context)<\/p>\n<p>Solved xml entity parsing bug<\/p>\n<p>Solved a bug in parsing xml namespaces<\/p>\n<p>Solved some viewport bugs<\/p>\n<p>Solved bug in pattern rotation<\/p>\n<p>Enabled parsing of embedded SVG files within image elements.<\/p>\n<p>Set the correct default preserve aspect ratio on symbol, svg, marker and image elements<\/p>\n<p>Implemented &#8220;inherit&#8221; option on a number of attributes<\/p>\n<p>Solved bugs in gradients for VCL, these should now all render correctly in VCL, including radial gradients with focus<\/p>\n<p>Added the gradient stop color and gradient stop opacity style attributes<\/p>\n<p>Added miter limit style attribute<\/p>\n<p>Added current color style attribute<\/p>\n<p>More efficient pathdata storage (used Direct2D, GDI+ pathdata types to avoid conversion)<\/p>\n<p>Improved glyph redering on VCL<\/p>\n<p>Split axis-aligned and non-axis-aligned clippath rendering on VCL. axis-aligned will be faster, non-axis-aligned slower but more accurate, using a alpha-mask<\/p>\n<p>Created a seperate unit &#8220;BVE.RenderContextCanvas.FMX.pas&#8221; for the render context implementation for FMX.<\/p>\n<p><strong>Version 2.1, 28-4-2016<\/strong><\/p>\n<p>Biggest changes are:<\/p>\n<ul>\n<li>Replaced the DOM parser for a faster SAX parser<\/li>\n<li>Transparency for VCL controls<\/li>\n<li>SVG Fonts<\/li>\n<li>Masks<\/li>\n<li>Markers<\/li>\n<li>Support for Delphi DX1 Berlin<\/li>\n<\/ul>\n<p><em>1-5-2016: Fix, packages split into design-time and run-time<\/em><\/p>\n<p><em>2-5-2016: Fix wrong path in Fmx designer package to image list component editor<\/em><\/p>\n<p><em>BVE.SVG2XMLReader.pas<\/em><\/p>\n<p>Added, XML reader for the SAX parser<\/p>\n<p><em>BVE.SVG2SaxParser.pas<\/em><\/p>\n<p>Added, SAX parser<br \/>Added logic for parsing external references in an SVG doc<br \/>Added logic for parsing a subset of an SVG doc<br \/>Added name spaces logic<\/p>\n<p><em>BVE.SVG2Parser.pas<\/em><\/p>\n<p>Removed, the old (DOM) parser<\/p>\n<p><em>BVE.SVG2CSSUtility<\/em><\/p>\n<p>Added CSS font selection rules<\/p>\n<p><em>BVE.SVG2PathData.pas<\/em><\/p>\n<p>Added Quadratic bezier<br \/>Faster copying of PathData<\/p>\n<p><em>BVE.SVG2Attributes.pas<\/em><\/p>\n<p>Added FontStyle, FontVariant, FontWeight, FontStyles, FontStretch, FontFamily attributes<br \/>Added support of non-inherited attributes<\/p>\n<p><em>BVE.SVG2Intf.pas<\/em><\/p>\n<p>Added ISVGFontFace<br \/>Added ISVGGlyph, ISVGFont<br \/>Added ISVGPolygon, ISVGPolyLine<br \/>Added ISVGGradientStop, ISVGGradient, ISVGLinearGradient, ISVGRadialGradient<br \/>Added ISVGTextRef<br \/>Added ISVGFilter, ISVGFilterPrimitive, ISVGFilterGaussianBlur<br \/>Added ISVGPattern<br \/>Added ISVGMask<\/p>\n<p><em>BVE.SVG2Elements.pas<\/em><\/p>\n<p>Added TSVGFontFace<br \/>Added TSVGGlyph, TSVGFont<br \/>Added Font selection rules<br \/>Added Glyph selection rules<br \/>Added missing Glyph logic<br \/>Added TSVGKern<br \/>Added TSVGPathShape, TSVGPolygon, TSVGPolyline<br \/>Added TSVGElement as a base class for all elements<br \/>Added TSVGGradientStop, TSVGGradient, TSVGLinearGradient, TSVGRadialGradient<br \/>Added Gradient ObjectBoundingBox logic<br \/>Added paint server logic<br \/>Added TSVGTextRef<br \/>Added TSVGFilter, TSVGFilterPrimitive<br \/>Added TSVGPattern<br \/>Added TSVGMask<br \/>Added Clippath ObjectBoundingBox logic<br \/>Added clipping logic to markers, symbols and images<br \/>Improved white space handling on text<br \/>Temporary buffer for group opacity<br \/>Improved viewport logic<br \/>Split rendering in two passes, one to calculate style attributes and one to render<\/p>\n<p><em>BVE.SVG2Graphic.VCL.pas<\/em><\/p>\n<p>Added, component TSVG2Graphic for VCL derived from TGraphic<\/p>\n<p><em>BVE.RenderContextDirect2D.VCL.pas<\/em><\/p>\n<p>Rewrote the unit to support masking<\/p>\n<p><em>BVE.SVG2Control.VCL.pas<\/em><\/p>\n<p>Reworked to support the SAX parser<br \/>Removed option buffering, now always buffered<br \/>Changed parent class from TWinControl to TGraphicControl to enable transparency<br \/>Added clipping calculation to control buffersize<\/p>\n<p><em>BVE.SVG2Image.VCL.pas<\/em><\/p>\n<p>Reworked to support the SAX parser<br \/>Changed parent class from TWinControl to TGraphicControl to enable transparency<br \/>Made it a wrapper around the TSVG2Graphic.VCL class<\/p>\n<p><em>BVE.SVG2ImageList.VCL.pas<\/em><\/p>\n<p>Reworked to support the SAX parser<\/p>\n<p><em>BVE.SVG2LinkedImageList.VCL.pas<\/em><\/p>\n<p>Added<\/p>\n<p><em>BVE.SVG2Control.FMX.pas<\/em><\/p>\n<p>Reworked to support the SAX parser<\/p>\n<p><em>BVE.SVG2Image.FMX.pas<\/em><\/p>\n<p>Reworked to support the SAX parser<\/p>\n<p><em>BVE.SVG2ImageList.FMX.pas<\/em><\/p>\n<p>Complete rewrite<\/p>\n<p><strong>Version 2.01, 1-11-2015<\/strong><\/p>\n<p><em>BVE.SVG2Intf.pas<\/em><\/p>\n<p>Added event type TSVGOnCreateObjectEvent<br \/>Added event type TSVGOnCreatTextChildEvent<\/p>\n<p><em>BVE.SVG2Parser.pas<\/em><\/p>\n<p>Implemented events TSVGOnCreateObjectEvent and TSVGOnCreatTextChildEvent<\/p>\n<p><em>BVE.SVG2Control.FMX.Pas<\/em><\/p>\n<p>Changed implementation of function SVGParse to prevent parsing the document 2x<\/p>\n<p><em>BVE.SVG2Control.VCL.Pas<\/em><\/p>\n<p>Changed implementation of function SVGParse to prevent parsing the document 2x<\/p>\n<p><em>BVE.SVG2Image.FMX.PAS<\/em><\/p>\n<p>Added property SVGDoc (not published, so runtime access only)<br \/>Solved memory leak on BitmapMargins (TBounds) object<br \/>Solved bug that prevented application of the RenderOptions on the TSVG2Image object<\/p>","protected":false},"excerpt":{"rendered":"<p>Version 2.4 update 23, 3-5-2026 Version 2.4 update 22, 12-9-2025 Version 2.4 update 21, 25-7-2025 Version 2.4 update 20, 9-11-2023 Added package files for Delphi 12. Version 2.4 update 19, 1-4-2023 XML Patterns Text Paths CSS Filters DLL and Multi threading Version 2.2 update 15, 12-10-2022 Changed FreeAndNil(&lt;interface var&gt;) into &lt;interface var&gt; := nil Changed &#8230; <a title=\"Change log\" class=\"read-more\" href=\"https:\/\/www.bverhue.nl\/delphisvg\/change-log\/\" aria-label=\"Read more about Change log\">Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-384","page","type-page","status-publish"],"_links":{"self":[{"href":"https:\/\/www.bverhue.nl\/delphisvg\/wp-json\/wp\/v2\/pages\/384","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.bverhue.nl\/delphisvg\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.bverhue.nl\/delphisvg\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.bverhue.nl\/delphisvg\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.bverhue.nl\/delphisvg\/wp-json\/wp\/v2\/comments?post=384"}],"version-history":[{"count":57,"href":"https:\/\/www.bverhue.nl\/delphisvg\/wp-json\/wp\/v2\/pages\/384\/revisions"}],"predecessor-version":[{"id":3167,"href":"https:\/\/www.bverhue.nl\/delphisvg\/wp-json\/wp\/v2\/pages\/384\/revisions\/3167"}],"wp:attachment":[{"href":"https:\/\/www.bverhue.nl\/delphisvg\/wp-json\/wp\/v2\/media?parent=384"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}