use cases.
for instance want to do a vector graphics drawing editor. you can use display lists to do undo and redo
or just want to resize the window and canvas from runtime input
you want to modify the items in the display list at runtime
test by resize window and zoom with mouse wheel
Code: Select all
;Vector drawring display List
;Idle  
Prototype pAddPathArc(x1.d,y1.d,x2.d,y2.d,radius.d,flags=#PB_Path_Default)  
Prototype pAddPathBox(x.d,y.d,w.d,h.d,flags=#PB_Path_Default) 
Prototype pAddPathEllipse(x.d,y.d,Rx.d,ry.d,sa.d=0,ed.d=0,flags=#PB_Path_Default)
Prototype pAddPathLine(x.d,y.d,flags=#PB_Path_Default)
Prototype pAddPathSegments(segments.s,flags=#PB_Path_Default) 
Prototype pAddPathText(text.s) 
Prototype pBeginVectorLayer(alpha=255)
Prototype pClipPath(flags=#PB_Path_Default)
Prototype pClosePath()
Prototype.d pConvertCoordinateX(x.d,y.d,src=#PB_Coordinate_User,target=#PB_Coordinate_Output)
Prototype.d pConvertCoordinateY(x.d,y.d,src=#PB_Coordinate_User,target=#PB_Coordinate_Output)
Prototype pCustomDashPath(w.d,Array dashArray.d(1),flags=#PB_Path_Default,startOffset.d=0)
Prototype pDashPath(w.d,l.d,flags=#PB_Path_Default,startoffset.d=0.0) 
Prototype pDotPath(w.d,dist.d,flags=#PB_Path_Default,startoffset.d=0.0)
Prototype pDrawVectorImage(id,alpha=255,w.d=0.0,h.d=0.0)
Prototype pDrawVectorParagraph(text.s,w.d,h.d,flags=#PB_VectorParagraph_Left)
Prototype pDrawVectorText(Text.s)
Prototype pEndVectorLayer()
Prototype pFillPath(flags=#PB_Path_Default)
Prototype pFillVectorOutput()
Prototype pFlipCoordinatesX(axis.d,system=#PB_Coordinate_User)
Prototype pFlipCoordinatesY(axis.d,system=#PB_Coordinate_User)
Prototype pIsInsidePath(x.d,y.d,system=#PB_Coordinate_User)  
Prototype pIsInsideStroke(x.d, y.d, Width.d,Flags=#PB_Path_Default,System=#PB_Coordinate_User)
Prototype pIsPathEmpty() 
Prototype pMovePathCursor(x.d, y.d,Flags=#PB_Path_Default) 
Prototype.d pPathBoundsHeight()
Prototype.d pPathBoundsWidth()
Prototype.d pPathBoundsX()
Prototype.d pPathBoundsY()
Prototype.d pPathCursorX()
Prototype.d pPathCursorY() 
Prototype.d pPathLength() 
Prototype.d pPathPointAngle(Distance.d)
Prototype.d pPathPointX(Distance.d)
Prototype.d pPathPointY(Distance.d)
Prototype.s pPathSegments()
Prototype pResetCoordinates(system=#PB_Coordinate_User) 
Prototype pResetPath()
Prototype pRestoreVectorState()
Prototype pRotateCoordinates(x.d, y.d,Angle.d,System=#PB_Coordinate_User)
Prototype pSaveVectorState()
Prototype pScaleCoordinates(ScaleX.d, ScaleY.d,System=#PB_Coordinate_User)
Prototype pSkewCoordinates(AngleX.d, AngleY.d,System=#PB_Coordinate_User)
Prototype pStartVectorDrawing(Output)
Prototype pStopVectorDrawing()
Prototype pStrokePath(Width.d,Flags=#PB_Path_Default)
Prototype pTranslateCoordinates(x.d, y.d,System=#PB_Coordinate_User)
Prototype pVectorFont(ID,Size.d=0)
Prototype.d pVectorOutputHeight()
Prototype.d pVectorOutputWidth()
Prototype.d pVectorParagraphHeight(Text$, Width.d, Height.d)
Prototype.d pVectorResolutionX()
Prototype.d pVectorResolutionY()
Prototype pVectorSourceCircularGradient(x.d, y.d, Radius.d,CenterX.d=0.0,CenterY.d=0.0)
Prototype pVectorSourceColor(Color)
Prototype pVectorSourceGradientColor(Color, Position.d)
Prototype pVectorSourceImage(ImageID,Alpha=255,Width.d=0,Height.d=0,Flags=#PB_VectorImage_Default)
Prototype pVectorSourceLinearGradient(x1.d, y1.d, x2.d, y2.d)
Prototype.d pVectorTextHeight(Text$,Flags=#PB_VectorText_Default)
Prototype.d pVectorTextWidth(Text$,Flags=#PB_VectorText_Default)
Prototype.d pVectorUnit()
Prototype func(*parms)
Structure dlparams 
  type.u 
  id.u
  *userdata
EndStructure   
;->>>>Structures 
Structure spAddPathArc 
  params.dlparams
  x1.d : y1.d : x2.d : y2.d : radius.d : flags.i
  *fAddPathArc.func
EndStructure  
Structure spAddPathBox 
  params.dlparams
  x.d : y.d : w.d : h.d : flags.i 
  *fAddPathBox.func  
EndStructure   
Structure spAddPathEllipse
  params.dlparams
  x.d : y.d : Rx.d : ry.d : sa.d : ed.d : flags.i
  *fAddPathEllipse.func
EndStructure
Structure spAddPathLine
  params.dlparams
  x.d : y.d : flags.i
  *fAddPathLine.func
EndStructure
Structure spAddPathSegments
  params.dlparams
  segments.s : flags.i
  *fAddPathSegments.func
EndStructure
Structure spAddPathText
  params.dlparams
  text.s
  *fAddPathText.func
EndStructure
Structure spBeginVectorLayer
  params.dlparams
  alpha.i
  *fBeginVectorLayer.func
EndStructure
Structure spClipPath
  params.dlparams
  flags.i
  *fClipPath.func
EndStructure
Structure spClosePath
  params.dlparams
  *fClosePath.func
EndStructure
Structure spConvertCoordinateX
  params.dlparams
  x.d : y.d : src.i : target.i
  *fConvertCoordinateX.func
EndStructure
Structure spConvertCoordinateY
  params.dlparams
  x.d : y.d : src.i : target.i
  *fConvertCoordinateY.func
EndStructure
Structure spCustomDashPath
  params.dlparams
  w.d
  Array dashArray.d(0)
  flags.i : startOffset.d
  *fCustomDashPath.func
EndStructure
Structure spDashPath
  params.dlparams
  w.d : l.d : flags.i : startoffset.d
  *fDashPath.func
EndStructure
Structure spDotPath
  params.dlparams
  w.d : dist.d : flags.i : startoffset.d
  *fDotPath.func
EndStructure
Structure spDrawVectorImage
  params.dlparams
  id.i : alpha.i : w.d : h.d
  *fDrawVectorImage.func
EndStructure
Structure spDrawVectorParagraph
  params.dlparams
  text.s : w.d : h.d : flags.i
  *fDrawVectorParagraph.func
EndStructure
Structure spDrawVectorText
  params.dlparams
  Text.s
  *fDrawVectorText.func
EndStructure
Structure spEndVectorLayer
  params.dlparams
  *fEndVectorLayer.func
EndStructure
Structure spFillPath
  params.dlparams
  flags.i
  *fFillPath.func
EndStructure
Structure spFillVectorOutput
  params.dlparams
  *fFillVectorOutput.func
EndStructure
Structure spFlipCoordinatesX
  params.dlparams
  axis.d : system.i
  *fFlipCoordinatesX.func
EndStructure
Structure spFlipCoordinatesY
  params.dlparams
  axis.d : system.i
  *fFlipCoordinatesY.func
EndStructure
Structure spIsInsidePath
  params.dlparams
  x.d : y.d : system.i
  *fIsInsidePath.func
EndStructure
Structure spIsInsideStroke
  params.dlparams
  x.d : y.d : Width.d : Flags.i : System.i
  *fIsInsideStroke.func
EndStructure
Structure spIsPathEmpty
  params.dlparams
  *fIsPathEmpty.func
EndStructure
Structure spMovePathCursor
  params.dlparams
  x.d : y.d : Flags.i
  *fMovePathCursor.func
EndStructure
Structure spPathBoundsHeight
  params.dlparams
  *fPathBoundsHeight.func
EndStructure
Structure spPathBoundsWidth
  params.dlparams
  *fPathBoundsWidth.func
EndStructure
Structure spPathBoundsX
  params.dlparams
  *fPathBoundsX.func
EndStructure
Structure spPathBoundsY
  params.dlparams
  *fPathBoundsY.func
EndStructure
Structure spPathCursorX
  params.dlparams
  *fPathCursorX.func
EndStructure
Structure spPathCursorY
  params.dlparams
  *fPathCursorY.func
EndStructure
Structure spPathLength
  params.dlparams
  *fPathLength.func
EndStructure
Structure spPathPointAngle
  params.dlparams
  Distance.d
  *fPathPointAngle.func
EndStructure
Structure spPathPointX
  params.dlparams
  Distance.d
  *fPathPointX.func
EndStructure
Structure spPathPointY
  params.dlparams
  Distance.d
  *fPathPointY.func
EndStructure
Structure spPathSegments
  params.dlparams
  *fPathSegments.func
EndStructure
Structure spResetCoordinates
  params.dlparams
  system.i
  *fResetCoordinates.func
EndStructure
Structure spResetPath
  params.dlparams
  *fResetPath.func
EndStructure
Structure spRestoreVectorState
  params.dlparams
  *fRestoreVectorState.func
EndStructure
Structure spRotateCoordinates
  params.dlparams
  x.d : y.d : Angle.d : System.i
  *fRotateCoordinates.func
EndStructure
Structure spSaveVectorState
  params.dlparams
  *fSaveVectorState.func
EndStructure
Structure spScaleCoordinates
  params.dlparams
  ScaleX.d : ScaleY.d : System.i
  *fScaleCoordinates.func
EndStructure
Structure spSkewCoordinates
  params.dlparams
  AngleX.d : AngleY.d : System.i
  *fSkewCoordinates.func
EndStructure
Structure spStartVectorDrawing
  params.dlparams
  Output.i
  *fStartVectorDrawing.func
EndStructure
Structure spStopVectorDrawing
  params.dlparams
  *fStopVectorDrawing.func
EndStructure
Structure spStrokePath
  params.dlparams
  Width.d : Flags.i
  *fStrokePath.func
EndStructure
Structure spTranslateCoordinates
  params.dlparams
  x.d : y.d : System.i
  *fTranslateCoordinates.func
EndStructure
Structure spVectorFont
  params.dlparams
  ID.i : Size.d
  *fVectorFont.func
EndStructure
Structure spVectorOutputHeight
  params.dlparams
  *fVectorOutputHeight.func
EndStructure
Structure spVectorOutputWidth
  params.dlparams
  *fVectorOutputWidth.func
EndStructure
Structure spVectorParagraphHeight
  params.dlparams
  Text.s : Width.d : Height.d
  *fVectorParagraphHeight.func
EndStructure
Structure spVectorResolutionX
  params.dlparams
  *fVectorResolutionX.func
EndStructure
Structure spVectorResolutionY
  params.dlparams
  *fVectorResolutionY.func
EndStructure
Structure spVectorSourceCircularGradient
  params.dlparams
  x.d : y.d : Radius.d : CenterX.d : CenterY.d
  *fVectorSourceCircularGradient.func
EndStructure
Structure spVectorSourceColor
  params.dlparams
  Color.i
  *fVectorSourceColor.func
EndStructure
Structure spVectorSourceGradientColor
  params.dlparams
  Color.i : Position.d
  *fVectorSourceGradientColor.func
EndStructure
Structure spVectorSourceImage
  params.dlparams
  ImageID.i : Alpha.i : Width.d : Height.d : Flags.i
  *fVectorSourceImage.func
EndStructure
Structure spVectorSourceLinearGradient
  params.dlparams
  x1.d : y1.d : x2.d : y2.d
  *fVectorSourceLinearGradient.func
EndStructure
Structure spVectorTextHeight
  params.dlparams
  Text.s : Flags.i
  *fVectorTextHeight.func
EndStructure
Structure spVectorTextWidth
  params.dlparams
  Text.s : Flags.i
  *fVectorTextWidth.func
EndStructure
Structure spVectorUnit
  params.dlparams
  *fVectorUnit.func
EndStructure
Enumeration 1
  #spAddPathArc 
  #spAddPathBox
  #spAddPathEllipse
  #spAddPathLine
  #spAddPathSegments
  #spAddPathText
  #spBeginVectorLayer
  #spClipPath
  #spClosePath
  #spConvertCoordinateX
  #spConvertCoordinateY
  #spCustomDashPath
  #spDashPath
  #spDotPath
  #spDrawVectorImage
  #spDrawVectorParagraph
  #spDrawVectorText
  #spEndVectorLayer
  #spFillPath
  #spFillVectorOutput
  #spFlipCoordinatesX
  #spFlipCoordinatesY
  #spIsInsidePath
  #spIsInsideStroke
  #spIsPathEmpty
  #spMovePathCursor
  #spPathBoundsHeight
  #spPathBoundsWidth
  #spPathBoundsX
  #spPathBoundsY
  #spPathCursorX
  #spPathCursorY
  #spPathLength
  #spPathPointAngle
  #spPathPointX
  #spPathPointY
  #spPathSegments
  #spResetCoordinates
  #spResetPath
  #spRestoreVectorState
  #spRotateCoordinates
  #spSaveVectorState
  #spScaleCoordinates
  #spSkewCoordinates
  #spStartVectorDrawing
  #spStopVectorDrawing
  #spStrokePath
  #spTranslateCoordinates
  #spVectorFont
  #spVectorOutputHeight
  #spVectorOutputWidth
  #spVectorParagraphHeight
  #spVectorResolutionX
  #spVectorResolutionY
  #spVectorSourceCircularGradient
  #spVectorSourceColor
  #spVectorSourceGradientColor
  #spVectorSourceImage
  #spVectorSourceLinearGradient
  #spVectorTextHeight
  #spVectorTextWidth
  #spVectorUnit
EndEnumeration
;->>>Runtime Procedures 
Procedure RtAddPathArc(*ptr.spAddPathArc) 
  ProcedureReturn AddPathArc(*ptr\x1,*ptr\y1,*ptr\x2,*ptr\y2,*ptr\radius,*ptr\flags)
EndProcedure 
Procedure RtAddPathBox(*ptr.spAddPathBox) 
  ProcedureReturn AddPathBox(*ptr\x,*ptr\y,*ptr\w,*ptr\h,*ptr\flags)
EndProcedure
Procedure RtAddPathEllipse(*ptr.spAddPathEllipse)
  ProcedureReturn AddPathEllipse(*ptr\x,*ptr\y,*ptr\Rx,*ptr\ry,*ptr\sa,*ptr\ed,*ptr\flags)
EndProcedure
Procedure RtAddPathLine(*ptr.spAddPathLine)
  ProcedureReturn AddPathLine(*ptr\x,*ptr\y,*ptr\flags)
EndProcedure
Procedure RtAddPathSegments(*ptr.spAddPathSegments)
  ProcedureReturn AddPathSegments(*ptr\segments,*ptr\flags)
EndProcedure
Procedure RtAddPathText(*ptr.spAddPathText) 
  ProcedureReturn AddPathText(*ptr\text) 
EndProcedure
Procedure RtBeginVectorLayer(*ptr.spBeginVectorLayer)
  ProcedureReturn BeginVectorLayer(*ptr\alpha)
EndProcedure
Procedure RtClipPath(*ptr.spClipPath)
  ProcedureReturn ClipPath(*ptr\flags)
EndProcedure
Procedure RtClosePath(*ptr.spClosePath)
  ProcedureReturn ClosePath()
EndProcedure
Procedure RtConvertCoordinateX(*ptr.spConvertCoordinateX)
  ProcedureReturn ConvertCoordinateX(*ptr\x,*ptr\y,*ptr\src,*ptr\target)
EndProcedure
Procedure RtConvertCoordinateY(*ptr.spConvertCoordinateY)
  ProcedureReturn ConvertCoordinateY(*ptr\x,*ptr\y,*ptr\src,*ptr\target)
EndProcedure
Procedure RtCustomDashPath(*ptr.spCustomDashPath)
  ProcedureReturn CustomDashPath(*ptr\w,*ptr\dashArray(),*ptr\flags,*ptr\startOffset)
EndProcedure
Procedure RtDashPath(*ptr.spDashPath)
  ProcedureReturn DashPath(*ptr\w,*ptr\l,*ptr\flags,*ptr\startoffset)
EndProcedure
Procedure RtDotPath(*ptr.spDotPath)
  ProcedureReturn DotPath(*ptr\w,*ptr\dist,*ptr\flags,*ptr\startoffset)
EndProcedure
Procedure RtDrawVectorImage(*ptr.spDrawVectorImage)
  ProcedureReturn DrawVectorImage(*ptr\id,*ptr\alpha,*ptr\w,*ptr\h)
EndProcedure
Procedure RtDrawVectorParagraph(*ptr.spDrawVectorParagraph)
  ProcedureReturn DrawVectorParagraph(*ptr\text,*ptr\w,*ptr\h,*ptr\flags)
EndProcedure
Procedure RtDrawVectorText(*ptr.spDrawVectorText)
  ProcedureReturn DrawVectorText(*ptr\Text)
EndProcedure
Procedure RtEndVectorLayer(*ptr.spEndVectorLayer)
  ProcedureReturn EndVectorLayer()
EndProcedure
Procedure RtFillPath(*ptr.spFillPath)
  ProcedureReturn FillPath(*ptr\flags)
EndProcedure
Procedure RtFillVectorOutput(*ptr.spFillVectorOutput)
  ProcedureReturn FillVectorOutput()
EndProcedure
Procedure RtFlipCoordinatesX(*ptr.spFlipCoordinatesX)
  ProcedureReturn FlipCoordinatesX(*ptr\axis,*ptr\system)
EndProcedure
Procedure RtFlipCoordinatesY(*ptr.spFlipCoordinatesY)
  ProcedureReturn FlipCoordinatesY(*ptr\axis,*ptr\system)
EndProcedure
Procedure RtIsInsidePath(*ptr.spIsInsidePath)
  ProcedureReturn IsInsidePath(*ptr\x,*ptr\y,*ptr\system)
EndProcedure
Procedure RtIsInsideStroke(*ptr.spIsInsideStroke)
  ProcedureReturn IsInsideStroke(*ptr\x,*ptr\y,*ptr\Width,*ptr\Flags,*ptr\System)
EndProcedure
Procedure RtIsPathEmpty(*ptr.spIsPathEmpty)
  ProcedureReturn IsPathEmpty()
EndProcedure
Procedure RtMovePathCursor(*ptr.spMovePathCursor)
  ProcedureReturn MovePathCursor(*ptr\x,*ptr\y,*ptr\Flags)
EndProcedure
Procedure.d RtPathBoundsHeight(*ptr.spPathBoundsHeight)
  ProcedureReturn PathBoundsHeight()
EndProcedure
Procedure.d RtPathBoundsWidth(*ptr.spPathBoundsWidth)
  ProcedureReturn PathBoundsWidth()
EndProcedure
Procedure.d RtPathBoundsX(*ptr.spPathBoundsX)
  ProcedureReturn PathBoundsX()
EndProcedure
Procedure.d RtPathBoundsY(*ptr.spPathBoundsY)
  ProcedureReturn PathBoundsY()
EndProcedure
Procedure.d RtPathCursorX(*ptr.spPathCursorX)
  ProcedureReturn PathCursorX()
EndProcedure
Procedure.d RtPathCursorY(*ptr.spPathCursorY)
  ProcedureReturn PathCursorY()
EndProcedure
Procedure.d RtPathLength(*ptr.spPathLength)
  ProcedureReturn PathLength()
EndProcedure
Procedure.d RtPathPointAngle(*ptr.spPathPointAngle)
  ProcedureReturn PathPointAngle(*ptr\Distance)
EndProcedure
Procedure.d RtPathPointX(*ptr.spPathPointX)
  ProcedureReturn PathPointX(*ptr\Distance)
EndProcedure
Procedure.d RtPathPointY(*ptr.spPathPointY)
  ProcedureReturn PathPointY(*ptr\Distance)
EndProcedure
Procedure.s RtPathSegments(*ptr.spPathSegments)
  ProcedureReturn PathSegments()
EndProcedure
Procedure RtResetCoordinates(*ptr.spResetCoordinates)
  ProcedureReturn ResetCoordinates(*ptr\system)
EndProcedure
Procedure RtResetPath(*ptr.spResetPath)
  ProcedureReturn ResetPath()
EndProcedure
Procedure RtRestoreVectorState(*ptr.spRestoreVectorState)
  ProcedureReturn RestoreVectorState()
EndProcedure
Procedure RtRotateCoordinates(*ptr.spRotateCoordinates)
  ProcedureReturn RotateCoordinates(*ptr\x,*ptr\y,*ptr\Angle,*ptr\System)
EndProcedure
Procedure RtSaveVectorState(*ptr.spSaveVectorState)
  ProcedureReturn SaveVectorState()
EndProcedure
Procedure RtScaleCoordinates(*ptr.spScaleCoordinates)
  ProcedureReturn ScaleCoordinates(*ptr\ScaleX,*ptr\ScaleY,*ptr\System)
EndProcedure
Procedure RtSkewCoordinates(*ptr.spSkewCoordinates)
  ProcedureReturn SkewCoordinates(*ptr\AngleX,*ptr\AngleY,*ptr\System)
EndProcedure
Procedure RtStartVectorDrawing(*ptr.spStartVectorDrawing)
  ProcedureReturn StartVectorDrawing(*ptr\Output)
EndProcedure
Procedure RtStopVectorDrawing(*ptr.spStopVectorDrawing)
  ProcedureReturn StopVectorDrawing()
EndProcedure
Procedure RtStrokePath(*ptr.spStrokePath)
  ProcedureReturn StrokePath(*ptr\Width,*ptr\Flags)
EndProcedure
Procedure RtTranslateCoordinates(*ptr.spTranslateCoordinates)
  ProcedureReturn TranslateCoordinates(*ptr\x,*ptr\y,*ptr\System)
EndProcedure
Procedure RtVectorFont(*ptr.spVectorFont)
  ProcedureReturn VectorFont(*ptr\ID,*ptr\Size)
EndProcedure
Procedure.d RtVectorOutputHeight(*ptr.spVectorOutputHeight)
  ProcedureReturn VectorOutputHeight()
EndProcedure
Procedure.d RtVectorOutputWidth(*ptr.spVectorOutputWidth)
  ProcedureReturn VectorOutputWidth()
EndProcedure
Procedure.d RtVectorParagraphHeight(*ptr.spVectorParagraphHeight)
  ProcedureReturn VectorParagraphHeight(*ptr\Text,*ptr\Width,*ptr\Height)
EndProcedure
Procedure.d RtVectorResolutionX(*ptr.spVectorResolutionX)
  ProcedureReturn VectorResolutionX()
EndProcedure
Procedure.d RtVectorResolutionY(*ptr.spVectorResolutionY)
  ProcedureReturn VectorResolutionY()
EndProcedure
Procedure RtVectorSourceCircularGradient(*ptr.spVectorSourceCircularGradient)
  ProcedureReturn VectorSourceCircularGradient(*ptr\x,*ptr\y,*ptr\Radius,*ptr\CenterX,*ptr\CenterY)
EndProcedure
Procedure RtVectorSourceColor(*ptr.spVectorSourceColor)
  ProcedureReturn VectorSourceColor(*ptr\Color)
EndProcedure
Procedure RtVectorSourceGradientColor(*ptr.spVectorSourceGradientColor)
  ProcedureReturn VectorSourceGradientColor(*ptr\Color,*ptr\Position)
EndProcedure
Procedure RtVectorSourceImage(*ptr.spVectorSourceImage)
  ProcedureReturn VectorSourceImage(*ptr\ImageID,*ptr\Alpha,*ptr\Width,*ptr\Height,*ptr\Flags)
EndProcedure
Procedure RtVectorSourceLinearGradient(*ptr.spVectorSourceLinearGradient)
  ProcedureReturn VectorSourceLinearGradient(*ptr\x1,*ptr\y1,*ptr\x2,*ptr\y2)
EndProcedure
Procedure.d RtVectorTextHeight(*ptr.spVectorTextHeight)
  ProcedureReturn VectorTextHeight(*ptr\Text,*ptr\Flags)
EndProcedure
Procedure.d RtVectorTextWidth(*ptr.spVectorTextWidth)
  ProcedureReturn VectorTextWidth(*ptr\Text,*ptr\Flags)
EndProcedure
Procedure.d RtVectorUnit(*ptr.spVectorUnit)
  ProcedureReturn VectorUnit()
EndProcedure
;->>>Display List Structure
Structure dlp
  StructureUnion
    *item.dlparams 
    *ptAddPathArc.spAddPathArc
    *ptAddPathBox.spAddPathBox
    *ptAddPathEllipse.spAddPathEllipse
    *ptAddPathLine.spAddPathLine
    *ptAddPathSegments.spAddPathSegments
    *ptAddPathText.spAddPathText
    *ptBeginVectorLayer.spBeginVectorLayer
    *ptClipPath.spClipPath
    *ptClosePath.spClosePath
    *ptConvertCoordinateX.spConvertCoordinateX
    *ptConvertCoordinateY.spConvertCoordinateY
    *ptCustomDashPath.spCustomDashPath
    *ptDashPath.spDashPath
    *ptDotPath.spDotPath
    *ptDrawVectorImage.spDrawVectorImage
    *ptDrawVectorParagraph.spDrawVectorParagraph
    *ptDrawVectorText.spDrawVectorText
    *ptEndVectorLayer.spEndVectorLayer
    *ptFillPath.spFillPath
    *ptFillVectorOutput.spFillVectorOutput
    *ptFlipCoordinatesX.spFlipCoordinatesX
    *ptFlipCoordinatesY.spFlipCoordinatesY
    *ptIsInsidePath.spIsInsidePath
    *ptIsInsideStroke.spIsInsideStroke
    *ptIsPathEmpty.spIsPathEmpty
    *ptMovePathCursor.spMovePathCursor
    *ptPathBoundsHeight.spPathBoundsHeight
    *ptPathBoundsWidth.spPathBoundsWidth
    *ptPathBoundsX.spPathBoundsX
    *ptPathBoundsY.spPathBoundsY
    *ptPathCursorX.spPathCursorX
    *ptPathCursorY.spPathCursorY
    *ptPathLength.spPathLength
    *ptPathPointAngle.spPathPointAngle
    *ptPathPointX.spPathPointX
    *ptPathPointY.spPathPointY
    *ptPathSegments.spPathSegments
    *ptResetCoordinates.spResetCoordinates
    *ptResetPath.spResetPath
    *ptRestoreVectorState.spRestoreVectorState
    *ptRotateCoordinates.spRotateCoordinates
    *ptSaveVectorState.spSaveVectorState
    *ptScaleCoordinates.spScaleCoordinates
    *ptSkewCoordinates.spSkewCoordinates
    *ptStartVectorDrawing.spStartVectorDrawing
    *ptStopVectorDrawing.spStopVectorDrawing
    *ptStrokePath.spStrokePath
    *ptTranslateCoordinates.spTranslateCoordinates
    *ptVectorFont.spVectorFont
    *ptVectorOutputHeight.spVectorOutputHeight
    *ptVectorOutputWidth.spVectorOutputWidth
    *ptVectorParagraphHeight.spVectorParagraphHeight
    *ptVectorResolutionX.spVectorResolutionX
    *ptVectorResolutionY.spVectorResolutionY
    *ptVectorSourceCircularGradient.spVectorSourceCircularGradient
    *ptVectorSourceColor.spVectorSourceColor
    *ptVectorSourceGradientColor.spVectorSourceGradientColor
    *ptVectorSourceImage.spVectorSourceImage
    *ptVectorSourceLinearGradient.spVectorSourceLinearGradient
    *ptVectorTextHeight.spVectorTextHeight
    *ptVectorTextWidth.spVectorTextWidth
    *ptVectorUnit.spVectorUnit
  EndStructureUnion  
  *func.func 
EndStructure 
CompilerIf #PB_Compiler_IsMainFile 
  
  Structure SVG 
    List dl.dlp()   
  EndStructure 
  
CompilerEndIf 
;->>>Macros 
Procedure SVGAddPathArc(*svg.svg,x1.d,y1.d,x2.d,y2.d,radius.d,flags=#PB_Path_Default,id=0,*userdata=0)
  
  AddPathArc(x1,y1,x2,y2,radius,flags) 
  
  AddElement(*svg\dl()) 
  *svg\dl()\ptAddPathArc = AllocateStructure(spAddPathArc) 
  *svg\dl()\ptAddPathArc\x1 = x1 
  *svg\dl()\ptAddPathArc\y1 = y1 
  *svg\dl()\ptAddPathArc\x2 = x2 
  *svg\dl()\ptAddPathArc\y2 = y2 
  *svg\dl()\ptAddPathArc\radius = radius 
  *svg\dl()\ptAddPathArc\flags = flags 
  *svg\dl()\func = @RtAddPathArc() 
  
  *svg\dl()\ptAddPathArc\params\id = id
  *svg\dl()\ptAddPathArc\params\userdata = *userdata 
  *svg\dl()\ptAddPathArc\params\type = #spAddPathArc
  
EndProcedure
Procedure SVGAddPathBox(*svg.svg,x.d,y.d,w.d,h.d,flags=#PB_Path_Default,id=0,*userdata=0)
  
  AddPathBox(x,y,w,h,flags)
  
  AddElement(*svg\dl())
  *svg\dl()\ptAddPathBox = AllocateStructure(spAddPathBox) 
  *svg\dl()\ptAddPathBox\x = x 
  *svg\dl()\ptAddPathBox\y = y 
  *svg\dl()\ptAddPathBox\w = w 
  *svg\dl()\ptAddPathBox\h = h 
  *svg\dl()\ptAddPathBox\flags = flags 
  *svg\dl()\func = @RtAddPathBox()  
  
  *svg\dl()\ptAddPathBox\params\id = id
  *svg\dl()\ptAddPathBox\params\userdata = *userdata 
  *svg\dl()\ptAddPathBox\params\type = #spAddPathBox
  
EndProcedure 
Procedure SVGAddPathEllipse(*svg.svg,x.d,y.d,Rx.d,ry.d,sa.d,ed.d,flags=#PB_Path_Default,id=0,*userdata=0)
  
  AddPathEllipse(x,y,Rx,ry,sa,ed,flags)
  
  AddElement(*svg\dl())
  *svg\dl()\ptAddPathEllipse = AllocateStructure(spAddPathEllipse)
  *svg\dl()\ptAddPathEllipse\x = x
  *svg\dl()\ptAddPathEllipse\y = y
  *svg\dl()\ptAddPathEllipse\Rx = Rx
  *svg\dl()\ptAddPathEllipse\ry = ry
  *svg\dl()\ptAddPathEllipse\sa = sa
  *svg\dl()\ptAddPathEllipse\ed = ed
  *svg\dl()\ptAddPathEllipse\flags = flags
  *svg\dl()\func = @RtAddPathEllipse()
  
  *svg\dl()\ptAddPathEllipse\params\id = id
  *svg\dl()\ptAddPathEllipse\params\userdata = *userdata 
  *svg\dl()\ptAddPathEllipse\params\type = #spAddPathEllipse
  
EndProcedure 
Procedure SVGAddPathLine(*svg.svg,x.d,y.d,flags=#PB_Path_Default,id=0,*userdata=0)
  
  AddPathLine(x,y,flags)
  
  AddElement(*svg\dl())
  *svg\dl()\ptAddPathLine = AllocateStructure(spAddPathLine)
  *svg\dl()\ptAddPathLine\x = x
  *svg\dl()\ptAddPathLine\y = y
  *svg\dl()\ptAddPathLine\flags = flags
  *svg\dl()\func = @RtAddPathLine() 
  
  *svg\dl()\ptAddPathLine\params\id = id
  *svg\dl()\ptAddPathLine\params\userdata = *userdata 
  *svg\dl()\ptAddPathLine\params\type = #spAddPathLine
  
EndProcedure
Procedure SVGAddPathSegments(*svg.svg,segments.s,flags=#PB_Path_Default,id=0,*userdata=0)
  
  AddPathSegments(segments,flags)
  
  AddElement(*svg\dl())
  *svg\dl()\ptAddPathSegments = AllocateStructure(spAddPathSegments)
  *svg\dl()\ptAddPathSegments\segments = segments
  *svg\dl()\ptAddPathSegments\flags = flags
  *svg\dl()\func = @RtAddPathSegments() 
  
  *svg\dl()\ptAddPathSegments\params\id = id
  *svg\dl()\ptAddPathSegments\params\userdata = *userdata 
  *svg\dl()\ptAddPathSegments\params\type = #spAddPathSegments
  
EndProcedure
Procedure SVGAddPathText(*svg.svg,text.s,id=0,*userdata=0) 
  
  AddPathText(text) 
  
  AddElement(*svg\dl())
  *svg\dl()\ptAddPathText = AllocateStructure(spAddPathText) 
  *svg\dl()\ptAddPathText\text = text
  *svg\dl()\func = @RtAddPathText()
  
  *svg\dl()\ptAddPathText\params\id = id
  *svg\dl()\ptAddPathText\params\userdata = *userdata 
  *svg\dl()\ptAddPathText\params\type = #spAddPathText
  
EndProcedure
Procedure SVGBeginVectorLayer(*svg.svg,alpha=255,id=0,*userdata=0)
  
  BeginVectorLayer(alpha)
  
  AddElement(*svg\dl())
  *svg\dl()\ptBeginVectorLayer = AllocateStructure(spBeginVectorLayer)
  *svg\dl()\ptBeginVectorLayer\alpha = alpha
  *svg\dl()\func = @RtBeginVectorLayer()
  
  *svg\dl()\ptBeginVectorLayer\params\id = id
  *svg\dl()\ptBeginVectorLayer\params\userdata = *userdata 
  *svg\dl()\ptBeginVectorLayer\params\type = #spBeginVectorLayer
  
EndProcedure
Procedure SVGClipPath(*svg.svg,flags=#PB_Path_Default,id=0,*userdata=0)
  
  ClipPath(flags)
  
  AddElement(*svg\dl())
  *svg\dl()\ptClipPath = AllocateStructure(spClipPath)
  *svg\dl()\ptClipPath\flags = flags
  *svg\dl()\func = @RtClipPath()
  
  *svg\dl()\ptClipPath\params\id = id
  *svg\dl()\ptClipPath\params\userdata = *userdata 
  *svg\dl()\ptClipPath\params\type = #spClipPath
  
EndProcedure
Procedure SVGClosePath(*svg.svg,id=0,*userdata=0)
  
  ClosePath()
  
  AddElement(*svg\dl())
  *svg\dl()\ptClosePath = AllocateStructure(spClosePath)
  *svg\dl()\func = @RtClosePath()
  
  *svg\dl()\ptClosePath\params\id = id
  *svg\dl()\ptClosePath\params\userdata = *userdata 
  *svg\dl()\ptClosePath\params\type = #spClosePath
  
EndProcedure
Procedure SVGConvertCoordinateX(*svg.svg,x.d,y.d,src=0,target=#PB_Coordinate_User,id=0,*userdata=0)
  
  ConvertCoordinateX(x,y,src,target)
  
  AddElement(*svg\dl())
  *svg\dl()\ptConvertCoordinateX = AllocateStructure(spConvertCoordinateX)
  *svg\dl()\ptConvertCoordinateX\x = x
  *svg\dl()\ptConvertCoordinateX\y = y
  *svg\dl()\ptConvertCoordinateX\src = src
  *svg\dl()\ptConvertCoordinateX\target = target
  *svg\dl()\func = @RtConvertCoordinateX()
  
  *svg\dl()\ptConvertCoordinateX\params\id = id
  *svg\dl()\ptConvertCoordinateX\params\userdata = *userdata 
  *svg\dl()\ptConvertCoordinateX\params\type = #spConvertCoordinateX
  
EndProcedure 
Procedure SVGConvertCoordinateY(*svg.svg,x.d,y.d,src=0,target=#PB_Coordinate_User,id=0,*userdata=0)
  
  ConvertCoordinateY(x,y,src,target)
  
  AddElement(*svg\dl())
  *svg\dl()\ptConvertCoordinateY = AllocateStructure(spConvertCoordinateY)
  *svg\dl()\ptConvertCoordinateY\x = x
  *svg\dl()\ptConvertCoordinateY\y = y
  *svg\dl()\ptConvertCoordinateY\src = src
  *svg\dl()\ptConvertCoordinateY\target = target
  *svg\dl()\func = @RtConvertCoordinateY()
  
  *svg\dl()\ptConvertCoordinateY\params\id = id
  *svg\dl()\ptConvertCoordinateY\params\userdata = *userdata 
  *svg\dl()\ptConvertCoordinateY\params\type = #spConvertCoordinateY
  
EndProcedure 
Procedure SVGDashPath(*svg.svg,w.d,l.d,flags=0,startoffset=#PB_Path_Default,id=0,*userdata=0)
  
  DashPath(w,l,flags,startoffset)
  
  AddElement(*svg\dl())
  *svg\dl()\ptDashPath = AllocateStructure(spDashPath)
  *svg\dl()\ptDashPath\w = w
  *svg\dl()\ptDashPath\l = l
  *svg\dl()\ptDashPath\flags = flags
  *svg\dl()\ptDashPath\startoffset = startoffset
  *svg\dl()\func = @RtDashPath()
  
  *svg\dl()\ptDashPath\params\id = id
  *svg\dl()\ptDashPath\params\userdata = *userdata 
  *svg\dl()\ptDashPath\params\type = #spDashPath
  
EndProcedure
Procedure SVGDotPath(*svg.svg,w.d,dist.d,flags=0,startoffset=#PB_Coordinate_User,id=0,*userdata=0)
  
  DotPath(w,dist,flags,startoffset)
  
  AddElement(*svg\dl())
  *svg\dl()\ptDotPath = AllocateStructure(spDotPath)
  *svg\dl()\ptDotPath\w = w
  *svg\dl()\ptDotPath\dist = dist
  *svg\dl()\ptDotPath\flags = flags
  *svg\dl()\ptDotPath\startoffset = startoffset
  *svg\dl()\func = @RtDotPath()
  
  *svg\dl()\ptDotPath\params\id = id
  *svg\dl()\ptDotPath\params\userdata = *userdata 
  *svg\dl()\ptDotPath\params\type = #spDotPath
  
EndProcedure
Procedure SVGDrawVectorImage(*svg.svg,imageId,alpha=255,w.d=0,h.d=0,id=0,*userdata=0)
  
  DrawVectorImage(imageId,alpha,w,h)
  
  AddElement(*svg\dl())
  *svg\dl()\ptDrawVectorImage = AllocateStructure(spDrawVectorImage)
  *svg\dl()\ptDrawVectorImage\id = imageId
  *svg\dl()\ptDrawVectorImage\alpha = alpha
  *svg\dl()\ptDrawVectorImage\w = w
  *svg\dl()\ptDrawVectorImage\h = h
  *svg\dl()\func = @RtDrawVectorImage()
  
  *svg\dl()\ptDrawVectorImage\params\id = id
  *svg\dl()\ptDrawVectorImage\params\userdata = *userdata 
  *svg\dl()\ptDrawVectorImage\params\type = #spDrawVectorImage
  
EndProcedure
Procedure SVGDrawVectorParagraph(*svg.svg,text.s,w.d,h.d,flags=#PB_VectorParagraph_Left,id=0,*userdata=0)
  
  DrawVectorParagraph(text,w,h,flags)
  
  AddElement(*svg\dl())
  *svg\dl()\ptDrawVectorParagraph = AllocateStructure(spDrawVectorParagraph)
  *svg\dl()\ptDrawVectorParagraph\text = text
  *svg\dl()\ptDrawVectorParagraph\w = w
  *svg\dl()\ptDrawVectorParagraph\h = h
  *svg\dl()\ptDrawVectorParagraph\flags = flags
  *svg\dl()\func = @RtDrawVectorParagraph()
  
  *svg\dl()\ptDrawVectorParagraph\params\id = id
  *svg\dl()\ptDrawVectorParagraph\params\userdata = *userdata 
  *svg\dl()\ptDrawVectorParagraph\params\type = #spDrawVectorParagraph
  
EndProcedure
Procedure SVGDrawVectorText(*svg.svg,text.s,id=0,*userdata=0)
  
  DrawVectorText(text)
  
  AddElement(*svg\dl())
  *svg\dl()\ptDrawVectorText = AllocateStructure(spDrawVectorText)
  *svg\dl()\ptDrawVectorText\Text = text
  *svg\dl()\func = @RtDrawVectorText()
  
  *svg\dl()\ptDrawVectorText\params\id = id
  *svg\dl()\ptDrawVectorText\params\userdata = *userdata 
  *svg\dl()\ptDrawVectorText\params\type = #spDrawVectorText
  
EndProcedure
Procedure SVGEndVectorLayer(*svg.svg,id=0,*userdata=0)
  
  EndVectorLayer()
  
  AddElement(*svg\dl())
  *svg\dl()\ptEndVectorLayer = AllocateStructure(spEndVectorLayer)
  *svg\dl()\func = @RtEndVectorLayer()
  
  *svg\dl()\ptEndVectorLayer\params\id = id
  *svg\dl()\ptEndVectorLayer\params\userdata = *userdata 
  *svg\dl()\ptEndVectorLayer\params\type = #spEndVectorLayer
  
EndProcedure 
Procedure SVGFillPath(*svg.svg,flags=#PB_Path_Default,id=0,*userdata=0)
  
  FillPath(flags) 
  
  AddElement(*svg\dl())
  *svg\dl()\ptFillPath = AllocateStructure(spFillPath)
  *svg\dl()\ptFillPath\flags = flags
  *svg\dl()\func = @RtFillPath()
  
  *svg\dl()\ptFillPath\params\id = id
  *svg\dl()\ptFillPath\params\userdata = *userdata 
  *svg\dl()\ptFillPath\params\type = #spFillPath
  
EndProcedure
Procedure SVGFillVectorOutput(*svg.svg,id=0,*userdata=0)
  
  FillVectorOutput()
  
  AddElement(*svg\dl())
  *svg\dl()\ptFillVectorOutput = AllocateStructure(spFillVectorOutput)
  *svg\dl()\func = @RtFillVectorOutput()
  
  *svg\dl()\ptFillVectorOutput\params\id = id
  *svg\dl()\ptFillVectorOutput\params\userdata = *userdata 
  *svg\dl()\ptFillVectorOutput\params\type = #spFillVectorOutput
  
EndProcedure 
Procedure SVGFlipCoordinatesX(*svg.svg,axis.d,system=#PB_Coordinate_User,id=0,*userdata=0)
  
  FlipCoordinatesX(axis,system)
  
  AddElement(*svg\dl())
  *svg\dl()\ptFlipCoordinatesX = AllocateStructure(spFlipCoordinatesX)
  *svg\dl()\ptFlipCoordinatesX\axis = axis
  *svg\dl()\ptFlipCoordinatesX\system = system
  *svg\dl()\func = @RtFlipCoordinatesX()
  
  *svg\dl()\ptFlipCoordinatesX\params\id = id
  *svg\dl()\ptFlipCoordinatesX\params\userdata = *userdata 
  *svg\dl()\ptFlipCoordinatesX\params\type = #spFlipCoordinatesX
  
EndProcedure
Procedure SVGFlipCoordinatesY(*svg.svg,axis.d,system=#PB_Coordinate_User,id=0,*userdata=0)
  
  FlipCoordinatesY(axis,system)
  
  AddElement(*svg\dl())
  *svg\dl()\ptFlipCoordinatesY = AllocateStructure(spFlipCoordinatesY)
  *svg\dl()\ptFlipCoordinatesY\axis = axis
  *svg\dl()\ptFlipCoordinatesY\system = system
  *svg\dl()\func = @RtFlipCoordinatesY()
  
  *svg\dl()\ptFlipCoordinatesY\params\id = id
  *svg\dl()\ptFlipCoordinatesY\params\userdata = *userdata 
  *svg\dl()\ptFlipCoordinatesY\params\type = #spFlipCoordinatesY
  
EndProcedure
Procedure SVGIsInsidePath(*svg.svg,x.d,y.d,system=#PB_Coordinate_User,id=0,*userdata=0)
  
  Protected result = IsInsidePath(x,y,system)
  
  AddElement(*svg\dl())
  *svg\dl()\ptIsInsidePath = AllocateStructure(spIsInsidePath)
  *svg\dl()\ptIsInsidePath\x = x
  *svg\dl()\ptIsInsidePath\y = y
  *svg\dl()\ptIsInsidePath\system = system
  *svg\dl()\func = @RtIsInsidePath()
  
  *svg\dl()\ptIsInsidePath\params\id = id
  *svg\dl()\ptIsInsidePath\params\userdata = *userdata 
  *svg\dl()\ptIsInsidePath\params\type = #spIsInsidePath
  
  ProcedureReturn result 
  
EndProcedure 
Procedure SVGIsInsideStroke(*svg.svg,x.d,y.d,width.d,flags=#PB_Path_Default,system=#PB_Coordinate_User,id=0,*userdata=0)
  
  Protected result = IsInsideStroke(x,y,width,flags,system)
  
  AddElement(*svg\dl())
  *svg\dl()\ptIsInsideStroke = AllocateStructure(spIsInsideStroke)
  *svg\dl()\ptIsInsideStroke\x = x
  *svg\dl()\ptIsInsideStroke\y = y
  *svg\dl()\ptIsInsideStroke\Width = width
  *svg\dl()\ptIsInsideStroke\Flags = flags
  *svg\dl()\ptIsInsideStroke\System = system
  *svg\dl()\func = @RtIsInsideStroke() 
  
  *svg\dl()\ptIsInsideStroke\params\id = id
  *svg\dl()\ptIsInsideStroke\params\userdata = *userdata 
  *svg\dl()\ptIsInsideStroke\params\type = #spIsInsideStroke
  
  ProcedureReturn result 
  
EndProcedure 
Procedure SVGIsPathEmpty(*svg.svg,id=0,*userdata=0)
  
  Protected result = IsPathEmpty() 
  
  AddElement(*svg\dl())
  *svg\dl()\ptIsPathEmpty = AllocateStructure(spIsPathEmpty)
  *svg\dl()\func = @RtIsPathEmpty() 
  
  *svg\dl()\ptIsPathEmpty\params\id = id
  *svg\dl()\ptIsPathEmpty\params\userdata = *userdata 
  *svg\dl()\ptIsPathEmpty\params\type = #spIsPathEmpty
  
  ProcedureReturn result 
  
EndProcedure 
Procedure SVGMovePathCursor(*svg.svg,x.d,y.d,flags=#PB_Path_Default,id=0,*userdata=0)
  
  MovePathCursor(x,y,flags)
  
  AddElement(*svg\dl())
  *svg\dl()\ptMovePathCursor = AllocateStructure(spMovePathCursor)
  *svg\dl()\ptMovePathCursor\x = x
  *svg\dl()\ptMovePathCursor\y = y
  *svg\dl()\ptMovePathCursor\Flags = flags
  *svg\dl()\func = @RtMovePathCursor()
  
  *svg\dl()\ptMovePathCursor\params\id = id
  *svg\dl()\ptMovePathCursor\params\userdata = *userdata 
  *svg\dl()\ptMovePathCursor\params\type = #spMovePathCursor
  
EndProcedure
Procedure.d SVGPathBoundsHeight(*svg.svg,id=0,*userdata=0)
  
  Protected result.d = PathBoundsHeight()
  
  AddElement(*svg\dl())
  *svg\dl()\ptPathBoundsHeight = AllocateStructure(spPathBoundsHeight)
  *svg\dl()\func = @RtPathBoundsHeight()
  
  *svg\dl()\ptPathBoundsHeight\params\id = id
  *svg\dl()\ptPathBoundsHeight\params\userdata = *userdata 
  *svg\dl()\ptPathBoundsHeight\params\type = #spPathBoundsHeight
  
  ProcedureReturn result 
  
EndProcedure
Procedure.d SVGPathBoundsWidth(*svg.svg,id=0,*userdata=0)
  
  Protected result.d = PathBoundsWidth()
  
  AddElement(*svg\dl())
  *svg\dl()\ptPathBoundsWidth = AllocateStructure(spPathBoundsWidth)
  *svg\dl()\func = @RtPathBoundsWidth() 
  
  *svg\dl()\ptPathBoundsWidth\params\id = id
  *svg\dl()\ptPathBoundsWidth\params\userdata = *userdata 
  *svg\dl()\ptPathBoundsWidth\params\type = #spPathBoundsWidth
  
  ProcedureReturn result 
  
EndProcedure 
Procedure.d SVGPathBoundsX(*svg.svg,id=0,*userdata=0)
  
  Protected result.d = PathBoundsX() 
  
  AddElement(*svg\dl())
  *svg\dl()\ptPathBoundsX = AllocateStructure(spPathBoundsX)
  *svg\dl()\func = @RtPathBoundsX() 
  
  *svg\dl()\ptPathBoundsX\params\id = id
  *svg\dl()\ptPathBoundsX\params\userdata = *userdata 
  *svg\dl()\ptPathBoundsX\params\type = #spPathBoundsX
  
  ProcedureReturn result 
  
EndProcedure 
Procedure.d SVGPathBoundsY(*svg.svg,id=0,*userdata=0)
  
  Protected result.d = PathBoundsY() 
  
  AddElement(*svg\dl())
  *svg\dl()\ptPathBoundsY = AllocateStructure(spPathBoundsY)
  *svg\dl()\func = @RtPathBoundsY() 
  
  *svg\dl()\ptPathBoundsY\params\id = id
  *svg\dl()\ptPathBoundsY\params\userdata = *userdata 
  *svg\dl()\ptPathBoundsY\params\type = #spPathBoundsY
  
  ProcedureReturn result 
  
EndProcedure
Procedure.d SVGPathCursorX(*svg.svg,id=0,*userdata=0)
  
  Protected result.d = PathCursorX() 
  
  AddElement(*svg\dl())
  *svg\dl()\ptPathCursorX = AllocateStructure(spPathCursorX)
  *svg\dl()\func = @RtPathCursorX() 
  
  *svg\dl()\ptPathCursorX\params\id = id
  *svg\dl()\ptPathCursorX\params\userdata = *userdata 
  *svg\dl()\ptPathCursorX\params\type = #spPathCursorX
  
  ProcedureReturn result 
  
EndProcedure 
Procedure.d SVGPathCursorY(*svg.svg,id=0,*userdata=0)
  
  Protected result.d = PathCursorY() 
  
  AddElement(*svg\dl())
  *svg\dl()\ptPathCursorY = AllocateStructure(spPathCursorY)
  *svg\dl()\func = @RtPathCursorY() 
  
  *svg\dl()\ptPathCursorY\params\id = id
  *svg\dl()\ptPathCursorY\params\userdata = *userdata 
  *svg\dl()\ptPathCursorY\params\type = #spPathCursorY
  
  ProcedureReturn result 
  
EndProcedure 
Procedure.d SVGPathLength(*svg.svg,id=0,*userdata=0)
  
  Protected result.d = PathLength() 
  
  AddElement(*svg\dl())
  *svg\dl()\ptPathLength = AllocateStructure(spPathLength)
  *svg\dl()\func = @RtPathLength() 
  
  *svg\dl()\ptPathLength\params\id = id
  *svg\dl()\ptPathLength\params\userdata = *userdata 
  *svg\dl()\ptPathLength\params\type = #spPathLength
  
  ProcedureReturn result 
  
EndProcedure 
Procedure.d SVGPathPointAngle(*svg.svg,distance.d,id=0,*userdata=0)
  
  Protected result.d = PathPointAngle(distance) 
  
  AddElement(*svg\dl())
  *svg\dl()\ptPathPointAngle = AllocateStructure(spPathPointAngle)
  *svg\dl()\ptPathPointAngle\Distance = distance
  *svg\dl()\func = @RtPathPointAngle() 
  
  *svg\dl()\ptPathPointAngle\params\id = id
  *svg\dl()\ptPathPointAngle\params\userdata = *userdata 
  *svg\dl()\ptPathPointAngle\params\type = #spPathPointAngle
  
  ProcedureReturn result 
  
EndProcedure
Procedure.d SVGPathPointX(*svg.svg,distance.d,id=0,*userdata=0)
  
  Protected result.d = PathPointX(distance)
  
  AddElement(*svg\dl())
  *svg\dl()\ptPathPointX = AllocateStructure(spPathPointX)
  *svg\dl()\ptPathPointX\Distance = distance
  *svg\dl()\func = @RtPathPointX()
  
  *svg\dl()\ptPathPointX\params\id = id
  *svg\dl()\ptPathPointX\params\userdata = *userdata 
  *svg\dl()\ptPathPointX\params\type = #spPathPointX
  
  ProcedureReturn result 
  
EndProcedure 
Procedure.d SVGPathPointY(*svg.svg,distance.d,id=0,*userdata=0)
  
  Protected result.d = PathPointY(distance) 
  
  AddElement(*svg\dl())
  *svg\dl()\ptPathPointY = AllocateStructure(spPathPointY)
  *svg\dl()\ptPathPointY\Distance = distance
  *svg\dl()\func = @RtPathPointY() 
  
  *svg\dl()\ptPathPointY\params\id = id
  *svg\dl()\ptPathPointY\params\userdata = *userdata 
  *svg\dl()\ptPathPointY\params\type = #spPathPointY
  
  ProcedureReturn result 
  
EndProcedure
Procedure.s SVGPathSegments(*svg.svg,id=0,*userdata=0)
  
  Protected result.s = PathSegments() 
  
  AddElement(*svg\dl())
  *svg\dl()\ptPathSegments = AllocateStructure(spPathSegments)
  *svg\dl()\func = @RtPathSegments() 
  
  *svg\dl()\ptPathSegments\params\id = id
  *svg\dl()\ptPathSegments\params\userdata = *userdata 
  *svg\dl()\ptPathSegments\params\type = #spPathSegments
  
  ProcedureReturn result 
  
EndProcedure 
Procedure SVGResetCoordinates(*svg.svg,system=#PB_Coordinate_User,id=0,*userdata=0)
  
  ResetCoordinates(system) 
  
  AddElement(*svg\dl())
  *svg\dl()\ptResetCoordinates = AllocateStructure(spResetCoordinates)
  *svg\dl()\ptResetCoordinates\system = system
  *svg\dl()\func = @RtResetCoordinates()
  
  *svg\dl()\ptResetCoordinates\params\id = id
  *svg\dl()\ptResetCoordinates\params\userdata = *userdata 
  *svg\dl()\ptResetCoordinates\params\type = #spResetCoordinates
  
EndProcedure
Procedure SVGResetPath(*svg.svg,id=0,*userdata=0)
  
  ResetPath()
  
  AddElement(*svg\dl())
  *svg\dl()\ptResetPath = AllocateStructure(spResetPath)
  *svg\dl()\func = @RtResetPath()
  
  *svg\dl()\ptResetPath\params\id = id
  *svg\dl()\ptResetPath\params\userdata = *userdata 
  *svg\dl()\ptResetPath\params\type = #spResetPath
  
EndProcedure 
Procedure SVGRestoreVectorState(*svg.svg,id=0,*userdata=0)
  
  RestoreVectorState()
  
  AddElement(*svg\dl())
  *svg\dl()\ptRestoreVectorState = AllocateStructure(spRestoreVectorState)
  *svg\dl()\func = @RtRestoreVectorState()
  
  *svg\dl()\ptRestoreVectorState\params\id = id
  *svg\dl()\ptRestoreVectorState\params\userdata = *userdata 
  *svg\dl()\ptRestoreVectorState\params\type = #spRestoreVectorState
  
EndProcedure
Procedure SVGRotateCoordinates(*svg.svg,x.d,y.d,angle.d,system=#PB_Coordinate_User,id=0,*userdata=0)
  
  RotateCoordinates(x,y,angle,system)
  
  AddElement(*svg\dl())
  *svg\dl()\ptRotateCoordinates = AllocateStructure(spRotateCoordinates)
  *svg\dl()\ptRotateCoordinates\x = x
  *svg\dl()\ptRotateCoordinates\y = y
  *svg\dl()\ptRotateCoordinates\Angle = angle
  *svg\dl()\ptRotateCoordinates\System = system
  *svg\dl()\func = @RtRotateCoordinates()
  
  *svg\dl()\ptRotateCoordinates\params\id = id
  *svg\dl()\ptRotateCoordinates\params\userdata = *userdata 
  *svg\dl()\ptRotateCoordinates\params\type = #spRotateCoordinates
  
EndProcedure 
Procedure SVGSaveVectorState(*svg.svg,id=0,*userdata=0)
  
  SaveVectorState()
  
  AddElement(*svg\dl())
  *svg\dl()\ptSaveVectorState = AllocateStructure(spSaveVectorState)
  *svg\dl()\func = @RtSaveVectorState()
  
  *svg\dl()\ptSaveVectorState\params\id = id
  *svg\dl()\ptSaveVectorState\params\userdata = *userdata 
  *svg\dl()\ptSaveVectorState\params\type = #spSaveVectorState
  
EndProcedure
Procedure SVGScaleCoordinates(*svg.svg,scaleX.d,scaleY.d,system=#PB_Coordinate_User,id=0,*userdata=0)
  
  ScaleCoordinates(scaleX,scaleY,system) 
  
  AddElement(*svg\dl())
  *svg\dl()\ptScaleCoordinates = AllocateStructure(spScaleCoordinates)
  *svg\dl()\ptScaleCoordinates\ScaleX = scaleX
  *svg\dl()\ptScaleCoordinates\ScaleY = scaleY
  *svg\dl()\ptScaleCoordinates\System = system
  *svg\dl()\func = @RtScaleCoordinates()
  
  *svg\dl()\ptScaleCoordinates\params\id = id
  *svg\dl()\ptScaleCoordinates\params\userdata = *userdata 
  *svg\dl()\ptScaleCoordinates\params\type = #spScaleCoordinates
  
EndProcedure
Procedure SVGSkewCoordinates(*svg.svg,angleX.d,angleY.d,system=#PB_Coordinate_User,id=0,*userdata=0)
  
  SkewCoordinates(angleX,angleY,system)
  
  AddElement(*svg\dl())
  *svg\dl()\ptSkewCoordinates = AllocateStructure(spSkewCoordinates)
  *svg\dl()\ptSkewCoordinates\AngleX = angleX
  *svg\dl()\ptSkewCoordinates\AngleY = angleY
  *svg\dl()\ptSkewCoordinates\System = system
  *svg\dl()\func = @RtSkewCoordinates()
  
  *svg\dl()\ptSkewCoordinates\params\id = id
  *svg\dl()\ptSkewCoordinates\params\userdata = *userdata 
  *svg\dl()\ptSkewCoordinates\params\type = #spSkewCoordinates
  
EndProcedure
Procedure SVGStartVectorDrawing(*svg.svg,output,id=0,*userdata=0)
  
  StartVectorDrawing(output) 
  
  AddElement(*svg\dl())
  *svg\dl()\ptStartVectorDrawing = AllocateStructure(spStartVectorDrawing)
  *svg\dl()\ptStartVectorDrawing\Output = output
  *svg\dl()\func = @RtStartVectorDrawing()
  
  *svg\dl()\ptStartVectorDrawing\params\id = id
  *svg\dl()\ptStartVectorDrawing\params\userdata = *userdata 
  *svg\dl()\ptStartVectorDrawing\params\type = #spStartVectorDrawing
  
EndProcedure
Procedure SVGStopVectorDrawing(*svg.svg,id=0,*userdata=0)
  
  StopVectorDrawing() 
  
  AddElement(*svg\dl())
  *svg\dl()\ptStopVectorDrawing = AllocateStructure(spStopVectorDrawing)
  *svg\dl()\func = @RtStopVectorDrawing()
  
  *svg\dl()\ptStopVectorDrawing\params\id = id
  *svg\dl()\ptStopVectorDrawing\params\userdata = *userdata 
  *svg\dl()\ptStopVectorDrawing\params\type = #spStopVectorDrawing
  
EndProcedure
Procedure SVGStrokePath(*svg.svg,width.d,flags=#PB_Path_Default,id=0,*userdata=0)
  
  StrokePath(width,flags) 
  
  AddElement(*svg\dl())
  *svg\dl()\ptStrokePath = AllocateStructure(spStrokePath)
  *svg\dl()\ptStrokePath\Width = width
  *svg\dl()\ptStrokePath\Flags = flags
  *svg\dl()\func = @RtStrokePath() 
  
  *svg\dl()\ptStrokePath\params\id = id
  *svg\dl()\ptStrokePath\params\userdata = *userdata 
  *svg\dl()\ptStrokePath\params\type = #spStrokePath
  
EndProcedure
Procedure SVGTranslateCoordinates(*svg.svg,x.d,y.d,system=#PB_Coordinate_User,id=0,*userdata=0)
  
  TranslateCoordinates(x,y,system) 
  
  AddElement(*svg\dl())
  *svg\dl()\ptTranslateCoordinates = AllocateStructure(spTranslateCoordinates)
  *svg\dl()\ptTranslateCoordinates\x = x
  *svg\dl()\ptTranslateCoordinates\y = y
  *svg\dl()\ptTranslateCoordinates\System = system
  *svg\dl()\func = @RtTranslateCoordinates() 
  
  *svg\dl()\ptTranslateCoordinates\params\id = id
  *svg\dl()\ptTranslateCoordinates\params\userdata = *userdata 
  *svg\dl()\ptTranslateCoordinates\params\type = #spTranslateCoordinates
  
EndProcedure 
Procedure SVGVectorFont(*svg.svg,fontId,size=0,id=0,*userdata=0)
  
  VectorFont(fontId,size) 
  
  AddElement(*svg\dl())
  *svg\dl()\ptVectorFont = AllocateStructure(spVectorFont)
  *svg\dl()\ptVectorFont\ID = fontId
  *svg\dl()\ptVectorFont\Size = size
  *svg\dl()\func = @RtVectorFont() 
  
  *svg\dl()\ptVectorFont\params\id = id
  *svg\dl()\ptVectorFont\params\userdata = *userdata 
  *svg\dl()\ptVectorFont\params\type = #spVectorFont
  
EndProcedure 
Procedure.d SVGVectorOutputHeight(*svg.svg,id=0,*userdata=0)
  
  Protected result.d = VectorOutputHeight() 
  
  AddElement(*svg\dl())
  *svg\dl()\ptVectorOutputHeight = AllocateStructure(spVectorOutputHeight)
  *svg\dl()\func = @RtVectorOutputHeight() 
  
  *svg\dl()\ptVectorOutputHeight\params\id = id
  *svg\dl()\ptVectorOutputHeight\params\userdata = *userdata 
  *svg\dl()\ptVectorOutputHeight\params\type = #spVectorOutputHeight
  
  ProcedureReturn result 
  
EndProcedure 
Procedure.d SVGVectorOutputWidth(*svg.svg,id=0,*userdata=0)
  
  Protected result.d = VectorOutputWidth() 
  
  AddElement(*svg\dl())
  *svg\dl()\ptVectorOutputWidth = AllocateStructure(spVectorOutputWidth)
  *svg\dl()\func = @RtVectorOutputWidth() 
  
  *svg\dl()\ptVectorOutputWidth\params\id = id
  *svg\dl()\ptVectorOutputWidth\params\userdata = *userdata 
  *svg\dl()\ptVectorOutputWidth\params\type = #spVectorOutputWidth
  
  ProcedureReturn result 
  
EndProcedure 
Procedure.d SVGVectorParagraphHeight(*svg.svg,text.s,width.d,height.d,id=0,*userdata=0)
  
  Protected result.d = VectorParagraphHeight(text,width,height) 
  
  AddElement(*svg\dl())
  *svg\dl()\ptVectorParagraphHeight = AllocateStructure(spVectorParagraphHeight)
  *svg\dl()\ptVectorParagraphHeight\Text = text
  *svg\dl()\ptVectorParagraphHeight\Width = width
  *svg\dl()\ptVectorParagraphHeight\Height = height
  *svg\dl()\func = @RtVectorParagraphHeight() 
  
  *svg\dl()\ptVectorParagraphHeight\params\id = id
  *svg\dl()\ptVectorParagraphHeight\params\userdata = *userdata 
  *svg\dl()\ptVectorParagraphHeight\params\type = #spVectorParagraphHeight
  
  ProcedureReturn result 
  
EndProcedure
Procedure.d SVGVectorResolutionX(*svg.svg,id=0,*userdata=0)
  
  Protected result.d = VectorResolutionX() 
  
  AddElement(*svg\dl())
  *svg\dl()\ptVectorResolutionX = AllocateStructure(spVectorResolutionX)
  *svg\dl()\func = @RtVectorResolutionX() 
  
  *svg\dl()\ptVectorResolutionX\params\id = id
  *svg\dl()\ptVectorResolutionX\params\userdata = *userdata 
  *svg\dl()\ptVectorResolutionX\params\type = #spVectorResolutionX
  
  ProcedureReturn result 
  
EndProcedure 
Procedure.d SVGVectorResolutionY(*svg.svg,id=0,*userdata=0)
  
  Protected result.d = VectorResolutionY() 
  
  AddElement(*svg\dl())
  *svg\dl()\ptVectorResolutionY = AllocateStructure(spVectorResolutionY)
  *svg\dl()\func = @RtVectorResolutionY() 
  
  *svg\dl()\ptVectorResolutionY\params\id = id
  *svg\dl()\ptVectorResolutionY\params\userdata = *userdata 
  *svg\dl()\ptVectorResolutionY\params\type = #spVectorResolutionY
  
  ProcedureReturn result 
  
EndProcedure 
Procedure SVGVectorSourceCircularGradient(*svg.svg,x.d,y.d,radius.d,centerX.d=0,centerY.d=0,id=0,*userdata=0)
  
  VectorSourceCircularGradient(x,y,radius,centerX,centerY)
  
  AddElement(*svg\dl())
  *svg\dl()\ptVectorSourceCircularGradient = AllocateStructure(spVectorSourceCircularGradient)
  *svg\dl()\ptVectorSourceCircularGradient\x = x
  *svg\dl()\ptVectorSourceCircularGradient\y = y
  *svg\dl()\ptVectorSourceCircularGradient\Radius = radius
  *svg\dl()\ptVectorSourceCircularGradient\CenterX = centerX
  *svg\dl()\ptVectorSourceCircularGradient\CenterY = centerY
  *svg\dl()\func = @RtVectorSourceCircularGradient()
  
  *svg\dl()\ptVectorSourceCircularGradient\params\id = id
  *svg\dl()\ptVectorSourceCircularGradient\params\userdata = *userdata 
  *svg\dl()\ptVectorSourceCircularGradient\params\type = #spVectorSourceCircularGradient
  
EndProcedure 
Procedure SVGVectorSourceColor(*svg.svg,color,id=0,*userdata=0)
  
  VectorSourceColor(color)
  
  AddElement(*svg\dl())
  *svg\dl()\ptVectorSourceColor = AllocateStructure(spVectorSourceColor)
  *svg\dl()\ptVectorSourceColor\Color = color
  *svg\dl()\func = @RtVectorSourceColor()
  
  *svg\dl()\ptVectorSourceColor\params\id = id 
  *svg\dl()\ptVectorSourceColor\params\userdata = *userdata
  *svg\dl()\ptVectorSourceColor\params\type = #spVectorSourceColor 
  
EndProcedure
Procedure SVGVectorSourceGradientColor(*svg.svg,color,position.d,id=0,*userdata=0)
  
  VectorSourceGradientColor(color,position)
  
  AddElement(*svg\dl())
  *svg\dl()\ptVectorSourceGradientColor = AllocateStructure(spVectorSourceGradientColor)
  *svg\dl()\ptVectorSourceGradientColor\Color = color
  *svg\dl()\ptVectorSourceGradientColor\Position = position
  *svg\dl()\func = @RtVectorSourceGradientColor()
  
  *svg\dl()\ptVectorSourceGradientColor\params\id = id
  *svg\dl()\ptVectorSourceGradientColor\params\userdata = *userdata 
  *svg\dl()\ptVectorSourceGradientColor\params\type = #spVectorSourceGradientColor
  
EndProcedure
Procedure SVGVectorSourceImage(*svg.svg,imageID,alpha=255,width.d=0,height.d=0,flags=#PB_VectorImage_Default,id=0,*userdata=0)
  
  VectorSourceImage(imageID,alpha,width,height,flags)
  
  AddElement(*svg\dl())
  *svg\dl()\ptVectorSourceImage = AllocateStructure(spVectorSourceImage)
  *svg\dl()\ptVectorSourceImage\ImageID = imageID
  *svg\dl()\ptVectorSourceImage\Alpha = alpha
  *svg\dl()\ptVectorSourceImage\Width = width
  *svg\dl()\ptVectorSourceImage\Height = height
  *svg\dl()\ptVectorSourceImage\Flags = flags
  *svg\dl()\func = @RtVectorSourceImage()
  
  *svg\dl()\ptVectorSourceImage\params\id = id
  *svg\dl()\ptVectorSourceImage\params\userdata = *userdata 
  *svg\dl()\ptVectorSourceImage\params\type = #spVectorSourceImage
  
EndProcedure 
Procedure SVGVectorSourceLinearGradient(*svg.svg,x1.d,y1.d,x2.d,y2.d,id=0,*userdata=0)
  
  VectorSourceLinearGradient(x1,y1,x2,y2)
  
  AddElement(*svg\dl())
  *svg\dl()\ptVectorSourceLinearGradient = AllocateStructure(spVectorSourceLinearGradient)
  *svg\dl()\ptVectorSourceLinearGradient\x1 = x1
  *svg\dl()\ptVectorSourceLinearGradient\y1 = y1
  *svg\dl()\ptVectorSourceLinearGradient\x2 = x2
  *svg\dl()\ptVectorSourceLinearGradient\y2 = y2
  *svg\dl()\func = @RtVectorSourceLinearGradient()
  
  *svg\dl()\ptVectorSourceLinearGradient\params\id = id
  *svg\dl()\ptVectorSourceLinearGradient\params\userdata = *userdata 
  *svg\dl()\ptVectorSourceLinearGradient\params\type = #spVectorSourceLinearGradient
  
EndProcedure 
Procedure.d SVGVectorTextHeight(*svg.svg,text.s,flags=#PB_VectorText_Default,id=0,*userdata=0)
  
  Protected result.d = VectorTextHeight(text,flags) 
  
  AddElement(*svg\dl())
  *svg\dl()\ptVectorTextHeight = AllocateStructure(spVectorTextHeight)
  *svg\dl()\ptVectorTextHeight\Text = text
  *svg\dl()\ptVectorTextHeight\Flags = flags
  *svg\dl()\func = @RtVectorTextHeight()
  
  *svg\dl()\ptVectorTextHeight\params\id = id
  *svg\dl()\ptVectorTextHeight\params\userdata = *userdata 
  *svg\dl()\ptVectorTextHeight\params\type = #spVectorTextHeight
  
  ProcedureReturn result 
  
EndProcedure
Procedure.d SVGVectorTextWidth(*svg.svg,text.s,flags=#PB_VectorText_Default,id=0,*userdata=0)
  
  Protected result.d = VectorTextWidth(text,flags) 
  
  AddElement(*svg\dl())
  *svg\dl()\ptVectorTextWidth = AllocateStructure(spVectorTextWidth)
  *svg\dl()\ptVectorTextWidth\Text = text
  *svg\dl()\ptVectorTextWidth\Flags = flags
  *svg\dl()\func = @RtVectorTextWidth()
  
  *svg\dl()\ptVectorTextWidth\params\id = id
  *svg\dl()\ptVectorTextWidth\params\userdata = *userdata 
  *svg\dl()\ptVectorTextWidth\params\type = #spVectorTextWidth
  
  ProcedureReturn result 
  
EndProcedure
Procedure.d SVGVectorUnit(*svg.svg,id=0,*userdata=0)
  
  Protected result.d = VectorUnit() 
  
  AddElement(*svg\dl())
  *svg\dl()\ptVectorUnit = AllocateStructure(spVectorUnit)
  *svg\dl()\func = @RtVectorUnit() 
  
  *svg\dl()\ptVectorUnit\params\id = id
  *svg\dl()\ptVectorUnit\params\userdata = *userdata 
  *svg\dl()\ptVectorUnit\params\type = #spVectorUnit
  
  ProcedureReturn result 
  
EndProcedure
;=>>>Test 
CompilerIf #PB_Compiler_IsMainFile 
  
  Global mSVG.svg,cw.d,ch.d  
  Global *svg.svg = @msvg  
  
  If StartVectorDrawing(SvgVectorOutput("test.svg", 400, 200))
    LoadFont(0,"Arial",24,#PB_Font_Italic | #PB_Font_Bold ) 
    txt$ = "Hello" 
    
    SVGVectorFont(*svg,FontID(0),36)  
    SVGAddPathBox(*svg,50, 50, 200, 50)
    SVGAddPathBox(*SVG,150, 75, 200, 50)
    SVGVectorSourceColor(*svg,RGBA(255, 128, 0, 255))
    SVGStrokePath(*svg,10)
    cw = 200 - SVGVectorTextWidth(*svg,Txt$) /2
    ch = 100 -  SVGVectorTextHeight(*svg,Txt$) /2 
    
    SVGMovePathCursor(*svg,200 - SVGVectorTextWidth(*svg,Txt$) /2,ch) 
    SVGVectorSourceColor(*SVG,RGBA(0,255, 0, 255))
    SVGDrawVectorText(*svg,txt$)
    
    SVGVectorFont(*svg,FontID(0), 25)
    SVGVectorSourceColor(*svg,RGBA(0, 0, 0, 80),123)
    Text$ = "The quick brown fox jumps over the lazy dog"
    cw = 200 - VectorTextWidth(Text$) /2
    ch = 100 - VectorTextHeight(Text$) /2 
    
    SVGRotateCoordinates(*svg,200, 100, 5,#PB_Coordinate_User,123)
    For i = 1 To 6
      SVGMovePathCursor(*svg,cw,ch,#PB_Path_Default)
      SVGDrawVectorText(*svg,Text$)
      SVGRotateCoordinates(*svg,200, 100, 30)
    Next i
    
    SVGVectorFont(*svg,FontID(0), 36)
    SVGVectorSourceColor(*svg,RGBA(255, 128, 0, 255))
    SVGResetCoordinates(*svg)
    SVGMovePathCursor(*svg,10,10) 
    SVGDrawVectorText(*svg,"Hello World",123)
    
    StopVectorDrawing() 
    
    Define sfx.d=1,sfy.d=1
    Define w,h,ct  
    
    ;draw display list to canvas 
    OpenWindow(0,0,0,400,200,"test txt",#PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_SizeGadget | #PB_Window_MaximizeGadget ) 
    CanvasGadget(0,0,0,400,200)
    StartVectorDrawing(CanvasVectorOutput(0)) 
    AddPathBox(0, 0, DesktopScaledX(WindowWidth(0)),DesktopScaledY(WindowHeight(0)))
    VectorSourceColor($ffffffff)
    FillPath()
    sfx = DesktopScaledX(WindowWidth(0)) / 400.0 
    sfy = DesktopScaledY(WindowHeight(0)) / 200.0 
    ScaleCoordinates(sfx,sfy)
    
    ForEach *svg\dl() 
      *svg\dl()\func(*svg\dl()\item)
    Next   
    
    StopVectorDrawing()
    AddWindowTimer(0,1,15)     
    Repeat 
      event = WaitWindowEvent() 
      Select event 
        Case #PB_Event_SizeWindow
          ResizeGadget(0,0,0,WindowWidth(0),WindowHeight(0)) 
          StartVectorDrawing(CanvasVectorOutput(0)) 
          AddPathBox(0, 0, DesktopScaledX(WindowWidth(0)),DesktopScaledY(WindowHeight(0)))
          VectorSourceColor($ffffffff)
          FillPath()
          sfx = DesktopScaledX(WindowWidth(0)) / 400.0 
          sfy = DesktopScaledY(WindowHeight(0)) / 200.0 
          ScaleCoordinates(sfx,sfy)
          ;draw the display list 
          ForEach *svg\dl() 
            *svg\dl()\func(*svg\dl()\item)
          Next 
          StopVectorDrawing()  
        Case #PB_Event_Gadget 
          If EventType() = #PB_EventType_MouseWheel         
            dir = GetGadgetAttribute(0,#PB_Canvas_WheelDelta)
            If dir < 1 
              sfx / 1.2 
              sfy / 1.2
            Else 
              sfx * 1.2
              sfy * 1.2
            EndIf 
            bcolor = 1 
          EndIf 
        Case #PB_Event_Timer
          If StartVectorDrawing(CanvasVectorOutput(0)) ;modify the display list outputs 
            
            w = DesktopScaledX(WindowWidth(0))  
            h = DesktopScaledY(WindowHeight(0))  
            AddPathBox(0, 0, w,h)
            VectorSourceColor($ffffffff)
            FillPath()
            w/2 : h/2 
            TranslateCoordinates(w-(200*sfx),h-(100*sfy))
            ScaleCoordinates(sfx,sfy)
            ForEach *svg\dl() 
              If *svg\dl()\item\id=123   
                If *svg\dl()\item\type = #spRotateCoordinates 
                  *ptr.spRotateCoordinates = *svg\dl()\item 
                  *ptr\Angle = ct 
                  ct+1 
                  ct%360  
                ElseIf *svg\dl()\item\type = #spVectorSourceColor 
                  If bcolor  
                    *col.spVectorSourceColor = *svg\dl()\item  
                    *col\Color = RGBA(Random(255),Random(255),Random(255),127)
                    bcolor=0 
                  EndIf 
                ElseIf *svg\dl()\item\type = #spDrawVectorText 
                  *txt.spDrawVectorText = *svg\dl()\item 
                  *txt\Text = Left("Runtime vector drawing display lists",ct%39) 
                EndIf
              EndIf    
              *svg\dl()\func(*svg\dl()\item)
            Next 
            StopVectorDrawing() 
          EndIf
          
        Case #PB_Event_CloseWindow  
          Break 
      EndSelect 
    ForEver    
    
    ;RunProgram("test.svg") 
    
  EndIf 
  
CompilerEndIf  



