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.

-------------------------------------------------------------------

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: February 20, 2017