Create your own icons for toolbars etc. with PureBasic
Re: Create your own icons for toolbars etc. with PureBasic
A request to the resident artists : a transparent or translucent icon would be a useful addition, I think.
An invisible icon really !
Sounds crazy, i know, but it could be used as a space-holder or spacer, on a toolbar, for instance.
To all of you behind this project : thank you for your excellent work and for a great contribution to the PureBasic world. Obviously, you've answered a need, and in a brilliant way.
Off topic : Of course, all of this has been made possible by the recent addition of vector graphics to PB. So, in passing, i also want to thank Fred, Freak, and the other developers who keep pushing PureBasic forward.
An invisible icon really !
Sounds crazy, i know, but it could be used as a space-holder or spacer, on a toolbar, for instance.
To all of you behind this project : thank you for your excellent work and for a great contribution to the PureBasic world. Obviously, you've answered a need, and in a brilliant way.
Off topic : Of course, all of this has been made possible by the recent addition of vector graphics to PB. So, in passing, i also want to thank Fred, Freak, and the other developers who keep pushing PureBasic forward.
"That's not a bug..." said the programmer. "it's a feature! "
"Oh! I see..." replied the blind man.
"Oh! I see..." replied the blind man.
-
- Addict
- Posts: 4527
- Joined: Thu Jun 07, 2007 3:25 pm
- Location: Berlin, Germany
Re: Create your own icons for toolbars etc. with PureBasic
Hi Blue,
thanks for your very kind words! You are welcome.
I just added such an icon to the code for the next release.
thanks for your very kind words! You are welcome.
Cool idea!Blue wrote:A request to the resident artists : a transparent or translucent icon would be a useful addition, I think.
An invisible icon really !
Sounds crazy, i know, but it could be used as a space-holder or spacer, on a toolbar, for instance.
I just added such an icon to the code for the next release.
Re: Create your own icons for toolbars etc. with PureBasic
Call me crazy, but I use transparent images as toolbar separators since the thin black bar is not wide enough to prevent operator miss clicks.Blue wrote:Sounds crazy, i know, but it could be used as a space-holder or spacer, on a toolbar, for instance.
The nice thing about standards is there are so many to choose from. ~ Andrew Tanenbaum
Re: Create your own icons for toolbars etc. with PureBasic
Well, since you insist, skywalk, we'll gladly call you crazy.
But your kind of crazy is what sane people ought to aim for.
But your kind of crazy is what sane people ought to aim for.
"That's not a bug..." said the programmer. "it's a feature! "
"Oh! I see..." replied the blind man.
"Oh! I see..." replied the blind man.
Re: Create your own icons for toolbars etc. with PureBasic
Cool, v56 final fixes my toolbar code. Windows only. Note, an empty image is not required to create a same size separator.
EDIT: removed link to bug url per Fred's note below.
EDIT: removed link to bug url per Fred's note below.
Code: Select all
EnableExplicit
Global.i evWW, evM, tbn
Global.l tb_maxSize = 16
Macro Min(x, y)
(Bool((x) <= (y)) * (x) + Bool((y) < (x)) * (y))
EndMacro
Macro Max(x, y)
(Bool((x) >= (y)) * (x) + Bool((y) > (x)) * (y))
EndMacro
Macro MAKELONG(wLo, wHi)
((wLo) & $FFFF) | (wHi) << 16
EndMacro
Procedure tb_images(tb_maxSize)
CreateImage(0, tb_maxSize, tb_maxSize)
StartDrawing(ImageOutput(0))
Box(0, 0, tb_maxSize, tb_maxSize, #Red)
DrawText(2,0,"-")
StopDrawing()
CreateImage(2, tb_maxSize, tb_maxSize)
StartDrawing(ImageOutput(2))
Box(0, 0, tb_maxSize, tb_maxSize, #Blue)
DrawText(2,0,"+")
StopDrawing()
EndProcedure
Procedure tb_scale(tb_maxSize)
If tb_maxSize > 16
tbn = CreateToolBar(#PB_Any, WindowID(0), #PB_ToolBar_Large)
Protected.i tbh = ToolBarID(tbn)
If tbh
ResizeImage(0,tb_maxSize,tb_maxSize,#PB_Image_Smooth)
ResizeImage(2,tb_maxSize,tb_maxSize,#PB_Image_Smooth)
If 0
Protected.i hTBimgList, hTBimgList2
hTBimgList = SendMessage_(tbh, #TB_GETIMAGELIST, 0, 0)
hTBimgList2 = ImageList_Duplicate_(hTBimgList)
ImageList_Destroy_(hTBimgList)
Swap hTBimgList, hTBimgList2
ImageList_SetIconSize_(hTBimgList, tb_maxSize, tb_maxSize)
SendMessage_(tbh, #TB_SETIMAGELIST, 0, hTBimgList)
SendMessage_(tbh, #TB_SETBITMAPSIZE, 0, MAKELONG(tb_maxSize,tb_maxSize))
SendMessage_(tbh, #TB_SETBITMAPSIZE, 0, MAKELONG(tb_maxSize,tb_maxSize))
SendMessage_(tbh, #TB_SETBUTTONSIZE, 0, MAKELONG(tb_maxSize,tb_maxSize))
SendMessage_(tbh, #TB_AUTOSIZE, 0, 0)
SendMessage_(tbh, #TB_AUTOSIZE, 0, 0)
Else
hTBimgList = SendMessage_(tbh, #TB_GETIMAGELIST, 0, 0)
ImageList_SetIconSize_(hTBimgList, tb_maxSize, tb_maxSize)
SendMessage_(tbh, #TB_SETBITMAPSIZE, 0, MAKELONG(tb_maxSize,tb_maxSize))
SendMessage_(tbh, #TB_AUTOSIZE, 0, 0)
EndIf
ToolBarImageButton(0, ImageID(0))
ToolBarSeparator()
ToolBarImageButton(1, 0) ; same size separator using empty image.
ToolBarImageButton(2, ImageID(2))
EndIf
Else
tbn = CreateToolBar(#PB_Any, WindowID(0), #PB_ToolBar_Small)
tbh = ToolBarID(tbn)
If tbh
ToolBarImageButton(0, ImageID(0))
ToolBarSeparator()
ToolBarImageButton(1, 0) ; same size separator using empty image.
ToolBarImageButton(2, ImageID(2))
EndIf
EndIf
EndProcedure
If OpenWindow(0, 0, 0, 500, 500, "v56 - Scaled Toolbar & Wide Separator(Windows only)", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
tb_images(16)
tb_scale(16)
StartDrawing(WindowOutput(0))
Box(0,0,500,500,#White)
DrawText(5,280,"Click the '+' image tool bar.")
StopDrawing()
SmartWindowRefresh(0,1)
Repeat
evWW = WaitWindowEvent()
If evWW = #PB_Event_Menu
evM = EventMenu()
FreeToolBar(#PB_All)
If evM = 0
tb_maxSize = max(tb_maxSize - 16, 16)
Debug "tb#" + evM + ", " + Str(tb_maxSize)
ElseIf evM = 2
tb_maxSize = max(tb_maxSize + 16, 16)
Debug "tb#" + evM + ", " + Str(tb_maxSize)
EndIf
tb_scale(tb_maxSize)
StartDrawing(WindowOutput(0))
Box(0,0,500,500,#White)
If tb_maxSize > 16
DrawText(5,280,"Click image tool bars.")
DrawText(5,310,"Toolbar resized to " + Str(tb_maxSize) + " pixels.")
Else
DrawText(5,280,"Click image '+' tool bar.")
EndIf
DrawImage(ImageID(0), 100, 350)
DrawImage(ImageID(2), 300, 350)
StopDrawing()
ElseIf evWW = #PB_Event_CloseWindow
Break
EndIf
ForEver
EndIf
Last edited by skywalk on Thu Mar 02, 2017 5:39 pm, edited 1 time in total.
The nice thing about standards is there are so many to choose from. ~ Andrew Tanenbaum
Re: Create your own icons for toolbars etc. with PureBasic
You should not link to a bug report, as it will be moved to an hidden forum and the link will be broken
Re: Create your own icons for toolbars etc. with PureBasic
@Little John
Question 1:
Question 2: when you implement the transparent icon, is it possible to provide an adjustable width parameter ? I'm thinking that it would be convenient to specify, for example, an icon as Wide as 5 regular ones rather than having to code and display 5 separate invisible icons in order to insert a 5-icons wide space. Or is that kind of thing not doable ?
@skywalk: thank you for the smart algorithm, but that kind of code is above my pay grade.
Question 1:
How do we know which is the latest release ? Have you introduced some kind of versioning scheme ?Little John wrote: Cool idea!
I just added such an icon to the code for the next release.
Question 2: when you implement the transparent icon, is it possible to provide an adjustable width parameter ? I'm thinking that it would be convenient to specify, for example, an icon as Wide as 5 regular ones rather than having to code and display 5 separate invisible icons in order to insert a 5-icons wide space. Or is that kind of thing not doable ?
@skywalk: thank you for the smart algorithm, but that kind of code is above my pay grade.
"That's not a bug..." said the programmer. "it's a feature! "
"Oh! I see..." replied the blind man.
"Oh! I see..." replied the blind man.
Re: Create your own icons for toolbars etc. with PureBasic
@Little John
Would it be too much to ask that the macros and procedures within each grouping in vectoricons.pbi be sorted alphabetically? (with some exceptions, such as those macros defined by previously defined macros, as well as logical groupings such as the sort and chess pieces procedures)
I've done it in the copy I downloaded. It makes visually locating specific procedures a lot easier.
If it's a matter of too much work, just let me know. I'll gladly do it for you. Once done, it would be simple to maintain, since further additions would simply be inserted in their proper alphabetical position.
Would it be too much to ask that the macros and procedures within each grouping in vectoricons.pbi be sorted alphabetically? (with some exceptions, such as those macros defined by previously defined macros, as well as logical groupings such as the sort and chess pieces procedures)
I've done it in the copy I downloaded. It makes visually locating specific procedures a lot easier.
If it's a matter of too much work, just let me know. I'll gladly do it for you. Once done, it would be simple to maintain, since further additions would simply be inserted in their proper alphabetical position.
"That's not a bug..." said the programmer. "it's a feature! "
"Oh! I see..." replied the blind man.
"Oh! I see..." replied the blind man.
-
- Addict
- Posts: 4527
- Joined: Thu Jun 07, 2007 3:25 pm
- Location: Berlin, Germany
Re: Create your own icons for toolbars etc. with PureBasic
Hello Blue.
Beginning with the next release, I'll write the release date in the file 'vectoricons.pbi'.
All icon procedures currently contain the line
So there are no separate 'width' and 'height' parameters, but only one 'size' parameter, since all icons are square.
When the icons are used together with PB's built-in toolbar functions, then icons that are not square probably will not work, I think. According to the docs, only square icons are supported. And when we create icons on custom controls by using the canvas gadget, something like this IMO is not required, since in that case we have complete control over the locations were the icons are placed.
For instance, I want the icons 'ToClipboard' and 'FromClipboard' to be next to each other, and also e.g. the icons 'Redo' and 'Undo'. After sorting the macros and procedures alphabetically, this order would be destroyed.
In the first post of this thread, there is always the date of the most recent release. Currently you have to compare it with the time stamp of the downloaded ZIP archive. That's not very comfortable, I am sorry.Blue wrote:@Little John
Question 1:
How do we know which is the latest release ? Have you introduced some kind of versioning scheme ?
Beginning with the next release, I'll write the release date in the file 'vectoricons.pbi'.
This is the current code for the transparent icon in my private copy of 'vectoricons.pbi':Blue wrote:Question 2: when you implement the transparent icon, is it possible to provide an adjustable width parameter ? I'm thinking that it would be convenient to specify, for example, an icon as Wide as 5 regular ones rather than having to code and display 5 separate invisible icons in order to insert a 5-icons wide space. Or is that kind of thing not doable ?
Code: Select all
Procedure.i Transparent (file$, img.i, size.i)
; in : file$: name of SVG file which is to be created (only supported on Linux),
; or "" for creating an image in memory
; img : number of the image which is to be created, or #PB_Any
; size : width and height (number of pixels)
; out: return value: if img = #Pb_Any --> number of the created image,
; on error --> 0
; [by Little John, after an idea by Blue]
Protected ret.i
ret = StartVectorIconOutput(file$, img, size)
If ret
StopVectorDrawing()
EndIf
ProcedureReturn ret
EndProcedure
Code: Select all
ret = StartVectorIconOutput(file$, img, size)
When the icons are used together with PB's built-in toolbar functions, then icons that are not square probably will not work, I think. According to the docs, only square icons are supported. And when we create icons on custom controls by using the canvas gadget, something like this IMO is not required, since in that case we have complete control over the locations were the icons are placed.
Hmm ... Frankly, I don't know whether I like that idea. :-/Blue wrote:@Little John
Would it be too much to ask that the macros and procedures within each grouping in vectoricons.pbi be sorted alphabetically? (with some exceptions, such as those macros defined by previously defined macros, as well as logical groupings such as the sort and chess pieces procedures)
I've done it in the copy I downloaded. It makes visually locating specific procedures a lot easier.
If it's a matter of too much work, just let me know. I'll gladly do it for you. Once done, it would be simple to maintain, since further additions would simply be inserted in their proper alphabetical position.
For instance, I want the icons 'ToClipboard' and 'FromClipboard' to be next to each other, and also e.g. the icons 'Redo' and 'Undo'. After sorting the macros and procedures alphabetically, this order would be destroyed.
Re: Create your own icons for toolbars etc. with PureBasic
Hi Little John
I see that you've thought of everything.
Thank you.
I see that you've thought of everything.
Thank you.
Frankly, I agree with you. I think it was a good idea... at first glance onlyHmm ... Frankly, I don't know whether I like that idea. :-/
"That's not a bug..." said the programmer. "it's a feature! "
"Oh! I see..." replied the blind man.
"Oh! I see..." replied the blind man.
-
- Addict
- Posts: 4527
- Joined: Thu Jun 07, 2007 3:25 pm
- Location: Berlin, Germany
Re: Create your own icons for toolbars etc. with PureBasic
Current changes (2017-03-08)
- Added icon "Transparent" (suggested by Blue, thank you!).
- Removed unnecessary code from some icon procedures.
- Some minor cosmetic changes in 'vectoricons.pbi'.
- Moved example code files to a subfolder and added 2 new examples.
- Entered the release date in files 'vectoricons.pbi' and 'vectoriconbrowser.pbi'.
- Added release date to the name of the ZIP archive.
Re: Create your own icons for toolbars etc. with PureBasic
Brilliant work, Little John. What a positive change it brings to the way i program my little apps. I love it !Little John wrote:Current changes (2017-03-08)
Thank you.
If it's not too late in the game, I'd like to suggest a few changes to the collection of icons.
(1) I think that the 'Add' icon should be renamed 'Plus'; 'add' is a math operation, while 'plus' is the actual name of the symbol.
(2) same reasoning for 'Sub' (math operation) to be renamed 'Minus' (actual name of the sign)
(3) 'Stop' should be renamed 'StopSign'', for better accuracy.
There may be a few others in that vein, but they escape me right now.
I also think that, for logical grouping within the file, all chess pieces should be prefixed by 'Chess_'
If at all possible, I'd appreciate those modifications. But I wouldn't want to raise a wave of protests from people saying that such changes would break their code. Suggestions are only that, and they can always find a welcoming home in the circular file.
"That's not a bug..." said the programmer. "it's a feature! "
"Oh! I see..." replied the blind man.
"Oh! I see..." replied the blind man.
-
- Addict
- Posts: 4527
- Joined: Thu Jun 07, 2007 3:25 pm
- Location: Berlin, Germany
Re: Create your own icons for toolbars etc. with PureBasic
Blue, you are most welcome! I'm glad that you like this contribution.Blue wrote:Brilliant work, Little John. What a positive change it brings to the way i program my little apps. I love it !Little John wrote:Current changes (2017-03-08)
Thank you.
There is no unique naming scheme for the icons, and their names have been chosen more or less spontaneously by their respective creators. However, as far as I can see, the current names are mainly according to two general principles:Blue wrote:If it's not too late in the game, I'd like to suggest a few changes to the collection of icons.
(1) I think that the 'Add' icon should be renamed 'Plus'; 'add' is a math operation, while 'plus' is the actual name of the symbol.
(2) same reasoning for 'Sub' (math operation) to be renamed 'Minus' (actual name of the sign)
(3) 'Stop' should be renamed 'StopSign'', for better accuracy.
There may be a few others in that vein, but they escape me right now.
- The name is a description of what the icon actually shows, such as "UpArrow", "DownArrow", "SnowFlake", etc.
- The name is a suggestion which action the icon should/could represent, i.e. which action will take place when the button with that icon on it will be clicked. It's a word which the programmer might also choose for the caption or the tooltip of the respective button. So for instance there is "FindNext" (instead of "Magnifying glass with arrow"), "Cut" (instead of "Scissors"), "Undo" (instead of "Curved clockwise arrow"). Isn't it the same with "Add" vs. "Plus", "Sub(tract)" vs. "Minus", and "Stop" vs. "StopSign"?
I want to leave that decision to the creator of those fine chess icons (davido).Blue wrote:I also think that, for logical grouping within the file, all chess pieces should be prefixed by 'Chess_'
BTW: Since we now have these icons, who is going to write a chess program in PB?
Re: Create your own icons for toolbars etc. with PureBasic
Hi Little John,
I have no issue with any changes you wish to make to any of the Icons that I have contributed.
I have no issue with any changes you wish to make to any of the Icons that I have contributed.
DE AA EB
-
- Addict
- Posts: 4527
- Joined: Thu Jun 07, 2007 3:25 pm
- Location: Berlin, Germany
Re: Create your own icons for toolbars etc. with PureBasic
Hi davido,
that is very generous, thank you!
So if there will be no objections by other people, then in the next release I'll add the prefix "Chess_" to the names of all chess icons, as suggested by Blue.
that is very generous, thank you!
So if there will be no objections by other people, then in the next release I'll add the prefix "Chess_" to the names of all chess icons, as suggested by Blue.