diff options
-rw-r--r-- | documentation_fr.md | 12 | ||||
-rw-r--r-- | fonts/Symbola.ttf | bin | 2188952 -> 0 bytes | |||
-rw-r--r-- | fonts/Ubuntu-B.ttf | bin | 333612 -> 0 bytes | |||
-rw-r--r-- | fonts/Ubuntu-Regular.ttf | bin | 353824 -> 0 bytes | |||
-rw-r--r-- | helpers/__init__.py | 34 | ||||
-rw-r--r-- | helpers/sysfont.py | 224 | ||||
-rw-r--r-- | music_sampler.kv | 38 | ||||
-rw-r--r-- | music_sampler.py | 2 | ||||
-rw-r--r-- | music_sampler.spec | 25 |
9 files changed, 310 insertions, 25 deletions
diff --git a/documentation_fr.md b/documentation_fr.md index 622b054..8ba058d 100644 --- a/documentation_fr.md +++ b/documentation_fr.md | |||
@@ -8,14 +8,15 @@ Music Sampler est un lecteur de musique qui permet de pré-programmer des transi | |||
8 | 8 | ||
9 | ## Pré-requis et installation | 9 | ## Pré-requis et installation |
10 | 10 | ||
11 | Il faut avoir ffmpeg d'installé. Pour cela, il faut installer le paquet `libav-tools` : | 11 | - Il faut avoir ffmpeg d'installé. Pour cela, il faut installer le paquet `libav-tools` : |
12 | 12 | ||
13 | :::bash | 13 | ``` |
14 | sudo apt-get install libav-tools | 14 | sudo apt-get install libav-tools |
15 | ``` | ||
15 | 16 | ||
16 | Si vous utilisez la version compilée de Music Sampler, il n'y a rien d'autre à installer. | 17 | Si vous utilisez la version compilée de Music Sampler, il n'y a rien d'autre à installer. |
17 | 18 | ||
18 | Pour utiliser les sources directement, les modules suivants sont requis: | 19 | - Pour utiliser les sources directement, les modules suivants sont requis: |
19 | 20 | ||
20 | | module | version minimale | commentaire | | 21 | | module | version minimale | commentaire | |
21 | | ----------- | ---------------- | -------------------------------- | | 22 | | ----------- | ---------------- | -------------------------------- | |
@@ -28,6 +29,11 @@ Pour utiliser les sources directement, les modules suivants sont requis: | |||
28 | | transitions | 0.4.1 | | | 29 | | transitions | 0.4.1 | | |
29 | | PyYAML | 3.11 | | | 30 | | PyYAML | 3.11 | | |
30 | 31 | ||
32 | - Le programme utilise les polices "Symbola" et "Ubuntu" (Regular / Bold), qui doivent être disponibles. | ||
33 | |||
34 | ``` | ||
35 | sudo apt-get install ttf-ancient-fonts ttf-ubuntu-font-family | ||
36 | ``` | ||
31 | 37 | ||
32 | ## Version compilée | 38 | ## Version compilée |
33 | 39 | ||
diff --git a/fonts/Symbola.ttf b/fonts/Symbola.ttf deleted file mode 100644 index 51d9a88..0000000 --- a/fonts/Symbola.ttf +++ /dev/null | |||
Binary files differ | |||
diff --git a/fonts/Ubuntu-B.ttf b/fonts/Ubuntu-B.ttf deleted file mode 100644 index b173da2..0000000 --- a/fonts/Ubuntu-B.ttf +++ /dev/null | |||
Binary files differ | |||
diff --git a/fonts/Ubuntu-Regular.ttf b/fonts/Ubuntu-Regular.ttf deleted file mode 100644 index 45a038b..0000000 --- a/fonts/Ubuntu-Regular.ttf +++ /dev/null | |||
Binary files differ | |||
diff --git a/helpers/__init__.py b/helpers/__init__.py index f1a968b..4827e6c 100644 --- a/helpers/__init__.py +++ b/helpers/__init__.py | |||
@@ -6,9 +6,43 @@ import math | |||
6 | import sounddevice as sd | 6 | import sounddevice as sd |
7 | import logging | 7 | import logging |
8 | 8 | ||
9 | from . import sysfont | ||
10 | |||
9 | class Config: | 11 | class Config: |
10 | pass | 12 | pass |
11 | 13 | ||
14 | def find_font(name, style=sysfont.STYLE_NONE): | ||
15 | if getattr(sys, 'frozen', False): | ||
16 | font = sys._MEIPASS + "/fonts/{}_{}.ttf".format(name, style) | ||
17 | else: | ||
18 | font = sysfont.get_font(name, style=style) | ||
19 | if font is not None: | ||
20 | font = font[4] | ||
21 | return font | ||
22 | |||
23 | def register_fonts(): | ||
24 | from kivy.core.text import LabelBase | ||
25 | |||
26 | ubuntu_regular = find_font("Ubuntu", style=sysfont.STYLE_NORMAL) | ||
27 | ubuntu_bold = find_font("Ubuntu", style=sysfont.STYLE_BOLD) | ||
28 | symbola = find_font("Symbola") | ||
29 | |||
30 | if ubuntu_regular is None: | ||
31 | error_print("Font Ubuntu regular could not be found, please install it.") | ||
32 | sys.exit() | ||
33 | if symbola is None: | ||
34 | error_print("Font Symbola could not be found, please install it.") | ||
35 | sys.exit() | ||
36 | if ubuntu_bold is None: | ||
37 | warn_print("Font Ubuntu Bold could not be found.") | ||
38 | |||
39 | LabelBase.register(name="Ubuntu", | ||
40 | fn_regular=ubuntu_regular, | ||
41 | fn_bold=ubuntu_bold) | ||
42 | LabelBase.register(name="Symbola", | ||
43 | fn_regular=symbola) | ||
44 | |||
45 | |||
12 | def path(): | 46 | def path(): |
13 | if getattr(sys, 'frozen', False): | 47 | if getattr(sys, 'frozen', False): |
14 | return sys._MEIPASS + "/" | 48 | return sys._MEIPASS + "/" |
diff --git a/helpers/sysfont.py b/helpers/sysfont.py new file mode 100644 index 0000000..f47693e --- /dev/null +++ b/helpers/sysfont.py | |||
@@ -0,0 +1,224 @@ | |||
1 | # This file was imported from | ||
2 | # https://bitbucket.org/marcusva/python-utils/overview | ||
3 | # And slightly adapted | ||
4 | |||
5 | """OS-specific font detection.""" | ||
6 | import os | ||
7 | import sys | ||
8 | from subprocess import Popen, PIPE | ||
9 | |||
10 | if sys.platform in ("win32", "cli"): | ||
11 | import winreg | ||
12 | |||
13 | __all__ = ["STYLE_NORMAL", "STYLE_BOLD", "STYLE_ITALIC", "STYLE_LIGHT", | ||
14 | "init", "list_fonts", "get_fonts", "get_font" | ||
15 | ] | ||
16 | |||
17 | # Font cache entries: | ||
18 | # { family : [..., | ||
19 | # (name, styles, fonttype, filename) | ||
20 | # ... | ||
21 | # ] | ||
22 | # } | ||
23 | __FONTCACHE = None | ||
24 | |||
25 | |||
26 | STYLE_NONE = 0x00 | ||
27 | STYLE_NORMAL = 0x01 | ||
28 | STYLE_BOLD = 0x02 | ||
29 | STYLE_ITALIC = 0x04 | ||
30 | STYLE_LIGHT = 0x08 | ||
31 | STYLE_MEDIUM = 0x10 | ||
32 | |||
33 | def _add_font(family, name, styles, fonttype, filename): | ||
34 | """Adds a font to the internal font cache.""" | ||
35 | global __FONTCACHE | ||
36 | |||
37 | if family not in __FONTCACHE: | ||
38 | __FONTCACHE[family] = [] | ||
39 | __FONTCACHE[family].append((name, styles, fonttype, filename)) | ||
40 | |||
41 | |||
42 | def _cache_fonts_win32(): | ||
43 | """Caches fonts on a Win32 platform.""" | ||
44 | key = "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Fonts" | ||
45 | regfonts = [] | ||
46 | try: | ||
47 | with winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, key) as fontkey: | ||
48 | idx = 0 | ||
49 | enumval = winreg.EnumValue | ||
50 | rappend = regfonts.append | ||
51 | while True: | ||
52 | rappend(enumval(fontkey, idx)[:2]) | ||
53 | idx += 1 | ||
54 | except WindowsError: | ||
55 | pass | ||
56 | |||
57 | # TODO: integrate alias handling for fonts within the registry. | ||
58 | # TODO: Scan and index fonts from %SystemRoot%\\Fonts that are not in the | ||
59 | # registry | ||
60 | |||
61 | # Received all fonts from the registry. | ||
62 | for name, filename in regfonts: | ||
63 | fonttype = os.path.splitext(filename)[1][1:].lower() | ||
64 | if name.endswith("(TrueType)"): | ||
65 | name = name[:-10].strip() | ||
66 | if name.endswith("(All Res)"): | ||
67 | name = name[:-9].strip() | ||
68 | style = STYLE_NORMAL | ||
69 | if name.find(" Bold") >= 0: | ||
70 | style |= STYLE_BOLD | ||
71 | if name.find(" Italic") >= 0 or name.find(" Oblique") >= 0: | ||
72 | style |= STYLE_ITALIC | ||
73 | |||
74 | family = name | ||
75 | for rm in ("Bold", "Italic", "Oblique"): | ||
76 | family = family.replace(rm, "") | ||
77 | family = family.lower().strip() | ||
78 | |||
79 | fontpath = os.environ.get("SystemRoot", "C:\\Windows") | ||
80 | fontpath = os.path.join(fontpath, "Fonts") | ||
81 | if filename.find("\\") == -1: | ||
82 | # No path delimiter is given; we assume it to be a font in | ||
83 | # %SystemRoot%\Fonts | ||
84 | filename = os.path.join(fontpath, filename) | ||
85 | _add_font(family, name, style, fonttype, filename) | ||
86 | |||
87 | |||
88 | def _cache_fonts_darwin(): | ||
89 | """Caches fonts on Mac OS.""" | ||
90 | raise NotImplementedError("Mac OS X support is not given yet") | ||
91 | |||
92 | |||
93 | def _cache_fonts_fontconfig(): | ||
94 | """Caches font on POSIX-alike platforms.""" | ||
95 | try: | ||
96 | command = "fc-list : file family style fullname fullnamelang" | ||
97 | proc = Popen(command, stdout=PIPE, shell=True, stderr=PIPE) | ||
98 | pout = proc.communicate()[0] | ||
99 | output = pout.decode("utf-8") | ||
100 | except OSError: | ||
101 | return | ||
102 | |||
103 | for entry in output.split(os.linesep): | ||
104 | if entry.strip() == "": | ||
105 | continue | ||
106 | values = entry.split(":") | ||
107 | filename = values[0] | ||
108 | |||
109 | # get the font type | ||
110 | fname, fonttype = os.path.splitext(filename) | ||
111 | if fonttype == ".gz": | ||
112 | fonttype = os.path.splitext(fname)[1][1:].lower() | ||
113 | else: | ||
114 | fonttype = fonttype.lstrip(".").lower() | ||
115 | |||
116 | # get the font name | ||
117 | name = None | ||
118 | if len(values) > 3: | ||
119 | fullnames, fullnamelangs = values[3:] | ||
120 | langs = fullnamelangs.split(",") | ||
121 | try: | ||
122 | offset = langs.index("fullnamelang=en") | ||
123 | except ValueError: | ||
124 | offset = -1 | ||
125 | if offset == -1: | ||
126 | try: | ||
127 | offset = langs.index("en") | ||
128 | except ValueError: | ||
129 | offset = -1 | ||
130 | if offset != -1: | ||
131 | # got an english name, use that one | ||
132 | name = fullnames.split(",")[offset] | ||
133 | if name.startswith("fullname="): | ||
134 | name = name[9:] | ||
135 | if name is None: | ||
136 | if fname.endswith(".pcf") or fname.endswith(".bdf"): | ||
137 | name = os.path.basename(fname[:-4]) | ||
138 | else: | ||
139 | name = os.path.basename(fname) | ||
140 | name = name.lower() | ||
141 | |||
142 | # family and styles | ||
143 | family = values[1].strip().lower() | ||
144 | stylevals = values[2].strip() | ||
145 | style = STYLE_NONE | ||
146 | |||
147 | if stylevals.find("Bold") >= 0: | ||
148 | style |= STYLE_BOLD | ||
149 | if stylevals.find("Light") >= 0: | ||
150 | style |= STYLE_LIGHT | ||
151 | if stylevals.find("Italic") >= 0 or stylevals.find("Oblique") >= 0: | ||
152 | style |= STYLE_ITALIC | ||
153 | if stylevals.find("Medium") >= 0: | ||
154 | style |= STYLE_MEDIUM | ||
155 | if style == STYLE_NONE: | ||
156 | style = STYLE_NORMAL | ||
157 | _add_font(family, name, style, fonttype, filename) | ||
158 | |||
159 | |||
160 | def init(): | ||
161 | """Initialises the internal font cache. | ||
162 | |||
163 | It does not need to be called explicitly. | ||
164 | """ | ||
165 | global __FONTCACHE | ||
166 | if __FONTCACHE is not None: | ||
167 | return | ||
168 | __FONTCACHE = {} | ||
169 | if sys.platform in ("win32", "cli"): | ||
170 | _cache_fonts_win32() | ||
171 | elif sys.platform == "darwin": | ||
172 | _cache_fonts_darwin() | ||
173 | else: | ||
174 | _cache_fonts_fontconfig() | ||
175 | |||
176 | |||
177 | def list_fonts(): | ||
178 | """Returns an iterator over the cached fonts.""" | ||
179 | if __FONTCACHE is None: | ||
180 | init() | ||
181 | if len(__FONTCACHE) == 0: | ||
182 | yield None | ||
183 | for family, entries in __FONTCACHE.items(): | ||
184 | for fname, styles, fonttype, filename in entries: | ||
185 | yield (family, fname, styles, fonttype, filename) | ||
186 | |||
187 | |||
188 | def get_fonts(name, style=STYLE_NONE, ftype=None): | ||
189 | """Retrieves all fonts matching the given family or font name.""" | ||
190 | if __FONTCACHE is None: | ||
191 | init() | ||
192 | if len(__FONTCACHE) == 0: | ||
193 | return None | ||
194 | |||
195 | results = [] | ||
196 | rappend = results.append | ||
197 | |||
198 | name = name.lower() | ||
199 | if ftype: | ||
200 | ftype = ftype.lower() | ||
201 | |||
202 | fonts = __FONTCACHE.get(name, []) | ||
203 | for fname, fstyles, fonttype, filename in fonts: | ||
204 | if ftype and fonttype != ftype: | ||
205 | # ignore font filetype mismatches | ||
206 | continue | ||
207 | if style == STYLE_NONE or fstyles == style: | ||
208 | rappend((name, fname, fstyles, fonttype, filename)) | ||
209 | |||
210 | for family, fonts in __FONTCACHE.items(): | ||
211 | for fname, fstyles, fonttype, filename in fonts: | ||
212 | if fname.lower() == name and filename not in results: | ||
213 | rappend((family, fname, fstyles, fonttype, filename)) | ||
214 | return results | ||
215 | |||
216 | |||
217 | def get_font(name, style=STYLE_NONE, ftype=None): | ||
218 | """Retrieves the best matching font file for the given name and | ||
219 | criteria. | ||
220 | """ | ||
221 | retvals = get_fonts(name, style, ftype) | ||
222 | if len(retvals) > 0: | ||
223 | return retvals[0] | ||
224 | return None | ||
diff --git a/music_sampler.kv b/music_sampler.kv index fa38627..a18eb4e 100644 --- a/music_sampler.kv +++ b/music_sampler.kv | |||
@@ -40,7 +40,8 @@ | |||
40 | width: self.line_width | 40 | width: self.line_width |
41 | Label: | 41 | Label: |
42 | id: key_label | 42 | id: key_label |
43 | font_name: h.path() + "fonts/Ubuntu-B.ttf" | 43 | font_name: "Ubuntu" |
44 | bold: True | ||
44 | font_size: math.ceil(2 * math.sqrt(self.parent.parent.key_size)) | 45 | font_size: math.ceil(2 * math.sqrt(self.parent.parent.key_size)) |
45 | color: 0, 0, 0, 1 | 46 | color: 0, 0, 0, 1 |
46 | text: self.parent.key_sym | 47 | text: self.parent.key_sym |
@@ -52,7 +53,7 @@ | |||
52 | center_y: self.parent.y + self.parent.height - self.texture_size[1] /2 - 5 | 53 | center_y: self.parent.y + self.parent.height - self.texture_size[1] /2 - 5 |
53 | Label: | 54 | Label: |
54 | id: key_description_title | 55 | id: key_description_title |
55 | font_name: h.path() + "fonts/Ubuntu-Regular.ttf" | 56 | font_name: "Ubuntu" |
56 | font_size: math.ceil(2 * math.sqrt(self.parent.parent.key_size / 2)) | 57 | font_size: math.ceil(2 * math.sqrt(self.parent.parent.key_size / 2)) |
57 | color: 0, 0, 0, 1 | 58 | color: 0, 0, 0, 1 |
58 | text: self.parent.description_title | 59 | text: self.parent.description_title |
@@ -63,7 +64,7 @@ | |||
63 | center_y: self.parent.y + self.parent.height - self.texture_size[1] /2 - 5 | 64 | center_y: self.parent.y + self.parent.height - self.texture_size[1] /2 - 5 |
64 | Label: | 65 | Label: |
65 | id: key_description | 66 | id: key_description |
66 | font_name: h.path() + "fonts/Ubuntu-Regular.ttf" | 67 | font_name: "Ubuntu" |
67 | font_size: math.ceil(2 * math.sqrt(self.parent.parent.key_size / 2)) | 68 | font_size: math.ceil(2 * math.sqrt(self.parent.parent.key_size / 2)) |
68 | color: 0, 0, 0, 1 | 69 | color: 0, 0, 0, 1 |
69 | text: "\n".join(self.parent.description) | 70 | text: "\n".join(self.parent.description) |
@@ -114,7 +115,7 @@ | |||
114 | ubuntu_bold_line_height: self.min_height / max(mock_ubuntu_bold.height,1) | 115 | ubuntu_bold_line_height: self.min_height / max(mock_ubuntu_bold.height,1) |
115 | Label: | 116 | Label: |
116 | id: mock_symbola | 117 | id: mock_symbola |
117 | font_name: h.path() + "fonts/Symbola.ttf" | 118 | font_name: "Symbola" |
118 | font_size: math.ceil(2 * math.sqrt(self.parent.key_size or 10)) | 119 | font_size: math.ceil(2 * math.sqrt(self.parent.key_size or 10)) |
119 | color: 0, 0, 0, 0 | 120 | color: 0, 0, 0, 0 |
120 | text: "A" | 121 | text: "A" |
@@ -123,7 +124,7 @@ | |||
123 | size: self.texture_size | 124 | size: self.texture_size |
124 | Label: | 125 | Label: |
125 | id: mock_ubuntu_regular | 126 | id: mock_ubuntu_regular |
126 | font_name: h.path() + "fonts/Ubuntu-Regular.ttf" | 127 | font_name: "Ubuntu" |
127 | font_size: math.ceil(2 * math.sqrt(self.parent.key_size or 10)) | 128 | font_size: math.ceil(2 * math.sqrt(self.parent.key_size or 10)) |
128 | color: 0, 0, 0, 0 | 129 | color: 0, 0, 0, 0 |
129 | text: "A" | 130 | text: "A" |
@@ -132,7 +133,8 @@ | |||
132 | size: self.texture_size | 133 | size: self.texture_size |
133 | Label: | 134 | Label: |
134 | id: mock_ubuntu_bold | 135 | id: mock_ubuntu_bold |
135 | font_name: h.path() + "fonts/Ubuntu-B.ttf" | 136 | font_name: "Ubuntu" |
137 | bold: True | ||
136 | font_size: math.ceil(2 * math.sqrt(self.parent.key_size or 10)) | 138 | font_size: math.ceil(2 * math.sqrt(self.parent.key_size or 10)) |
137 | color: 0, 0, 0, 0 | 139 | color: 0, 0, 0, 0 |
138 | text: "A" | 140 | text: "A" |
@@ -172,7 +174,8 @@ | |||
172 | size: self.width, self.height | 174 | size: self.width, self.height |
173 | Label: | 175 | Label: |
174 | id: key_list_first | 176 | id: key_list_first |
175 | font_name: h.path() + "fonts/Ubuntu-B.ttf" | 177 | font_name: "Ubuntu" |
178 | bold: True | ||
176 | font_size: math.ceil(2 * math.sqrt(self.parent.parent.key_size or 10)) | 179 | font_size: math.ceil(2 * math.sqrt(self.parent.parent.key_size or 10)) |
177 | color: 0, 0, 0, 1 | 180 | color: 0, 0, 0, 1 |
178 | text: self.parent.first_key | 181 | text: self.parent.first_key |
@@ -184,7 +187,7 @@ | |||
184 | pos: 0, self.parent.height - self.height | 187 | pos: 0, self.parent.height - self.height |
185 | Label: | 188 | Label: |
186 | id: key_list_second | 189 | id: key_list_second |
187 | font_name: h.path() + "fonts/Ubuntu-Regular.ttf" | 190 | font_name: "Ubuntu" |
188 | font_size: math.ceil(2 * math.sqrt(self.parent.parent.key_size or 10)) | 191 | font_size: math.ceil(2 * math.sqrt(self.parent.parent.key_size or 10)) |
189 | color: 0, 0, 0, 1 | 192 | color: 0, 0, 0, 1 |
190 | text: self.parent.second_key | 193 | text: self.parent.second_key |
@@ -196,7 +199,7 @@ | |||
196 | pos: 0, self.parent.height - key_list_first.height - self.height | 199 | pos: 0, self.parent.height - key_list_first.height - self.height |
197 | Label: | 200 | Label: |
198 | id: key_list_third | 201 | id: key_list_third |
199 | font_name: h.path() + "fonts/Ubuntu-Regular.ttf" | 202 | font_name: "Ubuntu" |
200 | font_size: math.ceil(2 * math.sqrt(self.parent.parent.key_size or 10)) | 203 | font_size: math.ceil(2 * math.sqrt(self.parent.parent.key_size or 10)) |
201 | color: 0, 0, 0, 0.75 | 204 | color: 0, 0, 0, 0.75 |
202 | text: self.parent.third_key | 205 | text: self.parent.third_key |
@@ -208,7 +211,7 @@ | |||
208 | pos: 0, self.parent.height - key_list_first.height - key_list_second.height - self.height | 211 | pos: 0, self.parent.height - key_list_first.height - key_list_second.height - self.height |
209 | Label: | 212 | Label: |
210 | id: key_list_rest | 213 | id: key_list_rest |
211 | font_name: h.path() + "fonts/Ubuntu-Regular.ttf" | 214 | font_name: "Ubuntu" |
212 | font_size: math.ceil(2 * math.sqrt(self.parent.parent.key_size or 10)) | 215 | font_size: math.ceil(2 * math.sqrt(self.parent.parent.key_size or 10)) |
213 | color: 0, 0, 0, 0.5 | 216 | color: 0, 0, 0, 0.5 |
214 | text: "\n".join(self.parent.keylist[3:]) | 217 | text: "\n".join(self.parent.keylist[3:]) |
@@ -230,7 +233,8 @@ | |||
230 | 233 | ||
231 | Label: | 234 | Label: |
232 | id: action_list_title | 235 | id: action_list_title |
233 | font_name: h.path() + "fonts/Ubuntu-B.ttf" | 236 | font_name: "Ubuntu" |
237 | bold: True | ||
234 | font_size: math.ceil(2 * math.sqrt(self.parent.parent.key_size or 10)) | 238 | font_size: math.ceil(2 * math.sqrt(self.parent.parent.key_size or 10)) |
235 | color: 0, 0, 0, 1 | 239 | color: 0, 0, 0, 1 |
236 | text: self.parent.action_title | 240 | text: self.parent.action_title |
@@ -241,7 +245,7 @@ | |||
241 | size: self.texture_size[0], self.parent.height | 245 | size: self.texture_size[0], self.parent.height |
242 | Label: | 246 | Label: |
243 | id: action_list_icons | 247 | id: action_list_icons |
244 | font_name: h.path() + "fonts/Symbola.ttf" | 248 | font_name: "Symbola" |
245 | font_size: math.ceil(2 * math.sqrt(self.parent.parent.key_size or 10)) | 249 | font_size: math.ceil(2 * math.sqrt(self.parent.parent.key_size or 10)) |
246 | line_height: self.parent.parent.symbola_line_height or 1 | 250 | line_height: self.parent.parent.symbola_line_height or 1 |
247 | color: 0, 0, 0, 1 | 251 | color: 0, 0, 0, 1 |
@@ -253,7 +257,7 @@ | |||
253 | size: self.texture_size[0], self.parent.height - 3 * self.line_height * self.font_size | 257 | size: self.texture_size[0], self.parent.height - 3 * self.line_height * self.font_size |
254 | Label: | 258 | Label: |
255 | id: action_list_names | 259 | id: action_list_names |
256 | font_name: h.path() + "fonts/Ubuntu-Regular.ttf" | 260 | font_name: "Ubuntu" |
257 | font_size: math.ceil(2 * math.sqrt(self.parent.parent.key_size or 10)) | 261 | font_size: math.ceil(2 * math.sqrt(self.parent.parent.key_size or 10)) |
258 | line_height: self.parent.parent.ubuntu_regular_line_height or 1 | 262 | line_height: self.parent.parent.ubuntu_regular_line_height or 1 |
259 | color: 0, 0, 0, 1 | 263 | color: 0, 0, 0, 1 |
@@ -276,7 +280,7 @@ | |||
276 | 280 | ||
277 | Label: | 281 | Label: |
278 | id: playlist_icons | 282 | id: playlist_icons |
279 | font_name: h.path() + "fonts/Symbola.ttf" | 283 | font_name: "Symbola" |
280 | font_size: math.ceil(2 * math.sqrt(self.parent.parent.key_size or 10)) | 284 | font_size: math.ceil(2 * math.sqrt(self.parent.parent.key_size or 10)) |
281 | line_height: self.parent.parent.symbola_line_height or 1 | 285 | line_height: self.parent.parent.symbola_line_height or 1 |
282 | color: 0, 0, 0, 1 | 286 | color: 0, 0, 0, 1 |
@@ -288,7 +292,7 @@ | |||
288 | size: self.texture_size[0], self.parent.height | 292 | size: self.texture_size[0], self.parent.height |
289 | Label: | 293 | Label: |
290 | id: playlist_names | 294 | id: playlist_names |
291 | font_name: h.path() + "fonts/Ubuntu-Regular.ttf" # FIXME: Mettre en gras quand c'est en cours | 295 | font_name: "Ubuntu" # FIXME: Mettre en gras quand c'est en cours |
292 | line_height: self.parent.parent.ubuntu_regular_line_height or 1 | 296 | line_height: self.parent.parent.ubuntu_regular_line_height or 1 |
293 | font_size: math.ceil(2 * math.sqrt(self.parent.parent.key_size or 10)) | 297 | font_size: math.ceil(2 * math.sqrt(self.parent.parent.key_size or 10)) |
294 | color: 0, 0, 0, 1 | 298 | color: 0, 0, 0, 1 |
@@ -307,7 +311,7 @@ | |||
307 | pos: self.pos | 311 | pos: self.pos |
308 | size: self.width, self.height | 312 | size: self.width, self.height |
309 | id: playlist_times | 313 | id: playlist_times |
310 | font_name: h.path() + "fonts/Ubuntu-Regular.ttf" | 314 | font_name: "Ubuntu" |
311 | line_height: self.parent.parent.ubuntu_regular_line_height or 1 | 315 | line_height: self.parent.parent.ubuntu_regular_line_height or 1 |
312 | font_size: math.ceil(2 * math.sqrt(self.parent.parent.key_size or 10)) | 316 | font_size: math.ceil(2 * math.sqrt(self.parent.parent.key_size or 10)) |
313 | color: 0, 0, 0, 1 | 317 | color: 0, 0, 0, 1 |
@@ -337,7 +341,7 @@ | |||
337 | pos: self.width - self.key_size / 2, self.height - self.key_size /2 | 341 | pos: self.width - self.key_size / 2, self.height - self.key_size /2 |
338 | size: self.key_size / 3, self.key_size / 3 | 342 | size: self.key_size / 3, self.key_size / 3 |
339 | Label: | 343 | Label: |
340 | font_name: h.path() + "fonts/Ubuntu-Regular.ttf" | 344 | font_name: "Ubuntu" |
341 | font_size: math.ceil(2 * math.sqrt(self.parent.key_size or 10)) | 345 | font_size: math.ceil(2 * math.sqrt(self.parent.key_size or 10)) |
342 | color: 0, 0, 0, 1 | 346 | color: 0, 0, 0, 1 |
343 | text: "volume: {}%".format(self.parent.master_volume) | 347 | text: "volume: {}%".format(self.parent.master_volume) |
diff --git a/music_sampler.py b/music_sampler.py index c10b634..f5df2bf 100644 --- a/music_sampler.py +++ b/music_sampler.py | |||
@@ -14,6 +14,8 @@ from kivy.lang import Builder | |||
14 | from helpers.key import Key | 14 | from helpers.key import Key |
15 | from helpers.mapping import Mapping | 15 | from helpers.mapping import Mapping |
16 | 16 | ||
17 | helpers.register_fonts() | ||
18 | |||
17 | class KeyList(RelativeLayout): | 19 | class KeyList(RelativeLayout): |
18 | keylist = ListProperty([]) | 20 | keylist = ListProperty([]) |
19 | first_key = StringProperty("") | 21 | first_key = StringProperty("") |
diff --git a/music_sampler.spec b/music_sampler.spec index 591a6cf..0d99dca 100644 --- a/music_sampler.spec +++ b/music_sampler.spec | |||
@@ -3,6 +3,11 @@ import os | |||
3 | from kivy.tools.packaging.pyinstaller_hooks import get_deps_minimal,\ | 3 | from kivy.tools.packaging.pyinstaller_hooks import get_deps_minimal,\ |
4 | hookspath, runtime_hooks | 4 | hookspath, runtime_hooks |
5 | 5 | ||
6 | import importlib.machinery | ||
7 | sysfont = importlib.machinery\ | ||
8 | .SourceFileLoader('sysfont', os.getcwd() + '/helpers/sysfont.py') \ | ||
9 | .load_module() | ||
10 | |||
6 | excluded_and_hidden_modules = get_deps_minimal( | 11 | excluded_and_hidden_modules = get_deps_minimal( |
7 | video=None, | 12 | video=None, |
8 | camera=None, | 13 | camera=None, |
@@ -22,16 +27,26 @@ pyinstaller_file = open(".pyinstaller_commit", "w") | |||
22 | pyinstaller_file.write(commit_message) | 27 | pyinstaller_file.write(commit_message) |
23 | pyinstaller_file.close() | 28 | pyinstaller_file.close() |
24 | 29 | ||
30 | data = [ | ||
31 | ('music_sampler.kv', '.'), | ||
32 | ('.pyinstaller_commit', '.') | ||
33 | ] | ||
34 | |||
25 | a = Analysis(['music_sampler.py'], | 35 | a = Analysis(['music_sampler.py'], |
26 | binaries=None, | 36 | binaries=None, |
27 | datas=[ | 37 | datas=data, |
28 | ('fonts/*', 'fonts'), | ||
29 | ('music_sampler.kv', '.'), | ||
30 | ('.pyinstaller_commit', '.') | ||
31 | ], | ||
32 | hookspath=hookspath(), | 38 | hookspath=hookspath(), |
33 | runtime_hooks=runtime_hooks(), | 39 | runtime_hooks=runtime_hooks(), |
34 | **excluded_and_hidden_modules) | 40 | **excluded_and_hidden_modules) |
41 | |||
42 | for fontname, style in [("Ubuntu", sysfont.STYLE_NORMAL), ("Ubuntu", sysfont.STYLE_BOLD), ("Symbola", sysfont.STYLE_NONE)]: | ||
43 | font = sysfont.get_font(fontname, style=style) | ||
44 | a.datas.append(( | ||
45 | 'fonts/{}_{}.ttf'.format(fontname, style), | ||
46 | font[4], | ||
47 | 'DATA' | ||
48 | )) | ||
49 | |||
35 | pyz = PYZ(a.pure, a.zipped_data) | 50 | pyz = PYZ(a.pure, a.zipped_data) |
36 | 51 | ||
37 | # Single file | 52 | # Single file |