aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Tari <robert@tari.in>2022-01-26 17:03:32 +0100
committerMike Gabriel <mike.gabriel@das-netzwerkteam.de>2022-01-27 09:24:49 +0100
commit2f4a12a03690cd090425e85711d4f928cd042d5f (patch)
treebcc2bf7bb461729f4be922da3c5cd56d9c12661d
parentcba5f9cb9389a9b77edc009f8e629a9b0e3fdf06 (diff)
downloadayatana-indicator-keyboard-2f4a12a03690cd090425e85711d4f928cd042d5f.tar.gz
ayatana-indicator-keyboard-2f4a12a03690cd090425e85711d4f928cd042d5f.tar.bz2
ayatana-indicator-keyboard-2f4a12a03690cd090425e85711d4f928cd042d5f.zip
Merge icon generators + add some tweakability
-rwxr-xr-xcontrib/ayatana-indicator-keyboard-icon-generator-lomiri.py277
-rwxr-xr-xcontrib/ayatana-indicator-keyboard-icon-generator.py56
2 files changed, 44 insertions, 289 deletions
diff --git a/contrib/ayatana-indicator-keyboard-icon-generator-lomiri.py b/contrib/ayatana-indicator-keyboard-icon-generator-lomiri.py
deleted file mode 100755
index 6d69fa5c..00000000
--- a/contrib/ayatana-indicator-keyboard-icon-generator-lomiri.py
+++ /dev/null
@@ -1,277 +0,0 @@
-#!/usr/bin/env python3
-# -*- coding: utf-8 -*-
-
-import gi
-
-gi.require_version('PangoFT2', '1.0')
-
-from gi.repository import PangoFT2, Pango
-from pathlib import Path
-import sys
-import getopt
-import subprocess
-
-m_lLanguages = [
-'Ap', #APL
-'Fa', #Afghani
-'Ak', #Akan
-'Sq', #Albanian
-'Am', #Amharic
-'Ar', #Arabic
-'Hy', #Armenian
-'As', #Asturian
-'At', #Atsina
-'Av', #Avatime
-'Ae', #Avestan
-'Az', #Azerbaijani
-'Bm', #Bambara
-'Bn', #Bangla
-'Ba', #Bashkirian
-'Be', #Belarusian
-'Bl', #Belgian
-'Bb', #Berber
-'Bs', #Bosnian
-'Bi', #Braille
-'Bg', #Bulgarian
-'By', #Burmese
-'Zg', #Zawgyi
-'Cm', #Cameroon
-'Cn', #Canadian
-'Ca', #Catalan
-'Ck', #Cherokee
-'Zh', #Chinese
-'Cu', #Church Slavonic
-'Cv', #Chuvash
-'Cl', #CloGaelach
-'Sx', #Coeur d'Alene Salish
-'Cp', #Coptic
-'Tt', #Tatar
-'Hr', #Croatian
-'Cs', #Czech
-'Da', #Danish
-'Dv', #Dhivehi
-'Dl', #Dutch
-'Dz', #Dzongkha
-'Ed', #Elfdalian
-'En', #English
-'Eo', #Esperanto
-'Et', #Estonian
-'Ek', #EurKEY
-'Ee', #Ewe
-'Fo', #Faroese
-'Ph', #Filipino
-'Fi', #Finnish
-'Fr', #French
-'Fu', #Friulian
-'Ff', #Fula
-'Gh', #Ga
-'Ka', #Georgian
-'De', #German
-'Gr', #Greek
-'Gu', #Gujarati
-'Hp', #Hanyu Pinyin
-'Ha', #Hausa
-'Hw', #Hawaiian
-'He', #Hebrew
-'Hi', #Hindi
-'Hu', #Hungarian
-'Is', #Icelandic
-'Ig', #Igbo
-'Il', #Indian
-'Ip', #Indic
-'Id', #Indonesian
-'Ix', #International Phonetic Alphabet
-'Iu', #Inuktitut
-'Iq', #Iraqi
-'Ga', #Irish
-'It', #Italian
-'Ja', #Japanese
-'Kb', #Kabyle
-'Kx', #Kalmyk
-'Kn', #Kannada
-'Kp', #Kashubian
-'Kk', #Kazakh
-'Km', #Khmer
-'Ki', #Kikuyu
-'Kv', #Komi
-'Ko', #Korean
-'Ku', #Kurdish
-'Kt', #Kutenai
-'Ky', #Kyrgyz
-'Lo', #Lao
-'Lv', #Latvian
-'Lt', #Lithuanian
-'Sb', #Lower Sorbian
-'Mk', #Macedonian
-'Ms', #Malay
-'Ml', #Malayalam
-'Mt', #Maltese
-'Ma', #Manipuri
-'Mi', #Maori
-'Mr', #Marathi
-'Mx', #Mari
-'Mu', #Mmuock
-'Md', #Modi
-'Ro', #Moldavian
-'Mn', #Mongolian
-'Me', #Montenegrin
-'Mb', #Multilingual
-'Nk', #N'Ko
-'Ne', #Nepali
-'Ns', #Saami
-'No', #Norwegian
-'Oc', #Occitan
-'Og', #Ogham
-'Ol', #Ol Chiki
-'Or', #Oriya
-'Os', #Ossetian
-'Rs', #Rusyn
-'Ps', #Pashto
-'Fa', #Persian
-'Pl', #Polish
-'Pt', #Portuguese
-'Pa', #Punjabi
-'Ro', #Romanian
-'Ru', #Russian
-'Sy', #Saisiyat
-'Sf', #Samogitian
-'Sa', #Sanskrit
-'Sp', #Secwepemctsin
-'Sr', #Serbian
-'Hs', #Serbo-Croatian
-'Sj', #Sicilian
-'Sj', #Silesian
-'Sd', #Sindhi
-'Si', #Sinhala
-'Sk', #Slovak
-'Sl', #Slovenian
-'Es', #Spanish
-'Sw', #Swahili
-'Sv', #Swedish
-'Ls', #Syriac
-'Tw', #Taiwanese
-'Tg', #Tajik
-'Ta', #Tamil
-'Tt', #Tatar
-'Te', #Telugu
-'Th', #Thai
-'Bo', #Tibetan
-'Tn', #Tswana
-'Tr', #Turkish
-'Tk', #Turkmen
-'Ud', #Udmurt
-'Ua', #Ugaritic
-'Uk', #Ukrainian
-'Ur', #Urdu
-'Ug', #Uyghur
-'Uz', #Uzbek
-'Vi', #Vietnamese
-'Wo', #Wolof
-'Ya', #Yakut
-'Yo', #Yoruba
-'emoji', #Emoji
-'custom', #Custom
-'00' #Unknown
-]
-
-def printHelp():
-
- print('')
- print('Usage:')
- print('')
- print('ayatana-indicator-keyboard-icon-generator-lomiri -b <border> -c <colour> -f <font> -o <outdir>')
- print('')
- print('<border> The width of the border around the image')
- print(' Defaults to 1')
- print('<colour> The colour of the image')
- print(' Defaults to "#707070"')
- print('<font> The font family')
- print(' Defaults to "Ubuntu"')
- print('<outdir> The output directory')
- print(' Defaults to the current directory')
- print('')
-
-if __name__ == '__main__':
-
- nBorder = 1
- sColour = '#707070'
- sFont = "Ubuntu"
- pOutDir = Path.cwd()
- nFont = 15
- lOpts = []
-
- try:
-
- lOpts = getopt.getopt(sys.argv[1:], 'hp:c:f:o:')[0]
-
- except getopt.GetoptError:
-
- printHelp()
- sys.exit(1)
-
- for sOpt, sArg in lOpts:
-
- if sOpt == '-h':
-
- printHelp()
- sys.exit(0)
-
- elif sOpt == '-b':
-
- nBorder = int(sArg)
-
- elif sOpt == '-c':
-
- sColour = sArg
-
- elif sOpt == '-f':
-
- sFont = sArg
-
- elif sOpt == '-o':
-
- pOutDir = Path(sArg)
-
- pOutDir.mkdir(parents=True, exist_ok=True)
-
- nSize = 24 - nBorder
- fIconX = (24 - nSize) / 2
- fIconY = (24 - nSize) / 2
- pFontMap = PangoFT2.FontMap.new()
- pContext = Pango.FontMap.create_context(pFontMap)
- pFontDescription = Pango.FontDescription.new()
- pFontDescription.set_family(sFont)
- pFontDescription.set_weight(300)
- pFontDescription.set_size(nFont * Pango.SCALE)
- pLayout = Pango.Layout.new(pContext)
- pLayout.set_font_description(pFontDescription)
-
- for sLanguage in m_lLanguages:
-
- sOutPath = pOutDir.joinpath('ayatana-indicator-keyboard-' + sLanguage + '.svg')
- sLanguageText = sLanguage
-
- if sLanguage == '00':
-
- sLanguageText = '?'
-
- elif sLanguage == 'emoji':
-
- sLanguageText = '😐'
-
- elif sLanguage == 'custom':
-
- sLanguageText = '#'
-
- with open(sOutPath, 'w') as pFile:
-
- pLayout.set_text(sLanguageText, -1)
- nLayoutWidth, nLayoutHeight = pLayout.get_size()
- nBaseline = pLayout.get_baseline()
- fLayoutX = (24.0 - (nLayoutWidth / Pango.SCALE)) / 2
- fLayoutY = (24.0 - (nLayoutHeight / Pango.SCALE)) / 2 + (nBaseline / Pango.SCALE)
- pFile.write('<?xml version="1.0" encoding="UTF-8"?><svg version="1.1" width="24" height="24"><rect x="' + str(fIconX) + '" y="' + str(fIconY) + '" width="' + str(nSize) + '" height="' + str(nSize) + '" rx="3" style="stroke:' + sColour + ';stroke-width:1;fill:#00000000;"/><text x="' + str(fLayoutX) + '" y="' + str(fLayoutY) + '" style="font-family:' + sFont + ';font-weight:300;font-size:' + str(nFont) + ';fill:' + sColour + '">' + sLanguageText + '</text></svg>')
-
- subprocess.run('inkscape "' + str(sOutPath) + '" --export-text-to-path --export-plain-svg --export-filename="' + str(sOutPath) + '"', shell=True, check=True);
-
- sys.exit(0)
diff --git a/contrib/ayatana-indicator-keyboard-icon-generator.py b/contrib/ayatana-indicator-keyboard-icon-generator.py
index 586c8229..5d631d33 100755
--- a/contrib/ayatana-indicator-keyboard-icon-generator.py
+++ b/contrib/ayatana-indicator-keyboard-icon-generator.py
@@ -9,6 +9,7 @@ from gi.repository import PangoFT2, Pango
from pathlib import Path
import sys
import getopt
+#import subprocess
m_lLanguages = [
'Ap', #APL
@@ -178,30 +179,34 @@ def printHelp():
print('')
print('Usage:')
print('')
- print('ayatana-indicator-keyboard-icon-generator -p <padding> -c <colour> -f <font> -o <outdir>')
+ print('ayatana-indicator-keyboard-icon-generator -p <padding> -c <colour> -f <font> -n -o <outdir>')
print('')
print('<padding> The padding between the fill and the edges of the image')
- print(' Defaults to 0 pixels')
+ print(' Defaults to 0.8')
print('<colour> The colour of the fill')
print(' Defaults to "#ffffff"')
print('<font> The font family')
print(' Defaults to "Sans Regular"')
+ print('-n Do not fill the icon, draw the border only')
+ print(' Not used by default')
print('<outdir> The output directory')
print(' Defaults to the current directory')
print('')
if __name__ == '__main__':
- nPadding = 0
+ fBorder = 0.8
sColour = '#ffffff'
sFont = "Sans Regular"
pOutDir = Path.cwd()
nFont = 15
+ nWeight = 500
+ bNoFill = False
lOpts = []
try:
- lOpts = getopt.getopt(sys.argv[1:], 'hp:c:f:o:')[0]
+ lOpts = getopt.getopt(sys.argv[1:], 'hp:c:f:no:')[0]
except getopt.GetoptError:
@@ -217,7 +222,7 @@ if __name__ == '__main__':
elif sOpt == '-p':
- nPadding = int(sArg)
+ fBorder = float(sArg)
elif sOpt == '-c':
@@ -227,20 +232,39 @@ if __name__ == '__main__':
sFont = sArg
+ elif sOpt == '-n':
+
+ bNoFill = True
+
elif sOpt == '-o':
pOutDir = Path(sArg)
pOutDir.mkdir(parents=True, exist_ok=True)
- nSize = 24 - (2 * nPadding)
- fIconX = (24 - nSize) / 2
- fIconY = (24 - nSize) / 2
+ fRx = 2.4
+
+ if fRx == 0:
+
+ fRx = 3.0
+
+ fSize = 24.0 - (fBorder * 2)
+ fIconX = (24.0 - fSize) / 2
+ fIconY = (24.0 - fSize) / 2
+
+ if bNoFill == True:
+
+ nWeight = 300
+ nFont = 13
+ fSize -= 0.8
+ fIconX = fBorder + 0.4
+ fIconY = fBorder + 0.4
+
pFontMap = PangoFT2.FontMap.new()
pContext = Pango.FontMap.create_context(pFontMap)
pFontDescription = Pango.FontDescription.new()
pFontDescription.set_family(sFont)
- pFontDescription.set_weight(500)
+ pFontDescription.set_weight(nWeight)
pFontDescription.set_size(nFont * Pango.SCALE)
pLayout = Pango.Layout.new(pContext)
pLayout.set_font_description(pFontDescription)
@@ -266,8 +290,16 @@ if __name__ == '__main__':
pLayout.set_text(sLanguage, -1)
nLayoutWidth, nLayoutHeight = pLayout.get_size()
nBaseline = pLayout.get_baseline()
- fLayoutX = (24.0 - (nLayoutWidth / Pango.SCALE)) / 2
- fLayoutY = (24.0 - (nLayoutHeight / Pango.SCALE)) / 2 + (nBaseline / Pango.SCALE)
- pFile.write('<?xml version="1.0" encoding="UTF-8"?><svg version="1.1" width="24" height="24"><defs><mask id="m"><rect x="0" y="0" width="24" height="24" style="fill:white"/><text x="' + str(fLayoutX) + '" y="' + str(fLayoutY) + '" style="font-family:' + sFont + ';font-weight:500;font-size:' + str(nFont) + ';fill:black">' + sLanguage + '</text></mask></defs><rect x="' + str(fIconX) + '" y="' + str(fIconY) + '" width="' + str(nSize) + '" height="' + str(nSize) + '" rx="3" mask="url(#m)" style="fill:' + sColour + '"/></svg>')
+ fLayoutX = (24.0 - (nLayoutWidth / Pango.SCALE)) / 2 + (fBorder * 0.1)
+ fLayoutY = (24.0 - (nLayoutHeight / Pango.SCALE)) / 2 + (nBaseline / Pango.SCALE) + (fBorder * 0.1)
+
+ if bNoFill == False:
+
+ pFile.write('<?xml version="1.0" encoding="UTF-8"?><svg version="1.1" width="24" height="24"><defs><mask id="m"><rect x="0" y="0" width="24" height="24" style="fill:white"/><text x="' + str(fLayoutX) + '" y="' + str(fLayoutY) + '" style="font-family:' + sFont + ';font-weight:' + str(nWeight) + ';font-size:' + str(nFont) + ';fill:black">' + sLanguage + '</text></mask></defs><rect x="' + str(fIconX) + '" y="' + str(fIconY) + '" width="' + str(fSize) + '" height="' + str(fSize) + '" rx="' + str(fRx) + '" mask="url(#m)" style="fill:' + sColour + '"/></svg>')
+
+ else:
+
+ pFile.write('<?xml version="1.0" encoding="UTF-8"?><svg version="1.1" width="24" height="24"><rect x="' + str(fIconX) + '" y="' + str(fIconY) + '" width="' + str(fSize) + '" height="' + str(fSize) + '" rx="' + str(fRx) + '" style="stroke:' + sColour + ';stroke-width:0.8;fill:none;"/><text x="' + str(fLayoutX) + '" y="' + str(fLayoutY) + '" style="font-family:' + sFont + ';font-weight:' + str(nWeight) + ';font-size:' + str(nFont) + ';fill:' + sColour + '">' + sLanguage + '</text></svg>')
+ #subprocess.run('inkscape "' + str(sOutPath) + '" --export-text-to-path --export-plain-svg --export-filename="' + str(sOutPath) + '"', shell=True, check=True);
sys.exit(0)