127 lines
13 KiB
Python
127 lines
13 KiB
Python
"""SaiCore Toolbar icons."""
|
|
import os
|
|
from PIL import Image, ImageDraw, ImageFont
|
|
|
|
BASE = os.path.join(os.path.dirname(__file__), "..", "resources", "images", "toolbar")
|
|
DARK = (250, 250, 249) # cream-white for dark bg
|
|
INDIGO = (220, 38, 38) # red-600
|
|
WHITE = (255, 255, 255)
|
|
RED = (239, 68, 68)
|
|
T = (0, 0, 0, 0)
|
|
SZ = 32
|
|
|
|
def font(sz):
|
|
for n in ['C:/Windows/Fonts/segoeuib.ttf', 'C:/Windows/Fonts/arialbd.ttf']:
|
|
try: return ImageFont.truetype(n, sz)
|
|
except: pass
|
|
return ImageFont.load_default()
|
|
|
|
def new():
|
|
img = Image.new('RGBA', (SZ, SZ), T)
|
|
return img, ImageDraw.Draw(img)
|
|
|
|
def save(name, img):
|
|
img.save(os.path.join(BASE, name), 'PNG')
|
|
print(f" {name}")
|
|
|
|
ICONS = {
|
|
"newDocument": lambda dr,c: dr.rounded_rectangle([8,6,24,26], radius=2, outline=c, width=2),
|
|
"newFolder": lambda dr,c: dr.polygon([(8,12),(16,12),(18,8),(24,8),(24,22),(8,22)], outline=c, width=2),
|
|
"newPage": lambda dr,c: (dr.rounded_rectangle([8,6,24,26], radius=2, outline=c, width=2), dr.line([16,6,16,26], fill=c, width=2)),
|
|
"open": lambda dr,c: (dr.rounded_rectangle([8,12,24,22], radius=2, outline=c, width=2), dr.polygon([(8,12),(14,8),(18,12)], outline=c, width=2)),
|
|
"import": lambda dr,c: (dr.rounded_rectangle([8,6,24,26], radius=2, outline=c, width=2), dr.line([16,12,16,22], fill=c, width=2), dr.polygon([(13,14),(19,14),(16,10)], fill=c)),
|
|
"export": lambda dr,c: (dr.rounded_rectangle([8,6,24,26], radius=2, outline=c, width=2), dr.line([16,12,16,22], fill=c, width=2), dr.polygon([(13,20),(19,20),(16,24)], fill=c)),
|
|
"save": lambda dr,c: (dr.rounded_rectangle([8,6,24,26], radius=2, outline=c, width=2), dr.rectangle([13,6,19,12], fill=c), dr.rectangle([13,16,19,22], outline=c, width=1)),
|
|
"print": lambda dr,c: (dr.rectangle([10,8,22,16], outline=c, width=2), dr.rounded_rectangle([8,16,24,22], radius=2, outline=c, width=2)),
|
|
"pdf": lambda dr,c: (dr.rounded_rectangle([8,6,24,26], radius=2, outline=c, width=2), dr.text((11,14),"PDF", fill=c, font=font(7))),
|
|
"copy": lambda dr,c: (dr.rounded_rectangle([6,10,18,22], radius=2, outline=c, width=2), dr.rounded_rectangle([12,6,24,18], radius=2, outline=c, width=2)),
|
|
"cut": lambda dr,c: (dr.line([8,8,24,24], fill=c, width=2), dr.line([24,8,8,24], fill=c, width=2), dr.ellipse([5,5,11,11], outline=c, width=2), dr.ellipse([21,5,27,11], outline=c, width=2)),
|
|
"paste": lambda dr,c: (dr.rounded_rectangle([8,8,24,24], radius=2, outline=c, width=2), dr.rectangle([13,4,19,10], fill=c)),
|
|
"duplicate": lambda dr,c: (dr.rounded_rectangle([6,10,18,22], radius=2, outline=c, width=2), dr.rounded_rectangle([12,6,24,18], radius=2, outline=c, width=2)),
|
|
"deleteDocument": lambda dr,c: (dr.rounded_rectangle([8,6,24,26], radius=2, outline=c, width=2), dr.line([11,10,21,22], fill=RED, width=2), dr.line([21,10,11,22], fill=RED, width=2)),
|
|
"deleteFolder": lambda dr,c: (dr.polygon([(8,12),(16,12),(18,8),(24,8),(24,22),(8,22)], outline=c, width=2), dr.line([11,16,21,16], fill=RED, width=2)),
|
|
"remove": lambda dr,c: dr.line([8,16,24,16], fill=c, width=3),
|
|
"next": lambda dr,c: dr.polygon([(11,8),(21,16),(11,24)], fill=c),
|
|
"previous": lambda dr,c: dr.polygon([(21,8),(11,16),(21,24)], fill=c),
|
|
"nextPageOn": lambda dr,c: (dr.polygon([(11,8),(21,16),(11,24)], fill=INDIGO), dr.rounded_rectangle([8,6,24,26], radius=2, outline=c, width=1)),
|
|
"previousPageOn": lambda dr,c: (dr.polygon([(21,8),(11,16),(21,24)], fill=INDIGO), dr.rounded_rectangle([8,6,24,26], radius=2, outline=c, width=1)),
|
|
"documents": lambda dr,c: (dr.rounded_rectangle([8,6,24,26], radius=2, outline=c, width=2), dr.line([11,12,21,12], fill=c, width=1), dr.line([11,16,21,16], fill=c, width=1), dr.line([11,20,17,20], fill=c, width=1)),
|
|
"web": lambda dr,c: (dr.ellipse([6,6,26,26], outline=c, width=2), dr.line([6,16,26,16], fill=c, width=1), dr.line([16,6,16,26], fill=c, width=1)),
|
|
"library": lambda dr,c: (dr.rounded_rectangle([6,6,26,26], radius=2, outline=c, width=2), dr.line([6,16,26,16], fill=c, width=1), dr.line([16,6,16,26], fill=c, width=1)),
|
|
"board": lambda dr,c: dr.rounded_rectangle([6,8,26,24], radius=2, outline=c, width=2),
|
|
"display": lambda dr,c: (dr.rounded_rectangle([6,6,26,22], radius=2, outline=c, width=2), dr.line([16,22,16,26], fill=c, width=2), dr.line([10,26,22,26], fill=c, width=2)),
|
|
"tutorial": lambda dr,c: (dr.rounded_rectangle([8,6,24,26], radius=2, outline=c, width=2), dr.polygon([(11,12),(11,24),(21,18)], fill=c)),
|
|
"home": lambda dr,c: dr.polygon([(16,6),(24,16),(21,16),(21,24),(11,24),(11,16),(8,16)], fill=c),
|
|
"settings": lambda dr,c: (dr.ellipse([11,11,21,21], outline=c, width=2), dr.line([16,6,16,11], fill=c, width=2), dr.line([16,21,16,26], fill=c, width=2), dr.line([6,16,11,16], fill=c, width=2), dr.line([21,16,26,16], fill=c, width=2)),
|
|
"profile": lambda dr,c: (dr.ellipse([11,6,21,16], outline=c, width=2), dr.arc([6,14,26,28], 0, 180, fill=c, width=2)),
|
|
"undo": lambda dr,c: (dr.arc([8,8,24,24], 180, 360, fill=c, width=2), dr.polygon([(8,16),(12,12),(12,20)], fill=c)),
|
|
"redo": lambda dr,c: (dr.arc([8,8,24,24], 0, 180, fill=c, width=2), dr.polygon([(24,16),(20,12),(20,20)], fill=c)),
|
|
"undoOn": lambda dr,c: (dr.arc([8,8,24,24], 180, 360, fill=INDIGO, width=2), dr.polygon([(8,16),(12,12),(12,20)], fill=INDIGO)),
|
|
"redoOn": lambda dr,c: (dr.arc([8,8,24,24], 0, 180, fill=INDIGO, width=2), dr.polygon([(24,16),(20,12),(20,20)], fill=INDIGO)),
|
|
"background": lambda dr,c: (dr.rounded_rectangle([6,6,26,26], radius=2, outline=c, width=2), dr.line([6,16,26,16], fill=c, width=1), dr.line([16,6,16,26], fill=c, width=1)),
|
|
"clearPage": lambda dr,c: (dr.rounded_rectangle([8,6,24,26], radius=2, outline=c, width=2), dr.line([11,10,21,22], fill=RED, width=2), dr.line([21,10,11,22], fill=RED, width=2)),
|
|
"group": lambda dr,c: (dr.rounded_rectangle([6,6,14,14], radius=2, outline=c, width=2), dr.rounded_rectangle([18,6,26,14], radius=2, outline=c, width=2), dr.rounded_rectangle([6,18,14,26], radius=2, outline=c, width=2), dr.rounded_rectangle([18,18,26,26], radius=2, outline=c, width=2)),
|
|
"ungroup": lambda dr,c: (dr.rounded_rectangle([6,6,14,14], radius=2, outline=c, width=2), dr.rounded_rectangle([18,6,26,14], radius=2, outline=c, width=2), dr.rounded_rectangle([6,18,14,26], radius=2, outline=c, width=2), dr.rounded_rectangle([18,18,26,26], radius=2, outline=c, width=2), dr.line([14,10,18,10], fill=RED, width=2)),
|
|
"menu": lambda dr,c: (dr.line([8,10,24,10], fill=c, width=2), dr.line([8,16,24,16], fill=c, width=2), dr.line([8,22,24,22], fill=c, width=2)),
|
|
"hide": lambda dr,c: (dr.arc([6,10,26,22], 0, 180, fill=c, width=2), dr.arc([6,10,26,22], 180, 360, fill=c, width=2), dr.line([6,22,26,10], fill=RED, width=2)),
|
|
"quit": lambda dr,c: (dr.line([10,10,22,22], fill=c, width=2), dr.line([22,10,10,22], fill=c, width=2)),
|
|
"quitOn": lambda dr,c: (dr.line([10,10,22,22], fill=INDIGO, width=2), dr.line([22,10,10,22], fill=INDIGO, width=2)),
|
|
"color": lambda dr,c: dr.ellipse([8,8,24,24], fill=INDIGO),
|
|
"reload": lambda dr,c: (dr.arc([8,8,24,24], 0, 270, fill=c, width=2), dr.polygon([(24,8),(20,8),(24,12)], fill=c)),
|
|
"eyeOpened": lambda dr,c: (dr.arc([6,10,26,22], 0, 180, fill=c, width=2), dr.arc([6,10,26,22], 180, 360, fill=c, width=2), dr.ellipse([13,13,19,19], fill=c)),
|
|
"eyeClosed": lambda dr,c: (dr.arc([6,10,26,22], 0, 180, fill=c, width=2), dr.arc([6,10,26,22], 180, 360, fill=c, width=2), dr.line([6,22,26,10], fill=RED, width=2)),
|
|
"bookmarks": lambda dr,c: dr.polygon([(8,6),(24,6),(24,26),(16,20),(8,26)], fill=c),
|
|
"addBookmark": lambda dr,c: (dr.polygon([(8,6),(22,6),(22,22),(15,18),(8,22)], outline=c, width=2), dr.line([15,8,15,16], fill=c, width=2), dr.line([11,12,19,12], fill=c, width=2)),
|
|
"captureArea": lambda dr,c: (dr.rectangle([8,8,24,8+2], fill=c), dr.rectangle([8,8,10,24], fill=c), dr.rectangle([22,8,24,24], fill=c), dr.rectangle([8,22,24,24], fill=c)),
|
|
"captureScreen": lambda dr,c: (dr.rounded_rectangle([6,8,26,22], radius=2, outline=c, width=2), dr.line([16,22,16,26], fill=c, width=2), dr.line([10,26,22,26], fill=c, width=2)),
|
|
"captureWindow": lambda dr,c: (dr.rounded_rectangle([6,6,26,24], radius=2, outline=c, width=2), dr.line([6,12,26,12], fill=c, width=2)),
|
|
"mic": lambda dr,c: (dr.rounded_rectangle([13,6,19,18], radius=6, outline=c, width=2), dr.arc([10,12,22,24], 0, 180, fill=c, width=2), dr.line([16,18,16,24], fill=c, width=2)),
|
|
"micOff": lambda dr,c: (dr.rounded_rectangle([13,6,19,18], radius=6, outline=c, width=2), dr.line([8,8,24,24], fill=RED, width=2)),
|
|
"record": lambda dr,c: dr.ellipse([10,10,22,22], fill=RED),
|
|
"stop": lambda dr,c: dr.rectangle([10,10,22,22], fill=c),
|
|
"pause": lambda dr,c: (dr.rectangle([11,8,15,24], fill=c), dr.rectangle([17,8,21,24], fill=c)),
|
|
"tip": lambda dr,c: (dr.ellipse([10,6,22,18], fill=c), dr.polygon([(14,16),(18,16),(16,26)], fill=c)),
|
|
"tools": lambda dr,c: (dr.line([8,24,20,12], fill=c, width=3), dr.ellipse([18,8,26,16], outline=c, width=2)),
|
|
"softwareUpdate": lambda dr,c: (dr.arc([8,8,24,24], 0, 270, fill=c, width=2), dr.polygon([(24,8),(20,8),(24,12)], fill=c), dr.ellipse([14,14,18,18], fill=c)),
|
|
"updates": lambda dr,c: (dr.arc([8,8,24,24], 0, 270, fill=c, width=2), dr.polygon([(24,8),(20,8),(24,12)], fill=c)),
|
|
"warning": lambda dr,c: (dr.polygon([(16,6),(28,26),(4,26)], outline=c, width=2), dr.line([16,12,16,20], fill=c, width=2), dr.ellipse([15,22,17,24], fill=c)),
|
|
"webTrap": lambda dr,c: (dr.ellipse([6,6,26,26], outline=c, width=2), dr.line([6,6,26,26], fill=c, width=1), dr.line([16,6,16,26], fill=c, width=1), dr.line([6,16,26,16], fill=c, width=1)),
|
|
"webTrapEnabled": lambda dr,c: (dr.ellipse([6,6,26,26], outline=INDIGO, width=2), dr.line([6,6,26,26], fill=INDIGO, width=1), dr.line([16,6,16,26], fill=INDIGO, width=1), dr.line([6,16,26,16], fill=INDIGO, width=1)),
|
|
"webUpload": lambda dr,c: (dr.rounded_rectangle([6,12,26,24], radius=2, outline=c, width=2), dr.line([16,6,16,18], fill=c, width=2), dr.polygon([(12,10),(20,10),(16,4)], fill=c)),
|
|
"window": lambda dr,c: dr.rounded_rectangle([6,6,26,24], radius=2, outline=c, width=2),
|
|
"proto": lambda dr,c: dr.rounded_rectangle([8,6,24,26], radius=2, outline=c, width=2),
|
|
"extraTool": lambda dr,c: dr.rounded_rectangle([6,6,26,26], radius=4, outline=c, width=2),
|
|
"stylus": lambda dr,c: dr.rounded_rectangle([6,6,26,26], radius=4, outline=c, width=2),
|
|
"stylusTab": lambda dr,c: dr.rounded_rectangle([6,6,26,26], radius=4, outline=c, width=2),
|
|
"lineTool": lambda dr,c: dr.line([8,24,24,8], fill=c, width=3),
|
|
"eraserTool": lambda dr,c: dr.rounded_rectangle([8,10,24,22], radius=3, fill=c),
|
|
"pageSize": lambda dr,c: (dr.rounded_rectangle([8,6,24,26], radius=2, outline=c, width=2), dr.line([8,16,24,16], fill=c, width=1)),
|
|
"setBackground": lambda dr,c: (dr.rounded_rectangle([8,6,24,26], radius=2, outline=c, width=2), dr.rectangle([10,8,22,14], fill=INDIGO)),
|
|
"removeBackground": lambda dr,c: (dr.rounded_rectangle([8,6,24,26], radius=2, outline=c, width=2), dr.rectangle([10,8,22,14], fill=INDIGO), dr.line([10,8,22,14], fill=RED, width=2)),
|
|
"addToolToLibrary": lambda dr,c: (dr.rounded_rectangle([6,6,26,26], radius=2, outline=c, width=2), dr.line([16,10,16,22], fill=c, width=2), dr.line([10,16,22,16], fill=c, width=2)),
|
|
"addToPage": lambda dr,c: (dr.rounded_rectangle([8,6,24,26], radius=2, outline=c, width=2), dr.line([16,10,16,22], fill=c, width=2), dr.line([12,16,20,16], fill=c, width=2)),
|
|
"addToDocument": lambda dr,c: (dr.rounded_rectangle([8,6,24,26], radius=2, outline=c, width=2), dr.line([16,10,16,22], fill=c, width=2), dr.line([12,16,20,16], fill=c, width=2)),
|
|
"addToLibrary": lambda dr,c: (dr.rounded_rectangle([6,6,26,26], radius=2, outline=c, width=2), dr.line([16,10,16,22], fill=c, width=2), dr.line([12,16,20,16], fill=c, width=2)),
|
|
"addInteractiveToLibrary": lambda dr,c: (dr.rounded_rectangle([6,6,26,26], radius=2, outline=c, width=2), dr.line([16,10,16,22], fill=c, width=2), dr.line([12,16,20,16], fill=c, width=2)),
|
|
"rename": lambda dr,c: (dr.rounded_rectangle([6,10,26,22], radius=2, outline=c, width=2), dr.line([10,16,22,16], fill=c, width=1)),
|
|
"smallerText": lambda dr,c: dr.text((10,8), "a", fill=c, font=font(16)),
|
|
"largeEraser": lambda dr,c: dr.ellipse([4,4,28,28], fill=c),
|
|
"mediumEraser": lambda dr,c: dr.ellipse([8,8,24,24], fill=c),
|
|
"smallEraser": lambda dr,c: dr.ellipse([12,12,20,20], fill=c),
|
|
"largePen": lambda dr,c: dr.ellipse([4,4,28,28], fill=c),
|
|
"mediumPen": lambda dr,c: dr.ellipse([8,8,24,24], fill=c),
|
|
"smallPen": lambda dr,c: dr.ellipse([12,12,20,20], fill=c),
|
|
"plusBlack": lambda dr,c: dr.ellipse([6,6,26,26], fill=DARK),
|
|
"plusBlackOn": lambda dr,c: dr.ellipse([6,6,26,26], fill=INDIGO),
|
|
}
|
|
|
|
def run():
|
|
print("=== Toolbar ===")
|
|
for name, fn in ICONS.items():
|
|
img, dr = new()
|
|
fn(dr, DARK)
|
|
save(f"{name}.png", img)
|
|
|
|
if __name__ == "__main__":
|
|
run()
|