RSCL Version History
Home Up Feedback Search

Products
Order
Downloads
Support
Articles & Tips
Recommended Links
About

 
 

 
Other Links:
Delphi CodeSmith Blog  

This page contains the version history for the RiverSoftAVG SVG Component Library.  The latest patches and updates are available on our Support Page.

Note: THE RSCL uses the RiverSoftAVG Common Classes Library.  Please see the RCCL Version History for additional details.

-------------------------------------------------------------------
August 13, 2017           Version 2.5.2
         - Fixed access violation when TRSSVGImage bitmap is freed in
           application startup (no Application.Run occurs), by deferring
           creation of internal buffer bitmap until needed for painting
         - Fixed access violation when TRSSVGScreen bitmap is freed in
           application startup (no Application.Run occurs), by deferring
           creation of internal buffer bitmap until needed for painting
         - Added soNoOptimizeFillSimpleText to TSVGOption.  This disables
           some fill text optimizations that can fail on some edge cases
           (Thanks MK)
         - Changed TSVGCustomText.ShouldDrawTextAllAtOnce method to return
           false if soNoOptimizeFillSimpleText is in Options property
         - Added ComponentPlatformsAttribute for TRSSVGImageList (VCL)
           so that TRSSVGImageList shows up in palette when Target Platform
           is Win64


-------------------------------------------------------------------
June 11, 2017             Version 2.5.1
         - Added InPlace parameter to DrawSVGWrapped function (does not
           work with Original or Center wrap mode)
         - Added InPlace parameter to DrawSVGToBitmap function
         - Fixed clipping bug in TSVGImage.Draw method
         - Added TRSSVGImage.DrawElementInPlace property and code to
           use it (Note: since it does not work with Original and Center
           wrap modes when the image is unbuffered, the property is public
           not published)
         - Added TRSSVGScreen.DrawElementInPlace property and code to
           use it (Note: since it does not work with Original and Center
           wrap modes when the image is unbuffered, the property is public
           not published)
         - Fixed bug where TRSSVGDocument.Lines property was stored even
           when EmbedSVGAsBinary was true (Thanks AK)
         - Added TSVGCollectionItem.EmbedSVGAsBinary for TRSSVGImageList
           components.  Note that SVGs that are binary will not display
           text in the editor


-------------------------------------------------------------------
April 2, 2017             Version 2.5
         - Added RAD Studio 10.2 Tokyo Support

        
-------------------------------------------------------------------
February 20, 2017         Version 2.4.1
         - Fixed bug in TRSGPCanvasRegion.Assign method when assigning
           TRSGPCanvasRegion to another TRSGPCanvasRegion.
         - Fixed TSVGUse bug for supporting building clipping paths
         - Overrode TSVGUse.GetShape method to return the shape of the
           reference item
         - Fixed bug in TSVGRadialGradient.GetGradient method where
           radius defined between 0 and 1 were not interpreted as a
           percentage
         - Improved TSVGRadialGradient.GetGradient method for ObjectBoundingBox
           units
         - Modified TSVGCustomGradient.GetGradient method to pass in
           viewport as well as object bounding rect
         - Modified TSVGGraphicElement.GetBrush method to pass in
           viewport as well as object bounding rect
         - Changed TSVGDocument.Matrix property to read-only as per the
           SVG 1.1 specification
         - Changed TSVGDocument.TransformMatrix property to read-only as per the
           SVG 1.1 specification


-------------------------------------------------------------------
January 8, 2017           Version 2.4
         - Added support for SVG pointer-events property, which allows
           SVG authors to control under what conditions particular
           graphic elements can become the target of pointer events.
         - Added TSVGGraphicElement.PointerEvents property
         - Modified TSVGGraphicElement.DoInternalElementAtPos method
           to support PointerEvents property
         - Modified TSVGGraphicElement.ElementAtPos method
           to support PointerEvents property
         - Modified TSVGGraphicElement.PathAtPos method
           to support PointerEvents property
         - Fixed bug in TSVGGraphicElement.DoInternalElementAtPos method
           where quick boundsrect check did not include pen thickness or
           border of element
         - Added ipPointerEvents to TSVGStyleProperty
         - Added TSVGPointerEvents type
         - Added TSVGPointerEventsNames type
         - Added SVGPointerEvents constant
         - Added GetSVGPointerEvents function
         - Added ParsePointerEvents function
         - Fixed bug in TSVGImageFile.Draw method to handle changes to
           High DPI support in Delphi Berlin
         - Changed TRSGPImage.Clone method to be virtual
         - Added TRSGPBitmap.Clone method to use the GDI+ clone bitmap
           methods
         - Added TRSGPBitmap.Create(Integer,Integer,TRSGPPixelFormat) constructor
         - Overrode TRSGPBitmap.Assign method to specifically handle assigning
           a TBitmap to the TRSGPBitmap
         - Added TRSGPPixelFormatRec.Create method
         - Fixed bug in TRSGPPixelFormatRec.SetFormat method that would
           not set BitsPerPixel and Flags fields correctly


-------------------------------------------------------------------
November 6, 2016          Version 2.3.3
         - Added TSVGGraphicElement.GetTransformationMatrix method
         - Fixed TSVGElement.ElementNotification method to accept children
           of TSVGPlaceholder class
         - Added TSVGALinkElement for SVG <a> link elements to allow
           drawing child elements.  The actual linking must be performed
           yourself.
         - Fixed bug in TSVGPattern.GetPattern method which would try
           to draw on an 0-width/height canvas, causing an access violation
           in FMX
         - Added ParseEnableBackground function
         - Added ipEnableBackground to TSVGStyleProperty
         - Added ipFilter to TSVGStyleProperty
         - Fixed VCL TRSSVGImageList.GenerateBitmap method to use BkColor as
           background color
         - Fixed index out of bounds error in VCL TSVGImageListDlg.lvIconsDragDrop
           method
         - Added TRSSVGDocument.OnLoading event
         - Added TRSSVGDocument.OnLoaded event
         - Changed VCL TRSSVGImage.SVGRoot property from protected to public
         - Changed TRSSVGScreen.SVGRoot property from protected to public
         - Fixed TRSSVGDocument.OnXXX events not firing during form
           load because the events are not set up by the time the Filename
           was set
         - Added TRSFmxSVGDocument.OnLoading event
         - Added TRSFmxSVGDocument.OnLoaded event
         - Changed FMX TRSSVGImage.SVGRoot property from protected to public
         - Fixed TRSFmxSVGDocument.OnXXX events not firing during form
           load because the events are not set up by the time the Filename
           was set
         - Published FMX TRSSVGImage.Hint/ShowHint properties in Seattle and above
         - Published FMX TRSSVGThreadImage.Hint/ShowHint properties in Seattle and above
         - Published FMX TRSSVGPath.Hint/ShowHint properties in Seattle and above


-------------------------------------------------------------------
October 9, 2016           Version 2.3.2
         - Fixed TSVGDocument.DoAddStyle method to handle duplicate style
           names and add the style property to already existing styles
         - Fixed TSVGLinearGradient.GetGradient method to handle
           objectBoundingBox transformations better
         - Fixed saving text nodes in TSVGGraphicElement.WriteChildren method
           (was using old hack that was short-circuiting the save code)
         - Added TSVGPlaceholder class to hold currently unsupported SVG
           element types
         - Added TSVGElement.GetSVGType method to return SVG type for the
           ***object*** (unlike class function TSVGElement.SVGType which
           returns the SVG type for the ***class***)
         - Fixed TSVGCustomGroup.ReadChild method to raise exception
           if unsupported SVG element is encountered and soSkipUnknownXML
           in options
         - Fixed TSVGDocument.ReadChild method to raise exception
           if unsupported SVG element is encountered and soSkipUnknownXML
           in options
         - Improved saving previously loaded SVGs by preserving unsupported
           elements during loading so that they can be saved later
           (note this does not mean that the unsupported elements will
           necessarily be used when displayed in a browser as unsupported
           ***properties*** of other elements that reference the unsupported
           elements are still lost, e.g., Filter property)
         - Increased the clipping rectangle by 1 in width and height in
           the TSVGImageFile.Draw method.  This addresses a disappearing/
           appearing drawing elements at the bottom and right edge of the
           image.
         - Added unsupported element types to TSVGElementType
         - Added SVGUnsupportedElements constant


-------------------------------------------------------------------
September 5, 2016         Version 2.3.1
         - Documented RSGdiPlusGraphics unit
         - Added TRSGPPath.TKindCollection type
         - Added TRSGPPath.TPointFCollection type
         - Renamed TRSGPPath.GetKinds function to TRSGPPath.Kinds and
           returned TRSGPPath.TKindCollection type
         - Renamed TRSGPPath.GetValues function to TRSGPPath.Values and
           returned TRSGPPath.TPointFCollection type
         - Fixed access violation in TRSGPRegion.GetRegionScans method
           when Owner is nil
         - Fixed TRSGPCanvas.TextOut method to update the PenPos after the
           call
         - Finished documenting RSGdiPlusGraphicsTypes unit
         - Documented the RSGdiPlusCtrls unit
         - Fixed bug in TSVGCustomText.X list property where unit factors event
           would not be assigned causing incorrect lengths
         - Fixed bug in TSVGCustomText.Y list property where unit factors event
           would not be assigned causing incorrect lengths
         - Fixed bug in TSVGCustomText.DX list property where unit factors event
           would not be assigned causing incorrect lengths
         - Fixed bug in TSVGCustomText.DY list property where unit factors event
           would not be assigned causing incorrect lengths
         - Added overloaded TRSSVGImageList.DoDraw method
         - Added support for TRSSVGImageList.GrayscaleFactor property
         - Added support for Enabled parameter in TRSSVGImageList.Draw method
         - Fixed index of out range when using master-detail TRSSVGImageList
           and the GetBitmap or Draw methods
         - Added CreateLength parameter to ParseLengths functions
         - Rewrote SplitNumbers function
         - Fixed bug in SplitNumbers function which would not correctly
           split a string with no delimiters but +/-, e.g.,
           '1.2-3.4-3' (Thanks MvdK)
         - Added TSVGLengthCreateEvent event type


-------------------------------------------------------------------
July 23, 2016             Version 2.3
         - Fixed GetWrapModeRect function to return input aRect when SVGRoot
           is nil (avoids divide by zero later)
         - Fixed DrawSVGToBitmap function to correctly draw SVG that
           is embedded in another SVG
         - Fixed DrawSVGWrapped function to correctly draw SVG that
           is embedded in another SVG
         - Documented some of RSGdiPlusGraphics unit
         - Fixed TRSGPCanvas methods to normalize rect before using
         - Fixed TRSGPCanvas.FillArc method to use the same counter-clockwise
           direction as AngleArc method (which mimics VCL TCanvas.AngleArc)
         - Implemented TRSGPCanvas.AngleArc method
         - Implemented TRSGPCanvas.StretchDraw method
         - Added protected TRSGPCanvas.DoDrawLine method
         - Added protected TRSGPCanvas.DoDrawEllipse method
         - Added protected TRSGPCanvas.DoFillEllipse method
         - Added protected TRSGPCanvas.DoDrawPath method
         - Added protected TRSGPCanvas.DoFillPath method
         - Added protected TRSGPCanvas.DoFillText method
         - Added protected TRSGPCanvas.DoMeasureText method
         - Added more protected TRSGPCanvas.DoDrawImage methods
         - Documented most of RSGdiPlusGraphicsTypes unit
         - Reduced size of installer by removing RiverSoftAVG Common Classes Library
         - Updated installer to download RiverSoftAVG Common Classes Library as needed
         - Updated installer creation procedure to automatically generate 
           version numbers and be encrypted 


-------------------------------------------------------------------
June 5, 2016              Version 2.2.1
        - Fixed TSVGGetHelpEditor.ExecuteVerb method to call help
          for any component in RSCL
        - Fixed calculation of the scale factor for pen thickness based
          on the input matrix in TSVGGraphicElement.SetCanvasPen method
        - Fixed calculation of the scale factor for pen thickness based
          on the input matrix in TSVGGraphicElement.DoModifyControl method
        - Fixed HasChild for TSVGUse elements
        - Fixed HasDescendant for TSVGUse elements
        - Fixed TSVGGraphicElement.DoModifyControl method to catch when
          trying to set custom dash arrays with values less than or
          equal to zero
        - Fixed TSVGGraphicElement.SetCanvasPen method to catch when
          trying to set custom dash arrays with values less than or
          equal to zero
        - Overrode TSVGCustomGroup.Reset method to set the calculate
          boundsrect to true as well to force recalculating of boundsrect
          if needed
        - Documented IRSGPControl interface methods
        - Modified TRSSVGImage.DoPaint method to use high quality bicubic
          interpolation when Quality is greater than 1.
        - Modified TRSSVGScreen.DoPaint method to use high quality bicubic
          interpolation when Quality is greater than 1.
        - Modified TRSSVGThreadImage.DoPaint method to use high quality bicubic
          interpolation when Quality is greater than 1.


-------------------------------------------------------------------
May 22, 2016              Version 2.2
        - Optimized TSVGDocument.DrawElement method
        - Added TSVGGraphicElement.DrawElementParent method to prepare
          element to be drawn by adding in parent transformation and
          clipping
        - Added TSVGGraphicElement.DrawElement method
        - Added TRSSVGImageList.Quality property to improve anti-aliasing
          on buffered drawing of SVGs (at the cost of
          increased memory and speed)
        - Fixed FMX TSVGImageListDlg.CreateSizeItem method to generate
          scale combobox values at run-time so that values can be formatted
          according to localization rules
        - Added TRSSVGImage.Quality property to improve anti-aliasing
          on buffered drawing of SVGs, especially on mobile devices (at the cost of
          increased memory and speed)
        - Added TRSSVGThreadImage.Quality property to improve anti-aliasing
          on buffered drawing of SVGs, especially on mobile devices (at the cost of
          increased memory and speed)
        - Added TRSFmxSVGDocument.CreateSVGDocument protected method
        - Documented the TRSFmxSVGDocument protected methods
        - Added TRSSVGDocument.CreateSVGDocument protected method
        - Fixed TRSSVGImage.SetOpacity method to bound opacity between 0 and 1
        - Fixed TRSSVGScreen.SetOpacity method to bound opacity between 0 and 1
        - Documented the TRSSVGDocument protected methods
        - Fixed bug in TSVGTextPath.IsCharClipped method where it would
          clip characters that had a negative X (instead of a negative
          distance along path)
        - Fixed access violation in TSVGTextPath destructor when
          reference has not been cleared properly
        - Fixed access violation in TSVGTextRef destructor when
          reference has not been cleared properly


-------------------------------------------------------------------
April 24, 2016            Version 2.1
        - Added RAD Studio 10.1 Berlin Support
        - Removed Directory Exists warning from installer
        - Added TSVGElementTable.TryGetValue<T> method
        - Fixed bug in TSVGDocument.DrawAfterElement method where
          children of element would be drawn even if IncludeElement was
          false
        - Fixed excessive memory use on TSVGDocument.DrawXXXElement methods
          by calling Canvas.RestoreState in TSVGGraphicElement.EndDraw method
          when abort is called
        - Fixed bug in TSVGElement.SetID method where ID would not be set
          if Owner is nil
        - Fixed uniform scaling in TSVGImage.Align method
        - Fixed bug in TSVGDocument.DrawBeforeElement/DrawAfterElement/DrawElement methods
          when Element is not visible (bug would DrawAfterElement twice)
        - Added TSVGShouldDrawQEvent type
        - Added TSVGDocument.OnShouldDraw event
        - Refactored TSVGElement.ShouldDraw method to call new protected
          DoShouldDraw method and call TSVGDocument.DoShouldDraw overloaded
          method
        - Renamed TSVGxxxElement.ShouldDraw methods to DoShouldDraw, which
          is called by TSVGElement.ShouldDraw method
        - Added TSVGDrawEventWrapper.DrawnAfterElement method
        - Added TSVGDrawEventWrapper.ShouldDrawElement method
        - Added TSVGDrawEventWrapper.OldShouldDraw event property
        - Fixed TSVGText.ConvertToPath method (VCL) to only widen decorations
          *once*
        - Fixed possible memory leak in TSVGText.ConvertToPath method when
          decorations are used
        - Added ipTextDecoration to SVGFontStyleProperties constant
        - Fixed TSVGFont.Assign method to assign weight based on bold
          in font styles when Source is TFont
        - Deleted TRSSVGPath.StrokeXXX properties removed in 10.1 Berlin
        - Modified TSVGImageListDlg.actAddExecute method to use
          TDialogServiceSync.InputQuery method in 10.1 Berlin
        - Fixed TRSGPFont.Assign method to fire change event when assigning
          from a TFont source


