Page 9 of 18

Re: Create your own icons for toolbars etc. with PureBasic

Posted: Fri Apr 22, 2016 10:12 pm
by JHPJHP
Hi Oma,

See the following:
- added the Procedure: ButtonHandler()
- switched ButtonGadget for a CanvasGadget
- removed SetGadgetAttribute

Code: Select all

Procedure ButtonHandler()
  Select EventType()
    Case #PB_EventType_LeftButtonDown
      If StartDrawing(CanvasOutput(#But1))
        Box(0, 0, OutputWidth(), OutputHeight(), $F0F0F0)
        DrawAlphaImage(ImageID(#ImgOn), 0, 0)
        StopDrawing()
      EndIf
    Case #PB_EventType_LeftButtonUp
      If StartDrawing(CanvasOutput(#But1))
        Box(0, 0, OutputWidth(), OutputHeight(), $F0F0F0)
        DrawAlphaImage(ImageID(#ImgOff), 0, 0)
        StopDrawing()
      EndIf
  EndSelect
EndProcedure

CanvasGadget(#But1, 10, 30, size, size)

If StartDrawing(CanvasOutput(#But1))
  Box(0, 0, OutputWidth(), OutputHeight(), $F0F0F0)
  DrawAlphaImage(ImageID(#ImgOff), 0, 0)
  StopDrawing()
EndIf
BindGadgetEvent(#But1,@ButtonHandler())

Re: Create your own icons for toolbars etc. with PureBasic

Posted: Sat Apr 23, 2016 5:37 am
by Oma
Thank you JHPJHP!

Works at first attempt, thanks to your good preparation!
Explanation: With this modification a canvas (without the undesired Button-Frame) is used for the 3D-Button. The small snag is, that no real transparency is, and a faked background must be used to simulate transparency and it could be slightly visible on some systems (especially with a gradient-background)

Thanks and best regards, Charly

ps: Maybe i add this mode in the example in my previous posting throughout the day to get a good start-point.
If anyone is interested in those button-types, i think a new or parallel topic should be opened to keep this as clean so far.

Re: Create your own icons for toolbars etc. with PureBasic

Posted: Sat Apr 23, 2016 12:00 pm
by Andre
Great new additions! Thank you very much! :D

I'm not yet in the position to really use the icons, but that will come next months for sure :mrgreen:

If I'm allowed to have some further wishes:

1. further Chart icons
- line with dots
- horizontal bars
- stacked bars (several bars on top of each other)

2. Support for loading a background image, which can be used as background for the drawn vector icon (even better with support for brighten the loaded image, so that the real icon is better visible). One example from my project would be: take a world globe as background and draw the search icon on top of it...
(If not of general interest, I can try myself to code such thing - but that will not happen the next weeks...)

Re: Create your own icons for toolbars etc. with PureBasic

Posted: Sat Apr 23, 2016 3:04 pm
by Little John
Hi davido!
davido wrote:I would like to add 3 more icons: OrangeFruit, LemonFruit and LimeFruit.
Since these are really the same except for the colour. I have used a Macro: DrawCitrusFruit. I hope it meets your standard.
Mmmh..., your fruits look very tasty! I think I should go and buy some oranges. :-)
Since these threee icons are the same except for the colour, I'd prefer to have only one procedure for them, and call this procedure three times with different parameters for the color (just as we did e.g. with icons "On" and "Off").

Hi Charly!
Oma wrote:I'm sorry that my unexplained comment has brought you so much to brood.
It only should mean, i only updated the icon format the last weeks, but i'm working with an older, small icon set. It is about time to bring the collection up to date - (and try [blendman]s cartoon).
No problem. I am sorry that I obviously misunderstood what you wrote.
Oma wrote:And now something offtopic:
How about transparent 3D-Button-Backgrounds?
- Only tested on Linux.
- I don't know an OS-independant way how to get rid of the Buttonframe.
- I don't know a way how to get rid of the toggled and touched Button-frame in Linux.
- There still are hardcoded parts.
Maybe you like it, improve it and even find a way to use it in the Icon-Library.
It works fine also on Windows, and I like it a lot :!:
Probably there will be a way to use this in the icon library, but I'll have to think more about it.

Hi Andre!
Andre wrote:1. further Chart icons
- line with dots
- horizontal bars
- stacked bars (several bars on top of each other)
This is obviously addressed to our Chart Icon expert (not me). :-)
Andre wrote:2. Support for loading a background image, which can be used as background for the drawn vector icon (even better with support for brighten the loaded image, so that the real icon is better visible). One example from my project would be: take a world globe as background and draw the search icon on top of it...
(If not of general interest, I can try myself to code such thing - but that will not happen the next weeks...)
This can be easily done already now with the help of DrawImage().
It's also no problem to change the function StartVectorIconOutput() in the VectorIcons module, so that it checks whether a given image number represents an existing image: If that's the case, then it would use that image, otherwise it would create a new one:

Code: Select all

EnableExplicit

XIncludeFile "vectoricons.pb"

#PossibleFeature = #False

; Images
Enumeration
   #ImgWorld
   #ImgFind
EndEnumeration

UseJPEGImageDecoder()
Define size

If LoadImage(#ImgWorld, "globe.jpg")
   size = ImageWidth(#ImgWorld)
   If size > ImageHeight(#ImgWorld)
      size = ImageHeight(#ImgWorld)
   EndIf  
   
   CompilerIf #PossibleFeature
      VectorIcons::Find(#ImgWorld, size/2, VectorIcons::#CSS_Black)
   CompilerElse
      If VectorIcons::Find(#ImgFind, size/2, VectorIcons::#CSS_Black)
         If StartDrawing(ImageOutput(#ImgWorld))
            DrawingMode(#PB_2DDrawing_AlphaBlend)
            DrawImage(ImageID(#ImgFind), 0, size/2)
            StopDrawing()
         EndIf   
      EndIf
   CompilerEndIf
EndIf

If OpenWindow(0, 0, 0, 1.5*size, size, "Demo") = 0
   End   
EndIf
ImageGadget(0, 0, 0, WindowWidth(0), WindowHeight(0), ImageID(#ImgWorld))

Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow
In this demo code, the new method would save 8 lines (1 in the Enumeration, and 7 after CompilerElse.

However, the advantage of DrawImage() is, that we can specify the position of the icon on the background image.
If we want to build this possibility into the VectorIcons library, every public icon procedure would have to get additional x and y parameters, and the code inside the procedures that "draws" the icons would have to use these parameters, of course. In other words: All icon procedures would have to be changed. For instance

Code: Select all

MovePathCursor(2*p, 3*p)
had to become

Code: Select all

MovePathCursor(x + 2*p, y + 3*p)
I don't know if it's worth the effort, since we already can do the job with DrawImage().

Re: Create your own icons for toolbars etc. with PureBasic

Posted: Sat Apr 23, 2016 8:13 pm
by davido
Hi Little John,

Your point regarding the fruit icons is well-taken. I have reposted as you suggested.
I also add two more icons: Action and Move.

Code: Select all

   Declare.i CitrusFruits (img.i, size.i, color1.i, color2.i)
   Declare.i Action (img.i, size.i, color1.i, color2.i, color3.i, color4.i)
   Declare.i Move (img.i, size.i, color1.i)
   
   Procedure.i CitrusFruits (img.i, size.i, color1.i, color2.i)
      ; in : img   : number of the image which is to be created, or #PB_Any
      ;      size  : width and height (number of pixels)
      ;      color1: foreground color #1
      ;      color2: foreground color #2
      ; out: return value: if img = #Pb_Any => number of the created image,
      ;                    error => 0
      ; [by davido]
      Protected ret.i

      ret = StartVectorIconOutput(img, size)
      
      If ret
        VectorSourceColor(color1)
        AddPathCircle(0.5*size,0.5*size,0.45*size)
        StrokePath(0.03125*size)
        VectorSourceColor(color2)
        AddPathCircle(0.5*size,0.5*size,0.45*size)
        FillPath()
        VectorSourceColor(color1)
        AddPathCircle(0.5*size,0.5*size,0.40*size)
        FillPath()
        VectorSourceColor(color2)
        MovePathCursor(0.49*size,0.5*size)
        AddPathLine(0.48*size,0.1*size)
        AddPathLine(0.52*size,0.1*size)
        AddPathLine(0.51*size,0.5*size)
        ClosePath()
        RotateCoordinates(0.5*size,0.5*size,50)
        MovePathCursor(0.49*size,0.5*size)
        AddPathLine(0.48*size,0.1*size)
        AddPathLine(0.52*size,0.1*size)
        AddPathLine(0.51*size,0.5*size)
        ClosePath()
        RotateCoordinates(0.5*size,0.5*size,75)
        MovePathCursor(0.49*size,0.5*size)
        AddPathLine(0.48*size,0.1*size)
        AddPathLine(0.52*size,0.1*size)
        AddPathLine(0.51*size,0.5*size)
        ClosePath()
        RotateCoordinates(0.5*size,0.5*size,45)
        MovePathCursor(0.49*size,0.5*size)
        AddPathLine(0.48*size,0.1*size)
        AddPathLine(0.52*size,0.1*size)
        AddPathLine(0.51*size,0.5*size)
        ClosePath()
        RotateCoordinates(0.5*size,0.5*size,65)
        MovePathCursor(0.49*size,0.5*size)
        AddPathLine(0.48*size,0.1*size)
        AddPathLine(0.52*size,0.1*size)
        AddPathLine(0.51*size,0.5*size)
        ClosePath()
        RotateCoordinates(0.5*size,0.5*size,55)
        MovePathCursor(0.49*size,0.5*size)
        AddPathLine(0.48*size,0.1*size)
        AddPathLine(0.52*size,0.1*size)
        AddPathLine(0.51*size,0.5*size)
        ClosePath()
        FillPath()
        AddPathCircle(0.5*size,0.5*size,0.0625*size)
        FillPath()
         StopVectorDrawing()
      EndIf
      
      ProcedureReturn ret
   EndProcedure
   
Procedure.i Action (img.i, size.i, color1.i, color2.i, color3.i, color4.i)
      ; in : img   : number of the image which is to be created, or #PB_Any
      ;      size  : width and height (number of pixels)
      ;      color1: foreground color #1
      ;      color2: foreground color #2
      ;      color3: foreground color #3
      ;      color4: foreground color #4
      ; out: return value: if img = #Pb_Any => number of the created image,
      ;                    error => 0
      ; [by davido]
      Protected ret.i

      ret = StartVectorIconOutput(img, size)
      
      If ret
         VectorSourceColor(color1)
         AddPathEllipse(0.5*size,0.5*size,0.46875*size,0.1875*size)
         StrokePath(0.0625*size)
         RotateCoordinates(0.5*size,0.5*size,60)
         VectorSourceColor(color2)
         AddPathEllipse(0.5*size,0.5*size,0.46875*size,0.1875*size)
         StrokePath(0.0625*size)
         RotateCoordinates(0.5*size,0.5*size,60)
         VectorSourceColor(color3)
         AddPathEllipse(0.5*size,0.5*size,0.46875*size,0.1875*size)
         StrokePath(0.0625*size)
         VectorSourceColor(color3)
         AddPathCircle(0.5*size,0.5*size,0.09375*size)
         FillPath()
         StopVectorDrawing()
      EndIf
      
      ProcedureReturn ret
   EndProcedure

Procedure.i Move (img.i, size.i, color1.i)
      ; in : img   : number of the image which is to be created, or #PB_Any
      ;      size  : width and height (number of pixels)
      ;      color1: foreground color #1
      ; out: return value: if img = #Pb_Any => number of the created image,
      ;                    error => 0
      ; [by davido]
      Protected ret.i

      ret = StartVectorIconOutput(img, size)
      
      If ret
         VectorSourceColor(color1)
         MovePathCursor(0.3125 * size, 0.21875 * size)
         AddPathLine(0.5 * size, 0.03125 * size)
         AddPathLine(0.6875 * size, 0.21875 * size)
         AddPathLine(0.53125 * size, 0.21875 * size)
         AddPathLine(0.53125 * size, 0.46875 * size)
         AddPathLine(0.78125 * size, 0.46875 * size)
         AddPathLine(0.78125 * size, 0.3125 * size)
         AddPathLine(0.96875 * size, 0.5 * size)
         AddPathLine(0.78125 * size, 0.6875 * size)
         AddPathLine(0.78125 * size, 0.53125 * size)
         AddPathLine(0.53125 * size, 0.53125 * size)
         AddPathLine(0.53125 * size, 0.78125 * size)
         AddPathLine(0.6875 * size, 0.78125 * size)
         AddPathLine(0.5 * size, 0.96875 * size)
         AddPathLine(0.3125 * size, 0.78125 * size)
         AddPathLine(0.46875 * size, 0.78125 * size)
         AddPathLine(0.46875 * size, 0.53125 * size)
         AddPathLine(0.21875 * size, 0.53125 * size)
         AddPathLine(0.21875 * size, 0.6875 * size)
         AddPathLine(0.03125 * size, 0.5 * size)
         AddPathLine(0.21875 * size, 0.3125 * size)
         AddPathLine(0.21875 * size, 0.46875 * size)
         AddPathLine(0.46875 * size, 0.46875 * size)
         AddPathLine(0.46875 * size, 0.21875 * size)
         AddPathLine(0.3125 * size, 0.21875 * size)
         FillPath()
         StopVectorDrawing()
      EndIf
      
      ProcedureReturn ret
    EndProcedure
    
      #ImgOrangeFruit
      #ImgLemonFruit
      #ImgLimeFruit
      #ImgAction
      #ImgMove
      
      
      "Orange Fruit" , "Lemon Fruit" , "Lime Fruit" , "Action" , "Move"
      
      
      CitrusFruits(#ImgOrangeFruit, size, #CSS_Orange, #CSS_WhiteSmoke)
      CitrusFruits(#ImgLemonFruit, size, #CSS_Khaki, #CSS_WhiteSmoke)
      CitrusFruits(#ImgLimeFruit, size, #CSS_LimeGreen, #CSS_WhiteSmoke)
      Action(#ImgAction, size.i, #CSS_Red, #CSS_LightGreen, #CSS_Blue, #CSS_Black)
      Move(#ImgMove, size.i, #CSS_Black)
      
      CitrusFruits(#ImgOrangeFruit + #IconCount, size, #CSS_Silver, #CSS_WhiteSmoke)
      CitrusFruits(#ImgLemonFruit + #IconCount, size, #CSS_Silver, #CSS_WhiteSmoke)
      CitrusFruits(#ImgLimeFruit + #IconCount, size, #CSS_Silver, #CSS_WhiteSmoke)
      Action(#ImgAction + #IconCount, size.i, #CSS_Silver, #CSS_Silver, #CSS_Silver, #CSS_Silver)
      Move(#ImgMove + #IconCount, size.i, #CSS_Silver)

Re: Create your own icons for toolbars etc. with PureBasic

Posted: Sun Apr 24, 2016 5:07 pm
by Little John
davido wrote:Your point regarding the fruit icons is well-taken. I have reposted as you suggested.
Hi davido,

actually I didn't want to suggest that you repost the code, because when I wrote that text I already had changed your code on my PC.
But now I see that I forgot to mention that. :oops: Please excuse me for causing unnecessary work for you.
And thanks for the two brand new icons!

All current changes:
  • Procedure Color_Darken() updated by Oma.
  • Added icon "Watch" by me.
  • Added icons "Orange Fruit", "Lemon Fruit", "Lime Fruit", "Action", and "Move" by davido.
  • Changed some minor internal details.

Re: Create your own icons for toolbars etc. with PureBasic

Posted: Sun Apr 24, 2016 5:58 pm
by Oma
Hi davido!
Good (and unusual) ideas and good implementation. A fine contrast to my sober style.

Hi John!
I just see - good that i've waited with the download of the current (and whole) version.
Probably there will be a way to use this in the icon library, but I'll have to think more about it.
The 'treatment' of the round 3D-Icons depends so much on color and style of the button, that i fear, no general algorithms can be found to this kind of 'icons' to integrate them well - with only color-parameters.
In addition, the style is too different. Perhaps a second section of Vector-3D-Icons can be opened sometime if people want things like this samples ...
Image

@Andre
You take good care of our PB-documentation - then we should take care of our Andre. :wink: .
It is no effort to create the icons (but increasingly difficult to handle and tighten the whole stuff
and pack the moded and new parts to a infallibly and transmittable package (to spare John))


I think the supplement arrives during next week.

Best wishes, Charly

Re: Create your own icons for toolbars etc. with PureBasic

Posted: Sun Apr 24, 2016 8:41 pm
by davido
Hi Little John,

Thank you for dealing with the 'Fruit' icons. :D

I have two more icons: Lock and Unlock.

Code: Select all

   Declare.i Lock (img.i, size.i, color1.i, color2.i)
   Declare.i Unlock (img.i, size.i, color1.i, color2.i)
   

Procedure.i Lock (img.i, size.i, color1.i, color2.i)
      ; in : img   : number of the image which is to be created, or #PB_Any
      ;      size  : width and height (number of pixels)
      ;      color1: foreground color #1
      ;      color2: foreground color #2
      ; out: return value: if img = #Pb_Any => number of the created image,
      ;                    error => 0
      ; [by davido]
      Protected ret.i

      ret = StartVectorIconOutput(img, size)
      
      If ret
        VectorSourceColor(color1)
        ;Body of lock
         AddPathRoundBox(0.25 * size, 0.5 * size, 0.5 * size, 0.4375 * size, 0.09375 * size)
         FillPath()
         ;Shank - semi circle top
         AddPathCircle(0.5 * size, 0.28125 * size, 0.15625 * size,180,0)
         ;Shank - right arm
         AddPathLine(0.65625 * size, 0.5 * size)
         ;Shank - left arm
         MovePathCursor(0.34375 * size, 0.28125 * size)
         AddPathLine(0.34375 * size, 0.5 * size)
         StrokePath(0.0625 * size)
         ;Keyhole
         VectorSourceColor(color2)
         AddPathCircle(0.5 * size, 0.6875 * size, 0.0625 * size)
         FillPath()
         MovePathCursor(0.5 * size, 0.6875 * size)
         AddPathLine(0.5625 * size, 0.875 * size)
         AddPathLine(0.4375 * size, 0.875 * size)
         ClosePath()
         FillPath()
         StopVectorDrawing()
      EndIf
      
      ProcedureReturn ret
   EndProcedure

Procedure.i Unlock (img.i, size.i, color1.i, color2.i)
      ; in : img   : number of the image which is to be created, or #PB_Any
      ;      size  : width and height (number of pixels)
      ;      color1: foreground color #1
      ;      color2: foreground color #2
      ; out: return value: if img = #Pb_Any => number of the created image,
      ;                    error => 0
      ; [by davido]
      Protected ret.i

      ret = StartVectorIconOutput(img, size)
      
      If ret
        VectorSourceColor(color1)
        ;Body of lock
         AddPathRoundBox(0.25 * size, 0.5 * size, 0.5 * size, 0.4375 * size, 0.09375 * size)
         FillPath()
         ;Shank - semi circle top
         AddPathCircle(0.5 * size, 0.1875 * size, 0.15625 * size,180,0)
         ;Shank - right arm
         AddPathLine(0.65625 * size, 0.5 * size)
         ;Shank - left arm
         MovePathCursor(0.34375 * size, 0.1875 * size)
         AddPathLine(0.34375 * size, 0.4375 * size)
         StrokePath(0.0625 * size)
         VectorSourceColor(color2)
         ;Hasp slot
         MovePathCursor(0.375 * size, 0.34375 * size)
         AddPathLine(0.34375 * size, 0.34375 * size)
         StrokePath(0.0625 * size)
         ;Keyhole
         AddPathCircle(0.5 * size, 0.6875 * size, 0.0625 * size)
         FillPath()
         MovePathCursor(0.5 * size, 0.6875 * size)
         AddPathLine(0.5625 * size, 0.875 * size)
         AddPathLine(0.4375 * size, 0.875 * size)
         ClosePath()
         FillPath()
         StopVectorDrawing()
      EndIf
      
      ProcedureReturn ret
    EndProcedure
    
      #ImgLock
      #ImgUnlock
      
      "Lock" , "Unlock"
      
      Lock(#ImgLock, size.i, #CSS_Black, #CSS_WhiteSmoke)
      Unlock(#ImgUnlock, size.i, #CSS_Black, #CSS_WhiteSmoke)
      
      Lock(#ImgLock + #IconCount, size.i, #CSS_Silver, #CSS_Silver)
      Unlock(#ImgUnlock + #IconCount, size.i, #CSS_Silver, #CSS_Silver)
      
Hi Oma,
Those 'Button' icons look very nice; I hope you can add them sometime.

Re: Create your own icons for toolbars etc. with PureBasic

Posted: Sun Apr 24, 2016 9:44 pm
by Little John
Hi Charly!
Oma wrote:In addition, the style is too different. Perhaps a second section of Vector-3D-Icons can be opened sometime if people want things like this samples ...
After looking closer at your code, I agree.

Hi davido!
davido wrote:I have two more icons: Lock and Unlock.
Just now I have updated the ZIP archive ...
These two icons will be contained in the next release of the collection.

Current changes
For creating the images, the demo code now uses #Pb_Any instead of self defined constants.

Re: Create your own icons for toolbars etc. with PureBasic

Posted: Sun Apr 24, 2016 10:47 pm
by davido
Hi Little John,

I'm pleased you didn't add my Lock & Unlock icons as I used a Macro to generate a Round Box. Apologies, I omitted to add include it. :oops:
I list it below:

Code: Select all

     Macro AddPathRoundBox(_x_, _y_, _w_, _h_, _r_)
      ;by diskay - modified as Macro by davido
      ;http://www.purebasic.fr/english/viewtopic.php?p=473535#p473535
      MovePathCursor(_x_ + _w_, _y_  +  _h_ * 0.5)
      AddPathArc(_x_ + _w_, _y_ + _h_, _x_, _y_ + _h_, _r_) ;this fails - not any longer thanks to LJ
      AddPathArc(_x_, _y_ + _h_, _x_, _y_, _r_)
      AddPathArc(_x_, _y_, _x_ + _w_, _y_, _r_)
      AddPathArc(_x_ + _w_, _y_, _x_ + _w_, _y_ + _h_, _r_)
      ClosePath()
    EndMacro

Re: Create your own icons for toolbars etc. with PureBasic

Posted: Mon Apr 25, 2016 6:44 am
by Little John
Thanks, davido!

Current changes
  • Added macro DrawRoundBox() by davido
  • Added icons "Lock" and "Unlock" by davido
  • Some small internal changes

Re: Create your own icons for toolbars etc. with PureBasic

Posted: Mon Apr 25, 2016 8:08 am
by [blendman]
Hi

DrawRoundBox() seems to not work (with window8) :

Code: Select all


Macro AddPathRoundBox(_x_, _y_, _w_, _h_, _r_)
    ;by diskay - modified as Macro by davido
    ;http://www.purebasic.fr/english/viewtopic.php?p=473535#p473535
    MovePathCursor(_x_ + _w_, _y_  +  _h_ * 0.5)
    AddPathArc(_x_ + _w_, _y_ + _h_, _x_, _y_ + _h_, _r_) ;this fails - not any longer thanks to LJ
    AddPathArc(_x_, _y_ + _h_, _x_, _y_, _r_)
    AddPathArc(_x_, _y_, _x_ + _w_, _y_, _r_)
    AddPathArc(_x_ + _w_, _y_, _x_ + _w_, _y_ + _h_, _r_)
    ClosePath()
EndMacro

w=600
h=400
OpenWindow(0, 0, 0, w,h, "", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)


CanvasGadget(0,0,0,w,h)
If StartVectorDrawing(CanvasVectorOutput(0))
    AddPathRoundBox(10,10,500,300,30)
    VectorSourceColor(RGBA(120,120,120,255))
    FillPath()    
    StopVectorDrawing()
EndIf

Repeat
  Event = WaitWindowEvent()
Until Event = #PB_Event_CloseWindow

result :
Image

Re: Create your own icons for toolbars etc. with PureBasic

Posted: Mon Apr 25, 2016 8:44 am
by Little John
[blendman] wrote:DrawRoundBox() seems to not work (with window8)
It should work on any Windows version when you apply my AddPathArc()-bugfix-macro,
or as part of the "VectorIcons" module, where that macro is used automatically.
For details see http://www.purebasic.fr/english/viewtop ... =4&t=63582

Re: Create your own icons for toolbars etc. with PureBasic

Posted: Mon Apr 25, 2016 8:47 am
by davido
Hi [blendman],
Little John has written a Macro, a very clever Macro, that corrects the error in the PureBasic version.
It is in the vdraw Module of his code.

Re: Create your own icons for toolbars etc. with PureBasic

Posted: Tue Apr 26, 2016 10:32 am
by Little John
Current changes
  • Included two short example programs.
  • Added full support for creating SVG files (only on Linux):
    Now all icon procedures take a file name as first parameter.
    If this is "", then the procedure will create the respective icon as an image in menory, otherwise it will create an SVG file with that name (see included example program).
  • Simplified the demo code inside of the file "vectoricons.pbi".