-------------------------------------------------------------------
March 13, 2016            Version 2.0.1
        - Fixed Controls being grayed out in Delphi Palette when target was iOS 64-bit
        - Fixed bug in TRSSVGScreen.DoPaint where control was not cleared
          when SVG was empty
        - Fixed TRSGPCanvas.Polygon method to fill polygon and not just
          draw it (Thanks AS)
        - Fixed TRSGPCanvas.Polygon method corruption by looping through
          length of points MINUS 1 (Thanks AS)
        - Fixed TRSGPCanvas.Polyline method corruption by looping through
          length of points MINUS 1 (Thanks AS)
        - Added Gauge VCL Demo Project


-------------------------------------------------------------------
March 5, 2016             Version 2.0 Official Release
        - Fixed installer to include RSCLSplash.res
        - Improved rendering of linear gradients by factoring in transformations
        - Improved rendering of radial gradients by factoring in gradient
          origin offset
        - Improved VCL rendering of radial gradients
        - Optimized size and speed for saving binary SVG files by
          saving TSVGStylePropertiesSet as a list instead of string
          (when soExportOptimizedBinaryStyleProperties in Options).
          Optimizing the set streaming is significantly faster as its
          streams out the ordinal values for style property enumerated
          values.  However, if the order of style property
          enumerations changes in the future, you can load incorrect results
        - Fixed bug in TSVGDocument.LoadFromBinaryStream method where
          old values in TSVGDocument could be used as the TSVGDocument
          was not cleared before loading the stream
        - Fixed binary streaming of TSVGCustomViewBox.ViewBox property by
          not storing property if viewbox is not specified
        - Fixed bugs in saving percent lengths to XML where a percentage
          number would be written as 1% instead of 100%
        - Added TSVGGraphicElement.ReadStyleProperties method
        - Added TSVGGraphicElement.WriteStyleProperties method
        - Fixed TSVGLinearGradient.GetGradient method to account for
          transformations of the gradient
        - Modified TSVGRadialGradient.GetGradient method to set the
          TSVGGradient.Transform.Position as the focal point of the gradient
          Note that (0, 0) means no movement from gradient center
          Enhanced FMX.Canvas.D2D TCanvasD2D.CreateD2DGradientBrush method
          to use the position to set focal point (GradientOriginOffset)
        - Modified TSVGRadialGradient.GetGradient method to skip setting
          advanced FMX gradient transform properties if
          soFMXRadialGradientPatch not in Options
        - Modified TSVGraphicElement.BeginDraw method to pass in transformation
          matrix (and not RSIdentityMatrix) to GetBrush/GetGradient/GetPattern
          (TSVGPattern.GetPattern method changed to ignore this transformation)
        - Fixed corruption in pattern by clearing canvas before
          generating pattern in TSVGPattern.GetPattern method
        - Fixed TSVGGraphicElement.GetClipRect method to slightly inflate
          clipping rectangle to be bigger than BoundsRect
        - Added TSVGCustomViewBox.CreateAspectRatio protected method
        - Fixed TSVGImage.DoSaveToXML method to write out preserveAspectRatio
          even if viewbox is not specified
        - Slightly optimized calculation of TSVGElement.GetBoundsRect method
          by using new TRSPathData.AddRectangle method
        - Slightly optimized calculation of TSVGGraphicElement.GetBoundsRect method
          by using new TRSPathData.AddRectangle method
        - Slightly optimized calculation of TSVGCustomViewBox.GetBoundsRect method
          by using new TRSPathData.AddRectangle method
        - Reduced size of SVG Binary format by not writing out inherited
          pen, brush, and font properties
        - Added TSVGBrush.ParentColor property
        - Added TSVGBrush.ParentOpacity property
        - Added TSVGBrush.OnIsInherited event
        - Added TSVGPen.ParentColor property
        - Added TSVGPen.ParentOpacity property
        - Added TSVGPen.ParentDasharray property
        - Added TSVGPen.ParentDashOffset property
        - Added TSVGPen.ParentLinecap property
        - Added TSVGPen.ParentLineJoin property
        - Added TSVGPen.ParentMiterLimit property
        - Added TSVGPen.ParentThickness property
        - Added TSVGPen.OnIsInherited event
        - Added TSVGFont.ParentFamily property
        - Added TSVGFont.ParentFontVariant property
        - Added TSVGFont.ParentSize property
        - Added TSVGFont.ParentStyle property
        - Added TSVGFont.ParentDecorated property
        - Added TSVGFont.ParentWeight property
        - Added TSVGFont.OnIsInherited event
        - Added soFMXRadialGradientPatch to TSVGOption
        - Added soExportOptimizedBinaryStyleProperties to TSVGOption
        - Added TSVGPreserveAspectRatio.DefaultAlign property
        - Added TSVGPreserveAspectRatio.DefaultDefer property
        - Added TSVGPreserveAspectRatio.DefaultSlice property
        - Modified TSVGFont.Clear method to set size to DefaultSize in FMX
        - Fixed binary streaming of TSVGPreserveAspectRatio property
        - Fixed bug in binary streaming of TSVGLength class, UNIT needs
          to be streamed out BEFORE raw value.  Otherwise, raw value
          gets converted when unit changes
        - Fixed value of SVGAlignNames[saNone] to equal 'none'
        - Modified default initialization of TSVGPreserveAspectRatio to
          have align as saXMidYMid
        - Slightly optimized drawing of text decoration (underline, strike-out,
          overline) by using new TRSPathData.AddRectangle method
        - Fixed TRSSVGDocument.LoadSVGFromStrings method to correctly read
          unicode TStrings
        - Fixed TRSFmxSVGDocument.LoadSVGFromStrings method to correctly read
          unicode TStrings
        - Added ability to specify radial gradients focal point using
          Transform.Position property
        - Fixed radial gradients for GDI+
        - Fixed TRSGPBrush.Prepare method to render radial gradient at
          correct scale and location
        - Fixed TRSGPGradient.Create constructor to initialize Transform.Position
          to (0,0), like FMX, instead of (0.5,0.5)
   Notes for SVG v1.x Owners
                - To refactor the SVG from a static SVG viewer to a static SVG editor
                  required some major changes to the TSVGxxxElement classes and their
                  properties, generally to be able to save properties that were read (before
                  the elements would convert the svg values and then discard any extraneous
                  information.  For example, to save a length value such as '1in' requires
                  saving the raw value (1) and the unit (in) instead of the converted value
                  (96 pixels).  Unfortunately, this required breaking some properties to
                  provide clean code.  For example, the TSVGMarker.MarkerHeight property (a single),
                  had to become a TSVGLength *object*.  Code that uses these properties have to be
                  changed from Marker.MarkerHeight to Marker.MarkerHeight.Value.
                - The behavior of TSVGDocument.OnChange event has changed.  The OnChange
                  event usually does not get called when the structure of the SVG
                  has changed anymore; please use the TSVGDocument.OnAddElement
                  and TSVGDocument.OnRemoveElement property instead.  The Sender
                  parameter is now set to the element where the change occurs.
                  If the Sender is nil, this means that the change event occurred
                  because of BeginUpdate/EndUpdate method calls; in this case it
                  can mean that the structure of the SVG document has changed.
                - The signature of the TSVGDocument/TRSSVGDocument/TRSFmxSVGDocument.OnDrawing
                  event has changed to add a DoDraw parameter.  Set this parameter
                  to False to not draw the current element.  However, the child
                  elements may still be drawn.
                - Refactored ViewBox property from TSVGRect (record) to TSVGViewBox *object*
                - Moved basic SVG shape elements (rect, ellipse, etc) to
                  RSSVG.BasicShapes.pas and FMX.RS.SVG.BasicShapes.pas
                - Moved SVG text elements to RSSVG.Text.pas and FMX.RS.SVGText.pas


-------------------------------------------------------------------
February 5, 2016          Version 2.0 EEP 3
        - Created RSCL Evaluation version
        - Modified TSVGGraphicElement.AssignProperties method to assign
          *inherited* properties (instead of local properties).  Copying
          local properties was messing up TRSSVGText control as copied
          TSVGText did not have the same style property values without a
          parent
        - Fixed memory leak in TSVGDocument.Clear by freeing styles
          (Styles.Clear does not call OnValueNotify event so styles
          were not being freed)
        - Fixed memory leak in TSVGDocument.Destroy by freeing styles
          (Styles.Clear does not call OnValueNotify event so styles
          were not being freed)
        - Created TSVGDrawEventWrapper class for performing TSVGDocument
          DrawBeforeElement, DrawElement, and DrawAfterElement methods
        - Changed TSVGDrawingEvent back to procedure of object (instead of
          reference to procedure) as Delphi IDE cannot create events with
          closures
        - Changed TSVGDrawingQEvent back to procedure of object (instead of
          reference to procedure) as Delphi IDE cannot create events with
          closures
        - Fixed floating point error in TSVGMarker.DrawMidMarker method
        - Fixed floating point error in TSVGMarker.MidMarkerAtPos method
        - Fixed bug in TSVGGraphicElement.DoSaveToXML method where
          MarkerStartURI would be written when it was empty (default)
        - Fixed bug in TSVGGraphicElement.DoSaveToXML method where
          MarkerMidURI would be written when it was empty (default)
        - Fixed bug in TSVGGraphicElement.DoSaveToXML method where
          MarkerEndURI would be written when it was empty (default)
        - Fixed display text problems on mobile by forcing use of Fill
          text instead of path-based text
        - Changed behavior of TSVGCustomText.IsFillingText method to
          return True if running on iOS or Android
        - Added TextElement parameter to TSVGCustomText.AlignText method
        - Added TextElement parameter to TSVGCustomText.GetBaseline method
        - Fixed TSVGTextPath character placement problems when the text
          of the path is a child tspan
        - Overrode TSVGCustomTextContentChild.AlignText method to use
          parent text's AlignText method (for tspans inside a TSVGTextSpan
          this means the TSVGTextSpan.AlignText) if available
        - Overrode TSVGCustomTextContentChild.GetBaseline method to use
          parent text's GetBaseline method (for tspans inside a TSVGTextSpan
          this means the TSVGTextSpan.GetBaseline) if available
        - Fixed clipping problems when assigning TSVGText to a TRSSVGText
          control (FMX)
        - Improved clipping problems in TSVGText.DoModifyControl method
          when assigning textpaths to TRSSVGText control
        - Fixed TSVGTextRef for generating controls by having
          TSVGTextRef.GetText method return FText (instead of '') if
          Reference is nil
        - Fixed TSVGTextPath to include a path when used as part of a
          TRSSVGPanel control
        - Added TSVGTextPath.RetrievePath method to retrieve shape from Reference
        - Added TSVGTextPath.Path property to hold shape of path
        - Updated TSVGTextPath.CalculateXYRotate method to use Path property
        - Renamed TSVGTextPath.GetPath method to GetPathElement
        - Fixed TSVGCustomText.GetBaseline method to factor in the
          InlineProgressionDirection when shifting the text by the
          BaselineShift property
        - Fixed soUseFillText path in TSVGCustomText.DoFillTextChunks method
        - Fixed Smallcaps for filling text in TSVGCustomText.DoFillTextChunks
          method (VCL)
        - Fixed filling text in TSVGCustomText.DoFillTextChunks
          method (FMX)
        - Fixed bug in TSVGCustomText.FillText method to draw text "tight"
          (i.e., without space at beginning or end) (VCL)
        - Renabled optimization in TSVGCustomText.DoFillTextChunks
          method to do all text at once when text is simple
          (ShouldDrawTextAllAtOnce returns true)
        - Improved calculation of TextWidth/TextHeight in
          TSVGCustomText.DoDrawing method by attempting to factor in
          FontVariant for measuring text
        - Improved TSVGCustomText.DoMeasureText method when measuring
          paths by using the Shape.GetBounds if not IsFillingText
        - Improved TSVGCustomText.DoMeasureText method by attempting to
          use font variant for measuring text (still doesn't work for
          words that cross tspans) when using fill text
        - Added CharPath parameter to TSVGCustomText.GetBaseline method
        - Modified TSVGCustomText.GetBaseline method to use CharPath
          parameter to figure out baseline on non-Windows systems
        - Fixed bug with baseline text placement in TSVGCustomText.DoFillTextChunks
          method when font variant is smallscaps
        - Fixed bug with baseline text placement in TSVGText.ConvertToPath
          method when font variant is smallscaps
        - Fixed TSVGText.ConvertToPath method for text placement on
          non-Windows systems
        - Fixed correctly setting FillMode for TRSSVGPath control (VCL)
          in TSVGPolyline.AssignTo method
        - Fixed CleanText function to strip off control characters before
          seeing if any spaces should be appended to left or right
        - Fixed ParseFontFamily function to not break up font names if
          they contained a space (e.g., 'Times New Roman' became 3 items
          causing subtle errors because the font was wrong such as in
          text on path)
        - Fixed ParseFontFamily function to trim font names (e.g., 'FreeSerif, serif'
          would cause 'serif' not to be found as it would be ' serif'
        - Changed SVGGenericFont[gffSerif] for FMX from Garamond to
          Times New Roman (FMX couldn't find Garamond and would substitute
          a sans-serif font)
        - Added ability link TRSSVGImageList components to allow sharing
          of SVGs (Thanks HS for suggestion)
        - Added TRSSVGImageList.MasterImageList property (VCL)
        - Documented the RSSVGImgList unit
        - Fixed subtle bug where TRSSVGImageList (FMX) would not show
          Sources in Destination bitmaps because the name of the
          of the SVG ended with 0-padded numbers.  For example, 'arcs01'
          would become 'arcs1' leading to errors
        - Fixed TSVGCollectionItem.SetName method to change 0-padded numbers
          to regular numbers before trying to set the name
        - Added TSVGCollectionItem.SeparateNameIndex protected method
        - Fixed display corruption in TRSSVGImageList.GenerateBitmap method
          by clearing the bitmap first
        - Documented the FMX.RS.SVGImgList unit
        - Fixed Argument Out of Range error in FMX TRSSVGImageListEditor
        - Fixed TSVGImageListDlg.UpdateDestListBox method to reset
          CurrentDest property when it would be out of range because
          of deleted Destinations
        - Fixed bug in FMX TSVGImageListDlg.CreateLayerItem method where
          incorrect layer was displayed
        - Fixed T[FMX]SVGImageListEditor component editor to notify the
          IDE that the component has been modified
        - Added image number as caption for TTSVGImageListDlg (VCL)
          images in UpdateListView method
        - Added TRSGPCanvas.TextWidthTight method
        - Implemented TRSGPCanvas.RoundRect method
        - Modified TRSGPCanvas protected methods so that they are virtual
        - Fixed bug in TRSGPBrush.Assign method where TBrush.Color was
          incorrectly converted to alpha color
        - Fixed bug in TRSGPPen.Assign method where TBrush.Color was
          incorrectly converted to alpha color
        - Fixed bug in ToMatrix function where result matrix was not
          zeroed out before retrieving the matrix elements
        - Added Printer (VCL) Demo project
   Notes for SVG v1.x Owners
                - To refactor the SVG from a static SVG viewer to a static SVG editor
                  required some major changes to the TSVGxxxElement classes and their
                  properties, generally to be able to save properties that were read (before
                  the elements would convert the svg values and then discard any extraneous
                  information.  For example, to save a length value such as '1in' requires
                  saving the raw value (1) and the unit (in) instead of the converted value
                  (96 pixels).  Unfortunately, this required breaking some properties to
                  provide clean code.  For example, the TSVGMarker.MarkerHeight property (a single),
                  had to become a TSVGLength *object*.  Code that uses these properties have to be
                  changed from Marker.MarkerHeight to Marker.MarkerHeight.Value.
                - The behavior of TSVGDocument.OnChange event has changed.  The OnChange
                  event usually does not get called when the structure of the SVG
                  has changed anymore; please use the TSVGDocument.OnAddElement
                  and TSVGDocument.OnRemoveElement property instead.  The Sender
                  parameter is now set to the element where the change occurs.
                  If the Sender is nil, this means that the change event occurred
                  because of BeginUpdate/EndUpdate method calls; in this case it
                  can mean that the structure of the SVG document has changed.
                - The signature of the TSVGDocument/TRSSVGDocument/TRSFmxSVGDocument.OnDrawing
                  event has changed to add a DoDraw parameter.  Set this parameter
                  to False to not draw the current element.  However, the child
                  elements may still be drawn.
                - Refactored ViewBox property from TSVGRect (record) to TSVGViewBox *object*
                - Moved basic SVG shape elements (rect, ellipse, etc) to
                  RSSVG.BasicShapes.pas and FMX.RS.SVG.BasicShapes.pas
                - Moved SVG text elements to RSSVG.Text.pas and FMX.RS.SVGText.pas


-------------------------------------------------------------------
January 10, 2016          Version 2.0 EEP 2
        - Modified installer to show RSCL in Delphi Splashscreen
        - Refactored TSVGStyle class to store Style=Value pairs in a
          hash table
        - Modified TSVGDocument.Options property to use Owner's Options
          if available or to use local FOptions field if no owner
        - Added TSVGDocument.DrawElement methods to draw element and its
          children without drawing parents or siblings
        - Added TSVGDocument.DrawAfterElement methods to draw siblings of an element
          (and their children) without drawing parents
        - Added TSVGDocument.DrawBeforeElement methods to draw siblings and ancestors
          of an element without drawing "younger" siblings
        - Added TSVGDocument.Gradients property to track list of Gradients in document
        - Added TSVGDocument.Markers property to track list of Markers in document
        - Added TSVGDocument.Patterns property to track list of Patterns in document
        - Modified the behavior of TSVGDocument.OnChange event to set the
          Sender to the element that changed.  If Sender = nil then it means
          the structure of the SVG has possibly changed
        - Added TSVGDocument.OnAddElement event
        - Added TSVGDocument.OnRemoveElement event
        - Modified TSVGDocument.OnDrawing event signature to include a DoDraw
          parameter.  If this variable is set to false, the current Element
          will NOT be drawn.  However, its children may still be.
        - Fixed TSVGCustomViewBox.OverflowClipping method to not set up
          a clipping rectangle if it is empty (fixes a regression in
          drawing SVGs that don't define a width/height or viewbox)
        - Fixed TSVGCustomViewBox.GetBoundsRect method to return children's
          combined boundsrect if the Width and Height are not set for the
          viewbox
        - Fixed bug where TSVGCustomViewBox.OverflowClipping ignored
          soApplyClipping in Options property
        - Modified TSVGGraphicElement.DoDrawing method to return a boolean
        - Modified TSVGGraphicElement.BeginDraw method to return a boolean
          (the result of the DoDrawing method call)
        - Modified TSVGGraphicElement.InternalDraw method to NOT draw the
          current element if BeginDraw method call returns False
        - Updated TSVGGraphicElement.ApplyStyle method for new TSVGFont.Weight property
        - Updated TSVGGraphicElement.AssignTo method for new TSVGFont.Weight property
        - Updated TSVGGraphicElement.DoSaveToXML method for new TSVGFont.Weight property
        - Updated TSVGGraphicElement.DoSaveToXML method to use new
          TSVGPen.GetDashArray method
        - Updated TSVGGraphicElement.GetFont method for new TSVGFont.Weight property
        - Fixed TSVGGraphicElement.GetBoundsRect(TSVGMatrix) method to
          correctly transform the bounds rectangle (including rotation)
          and return the boundsrect for the transformed boundsrect
        - Refactored TSVGGraphicElement.GetBoundsRect(TSVGMatrix) method to
          call GetBoundsRect to return the untransformed bounds rect before
          transforming it.  This allowed many descendant classes to delete
          their GetBoundsRect overrides
        - Fixed bug where setting TSVGGraphicElement.Inherits property would
          not force the object to regenerate the Brush/Pen/Font/Shape
          (Set XXXChanged to true in TSVGGraphicElement.PropagateObjectPropChange
          method if Sender=FInherits)
        - Fixed bug in TSVGGraphicElement.AssignProperties method where
          ClipRect was not being copied correctly
        - Renamed EEP TSVGGraphicElements.xxxLength properties to xxxu properties
          (e.g., HeightU)
        - Updated FMX code in TSVGGraphicElement to read and write
          TSVGPen.MiterLimit property (not used otherwise)
        - Added TSVGElement.ToString override to return XML string of
          element and its children
        - Added public, read-only TSVGElement.Options property,
          which returns the Owner doc's Options or DefaultSVGOptions if
          no owner
        - Changed TSVGElement.BoundsRect property to be writable as well
          as readable
        - Modified TSVGElement.SetID method to use TSVGDocument.AllItems.GetUniqueName
          method when soEnforceUniqueID is NOT in Options.  This ensures
          unique IDs without raising exceptions
        - Refactored TSVGElement.Change protected method to have a sender
        - Removed RemoveReferences parameter from TSVGElement.NotifyListener
          method signature and refactored overrides to check aElement.ElementState
          instead
        - Fixed bug in TSVGElement.Assign method where incorrect Owner
          was being assigned if Self was TSVGDocument
        - Fixed TSVGElement.HasAncestor method
        - Added TSVGDrawingQEvent type signature
        - Overrode TSVGLinearGradient.Assign method to be able to assign
          TSVGGradient to the object
        - Fixed bug in TSVGLinearGradient.DoSaveToXML method where percentage
          values would be written out incorrectly (e.g., 1% instead of 100%)
        - Overrode TSVGRadialGradient.Assign method to be able to assign
          TSVGGradient to the object
        - Fixed bug in TSVGRadialGradient.DoSaveToXML method where percentage
          values would be written out incorrectly (e.g., 1% instead of 100%)
        - Fixed bug in TSVGRadialGradient.GetGradient method where values
          would not be marked as percentages in the SVG but would be less
          than 1 so they should be considered percentages anyway
        - Fixed TSVGCustomViewBox.ElementAtPos method to correctly modify the matrix
          for the ViewBox (if specified) or BoundsRect INSTEAD of modifying
          the rectangle
        - Fixed regression in loading Brush URI where it was reset
          by the fix for subtle bug where setting TSVGBrush.Kind property
          would be overwritten if the URI contained a gradient or pattern URI
        - Fixed regression in loading Pen URI where it was reset
          by the fix for subtle bug where setting TSVGBrush.Kind property
          would be overwritten if the URI contained a gradient or pattern URI
        - Fixed bug in TSVGDocument.ReadStyles method where descendant
          selectors were parsed as if they were grouped together (e.g.,
          '#alpha * {fill:green}' would be separated into 2 styles,
          '#alpha' and '*'
        - Fixed TSVGImage.DoInternalDraw method to preserve aspect ratio
          when drawing image
        - Fixed TSVGImage to do overflow clipping by calling OverflowClipping
          method in TSVGImage.Draw method
        - Fixed TSVGSymbol.GetBoundsRect method to set ViewBox.Specified to true
        - Finished documenting RSSVG.pas unit
        - Improved TRSSVGImage (VCL) painting efficiency by deferring bitmap
          update until Paint call
        - Improved TRSSVGScreen (VCL) painting efficiency by deferring bitmap
          update until Paint call
        - Modified TRSSVGDocument.OnDrawing event signature to include a DoDraw
          parameter.  If this variable is set to false, the current Element
          will NOT be drawn.  However, its children may still be.
        - Published TRSSVGImage.Bitmap read only property
        - Published TRSSVGScreen.Bitmap read only property
        - Published TRSSVGThreadImage.Bitmap read only property
        - Improved TRSSVGImage (FMX) painting efficiency by deferring bitmap
          update until Paint call
        - Modified TRSFmxSVGDocument.OnDrawing event signature to include a DoDraw
          parameter.  If this variable is set to false, the current Element
          will NOT be drawn.  However, its children may still be.
        - Published TRSSVGImage.Bitmap read only property
        - Published TRSSVGThreadImage.Bitmap read only property
        - Removed TSVGText.GetBoundsRect(TSVGMatrix) method override
          as it is correctly handled in ancestor now
        - Fixed bug in TSVGCustomText where BoundsRect would be reported
          incorrectly when a font property would change (overrode
          TSVGCustomText.PropagateObjectPropChange method to force
          recalculation of TextWidth and TextHeight)
        - Improved smallcaps text kerning
        - Added Font parameter to TSVGCustomText.GetGlyphSpacing method
        - Modified TSVGCustomText.XStr property to signal a change event on write
        - Modified TSVGCustomText.YStr property to signal a change event on write
        - Modified TSVGCustomText.DXStr property to signal a change event on write
        - Modified TSVGCustomText.DYStr property to signal a change event on write
        - Modified TSVGCustomText.RotateStr property to signal a change event on write
        - Finished RSSVG.Text.pas documentation
        - Added ParseAttrString overloaded method
        - Modified ParseFontWeight function to receive and return
          TSVGFontWeight (instead of TFontStyles).  This change is in
          response to adding TSVGFont.Weight property
        - Fixed ParseRect function to return empty rect if Value does not
          contain 4 numbers
        - Added const keyword to function parameters for speed increase
        - Fixed bug in ParseLengths function when updating an Item that
          already existed, the function reassign the item to itself
          but TObjectList<TSVGLength> would free it
        - Removed unused UnitFactors parameter from many RSSVGUtils functions
        - Finished documenting RSSVGUtils unit
        - Added TSVGViewBox class
        - Added SDocEmpty resource string
        - Added TSVGPen.MiterLimit property for FMX in order to be able
          to edit the MiterLimit, even though it is not supported by FMX
        - Added TSVGPen.GetDashArray method for returning a custom dash
          array string equivalent to the Dash property
        - Added TSVGFont.Weight property
        - Fixed TSVGFont.FamiliesToString method to set result when
          Families.Count = 0
        - Rearranged order of TSVGFontVariant enumerated values to put
          svg spec options first (and updated SVGFontVariantNames constant)
        - Renamed new EEP SVGDirectionNames constant to SVGDirections
        - Renamed new EEP SVGWritingModeNames constant to SVGWritingModes
        - Renamed new EEP SVGGlyphOrientationVerticalNames constant to SVGGlyphOrientationVerticals
        - Renamed new EEP SVGGlyphOrientationHorizontalNames constant to SVGGlyphOrientationHorizontals
        - Renamed new EEP SVGAlignmentBaselineNames constant to SVGAlignmentBaselines
        - Renamed new EEP SVGBaselineShiftNames constant to SVGBaselineShifts
        - Renamed new EEP SVGDominantBaselineNames constant to SVGDominantBaselines
        - Renamed new EEP SVGTextPathMethodNames constant to SVGTextPathMethods
        - Renamed new EEP SVGTextPathSpacingNames constant to SVGTextPathSpacings
        - Added SVGAllElements constant
        - Finished documenting RSSVGTypes unit
        - Removed TSVGCircle.GetBoundsRect(TSVGMatrix) method override
          as it is correctly handled in ancestor now
        - Removed TSVGEllipse.GetBoundsRect(TSVGMatrix) method override
          as it is correctly handled in ancestor now
        - Removed TSVGLine.GetBoundsRect(TSVGMatrix) method override
          as it is correctly handled in ancestor now
        - Removed TSVGPolyline.GetBoundsRect(TSVGMatrix) method override
          as it is correctly handled in ancestor now
        - Published TRSSVGImage.Bitmap read only property
        - Published TRSSVGScreen.Bitmap read only property
        - Published TRSSVGThreadImage.Bitmap read only property
        - Fixed bug in TRSGPImage.SaveToFile method where could not find
          extension because it was in wrong case
        - Fixed access violation when accessing TRSGPImage Codecs
        - Added const keyword to TRSGPPath method parameters
        - Modified TRSGPImageCodecInfo record to have strings instead
          of pointers to wide strings
        - Added TRSGPImageCodecInfo constructor
   Notes for SVG v1.x Owners
                - To refactor the SVG from a static SVG viewer to a static SVG editor
                  required some major changes to the TSVGxxxElement classes and their
                  properties, generally to be able to save properties that were read (before
                  the elements would convert the svg values and then discard any extraneous
                  information.  For example, to save a length value such as '1in' requires
                  saving the raw value (1) and the unit (in) instead of the converted value
                  (96 pixels).  Unfortunately, this required breaking some properties to
                  provide clean code.  For example, the TSVGMarker.MarkerHeight property (a single),
                  had to become a TSVGLength *object*.  Code that uses these properties have to be
                  changed from Marker.MarkerHeight to Marker.MarkerHeight.Value.
                - The behavior of TSVGDocument.OnChange event has changed.  The OnChange
                  event usually does not get called when the structure of the SVG
                  has changed anymore; please use the TSVGDocument.OnAddElement
                  and TSVGDocument.OnRemoveElement property instead.  The Sender
                  parameter is now set to the element where the change occurs.
                  If the Sender is nil, this means that the change event occurred
                  because of BeginUpdate/EndUpdate method calls; in this case it
                  can mean that the structure of the SVG document has changed.
                - The signature of the TSVGDocument/TRSSVGDocument/TRSFmxSVGDocument.OnDrawing
                  event has changed to add a DoDraw parameter.  Set this parameter
                  to False to not draw the current element.  However, the child
                  elements may still be drawn.
                - Refactored ViewBox property from TSVGRect (record) to TSVGViewBox *object*
                - Moved basic SVG shape elements (rect, ellipse, etc) to
                  RSSVG.BasicShapes.pas and FMX.RS.SVG.BasicShapes.pas
                - Moved SVG text elements to RSSVG.Text.pas and FMX.RS.SVGText.pas


-------------------------------------------------------------------
December 6, 2015         Version 2.0 EEP 1
        - Fixed bug in installer which would not set the library path correctly
           for iOS64 in XE8+
        - Added SVG Editor Demo
        - Added TSVGDocument.FormatStr property to control how floating
          point numbers are formatted in TSVGPath elements (setting this
          property to something like '0.###' can significantly reduce the
          size of SVG files, AS LONG AS YOU ARE SURE YOU DO NOT NEED THE
          PRECISION)
        - Added TSVGDocument.LoadFromBinaryFile method
        - Added TSVGDocument.SaveToBinaryFile method
        - Added TSVGCustomViewBox.OverflowClipping protected method
        - Fixed SVGs to be properly clipped when Overflow attribute is hidden
        - Removed support for Overflow clipping rectangle for TSVGCustomViewBox
          by removing overflow clipping in TSVGCustomViewBox.PerformClipping
          method and moving to TSVGCustomViewBox.OverflowClipping protected method
        - Fixed TSVGCustomViewBox.Draw method to correctly modify the matrix
          for the ViewBox (if specified) or BoundsRect INSTEAD of modifying
          the drawing rectangle
        - Fixed TSVGCustomViewBox.Draw method to call OverflowClipping
        - Fixed markers to be properly clipped when Overflow attribute is hidden
        - Fixed TSVGMarker.Draw method to call OverflowClipping
        - Fixed regression for TSVGCustomViewBox.GetBoundsRect method
          where some SVGs would not display properly because they did
          not have Width and Height specified but ViewBox was specified
          Modified behavior to return the ViewBox if specified AND Owner
          is nil (not an embedded viewport), otherwise return BoundsRect
          this fixes an error when embedding svgs inside of other svgs
        - Added TSVGImage.Bitmap public property
        - Fixed TSVGGraphicElement.SetCursor method to set inherits for
          cursor to false when changed
        - Added TSVGGraphicElement.IsStored protected method for indicating
          which style property should be stored (i.e., is non-default)
        - Overrode TSVGCustomViewBox.IsStored method to change the
          default for Overflow style property
        - Modified TSVGGraphicElement.DoSaveToXML method to use IsStored method
        - Fixed TSVGGraphicElement.DoSaveToXML method to not write out
          Kerning if Automatic is True
        - Fixed TSVGGraphicElement.DoSaveToXML method to not write out
          Letter Spacing if Automatic is True
        - Fixed TSVGGraphicElement.DoSaveToXML method to not write out
          Word Spacing if Automatic is True
        - Fixed TSVGCustomGradient.DoSaveToXML method to not write out
          spread if it is default value
        - Fixed TSVGCustomGradient.DoSaveToXML method to not write out
          units if it is default value
        - Fixed TSVGGradientStop.DoSaveToXML method for writing out
          offset as a percentage
        - Fixed TSVGElement.Destroy method so that you can just call
          Element.Free and it will correctly remove itself from its
          parent
        - Fixed TSVGGraphicElement.LengthParent method to return Parent.BaselineShift
        - Fixed TSVGGraphicElement.LengthParent method to return Parent.Kerning
        - Fixed TSVGGraphicElement.LengthParent method to return Parent.WordSpacing
        - Added TGradientStyleHelper (FMX) to remove deprecated warnings
          introduced in XE6
        - Added TStrokeDashHelper (FMX) to remove deprecated warnings
          introduced in XE6
        - Added TStrokeCapHelper (FMX) to remove deprecated warnings
          introduced in XE6
        - Added TStrokeJoinHelper (FMX) to remove deprecated warnings
          introduced in XE6
        - Added TBrushKindHelper (FMX) to remove deprecated warnings
          introduced in XE6
        - Added optional FormatStr parameter to TSVGLength.ToString method
        - Added ShortFormatStr constant
        - Added LongFormatStr constant
        - Added TSVGFont.IsDecorated method (is font underlined, strike
          through or overline?)
        - Added TSVGStylePropertyLength.FInherited private field to be
          able to store the inherited property when events not set
        - Added SVGTextContainerElements constant
        - Added SVGTextContentElements constant
        - Added SVGTextContentChildElements constant
        - Modified TSVGLength.SetUnit method to set FIsPercent field
        - Renamed TSVGLength.EUValue property to Pixels property (more
          accurate name of what it is)
        - Fixed DefaultSVGStylePropertyValues constant for Alignment-baseline
        - Fixed DefaultSVGStylePropertyValues constant for baseline-shift
        - Fixed DefaultSVGStylePropertyValues constant for Dominant-baseline
        - Fixed TSVGLength.aUnit property to not stream when aUnit is
          suNone or suPixels
        - Fixed TSVGLength.Raw property to not stream when Raw is 0
        - Modified TSVGStylePropertyLength.SetParentValue method to fire
          a change event
        - Modified TSVGLength.SetPixels method to fire
          a change event
        - Fixed subtle bug where setting TSVGBrush.Kind property would be overwritten
          if the URI contained a gradient or pattern URI (which would reset
          the Kind to bkGradient/bkBitmap
        - Added TSVGBrush.Kind property override accessor methods
        - Fixed subtle bug where setting TSVGPen.Kind property would be overwritten
          if the URI contained a gradient or pattern URI (which would reset
          the Kind to bkGradient/bkBitmap
        - Added TSVGPen.Kind property override accessor methods
        - Added optional FormatStr parameter to SVGNumberToString functions
        - Added optional FormatStr parameter to SVGNumbersToString function
        - Added optional FormatStr parameter to SVGLengthToString functions
        - Added optional FormatStr parameter to SVGLengthsToString function
        - Added optional FormatStr parameter to SVGPointToString function
        - Added optional FormatStr parameter to SVGPointsToString function
        - Added optional FormatStr parameter to SVGRectToString function
        - Fixed SVGSplitLines function bug for when path elements contain
          other attributes starting with 'd' (would get confused by
          'dominant-baseline' and skip splitting lines)
        - Fixed bug in ParseOverflow function where 'auto' was not correctly
          interpreted as visible
        - Modified ParseLength method to set EUValue
          (required because of TSVGLength.EUValue property fix)
        - Fixed SVGNumberToString function to return correct number when
          units are not pixels
        - Modified TSVGCircle class to use TSVGLength.Pixels (renamed from EUValue)
        - Modified TSVGCircle.DoSaveToXML class to use GetFormatStr
        - Modified TSVGRectangle class to use TSVGLength.Pixels (renamed from EUValue)
        - Modified TSVGRectangle.DoSaveToXML class to use GetFormatStr
        - Modified TSVGEllipse.DoSaveToXML class to use GetFormatStr
        - Modified TSVGLine.DoSaveToXML class to use GetFormatStr
        - Modified TSVGPolyLine.GetPolygon method to use GetFormatStr
        - Modified TSVGPolyLine.DoSaveToXML class to use GetFormatStr
        - Added TSVGCustomText.GetDecorationPoint method
        - Modified TSVGCustomText class to use TSVGLength.Pixels (renamed from EUValue)
        - Fixed TSVGText.ConvertToPath method for text decoration
          (underline, overline, and strike-out) text for FMX (and
          improved it for VCL)
        - Fixed access violation in TSVGTextPath.CalculateXYRotate method
          when point in flattened points closest to Character Distance
          is the very first polygon point
        - Modified TSVGTextPath.DoSaveToXML class to use GetFormatStr
        - Modified TSVGTextPath class to use TSVGLength.Pixels (renamed from EUValue)
        - Fixed bug in TSVGText.ConvertToPath method when it was optimized
          (uninitialized NewPosition was causing problems)
        - Fixed SmallCaps bug in TSVGText.ConvertToPath method where
          lower case characters were positioned at the top of the text
          line instead of the bottom
        - Fixed TSVGCustomText.SetX method to add a TSVGLength if object
          list is empty
        - Fixed TSVGCustomText.SetY method to add a TSVGLength if object
          list is empty
        Notes for SVG v1.x Owners
                - To refactor the SVG from a static SVG viewer only to a static SVG editor
                  required some major changes to the TSVGxxxElement classes and their
                  properties, generally to be able to save properties that were read (before
                  the elements would convert the svg values and then discard any extraneous
                  information.  For example, to save a length value such as '1in' requires
                  saving the raw value (1) and the unit (in) instead of the converted value
                  (96 pixels).  Unfortunately, this required breaking some properties to
                  provide clean code.  For example, the TSVGMarker.MarkerHeight property (a single),
                  had to become a TSVGLength *object*.  Code that uses these properties have to be
                  changed from Marker.MarkerHeight to Marker.MarkerHeight.Value.
                - Refactored ViewBox property from TSVGRect to TSVGViewBox *object*
                - Moved basic SVG shape elements (rect, ellipse, etc) to
                  RSSVG.BasicShapes.pas and FMX.RS.SVG.BasicShapes.pas
                - Moved SVG text elements to RSSVG.Text.pas and FMX.RS.SVGText.pas


-------------------------------------------------------------------
November 16, 2015        Version 2.0 EEP 0
        Major Features
                - Load, Edit and SAVE SVGs as SVG (XML)
                - Load and Save SVGs as Delphi Binary (Faster but Larger Files)
                - Use SVG Image Lists (TRSSVGImageList, VCL & FMX XE8+) to save
                  memory and disk space for your applications especially on mobile
                - Vastly Improved Text Support including text on a path, tspans,
                  text layout, spacing, kerning, and more
                - Detect and respond to mouse events with TRSSVGImage
                - Embed SVGs as binary into Delphi form files as part of TRSSVGDocument
                - New VCL TRSSVGScreen control provides flicker-reduced TRSSVGImage-like
                  control (note that it is not transparent though so you cannot
                  stack TRSSVGScreen controls on top of each other without obscuring
                  SVGs underneath
                - New Demo Applications
                - Lots of Bug Fixes

        Complete List
        - Added TRSSVGScreen component (VCL)
        - Added TRSSVGImageList component (VCL and FMX XE8+)
        - Added TSVGImageListEditor component editor for TRSSVGImageList
        - Fixed finding Design-time 'Help...' topics by searching for
          Unit_ClassName, not Unit.ClassName
        - Added ability to export SVGs to file, stream, or IXMLDocument
        - Added ability to find SVG element at a point
          (TSVGElement.ElementAtPos method)
        - Added ability to read Title of element from node (per spec) or
          attribute (per real world)
        - Added Direction support
        - Added Glyph Orientation Horizontal support
        - Added Glyph Orientation Vertical support
        - Added Writing Mode support
        - Added Letter Spacing support
        - Added Word Spacing support
        - Added Kerning support
        - Added Baseline Shift support
        - Added support for calculating the TSVGPath length
        - Added TSVGPath.PathLength property (read from SVG)
        - Added TSVGPath.ComputedPathLength property (calculated from path)
        - Added TSVGPath.LengthRatio property (ratio of PathLength/ComputedPathLength)
        - Added TSVGGraphicElement.xxxLength properties (XLength, LetterSpacingLength, etc)
          to handle length values (whether a percentage, the unit)
        - Improved Documentation
        - Added TSVGDocument.SaveToFile method to export the SVG to a file
        - Added TSVGDocument.SaveToStream method to export the SVG to a stream as XML
        - Added TSVGDocument.SaveToBinaryStream method to export the SVG to a stream as Delphi binary
        - Added TSVGDocument.SaveToXML method to export the SVG to an IXMLDocument
        - Added TSVGDocument.OnSavingElement event
        - Added TSVGDocument.OnSavedElement event
        - Added TSVGDocument.LoadFromBinaryStream method to load a Delphi
          binary SVG
        - Added TSVGElement.SaveToXML(IXMLNode) method to export a SVG element
          to an IXMLNode
        - Added TSVGElement.DoSaveToXML(IXMLNode) protected method to
          do the actual work of exporting a SVG element to an IXMLNode
          (the DoSaveToXML method is overridden in descendant classes)
        - Added TSVGElement.ElementState property and code to set state
          during reads, writes, and destruction
        - Added TSVGElement.Enabled property (Disabled elements are drawn
          grayed out and ignored in ElementAtPos method calls by default)
        - Added TSVGElement.ElementAtPos method
        - Added TSVGGraphicElement.PreferredStyles property to control how
          style properties are output
        - Added TSVGGraphicElement.ParentPreferredStyles property to control how
          style properties are output
        - Added TSVGGraphicElement.DoInternalElementAtPos method to do the
          actual detection of svg element under point
        - Added TSVGGraphicElement.InternalElementAtPos method to do the
          detection of svg element or its children under point
        - Added TSVGGraphicElement.SaveColorStyleProperty protected method
          to save a color property to an IXMLNode
        - Renamed TSVGElement.ObjectPropChange to PropagateObjectPropChange
          which propagates to children that things have changed (useful
          for when a parent's Brush, etc have changed
        - Added TSVGElement.ObjectPropChange method for when a change should
          not be propagated to children (such as changing the
          TSVGPreserveAspectRatio object)
        - Added Referrer parameter to TSVGMarker.DrawStartMarker method
        - Added Referrer parameter to TSVGMarker.DrawMidMarker method
        - Added Referrer parameter to TSVGMarker.DrawEndMarker method
        - Added Referrer parameter to TSVGMarker.Draw method
        - Added Referrer parameter to TSVGPattern.GetPattern method
        - Added TSVGSaveElementEvent type event signature
        - Added TSVGSavingElementEvent type event signature
        - Added TSVGGraphicElementEvent type event signature
        - Added Clear parameter to DrawSVGToBitmap procedure
        - Optimized TSVGElement.Assign method by wrapping assignment in
          BeginUpdate/EndUpdate
        - Fixed bug in TSVGElement.Assign method where Items were SHARED
          instead of copied/cloned
        - Modified behavior of TSVGGraphicElement Style Properties (e.g.,
          ClipRule, Overflow, ShapeRendering, etc) to automatically
          remove themselves from Inherits property when they are changed
          Note: Does not apply to TFont, TBrush, TPen properties
        - Modified TSVGGraphicElement.Clear method to use new TSVGBrush.Clear method
        - Modified TSVGGraphicElement.Clear method to use new TSVGFont.Clear method
        - Modified TSVGGraphicElement.Clear method to use new TSVGPen.Clear method
        - Modified TSVGGradientStop.Clear method to use new TSVGBrush.Clear method
          for StopBrush property
        - Fixed font-family style property support (on Windows and Mac)
          to include list of font families and supporting generic (serif,
          sans-serif, and monospace) fonts
          Note: The first font found on the system is used.  The RSCL
          does not support detecting a character is not present in the
          current font and selecting the next font in the list for that
          character
        - Fixed TSVGRadialGradient.GetGradient method to correctly calculate
          focal point when it is a percentage
        - Fixed TSVGRadialGradient.GetGradient method to correctly calculate
          rotation center when units are csuObjectBoundingBox
        - Fixed FMX to use Shape Caching (accidentally turned off)
        - Fixed bug in TSVGUse.ShouldDraw method where it would display
          a referenced element when the TSVGUse.Visible=False and the
          Reference.Visible=inherit
        - Fixed bug in TSVGImage.Draw method where image would be drawn even
          if not visible
        - Fixed incorrect calculation for picas in TSVGDocument.CalcUnitFactors
          method
        - Fixed bug in TSVGGraphicElement.AssignTo method where FloatToStr
          was not using USFormatSettings (as required by SVG spec)
        - Fixed TSVGGraphicElement.FillRule default property value to frNonZero
        - Fixed bug in TSVGDocument.SupportsLanguage method to return FALSE
          if input string is empty
        - Fixed TSVGElement.HasExtensions to return FALSE when an empty string
          is supplied
        - Fixed TSVGElement.HasFeatures to return FALSE when an empty string
          is supplied
        - Fixed TSVGElement.HasLanguages to return FALSE when an empty string
          is supplied
        - Fixed access violation in TSVGCustomGradient.ElementNotification method
          where the method tried to use the Item after it had been freed
          by inherited method
        - Fixed bug in TSVGGraphicElement.BeginDraw method where Canvas.Font.Brush
          was not set in VCL
        - Improved csuObjectBoundingBox handling in TSVGPattern.GetPattern method
          (still incorrect but better)
        - Added methods to TSVGElement to track and notify listeners if the
          current element is changed.  For example, this allows TSVGUse to be notified
          when the elements that it uses changes and then to ask to be redrawn
              Listeners property to track listeners
              ChangeNotification method to ask to be notified when element changes
              RemoveChangeNotification method to remove element from list of listeners
              NotifyListeners method to iterate through all listeners and notify them
              NotifyListener method is called for the listener so that it can respond
        - Removed TSVGGraphicElement.XIsPercent property (superceded by XLength property)
        - Removed TSVGGraphicElement.YIsPercent property (superceded by YLength property)
        - Removed TSVGGraphicElement.HeightIsPercent property (superceded by HeightLength property)
        - Removed TSVGGraphicElement.WidthIsPercent property (superceded by WidthLength property)
        - Cleaned up TSVGMarker.RefX by making it a TSVGLength property
        - Cleaned up TSVGMarker.RefY by making it a TSVGLength property
        - Cleaned up TSVGMarker.MarkerHeight by making it a TSVGLength property
        - Cleaned up TSVGMarker.MarkerWidth by making it a TSVGLength property
        - Cleaned up TSVGLinearGradient.X1 by making it a TSVGLength property
        - Cleaned up TSVGLinearGradient.Y1 by making it a TSVGLength property
        - Cleaned up TSVGLinearGradient.X2 by making it a TSVGLength property
        - Cleaned up TSVGLinearGradient.Y2 by making it a TSVGLength property
        - Cleaned up TSVGRadialGradient.FocalX by making it a TSVGLength property
        - Cleaned up TSVGRadialGradient.FocalY by making it a TSVGLength property
        - Published TSVGGraphicElement.TransformMatrix string property
        - Published TSVGCustomViewBox.ViewBoxRect string property
        - Published TSVGPattern.PatternTransformMatrix string property
        - Moved TSVGText class from RSSVG.pas to RSSVG.Text.pas
        - Moved TSVGTextRef class from RSSVG.pas to RSSVG.Text.pas
        - Moved TSVGCircle class from RSSVG.pas to RSSVG.BasicShapes.pas
        - Moved TSVGEllipse class from RSSVG.pas to RSSVG.BasicShapes.pas
        - Moved TSVGRectangle class from RSSVG.pas to RSSVG.BasicShapes.pas
        - Moved TSVGLine class from RSSVG.pas to RSSVG.BasicShapes.pas
        - Moved TSVGPolyline class from RSSVG.pas to RSSVG.BasicShapes.pas
        - Moved TSVGPolygon class from RSSVG.pas to RSSVG.BasicShapes.pas
        - Added GetSVGClass function
        - Added FindSVGClass function
        - Added ability to embed SVGs as binary into Delphi form files
          as part of TRSFmxSVGDocument
        - Added ability to detect and fire an OnClickElement event for TRSSVGImage
        - Added ability to change cursor based on SVG elements for TRSSVGImage
        - Added TRSSVGImage.OnClickElement event
        - Added TRSSVGImage.FindOptions property
        - Added ability to detect and fire an OnClickElement event for TRSSVGThreadImage
        - Added ability to change cursor based on SVG elements for TRSSVGThreadImage
        - Added TRSSVGThreadImage.OnClickElement event
        - Added TRSSVGThreadImage.FindOptions property
        - Added TRSFmxSVGDocument.EmbedSVGAsBinary property
        - Added TRSFmxSVGDocument.OnDisableAppearance event
        - Added TRSFmxSVGDocument.OnElementFound event
        - Added TRSFmxSVGDocument.OnSavingElement event
        - Added TRSFmxSVGDocument.OnSavedElement event
        - Fixed bug in TRSFmxSVGDocument destructor where viewers are not
          notified the document is going away
        - Added TRSSVGText.SVGText property to store and draw special SVG
          text
        - Modified TRSSVGText.Paint method to use SVGText to draw when
          text is complicated (has tspans, paths, etc)
        - Added ability to embed SVGs as binary into Delphi form files
          as part of TRSSVGDocument
        - Added TRSSVGScreen control, provides flicker-reduced TRSSVGImage-like
          control (note that it is not transparent though so you cannot
          stack TRSSVGScreen controls on top of each other without obscuring
          the ones underneath)
        - Added ability to detect and fire an OnClickElement event for TRSSVGImage
        - Added ability to change cursor based on SVG elements for TRSSVGImage
        - Added TRSSVGImage.OnClickElement event
        - Added TRSSVGImage.FindOptions property
        - Added ability to detect and fire an OnClickElement event for TRSSVGThreadImage
        - Added ability to change cursor based on SVG elements for TRSSVGThreadImage
        - Added TRSSVGThreadImage.OnClickElement event
        - Added TRSSVGThreadImage.FindOptions property
        - Added TRSSVGDocument.EmbedSVGAsBinary property
        - Added TRSSVGDocument.OnDisableAppearance event
        - Added TRSSVGDocument.OnElementFound event
        - Added TRSSVGDocument.OnSavingElement event
        - Added TRSSVGDocument.OnSavedElement event
        - Fixed bug in TRSSVGDocument destructor where viewers are not
          notified the document is going away
        - Changed TRSSVGText (VCL) to descend from TRSGPShape instead
          of TRSGPText
        - Published TRSSVGImage.OnPainting/OnPaint event
        - Published TRSSVGThreadImage.OnPainting/OnPaint event
        - Added ability to use pen stroke with text (TSVGText.DoInternalDraw)
        - Added support for glyph-orientation-horizontal style property
        - Added support for glyph-orientation-vertical style property
        - Added support for letter-spacing style property
        - Added support for word-spacing style property
        - Added support for writing-mode style property
        - Moved TSVGText class from RSSVG.pas to RSSVG.Text.pas
        - Moved TSVGTextRef class from RSSVG.pas to RSSVG.Text.pas
        - Fixed bug in TSVGText.DoLoadFromXML method where multiple
          spaces (and other control codes) between words were not removed
          for the Text property
        - Fixed TSVGText.GetBounds to return an accurate Bounding box
          after the first time the text is drawn (DoInternalDraw caches
          TextWidth and TextHeight for later use)
        - Overrode TSVGText.AssignTo method to assign object to
          TRSSVGText.SVGText property
        - Improved appearance of overline extended style for TSVGText
          (now a rectangle instead of thin line)
        - Moved TSVGCircle class from RSSVG.pas to RSSVG.BasicShapes.pas
        - Moved TSVGEllipse class from RSSVG.pas to RSSVG.BasicShapes.pas
        - Moved TSVGRectangle class from RSSVG.pas to RSSVG.BasicShapes.pas
        - Moved TSVGLine class from RSSVG.pas to RSSVG.BasicShapes.pas
        - Moved TSVGPolyline class from RSSVG.pas to RSSVG.BasicShapes.pas
        - Moved TSVGPolygon class from RSSVG.pas to RSSVG.BasicShapes.pas
        - Cleaned up TSVGRectangle.RXIsPercent by making it a protected property
        - Cleaned up TSVGRectangle.RYIsPercent by making it a protected property
        - Fixed bug in TSVGPolyline.GetShape method where 2 ClosePaths
          could be added in a row, causing FMX to black out the entire canvas
          (However, this bug was hidden until fixed bug where FMX was not
          using Shape Caching)
        - Added TSVGFont.IsFontFamilyAvailable(Name) class method
        - Implemented choosing generic fonts (serif, sans-serif, and monospace)
          with TSVGFont class
        - Added TSVGFontVariant type
        - Added TSVGFontVariantNames type
        - Added SVGFontVariants constant
        - Added TSVGAlignmentBaseline type
        - Added TSVGAlignmentBaselineNames type
        - Added SVGAlignmentBaselineNames constant
        - Added TSVGBaselineShift type
        - Added TSVGBaselineShiftNames type
        - Added SVGBaselineShiftNames constant
        - Added TSVGDominantBaseline type
        - Added TSVGDominantBaselineNames type
        - Added SVGDominantBaselineNames constant
        - Added TSVGTextPathMethod type
        - Added TSVGTextPathMethodNames type
        - Added SVGTextPathMethodNames constant
        - Added TSVGTextPathSpacing type
        - Added TSVGTextPathSpacingNames type
        - Added SVGTextPathSpacingNames constant
        - Added TSVGDirection type
        - Added TSVGDirectionNames type
        - Added SVGDirectionNames constant
        - Added TSVGWritingMode type
        - Added TSVGWritingModeNames type
        - Added SVGWritingModeNames constant
        - Added TSVGGlyphOrientationVertical type
        - Added TSVGGlyphOrientationVerticalNames type
        - Added SVGGlyphOrientationVerticalNames constant
        - Added TSVGGlyphOrientationHorizontal type
        - Added TSVGGlyphOrientationHorizontalNames type
        - Added SVGGlyphOrientationHorizontalNames constant
        - Added TSVGLength type
        - Added TSVGStylePropertyLength type
        - Added TSVGStylePropertyAutoLength type
        - Added TSVGLengths type
        - Added TSVGFindOption type
        - Added TSVGFindOptions type
        - Added TSVGElementState type
        - Added TSVGBrush.Clear method to reset brush properties to defaults
        - Added TSVGFont.Clear method to reset font properties to defaults
        - Added TSVGPen.Clear method to reset pen properties to defaults
        - Added TSVGFont.SizePreferredUnit property
        - Changed TSVGPen.ThicknessIsPercent property to ThicknessPreferredUnit
        - Fixed incorrect calculation for picas in SVGUnitFactors constant
        - Added SInvalidChildType resource string
        - Added SInvalidScaling resource string
        - Added SNameNotUnique resource string
        - Added TSVGElementTypes type
        - Added SVGDescriptiveElements constant
        - Added SVGShapeElements constant
        - Added SVGStructuralElements constant
        - Added SVGGradientElements constant
        - Added SVGSplitLines function
        - Added SaveAttrString functions
        - Added SaveNodeString function
        - Added SaveStyleProperty function
        - Added IsValidSVGHexColor function
        - Added ParseNumber function
        - Added ParseNumbers function
        - Added SVGColorToGrayscale function
        - Added PixelsToSVGUnit function
        - Added SVGLengthToString functions
        - Added SVGNumberToString functions
        - Added SVGNumbersToString function
        - Added SVGStrokeCapToString function
        - Added SVGStrokeJoinToString function
        - Added SVGPointToString function
        - Added SVGPointsToString function
        - Added SVGRectToString function
        - Added SVGTransformationToString function
        - Added SVGColorToString function
        - Added ParseLocalURI function
        - Added CleanText function
        - Added GetSVGFontVariant function
        - Added ParseSVGFontVariant function
        - Added GetSVGGlyphOrientationHorizontal function
        - Added ParseGlyphOrientationHorizontal function
        - Added GetSVGGlyphOrientationVertical function
        - Added ParseGlyphOrientationVertical function
        - Added GetSVGDirection function
        - Added ParseDirection function
        - Added GetSVGWritingMode function
        - Added ParseWritingMode function
        - Added ParseKerning function
        - Added ParseSpacing function
        - Added ParseAlignmentBaseline function
        - Added GetSVGAlignmentBaseline function
        - Added ParseBaselineShift function
        - Added GetSVGBaselineShift function
        - Added ParseDominantBaseline function
        - Added GetSVGDominantBaseline function
        - Added ParseTextPathMethod function
        - Added GetSVGTextPathMethod function
        - Added ParseTextPathSpacing function
        - Added GetSVGTextPathSpacing function
        - Added ParseRequiredStringList( IXMLNode; String; TStrings; String) overloaded function
        - Enhanced ParseURI function to handle more cases
        - Fixed ParseFontFamily function to return a list of font names
        - Fixed GetSVGUnit function to return suPercent if input string
          ends with '%' (before input string had to be exactly equal)
        - Changed ParseLength functions to contain a var aUnit: TSVGUnit
          parameter (the IsPercentage: Boolean parameter was removed)
        - Changed ParsePercent functions to contain a var aUnit: TSVGUnit
          parameter (the IsPercentage: Boolean parameter was removed)
        - Renamed ParsePercents function to ParseDashes
        - Changed ParseDashes functions to contain var aPercents: TBooleanDynArray;
          and var aUnits: TSVGUnits parameters
        - Changed behavior of ParseDashArray function to quietly ignore
          dash arrays that contain values <= 0
        - Changed behavior of ParseTextDecoration function to assign
          underline to style if blink detected (aligns with behavior of
          Chrome, IE, etc)
        - Changed behavior of ParseFontWeight method to use NOT BOLD for
          Font Weight of fw500 (aligns with behavior of
          Chrome, IE, etc)
        - Fixed bug in ParsePoints where if number of values was not even,
          NO points would be returned.  Now, all the points except the
          missing last one are returned (follows SVG specification)
        - Fixed ParseNumbers function to also use line feeds and carriage returns
          as delimiters
        - Fixed ParseDashes function to also use line feeds and carriage returns
          as delimiters
        - Fixed ParseLengths function to also use line feeds and carriage returns
          as delimiters
        - Fixed ParsePoints function to also use line feeds and carriage returns
          as delimiters
        - Fixed ParseSingles function to also use line feeds and carriage returns
          as delimiters
        - Fixed ParseRect function to also use line feeds and carriage returns
          as delimiters
        - Fixed ParseMatrix function to also use line feeds and carriage returns
          as delimiters
        - Fixed ParseTranslateMatrix function to also use line feeds and carriage returns
          as delimiters
        - Fixed ParseScaleMatrix function to also use line feeds and carriage returns
          as delimiters
        - Fixed ParseRotateMatrix function to also use line feeds and carriage returns
          as delimiters
        - Fixed ParseSkewXMatrix function to also use line feeds and carriage returns
          as delimiters
        - Fixed ParseSkewYMatrix function to also use line feeds and carriage returns
          as delimiters
        - Fixed ParseRotateMatrix function to also use line feeds and carriage returns
          as delimiters
        - Fixed ParseRotateMatrix function to also use line feeds and carriage returns
          as delimiters
        - Fixed ParseRotateMatrix function to also use line feeds and carriage returns
          as delimiters
        - Fixed ParseRotateMatrix function to also use line feeds and carriage returns
          as delimiters
        - Added TSVGImageListEditor component editor for TRSSVGImageList (VCL and FMX XE8+)
        - Added TRSGPCanvas.TextExtentF method
        - Added ability of TRSGPFont class to retrieve serif, sans-serif,
          or monospace generic font if Name is set to 'serif', 'sans-serif',
          or 'monospace'
        - Added TRSGPFont.IsFontFamilyAvailable(Name) class method
        - Added TRSGPStringFormat.GenericTypographic class function
        - Added TRSGPBrush.DefaultColor property to control if Color is stored
        - Added TRSGPBrush.DefaultKind property to control if Kind is stored
        - Added TRSGPBrush.IsGradientStored method to control if gradient is stored
        - Added TRSGPPen.DefaultColor property to control if Color is stored
        - Added TRSGPPen.DefaultKind property to control if Kind is stored
        - Added TRSGPPen.IsMiterLimitStored method to control if MiterLimit is stored
        - Added TRSGPPen.IsThicknessStored method to control if Thickness is stored
        - Added TRSGPGradient.IsShapeFocusStored method to control if ShapeFocus is stored
        - Added TRSGPGradient.IsShapeScaleStored method to control if ShapeScale is stored
        - Added TRSGPPath.AddPath method to append path without connection
          to existing path
        - Added TRSGPPath.Scale method to scale path by X and Y
        - Added TRSGPPath.Translate method to translate path by X and Y
        - Fixed bug in TRSGPPath.AddText(Pt: TPointF;...) method where
          aRect was not initialized for measuring the text properly
        - Fixed invalid parameter for GDI+ function bug in TRSGPPath.AddPolygon
          method by ensuring at least 3 points are specified
        - Fixed TRSGPFont.GetHeight method to return a value even when
          Owner is nil
        - Modified TRSGPPen.SetDashCap method to ignore dcUnused enumerated value
        - Modified TRSGPCustomLineCap.SetXXXCap(TRSGPLineCap) methods to
          map TRSGPLineCap to GDI+ line cap values
        - Modified TRSGPPen.SetXXXCap(TRSGPLineCap) methods to
          map TRSGPLineCap to GDI+ line cap values
        - Added TRSGPColorRec.ToGrayScale class method
        - Added TRSGPDashCap.dcUnused enumerated value to enable streaming
          0f TRSGPDashCap properties
        - Modified TRSGPLineCap type to use sequentially ordered enumerated values
          (i.e., without gaps) so that streaming system will write out
          TRSGPLineCap properties
        - Added TRSGPLineCapConversion type
        - Added RSGPLineCapConversion constant
        - Added TRSCustomTransparentGraphicControl.CreateGdiPCanvas method
        - Added TRSCustomTransparentGraphicControl.OnPainting event
        - Added TRSCustomTransparentGraphicControl.OnPaint event
        - Published TRSGPPathShape.OnPainting/OnPaint event
        - Published TRSGPLine.OnPainting/OnPaint event
        - Published TRSGPRectangle.OnPainting/OnPaint event
        - Published TRSGPEllipse.OnPainting/OnPaint event
        - Published TRSGPText.OnPainting/OnPaint event

        Notes for SVG v1.x Owners
                - To refactor the SVG from a static SVG viewer only to a static SVG editor
                  required some major changes to the TSVGxxxElement classes and their
                  properties, generally to be able to save properties that were read (before
                  the elements would convert the svg values and then discard any extraneous
                  information.  For example, to save a length value such as '1in' requires
                  saving the raw value (1) and the unit (in) instead of the converted value
                  (96 pixels).  Unfortunately, this required breaking some properties to
                  provide clean code.  For example, the TSVGMarker.MarkerHeight property (a single),
                  had to become a TSVGLength *object*.  Code that uses these properties have to be
                  changed from Marker.MarkerHeight to Marker.MarkerHeight.Value.
                - Refactored ViewBox property from TSVGRect to TSVGViewBox *object*
                - Moved basic SVG shape elements (rect, ellipse, etc) to
                  RSSVG.BasicShapes.pas and FMX.RS.SVG.BasicShapes.pas
                - Moved SVG text elements to RSSVG.Text.pas and FMX.RS.SVGText.pas

        Known Bugs/Issues
                - Documentation needs to be updated
                - soUseFillText option (required for FMX GPU Canvas, e.g.,
                  GlobalUseGPUCanvas := True in Delphi XE6+) is still buggy.  The
                  other FMX canvas classes use the text path option which is much
                  more stable
                - Underline, Strikethru, and Overline Text Decoration has not been
                  implemented yet
                - TRSSVGPanel support for new text routines is buggy
                - Editor Demo is incomplete


-------------------------------------------------------------------
September 6, 2015       Version 1.9
        - Added RAD Studio 10 Seattle Support
        - Improved display of scaled text when using FMX GPU Canvas
          (GlobalUseGPUCanvas := True) (Delphi XE6+)
        - Modified TSVGGraphicElement.DoModifyControl method to explicitly set
          WrapMode to Original for TRSSVGPath controls
        
        - Fixed bug where TRSSVGPath would not initialize the WrapMode
          property to wmStretch (FMX)
        - Changed default TRSSVGPath.WrapMode property to initialize to wmStretch (VCL)
        - Added ability to assign TRSGPPath to TRSPathData
        - Added TRSGPPath.AddText(Pt: TPointF;...) method
        - Modified TRSGPCanvas.FillText method to accept StringFormat=nil
          parameter
        - Modified TRSGPCanvas.MeasureText method to accept StringFormat=nil
          parameter
        - Modified TRSGPPath.AddText method to accept StringFormat=nil
          parameter
        - Fixed bug in TRSGPPath.AddText method where
          rectangle being passed to GDI+ was Delphi's TRectF (Left, Top, Right,
          Bottom) instead of Microsoft's TGPRectF (Left, Top, Width, Height)
        - Fixed bug in TRSGPPath.IsOutlineVisiblePathPoint method where
          invalid parameter is raised if Pen.Kind = bkNone; changed
          method to return False
        - Changed TRSGPPath.Points property to be default property


-------------------------------------------------------------------
August 23, 2015       Version 1.8.2
        - Added support for SVG Tiny Non-scaling stroke vector effect
        - Added TSVGGraphicElement.VectorEffect property
        - Changed behavior of element cloning for TSVGDocument to clone
          itself, using the passed in Owner, and then clone all children
          passing in the new TSVGDocument as the owner for the cloned
          children.  This fixes a bug where cloned elements would search
          for references in the passed in Owner TSVGDocument instead of
          the cloned TSVGDocument.
        - Fixed bug in TSVGImage.AssignProperties method where the bitmap
          was not copied
        - Fixed TSVGDocument.AssignProperties method to copy over all
          properties of the document
        - Fixed TSVGGraphicElement.AssignProperties method to copy over all
          properties of the document
        - Fixed TSVGGraphicElement.Clear method to clear out FShapeCacheChanged
          property
        - Added GetSVGVectorEffect function
        - Added ParseVectorEffect function
        - Fixed bug in ParseDashArray function where custom dash was not
          set in XE2 VCL
        - Added ipVectorEffect to TSVGStyleProperty (SVG Tiny attribute)
        - Added TSVGVectorEffect type
        - Added TSVGVectorEffects type
        - Added SVGVectorEffects constant
        - Added TRSGPCanvas.InitProperties method to restore private
          properties from the gdi+ canvas properties
        - Fixed bug in TRSGPCanvas.Assign(GpGraphics) method
          where matrix was not created before trying to get the gdi+
          world transformation matrix (causing access violation)
        - Fixed TRSGPCanvas.RestoreCurrentState method to restore the private
          transformations, clipping region, and quality settings from the
          gdi+ object on restore


-------------------------------------------------------------------
June 14, 2015         Version 1.8.1
        - Fixed bug in TSVGRadialGradient.GetGradient method where the
          transformed radius length was not calculated correctly
        - Fixed scaling bug in TSVGRadialGradient.GetGradient method when the
          radius length was specified by a percent
        - Fixed TSVGDocument.GetViewMatrix( TSVGMatrix;  TSVGRect) method
          to correctly support viewboxes that are not positioned at
          0,0 by NOT translating the viewmatrix to the ViewBox origin
          Note: This fixes a misunderstanding of the SVG Specification for ViewBox
        - Fixed TSVGCustomViewBox.GetViewMatrix( TSVGMatrix;  TSVGRect) method
          to correctly support viewboxes that are not positioned at
          0,0 by NOT translating the viewmatrix to the ViewBox origin
          Note: This fixes my misunderstanding of the SVG Specification
          for ViewBox
        - Fixed TSVGGraphicElement.GenerateMarkers(TRSPathData...) method to
          properly select marker points with consecutive curveTos
        - Fixed bug in TSVGMarker.GenerateMidMarker method where marker was
          always generated with automatic orientation
        - Fixed bug where marker would not be generated in the
          TSVGMarker.GenerateEndMarker method if xLineDelta and yLineDelta = 0
        - Fixed bug where marker would not be generated in the
          TSVGMarker.GenerateStartMarker method if xLineDelta and yLineDelta = 0
        - Fixed Invalid Floating Point operation/Divide By Zero error in
          TSVGMarker.GenerateMidMarker method
        - Added TSVGPattern.PatternMatrix property and modified GetPattern
          method to use it
        - Fixed support for TSVGPattern.Reference property to reference
          another pattern when drawing a pattern
        - Fixed TSVGCircle class to not draw circles with radius=0 as line
        - Fixed TSVGEllipse class to not draw ellipses with radiusX/Y=0 as line
        - Fixed TSVGLine class to not draw zero-length lines
        - Simplified TSVGEllipse.DoInternalDraw method
        - Simplified TSVGCircle.DoInternalDraw method
        - Fixed bug in ParseTextDecoration function where setting a
          text decoration would incorrectly remove the italic font-style
        - Fixed TopLeft of SVGs in TRSSVGPanel.GenerateControls method
          by moving the BoundsRect to 0,0 (XE8's BoundsRect property will
          return non-0,0 TopLeft)


-------------------------------------------------------------------
May 17, 2015          Version 1.8
        - Improved color support (currentColor, color attribute fix)
        - Improved markers support
        - Improved linear gradient support (VCL)
        - Improved path parsing
        - Added support for stroke-miterlimit (VCL Only)
        - Fixed TSVGUse.DoInternalDraw method to properly transform a
          used SVG Document or Symbol
        - Fixed TSVGUse.GenerateControls method to properly transform a
          used SVG Document or Symbol before generating child controls
        - Fixed parsing of font-size and x-height lengths by parsing and
          using font size unit factors
        - Overrode TSVGGraphicElement.GetUnitFactors method to modify the
          font size (em) and x-height (ex) factors based on current font size
        - Modified TSVGDocument.GetUnitFactors method to modify the
          font size (em) and x-height (ex) factors based on current font size
        - Fixed TSVGGraphicElement.DrawMarkers(TRSPathData...) method to
          properly select marker points with consecutive curveTos
        - Modified TSVGGraphicElement.DrawMarkers method to set the thickness
          of the pen to a minimum of SVGMinPenThickness
        - Modified TSVGGraphicElement.SetCanvasPen method to set the thickness
          of the pen to a minimum of SVGMinPenThickness
        - Modified TSVGGraphicElement.DoModifyControl method to set the thickness
          of the stroke to a minimum of SVGMinPenThickness
        - Modified TSVGGraphicElement.DoLoadFromXML method to set the font
          size before parsing any other attributes that may contain lengths
        - Added TSVGGraphicElement.Color property
        - Added support for currentColor constant supplied for SVG fill
          stroke, stop-color, etc presentation attributes
        - Fixed bug in TSVGMarker.DrawMidMarker method where marker was
          always drawn with automatical orientation
        - Fixed bug in TSVGCustomViewBox.Draw method where it was drawing
          elements it shouldn't (TSVGMarker, TSVGPattern)
        - Fixed bug in TSVGGraphicElement.ApplyStyle method where
          MarkerStartURI, MarkerMidURI, and MarkerEndURI properties were
          not being set using the 'marker' shorthand property
        - Fixed TSVGStyle.AddStyle property to *not* include shorthand
          properties when setting the style
        - Added TSVGStyle.IsShorthandProperty function
        - Updated TSVGGraphicElement.BeginDraw method to catch access violation
          in FMX Canvas.SaveState for XE8 and below
        - Added ParseMiterLimit function
        - Modified ParseColor function to accept rgb(FLOAT%, FLOAT%, FLOAT%)
          instead of just integers (Thanks PM)
        - Fixed ParseColor function to accept currentColor
        - Fixed ParseSkewXMatrix function to set matrix m21 field
        - Fixed ParseSkewYMatrix function to set matrix m12 field
        - Fixed ParseTransformation function to handle transformations
          separated by commas
        - Added ipStrokeMiterLimit to TSVGStyleProperty (works only in VCL)
        - Added SVGMinPenThickness constant
        - Fixed DefaultSVGInheritsProperties constant to *include*
          ipMarkerStart, ipMarkerMid, and ipMarkerStop
        - Fixed linear gradient bug in TRSGPBrush.Prepare method where
          rectangle being passed to GDI+ was Delphi's TRectF (Left, Top, Right,
          Bottom) instead of Microsoft's TGPRectF (Left, Top, Width, Height)
        - Fixed bug in TRSGPRegion.Combine method that was incorrectly
          converting from TRectF to TGPRectF
        - Fixed bug in TRSGPRegion.IsVisible method that was incorrectly
          converting from TRectF to TGPRectF


-------------------------------------------------------------------
May 3, 2015          Version 1.7
        - Official XE8 Release
        - Documented in help file workaround for XE8 Radial Gradients
          bug in Windows Direct2D
        

-------------------------------------------------------------------
April 19, 2015       Version 1.7B0
        - Added RAD Studio XE8 Support
         Known Bugs
            - Radial Gradients in FMX are centered wrong in XE8 (Windows)
        


-------------------------------------------------------------------
February 15, 2015    Version 1.6.2
        - Modified DrawSVGToBitmap (VCL) function to use
          Canvas.TrySmoothingMode method which gracefully fails if cannot
          set SmoothingMode property
        - Modified TSVGGraphicElement.BeginDraw (VCL) method to use
          Canvas.TrySmoothingMode method which gracefully fails if cannot
          set SmoothingMode property
        - Modified TSVGImage.LoadImage (VCL) method to use
          Canvas.TrySmoothingMode method which gracefully fails if cannot
          set SmoothingMode property
        - Added support for USE_OMNIXML compiler flag (defined in RSDefines.inc)
        - Fixed XML support on non-windows (if USE_ADOM was not defined) with
          XE7 by using OMNIXML
        - Fixed TSVGDocument.IsValidSVG methods to define the xml vendor
          when USE_ADOM or USE_OMNIXML flag is present
        - Modified TSVGRadialGradient.GetGradient method to set the
          TGradient.RadialTransform.Scale property with the Radius of the Gradient
          (Note that both FMX Gradient and VCL Gradient do not use Scale currently)
        - Fixed access violation in TRSSVGDocument when viewer contains
          component that had been freed (overrode Notification to
          detect component being freed and removed from viewers)
        - Fixed access violation in TRSFmxSVGDocument when viewer contains
          component that had been freed (overrode Notification to
          detect component being freed and removed from viewers)
        - Modified TRSGPShape.Paint method to use
          Canvas.TrySmoothingMode method which gracefully fails if cannot
          set SmoothingMode property
        - Added TRSGPCanvas.TrySmoothingMode method


-------------------------------------------------------------------
January 04, 2014     Version 1.6.1
        - Recompiled because of RiverSoftAVG Common Classes Library Changes


-------------------------------------------------------------------
December 28, 2014    Version 1.6
        - Improved Help Files


-------------------------------------------------------------------
November 16, 2014      Version 1.5.2
        - Recompiled for RAD Studio XE7 Update 1
        - Modified LoadBitmapFromDataURI function to generate a unique
          temp filename for every call (VCL)
        - Modified LoadBitmapFromDataURI function to delete the temp
          file after use (VCL)
        - Moved DoOnParsingNode method from TSVGGraphicElement class to
          TSVGElement class
        - Moved DoOnParsedNode method from TSVGGraphicElement class to
          TSVGElement class
        - Moved DoOnParsingNode and DoOnParsedNode methods calls from
          TSVGGraphicElement.ReadChildren method to TSVGElement.LoadFromXML
          method


-------------------------------------------------------------------
September 22, 2014     Version 1.5.1
        - Improved Microsoft Visio SVG Support
        - Added ability for TSVGImage to load embedded image data
        - Fixed bug for loading SVGs from MS Visio (style would not
          be applied to TSVGDocument) causing graphics errors in child
          TSVGElements because inherited values were not correctly set
        - Fixed bug in TSVGElement.Clear where fields would not be cleared
        - Fixed bug in TSVGText.DoLoadFromXML where text can be any child
          element (had been assuming 1 child or tspan)
        - Fixed *relative* Quadratic Bezier Curve support for TRSPathData (q & t)
        - Fixed TRSPathData.SmoothCurveTo method where LastPoint was a MoveTo
          would create a bad curve
        - Fixed TRSPathData.SmoothCurveToRel method where LastPoint was a MoveTo
          would create a bad curve
        - Added LoadBitmapFromDataURI function
        - Fixed ParseFontSize to handle 'em' font sizes, which should
          be the em * ParentSize
        
        
-------------------------------------------------------------------
September 7, 2014     Version 1.5
        - Added RAD Studio XE7 Support
        - Changed packages to use LibSuffix.inc exclusively (no more LibSuffix120.inc,
          LibSuffix130.inc, etc)
        - Reordered statements in TSVGServerThread destructor to speed
          up shutting down and freeing threads (Thanks SH)
        - Added clipping region to TSVGImageFile.Draw method code
        - Fixed bug in TSVGImageFile.Draw method to handle Canvas with
          different DPI by also MOVING the destination rectangle (not just
          scale its width and height) (Thanks AH)
        - Wrapped TSVGImageFile.Draw method code in try-except block
          to suppress drawing errors (Thanks AH)
        - Published TRSSVGImage.Size property for XE7+
        - Published TRSSVGThreadImage.DesignVisible property for XE7+
        - Published TRSSVGPath.DesignVisible property for XE7+
        - Removed TRSSVGImage.DesignVisible property for XE7+
        - Removed TRSSVGThreadImage.DesignVisible property for XE7+
        - Removed TRSSVGPath.DesignVisible property for XE7+
        - Removed references to ResourceBitmap in TRSSVGImage.Paint
        - Removed references to ResourceBitmap in TRSSVGThreadImage.Paint
        - Renamed RSVML.bpl to RSVMLDxxx.bpl
        Known Issues:
           - TRSSVGThreadImage (FMX) can give access violations when freeing its internal
             TBitmap, mostly with SVGs that contain text.  This is caused by Embarcadero 
             bugs and cannot be worked around.
             http://qc.embarcadero.com/wc/qcmain.aspx?d=118504


-------------------------------------------------------------------
August 10, 2014     Version 1.4
        - Added limited support for tspan (Thanks AH)
          Note: tspan works properly only with SVGs that provide X and Y
          coordinates for the tspan
        - Fixed TSVGGraphicElement.TextAlign to properly inherit value (Thanks AH)
        - Fixed TSVGText to properly align text when text-anchor is not
          "start" (e.g., leading) (Thanks AH)
        - Fixed ParseFontSize function to properly parse font size when
          unit is specified (Thanks AH)
        - Fixed bug in TSVGImageFile to handle Canvas with different DPI
        - Added HPPEMIT statements to RSGdiPlusGraphicsTypes unit to
          help allow compilation with C++Builder (Thanks BS)


-------------------------------------------------------------------
July 27, 2014     Version 1.3.1
        - Fixed TSVGImage drawing bugs when rotated or scaled by applying
          transformations directly to TCanvas in Draw method instead of in
          DoInternalDraw method (Thanks JO)
        - Fixed TSVGText drawing placement bugs (VCL only) by using
          text metrics (needed metrics do not exist in FMX) (Thanks AH)
        - Added TSVGSharedImage.SVG protected property
        - Added TSVGImageFile.Image protected property


-------------------------------------------------------------------
July 6, 2014      Version 1.3
        - Added Appmethod (Object Pascal) Support
        - Recompiled for Delphi XE6 Update 1
        - Recompiled because of RiverSoftAVG Common Classes Library Changes
        - Added Quadratic Bezier Curve support to TRSPathData (Q/q and T/t),
          SetPathString method converts Quadratic Bezier curves to Cubic
          Bezier curves


-------------------------------------------------------------------
June 8, 2014      Version 1.2.2
         - Fixed bug in TSVGGraphicElement.DoModifyControl method which
           would return wrong BoundsRect for generated controls in XE2
         - Fixed bug in TSVGGraphicElement.SetParent where child controls
           would not update their brush, stroke, font, etc when Parent is
           changed by calling Reset method
         - Added BrushChanged, PenChanged, FontChanged, and ClippingChanged
           to True in TSVGGraphicElement.Reset method
         - Added TSVGGraphicElement.SetCanvasPen method
         - Modified TSVGGraphicElement.BeginDraw method to call SetCanvasPen
           method
         - Fixed TSVGRectangle stroke width drawing error when matrix is
           scaled
         - Added TRSFmxSVGDocument.OnChanging event
         - Fixed bug where VCL TRSSVGImage and TRSSVGThreadImage would ignore
           their transformation matrix when painting (Thanks SP)
         - Added TRSSVGDocument.OnChanging event


-------------------------------------------------------------------
May 26, 2014      Version 1.2.1
         - Fixed bug in TSVGUse.GetBoundsRect method where wrong BoundsRect
           is returned if reference is a symbol
         - Fixed bug in TSVGGraphicElement.DoModifyControl method which
           would return wrong BoundsRect for generated controls (Thanks EM
           for spotting bug and supplying a fix)
         - Fixed bug in TSVGUse.GenerateControls method which would push
           used items down and to right in FMX
         - Fixed bug in TSVGImage.DoModifyControl method which would push
           used items down and to right in FMX (still does not handle rotations
           correctly)
         - Turned off WordWrap by default for TRSSVGText (fixes text output
           wrapping bug)


-------------------------------------------------------------------
April 27, 2014    Version 1.2
         - Added RAD Studio XE6 Support
         - Fixed divide by zero error in TSVGLinearGradient.GetGradient method
         - Fixed divide by zero error in TSVGRadialGradient.GetGradient method
         - Fixed bug in TRSSVGThreadImage.CreateServerThread method
           where thread priority could try to be set lower than 0 on
           non-Windows platforms
         - Included FMX.RS.SVGCodec in FMX.RS.SVGReg to ensure
           SVG loading into a TImage is available at design-time
           (this is not possible for VCL as the RSCL does not have
           SVG write capability)
         - Added demo limitation code


-------------------------------------------------------------------
March 30, 2014    Version 1.1
         - Added VCL TPicture/TGraphic Support (read SVGs into bitmaps anywhere
           TPicture is used, e.g., TOpenPictureDialog and Image1.Picture.LoadFromFile
           can be used for SVGs transparently)
         - Added FMX TBitmap Codec Support (read SVGs into bitmaps, e.g.,
           Image1.Bitmap.LoadFromFile can be used for SVGs transparently)
         - Added RSImaging.SVGImage unit (VCL)
         - Added FMX.RS.SVGCodec unit (VCL)
         - Added TSVGDocument.IsValidSVG( StrictValidation: Boolean; Text: String )
           class method
         - Added TSVGDocument.LoadFromText method
         - Added FocalX/YIsSpecified and FocalX/YIsPercent fields to
           TSVGRadialGradient class
         - Fixed CenterX/Y/Radius defaults for TSVGRadialGradient method to be
           50% per SVG spec
         - Fixed TSVGRadialGradient.GetGradient method to use FocalX/YIsSpecified
           and FocalX/YIsPercent fields to calculate gradient
         - Fixed TSVGGraphicElement.ApplyStyle method to NOT use "color"
           property as a 'potential indirect value (currentColor) for the
           "stroke" property' even though that is directly in the SVG
           specification!  InkScape, Chrome, Internet Explorer, etc all
           work this way
         - Added sSVGImageFile resource string
         - Added sSVGInvalidOperation resource string
         - Added sSVGUnsupportedOperation resource string
         - Added sSVGUnsupportedFileOperation resource string
         - Set default TSVGPen.Thickness to 1 (in VCL was defaulting to 0)
         - Fixed GDI+ out of memory errors in TRSGPCanvas.DrawPath method
           for sub-pixel size paths (e.g., ones with width and height < 1)
         - Fixed GDI+ out of memory error in TRSGPBrush.Prepare method
           when aRect has a width or height = 0
         - Modified GDIPCheck function to only raise exceptions if the
           status is not in GDIPIgnoreStatus
         - Added TGDIPStatusSet type
         - Added GDIPIgnoreStatus variable


-------------------------------------------------------------------
February 9, 2014    Version 1.0.2
         - Fixed memory leak in TRSSVGThreadImage (VCL) where Transform
           property was not freed in destructor
         - Fixed missing initialization of HexString variable in ParseColor function
         - Fixed range check errors in ParseColor function


-------------------------------------------------------------------
February 8, 2014    Version 1.0.1
         - Added TSVGStyle.Enabled property
         - Added TSVGStyleEvent type
         - Added TSVGDocument.OnAddStyle event
         - Added TSVGDocument.OnRemoveStyle event
         - Fixed bug in TSVGGraphicElement.DrawMarkers methods where a marker
           would not be drawn if the 2 points on the path were equal
         - Fixed access violation in DrawSVGUnwrapped function to return immediately if SVG
           parameter is nil
         - Fixed bug in TSVGEllipse.GetBoundsRect methods which was incorrectly
           halving the RadiusX and RadiusY values
         - Modified TSVGGraphicElement.DoModifyControl method to NOT fix the bug in
           FMX (at least up to XE5) where if the path does not end with a Close point,
           it can cause visual errors like blacking out the canvas.  INSTEAD,
           the bug is fixed in TRSSVGPath
         - Fixed bugs with TSVGElement.FitToRect method
         - Fixed bugs with TSVGxxxElement.GetBoundsRect(TSVGMatrix) methods
         - Added TRSSVGDocument.OnAddStyle event
         - Added TRSSVGDocument.OnRemoveStyle event
         - Fixed access violation in TRSSVGImage.UpdateBitmap method when
           Width or Height of TRSSVGImage or SVGRoot were 0
         - Fixed drawing non-document root of SVG in TRSSVGImage.UpdateBitmap
           method by calling TSVGElement.GetBoundsRect(RSIdentityMatrix)
           method instead of TSVGElement.GetBoundsRect method
         - Added TRSFmxSVGDocument.OnAddStyle event
         - Added TRSFmxSVGDocument.OnRemoveStyle event
         - Added TRSSVGThreadImage.DefaultAspectRatio property (FMX)
         - Added TRSSVGThreadImage.Options property (FMX)
         - Added TRSSVGThreadImage.DPI property (FMX)
         - Modified TRSSVGPath.Paint method to fix a bug in
           FMX (at least up to XE5) where if the path does not end with a Close point,
           it can cause visual errors like blacking out the canvas (FMX)
         - Set TRSSVGxxx (TRSSVGCircle, TRSSVGRectangle, TRSSVGPath, etc)
           Stroke.DefaultKind to bkNone (to match SVG default stroke kind),
           which ensures Stroke.Kind is streamed properly
         - Fixed drawing non-document root of SVG in TSVGPaintJob.Execute
           method by calling TSVGElement.GetBoundsRect(RSIdentityMatrix)
           method instead of TSVGElement.GetBoundsRect method
         - Removed .dproj files from installer (Delphi XE4 and earlier could not
           read them properly)
         - Small Help File updates
         - Updated because of RiverSoftAVG Common Classes Library Changes


-------------------------------------------------------------------
January 19, 2014    Version 1.0 OFFICIAL RELEASE
         - Fixed bug in TSVGGraphicElement.DrawPath method for FMX where an
           EInvalidCallingConditions exception could be thrown when filling
           a complicated path with a gradient could cause a crash on mobile platforms
           (Note that this will still cause a visual error because the
           path wasn't filled)
         - Fixed bug in TSVGPolyline.DrawPoints method for FMX where an
           EInvalidCallingConditions exception could be thrown when filling
           a complicated path with a gradient could cause a crash on mobile platforms
           (Note that this will still cause a visual error because the
           path wasn't filled)
         - Modified TSVGGraphicElement.DoModifyControl method to fix a bug in
           FMX (at least up to XE5) where if the path does not end with a Close point,
           it can just black out the entire canvas
         - Added DrawSVGWrapped function
         - Modified TRSPathData.FillPath to fix a bug in TCanvas.FillPath
           (FMX, at least up to XE5) where if the path does not end with a Close point,
           it can cause visual errors like blacking out the canvas
         - Fixed bugs in TRSGPBrush.Update method when trying to set up
           blend points for a gradient when the StartPosition and
           StopPosition are outside the 0->1 space
         - Fixed access violation loading a TRSSVGPanel in a mobile form
         - Added TRSSVGImage.Buffered property, which controls whether
           the SVG is draw to a backbuffer or directly to the control's
           canvas
         - Added TRSSVGImage.IsBuffered method


-------------------------------------------------------------------
January 5, 2014    Version 1.0 EEP8
         - Added Creating SVG VCL controls functionality
         - Fixed SVG markers for generated controls in FMX
         - Fixed SVG patterns for FMX
         - Added aThickness parameter to TSVGMarker.GenerateStartMarker protected method
         - Added aThickness parameter to TSVGMarker.GenerateMidMarker protected method
         - Added aThickness parameter to TSVGMarker.GenerateEndMarker protected method
         - Added aThickness parameter to TSVGMarker.Generate protected method
         - Fixed TSVGPattern.GetPattern method to correctly draw onto
           background bitmap in FMX
         - Fixed transformation for size of pattern in TSVGPattern.GetPattern method
         - Fixed TSVGxxxGradient.GetGradient method bug where gradient
           is defined wrong when Units is UserSpaceOnUse
         - Fixed bug in TSVGDocument.ReadStyles(const Node: IXMLNode) method
           where element style does not contain a single text node and would raise
           an exception
         - Fixed bug where TSVGElement.ID property would be set to empty
           string if ID attribute didn't exist
         - Changed generated unique TSVGElement.ID to be repeatable between
           design-time and run-time
         - Fixed sizing bug of creating controls at design-time in
           TSVGGraphicElement.DoModifyControl method
         - Modified TSVGElement.CreateControl method for VCL to use Owner directly
           if Parent is a TWinControl
         - Modified SVGClasses for VCL to generate new TRSSVGxxx VCL controls
         - Added TRSSVGPanel (VCL) for run-time and design-time creation of SVG VCL controls
         - Added TRSSVGPath (VCL), a VCL control for displaying a SVG path
         - Added TRSSVGText (VCL), a VCL control for displaying a SVG Label
         - Added TRSSVGLayout (VCL), a VCL control for displaying a SVG group
         - Added TRSSVG_Image (VCL), a VCL control for displaying a SVG Image
         - Fixed TRSSVGImage.SetSVGDocument method bug where access violation
           would occur because of too late free notification
         - Fixed bug in loading a TRSSVGPanel component where it would delete
           components that had been streamed at design-time, causing an
           access violation
         - Fixed TRSSVGImage.SetSVGDocument method bug where access violation
           would occur because of too late free notification
         - Fixed TRSSVGPanel.SetSVGDocument method bug where access violation
           would occur because of too late free notification
         - Modified TRSSVGPanel to only delete children if they publish
           a 'SVGID' property, allowing a TRSSVGPanel to contain other
           controls besides SVG controls
         - Added registration of TRSSVGPath component (VCL)
         - Added registration of TRSSVGPanel component (VCL)
         - Added registration of TRSSVGLayout component (VCL)
         - Added registration of TRSSVG_Image component (VCL)
         - Added registration of TRSSVGText component (VCL)
         - Modified TSVGCreateControlsEditor to work with VCL as well
         - Added SVGPanelVCL demo project for demonstrating TRSSVGPanel (VCL)
         - Added Threads (FMX) demo project for demonstrating the TRSSVGThreadImage component
         - Added Threads (VCL) demo project for demonstrating the TRSSVGThreadImage component
         Known Bugs
            - Linear Gradients in VCL can be subtly wrong as GDI Plus requires
              the gradient to be in the -1,1 space.  When the gradient is outside
              of this space, the gradient stops are in the wrong offsets.


-------------------------------------------------------------------
December 24, 2013    Version 1.0 EEP7
         - Fixed clipping in VCL
         - Fixed creating SVG objects at design-time (FMX)
         - Fixed TSVGGraphicElement.BuildClipRegion method to modify its
           clipping region by the element's transformation matrix
         - Added TSVGGraphicElement.DrawChildren protected method
         - Refactored TSVGGraphicElement.Draw method to use DrawChildren method
         - Refactored TSVGSwitch to override DrawChildren method instead of
           Draw method
         - Moved DrawChildren call inside of TSVGGraphicElement.InternalDraw
           method so that it is between BeginDraw and EndDraw (and children
           can be clipped by parents)
         - Added TSVGElement.GenerateChildControls protected method
         - Refactored TSVGElement.GenerateControls method to use GenerateChildControls method
         - Refactored TSVGSwitch to override GenerateChildControls method instead of
           GenerateControls method
         - Added TSVGDocument.DefaultColorInterpolation property (VCL only)
         - Added TSVGDocument.DefaultColorRendering property (VCL only)
         - Added TSVGDocument.DefaultShapeRendering property (VCL only)
         - Added TSVGDocument.DefaultTextRendering property (VCL only)
         - Added SVGControlClasses variable, used by CreateControl
         - Refactored TSVGElement.CreateControl method, which now uses
           control class defined in SVGControlClasses, instead of being
           overrideen in child classes
         - Added TRSSVGDocument.DefaultColorInterpolation property (VCL only)
         - Added TRSSVGDocument.DefaultColorRendering property (VCL only)
         - Added TRSSVGDocument.DefaultShapeRendering property (VCL only)
         - Added TRSSVGDocument.DefaultTextRendering property (VCL only)
         - Added TRSSVGThreadImage.DefaultAspectRatio property (VCL only)
         - Added TRSSVGThreadImage.DPI property (VCL only)
         - Added TRSSVGThreadImage.Options property (VCL only)
         - Added TRSSVGThreadImage.DefaultColorInterpolation property (VCL only)
         - Added TRSSVGThreadImage.DefaultColorRendering property (VCL only)
         - Added TRSSVGThreadImage.DefaultShapeRendering property (VCL only)
         - Added TRSSVGThreadImage.DefaultTextRendering property (VCL only)
         - Added TRSSVGPanel.GenerateControls method
         - Added TRSSVGPanel.ClearSVGDocument method
         - Fixed TRSSVGPanel.SVGRootID property to properly regenerate
           FMX controls when it is changed
         - Changed TRSSVGThreadImage (FMX) to only support desktop, not mobile
         - Published lots of TRSSVGPath properties, such as Width, Visible,
           Locked, OnClick, etc
         - Set TRSSVGxxx (TRSSVGCircle, TRSSVGRectangle, TRSSVGPath, etc)
           Fill default Color to black (to match SVG default fill color),
           which ensures fill color is streamed properly
         - Set TRSSVGxxx (TRSSVGCircle, TRSSVGRectangle, TRSSVGPath, etc)
           Stroke default Kind to bkNone (to match SVG default stroke kind),
           which ensures Stroke.Kind is streamed properly
         - Changed TRSSVGThreadImage (FMX) to only support desktop, not mobile
         - Created TSVGCreateControlsEditor component editor for the
           TRSSVGPanel control so that permanent FMX controls can be
           created at design-time
         Known Bugs
            - Creating SVG objects at design-time (FMX) are not properly sized and
              there are occasional parenting issues


-------------------------------------------------------------------
December 15, 2013    Version 1.0 EEP6
         - Added Palette Icons
         - Added Install Logo
         - Finished API Documentation
         - Documented the RSSVG unit
         - Changed TSVGElement class to generate a unique ID on creation
           ('ID#Pointer')
         - Fixed bug in TSVGDocument.LoadFromFile to allow multiple threads
           to access a file simultaneously (for reading only)
         - Fixed bug where Canvas.Pen/Stroke.Width could be set to 0 (FMX
           would cause exceptions)
         - Greatly improved speed of TRSSVGThreadImage
         - Fixed access violations on destruction of TRSSVGThreadImage
         - Modified TRSSVGThreadImage class to use TSVGServerThread instead
           of TSVGLoadThread
         - Added TRSFmxSVGDocument.DPI property
         - Added TRSSVGThreadImage.SVGRootID property
         - Changed TRSSVGImage (VCL) to descend from TRSCustomTransparentGraphicControl
           (TGraphicControl) instead of TCustomTranparentControl.  Fixes:
             - Fixed bug where TRSSVGImage would not update when its parent
               resized because it was not receiving messages
             - Fixed bug where z-order is not drawn properly for TRSSVGImage
         - Changed TRSSVGThreadImage (VCL) to descend from TRSCustomTransparentGraphicControl
           (TGraphicControl) instead of TCustomTranparentControl.  Fixes:
             - Fixed bug where TRSSVGThreadImage would not update when its parent
               resized because it was not receiving messages
             - Fixed bug where z-order is not drawn properly for TRSSVGThreadImage
         - Moved TRSSVGPath.Data property from Public to Published
         - Moved TRSSVGPath.WrapMode property from Public to Published
         - Changed TRSSVGPanel default Width and Height to 100x100
         - Fixed ParseRotateMatrix function to apply translate, rotate, -translate
           in correct Postfix/Prefix order
         Known Bugs
            - TRSSVGThreadImage is buggy on mobile devices
            - Clipping (VCL) is broken
            - Creating SVG objects at design-time (FMX) doesn't work yet (not selectable, changable, or streamable)
            - Markers are not always correct (FMX and VCL)


-------------------------------------------------------------------
December 8, 2013    Version 1.0 EEP5
         - Mac OSX support greatly increased
         - SVG FMX Objects support greatly increased
         - Added SVG shape-rendering support; TSVGGraphicElement.ShapeRendering property
         - Added SVG text-rendering support (VCL Only); TSVGGraphicElement.TextRendering property
         - Fixed Internal Error for Delphi iOS ARM compiler
           (removed inline keyword from TSVGGraphicElement.UpdateInherits method)
         - Fixed bug for generating FMX controls for SVG 'use' element
         - Fixed bug for generating FMX controls for SVG 'image' element
         - Fixed bug for generating FMX controls where Stroke.Thickness
           was not scaled
         - Fixed TSVGGraphicElement.Cursor property to return inherited
           Cursor if ipCursor in Inherits
         - Fixed TSVGGraphicElement.Opacity property to return inherited
           opacity if ipOpacity in Inherits
         - Fixed TSVGGraphicElement.MarkerStartURI property to return inherited
           opacity if ipMarkerStart in Inherits
         - Fixed TSVGGraphicElement.MarkerEndURI property to return inherited
           opacity if ipMarkerEnd in Inherits
         - Fixed TSVGGraphicElement.MarkerMidURI property to return inherited
           opacity if ipMarkerMid in Inherits
         - Fixed TSVGGraphicElement.Clear method to set all properties back
           to their defaults
         - Renamed TSVGGraphicElement.GetObjectOpacity method to GetAbsoluteOpacity
         - Changed TSVGControlElementEvent event type to be a procedure
           instead of a function
         - Added TSVGSenderControlElementEvent event type
         - Fixed MAJOR bug in ParseAttrString where xlink attributes would
           not be found on non-Windows platforms because the ADOM parser
           requires the correct namespace when searching for attributes
         - Added GetSVGShapeRendering function
         - Added ParseShapeRendering function
         - Added GetSVGTextRendering function
         - Added ParseTextRendering function
         - Documented the RSSVGTypes unit
         - Added TSVGShapeRendering and TSVGShapeRenderingNames types
         - Added TSVGTextRendering and TSVGTextRenderingNames type
         - Documented the FMX.RS.SVGCtrls unit
         - Published SVGID property for TRSSVGxxx FMX controls and made it
           writeable
         - Fixed bug where exception occurs when TRSFmxSVGDocument.Filename
           is emptied
         - Added TRSSVGPanel.OnGenerateControls event
         - Added TRSSVGPanel.ScaleOriginal property
         - Added TRSSVGPanel.WrapMode property
         - Added TRSSVG_Image control
         - Documented the RSSVGCtrls unit
         - Fixed bug where exception occurs when TRSSVGDocument.Filename
           is emptied
         - Added MobileSVGBrowser demo project
         Known Limitations
            - Creating SVG objects at design-time (FMX) doesn't work yet (not selectable, changable, or streamable)
            - Markers are not always correct (FMX and VCL)
            - FillRules do not work for FMX (FMX Limitation)
            - Gradient Fills are limited on Mobile (FMX limitation)


-------------------------------------------------------------------
December 1, 2013    Version 1.0 EEP4
        - Fixed Android support
        - Add RSCL Help Reference (Currently, a separate RSCL.chm file, which will be integrated into RSSVG.chm later)
        - Fixed Internal Error for Delphi Android compiler
          (removed inline keyword from TSVGGraphicElement.UpdateInherits method)
        - Moved DrawSVGToBitmap procedure from [FMX.]RSSVGCtrls to RSSVG.pas
        - Added TRSSVGThreadImage class
        - Moved DrawSVGToBitmap procedure from [FMX.]RSSVGCtrls to RSSVG.pas
        - Renamed TRSImageWrapMode to TSVGImageWrapMode and moved to
          RSSVGTypes.pas
        - Moved MAX_SVGIMAGE_SIZE to RSSVGUtils.pas
        - Modified TSVGImage.UpdateBitmap to call ScaleSize function
        - Fixed bug in setting TRSSVGImage (VCL) where stretching
          would not update the bitmap and would look fuzzy
        - Added TSVGImageWrapMode type
        - Added RSSVGUtils.pas unit
        - Documented RSSVGUtils unit
        - Renamed TRSImageWrapMode to TSVGImageWrapMode and moved to
          RSSVGTypes.pas
        - Moved MAX_SVGIMAGE_SIZE to RSSVGUtils.pas
        - Modified TSVGImage.UpdateBitmap to call ScaleSize function
        - Added ScaleSize function that scales the bitmap based on
          ImageWrapMode and SVG's BoundsRect
        - Moved GetSVGElementType function from RSSVGTypes unit to RSSVGUtils unit
        - Moved GetSVGFeatureSupport function from RSSVGTypes unit to RSSVGUtils unit
        - Moved GetSVGAlign function from RSSVGTypes unit to RSSVGUtils unit
        - Moved GetSVGColorInterpolation function from RSSVGTypes unit to RSSVGUtils unit
        - Moved GetSVGColorRendering function from RSSVGTypes unit to RSSVGUtils unit
        - Moved GetSVGCursor function from RSSVGTypes unit to RSSVGUtils unit
        - Moved GetSVGCursor function from RSSVGTypes unit to RSSVGUtils unit
        - Moved GetSVGFillRule function from RSSVGTypes unit to RSSVGUtils unit
        - Moved GetSVGStyleProperty function from RSSVGTypes unit to RSSVGUtils unit
        - Moved GetSVGUnit function from RSSVGTypes unit to RSSVGUtils unit
        - Moved GetSVGMarkerUnit function from RSSVGTypes unit to RSSVGUtils unit
        - Moved GetSVGGradientUnit function from RSSVGTypes unit to RSSVGUtils unit
        - Moved GetSVGGradientSpread function from RSSVGTypes unit to RSSVGUtils unit
        - Moved GetSVGGenericFontFamily function from RSSVGTypes unit to RSSVGUtils unit
        - Moved GetSVGFontFamily function from RSSVGTypes unit to RSSVGUtils unit
        - Moved GetSVGFontAbsSize function from RSSVGTypes unit to RSSVGUtils unit
        - Moved GetSVGFontAbsSize function from RSSVGTypes unit to RSSVGUtils unit
        - Moved GetSVGFontWeight function from RSSVGTypes unit to RSSVGUtils unit
        - Moved GetSVGFontStyle function from RSSVGTypes unit to RSSVGUtils unit
        - Moved GetSVGTextAnchor function from RSSVGTypes unit to RSSVGUtils unit
        - Moved GetSVGTextAnchor function from RSSVGTypes unit to RSSVGUtils unit
        - Moved GetSVGTextDecoration function from RSSVGTypes unit to RSSVGUtils unit
        - Moved GetSVGSelectorTokenType function from RSSVGTypes unit to RSSVGUtils unit
        - Moved TokenizeSelector function from RSSVGTypes unit to RSSVGUtils unit
        - Moved SetColorOpacity function from RSSVGTypes unit to RSSVGUtils unit
        - Moved GetTextAlign function from RSSVGTypes unit to RSSVGUtils unit
        - Added RSSVGSyncObjs.pas unit
         Known Limitations
            - Creating SVG objects at design-time (FMX) doesn't work yet (not selectable, changable, or streamable)
            - Markers are not always correct (FMX and VCL)
            - GradientUserSpace1 Test fails (VCL)
            - FillRules do not work for FMX (FMX Limitation)
            - Gradient Fills are limited on Mobile (FMX limitation)
            - Gradients on OSX are not working correctly


-------------------------------------------------------------------
November 24, 2013    Version 1.0 EEP3
        - Fixed memory leak where TSVGElement object would not free its
          items when they were removed
        - Fixed bug in setting TSVGGraphicElement.Pen with gradients
        - Fixed bug for reading TSVGRectangle RX and RY properties
        - Added ability for IDs to NOT be unique (violates SVG standard
          but since both Chrome and IE do it), controlled by soEnforceUniqueID
          option
        - Moved ParseXXX functions to a new unit: FMX.RS.SVGUtils/RSSVGUtils
        - Modified calls to ParseXXX functions to use GetUnitFactors
        - Added TSVGDocument.DPI property (default is 96, which is good for
          Windows, set to 72 for Mac)
        - Added TSVGDocument.UnitFactors read-only property
        - Added TSVGElement.GetUnitFactors method to retrieve the
          Owner.UnitFactors (TSVGDocument) or SVGUnitFactors constant
          if Owner is nil
        - Fixed drawing code to use Pen.ThicknessIsPercent if necessary
        - Reworked code for handling percentages to keep percentages around,
          fixes bug where an element can be "use"d by more than one
          TSVGUse element and the viewport changes for the used element
        - Modified ParseXXX functions to receive SVG Unit Factors
        - Fixed ParseRect to accept space and/or commas as delimiter
        - Fixed ParseColor function to ALWAYS use IdentToAlphaColor as
          the alpha color identifiers align better with SVG specification
          (e.g., there is no lightblue in clColors)
        - Fixed bug in ParseColor for "rgb(X,Y,Z)" color definitions
        - Added SplitNumbers function which acts like SplitString but
          also considers +/- as delimiters (allows 2 numbers to be defined
          like "100-100"
        - Fixed bugs in ParseXXX for concatenated numbers by using
          SplitNumbers function
        - Added soEnforceUniqueID to TSVGOption
        - Modified SVGUnitFactors constant to assume 96 DPI
        - Added TSVGPen.ThicknessIsPercent property
         Known Limitations
            - No Help Files
            - Android doesn't work.  Code fails with internal compiler error.
            - Creating SVG objects at design-time (FMX) doesn't work yet (not selectable, changable, or streamable)
            - Markers are not always correct (FMX and VCL)
            - GradientUserSpace1 Test fails (VCL)
            - FillRules do not work for FMX (FMX Limitation)
            - Gradient Fills are limited on Mobile (FMX limitation)
            - Gradients on OSX are not working correctly


-------------------------------------------------------------------
November 18, 2013    Version 1.0 EEP2
            - Fixed StrToFloat/TryStrToFloat to use US Locale information in
              SVG library (SVG numbers use standard decimal format, not
              locale-specific), caused SVGs to not be readable in some locales


-------------------------------------------------------------------
November 17, 2013    Version 1.0 EEP1
        - Initial Version
        Known Limitations
            - No Help Files
            - Android doesn't work.  Code fails with internal compiler error.
            - Creating SVG objects at design-time (FMX) doesn't work yet (not selectable, changable, or streamable)
            - Markers are not always correct (FMX and VCL)
            - GradientUserSpace1 Test fails (VCL)
            - FillRules do not work for FMX (FMX Limitation)
            - Gradient Fills are limited on Mobile (FMX limitation)
            - Gradients on OSX are not working correctly

Send mail to webmasterNO@SPAMRiverSoftAVG.com with questions or comments about this web site.
Copyright © 2002-2017 RiverSoftAVG
Last modified: August 13, 2017