diff --git a/mopidy_touchscreen/__init__.py b/mopidy_touchscreen/__init__.py
index 940fb49..62f493b 100644
--- a/mopidy_touchscreen/__init__.py
+++ b/mopidy_touchscreen/__init__.py
@@ -2,11 +2,9 @@ from __future__ import unicode_literals
import logging
import os
-
from mopidy import config, ext
from .touch_screen import TouchScreen
-from .touch_screen_backend import TouchScreenBackend
__version__ = '0.2.2'
@@ -21,7 +19,8 @@ class Extension(ext.Extension):
version = __version__
def get_default_config(self):
- conf_file = os.path.join(os.path.dirname(__file__), 'ext.conf')
+ conf_file = os.path.join(os.path.dirname(__file__),
+ 'ext.conf')
return config.read(conf_file)
def get_config_schema(self):
@@ -37,13 +36,10 @@ class Extension(ext.Extension):
schema['gpio_up'] = config.Integer()
schema['gpio_down'] = config.Integer()
schema['gpio_enter'] = config.Integer()
- schema['sdl_fbdev'] = config.String()
- schema['sdl_mousdrv'] = config.String()
- schema['sdl_mousedev'] = config.String()
+ schema['sdl_fbdev'] = config.String()
+ schema['sdl_mousdrv'] = config.String()
+ schema['sdl_mousedev'] = config.String()
return schema
def setup(self, registry):
registry.add('frontend', TouchScreen)
-
- # Backend used for controling volume
- registry.add('backend', TouchScreenBackend)
diff --git a/mopidy_touchscreen/fonts/icomoon/demo.html b/mopidy_touchscreen/fonts/icomoon/demo.html
index d657467..c150fa4 100644
--- a/mopidy_touchscreen/fonts/icomoon/demo.html
+++ b/mopidy_touchscreen/fonts/icomoon/demo.html
@@ -3,7 +3,8 @@
IcoMoon Demo
-
+
@@ -15,609 +16,697 @@
-
Grid Size: 16
+
Grid Size: 16
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Font Test Drive
@@ -629,7 +718,8 @@
diff --git a/mopidy_touchscreen/fonts/icomoon/selection.json b/mopidy_touchscreen/fonts/icomoon/selection.json
index d38b459..0c7d406 100644
--- a/mopidy_touchscreen/fonts/icomoon/selection.json
+++ b/mopidy_touchscreen/fonts/icomoon/selection.json
@@ -1,1071 +1,1071 @@
{
- "IcoMoonType": "selection",
- "icons": [
- {
- "icon": {
- "paths": [
- "M320 192l704-192v64 128 544c0 88.366-100.29 160-224 160s-224-71.634-224-160c0-88.366 100.29-160 224-160 34.358 0 66.902 5.532 96 15.406v-329.588l-448 122.182v480c0 88.366-100.288 160-224 160-123.712 0-224-71.634-224-160 0-88.366 100.288-160 224-160 34.358 0 66.902 5.532 96 15.406v-335.406-192z"
- ],
- "tags": [
- "music",
- "song",
- "audio",
- "sound"
- ],
- "grid": 16
- },
- "properties": {
- "id": 16,
- "order": 1,
- "prevSize": 32,
- "code": 58880,
- "name": "music",
- "ligatures": ""
- },
- "setIdx": 0,
- "iconIdx": 16
- },
- {
- "icon": {
- "paths": [
- "M192 578.286v443.43c10.454 1.496 21.134 2.286 32 2.286h32v-448.002h-32c-10.866 0-21.546 0.79-32 2.286zM768 576v448h32c10.868 0 21.546-0.79 32-2.286v-443.428c-10.454-1.496-21.132-2.286-32-2.286h-32zM1024 512c0-282.77-229.23-512-512-512s-512 229.23-512 512c0 61.418 10.828 120.306 30.656 174.874-19.472 33.202-30.656 71.852-30.656 113.126 0 89.354 52.326 166.478 128 202.432v-404.864c-20.126 9.562-38.58 22.060-54.858 36.904-5.992-29.22-9.142-59.478-9.142-90.472 0-247.424 200.576-448 448-448s448 200.576 448 448c0 30.994-3.148 61.252-9.142 90.472-16.28-14.844-34.73-27.342-54.858-36.904v404.864c75.676-35.954 128-113.078 128-202.432 0-41.274-11.184-79.924-30.656-113.126 19.828-54.568 30.656-113.456 30.656-174.874z"
- ],
- "tags": [
- "headphones",
- "headset",
- "music",
- "song",
- "audio"
- ],
- "grid": 16
- },
- "properties": {
- "id": 17,
- "order": 2,
- "prevSize": 32,
- "code": 58881,
- "name": "headphones",
- "ligatures": ""
- },
- "setIdx": 0,
- "iconIdx": 17
- },
- {
- "icon": {
- "paths": [
- "M640 576c105.87 0 201.87 43.066 271.402 112.598l-90.468 90.468c-46.354-46.356-110.356-75.066-180.934-75.066s-134.578 28.71-180.934 75.066l-90.468-90.468c69.532-69.532 165.532-112.598 271.402-112.598zM187.452 507.452c120.88-120.88 281.598-187.452 452.548-187.452s331.668 66.572 452.55 187.452l-90.51 90.508c-96.706-96.704-225.28-149.96-362.040-149.96-136.762 0-265.334 53.256-362.038 149.962l-90.51-90.51zM988.784 134.438c106.702 45.132 202.516 109.728 284.782 191.996v0l-90.508 90.508c-145.056-145.056-337.92-224.942-543.058-224.942-205.14 0-398 79.886-543.058 224.942l-90.51-90.51c82.268-82.266 178.082-146.862 284.784-191.994 110.504-46.738 227.852-70.438 348.784-70.438 120.932 0 238.278 23.7 348.784 70.438zM576 896c0-35.346 28.654-64 64-64s64 28.654 64 64c0 35.346-28.654 64-64 64-35.346 0-64-28.654-64-64z"
- ],
- "width": 1280,
- "tags": [
- "connection",
- "broadcast",
- "wifi",
- "wave",
- "feed"
- ],
- "grid": 16
- },
- "properties": {
- "id": 28,
- "order": 3,
- "prevSize": 32,
- "code": 58882,
- "name": "connection",
- "ligatures": ""
- },
- "setIdx": 0,
- "iconIdx": 28
- },
- {
- "icon": {
- "paths": [
- "M896 128v832h-672c-53.022 0-96-42.98-96-96 0-53.018 42.978-96 96-96h608v-768h-640c-70.398 0-128 57.6-128 128v768c0 70.4 57.602 128 128 128h768v-896h-64zM256 832h576v64h-576z"
- ],
- "tags": [
- "book",
- "reading"
- ],
- "grid": 16
- },
- "properties": {
- "id": 31,
- "order": 5,
- "prevSize": 32,
- "code": 58883,
- "name": "book",
- "ligatures": ""
- },
- "setIdx": 0,
- "iconIdx": 31
- },
- {
- "icon": {
- "paths": [
- "M576.234 289.27l242.712-81.432 203.584 606.784-242.712 81.432zM0 896h256v-704h-256v704zM64 320h128v64h-128v-64zM320 896h256v-704h-256v704zM384 320h128v64h-128v-64z"
- ],
- "tags": [
- "books",
- "library",
- "archive"
- ],
- "grid": 16
- },
- "properties": {
- "id": 32,
- "order": 4,
- "prevSize": 32,
- "code": 58884,
- "name": "books",
- "ligatures": ""
- },
- "setIdx": 0,
- "iconIdx": 32
- },
- {
- "icon": {
- "paths": [
- "M864 0h-768c-52.8 0-96 43.2-96 96v832c0 52.8 43.2 96 96 96h768c52.8 0 96-43.2 96-96v-832c0-52.8-43.2-96-96-96zM832 896h-704v-768h704v768zM256 448h448v64h-448zM256 576h448v64h-448zM256 704h448v64h-448zM256 320h448v64h-448z"
- ],
- "tags": [
- "file",
- "list",
- "paper",
- "page",
- "document"
- ],
- "grid": 16
- },
- "properties": {
- "id": 34,
- "order": 6,
- "prevSize": 32,
- "code": 58885,
- "name": "file",
- "ligatures": ""
- },
- "setIdx": 0,
- "iconIdx": 34
- },
- {
- "icon": {
- "paths": [
- "M0 320h1024l-64 640h-896l-64-640zM928 192l32 64h-896l64-128h352l32 64h416z"
- ],
- "tags": [
- "folder",
- "directory",
- "category",
- "browse"
- ],
- "grid": 16
- },
- "properties": {
- "id": 46,
- "order": 7,
- "prevSize": 32,
- "code": 58886,
- "name": "folder",
- "ligatures": ""
- },
- "setIdx": 0,
- "iconIdx": 46
- },
- {
- "icon": {
- "paths": [
- "M832 960l192-512h-832l-192 512zM128 384l-128 576v-832h288l128 128h416v128z"
- ],
- "tags": [
- "folder-open",
- "directory",
- "category",
- "browse"
- ],
- "grid": 16
- },
- "properties": {
- "id": 47,
- "order": 8,
- "prevSize": 32,
- "code": 58887,
- "name": "folder-open",
- "ligatures": ""
- },
- "setIdx": 0,
- "iconIdx": 47
- },
- {
- "icon": {
- "paths": [
- "M704 0h-384l-192 128v256h768v-256l-192-128zM640 320h-64v-42.666c0-11.734-9.6-21.334-21.334-21.334h-85.332c-11.732 0-21.334 9.6-21.334 21.334l-0 42.666h-64v-106.666c0-11.734 9.602-21.334 21.334-21.334h213.33c11.734 0 21.336 9.6 21.336 21.334v106.666zM128 704.002h768v-256.002h-768v256.002zM384 533.332c0-11.734 9.602-21.332 21.334-21.332h213.33c11.734 0 21.336 9.598 21.336 21.332v106.668h-64v-42.668c0-11.734-9.6-21.332-21.334-21.332h-85.332c-11.732 0-21.334 9.598-21.334 21.332l-0 42.668h-64v-106.668zM128 1024h768v-255.998h-768v255.998zM384 853.332c0-11.734 9.602-21.332 21.334-21.332h213.33c11.734 0 21.336 9.598 21.336 21.332v106.668h-64v-42.668c0-11.734-9.6-21.332-21.334-21.332h-85.332c-11.732 0-21.334 9.598-21.334 21.332l-0 42.668h-64v-106.668z"
- ],
- "tags": [
- "cabinet",
- "storage",
- "drawer",
- "archive",
- "office"
- ],
- "grid": 16
- },
- "properties": {
- "id": 88,
- "order": 9,
- "prevSize": 32,
- "code": 58888,
- "name": "cabinet",
- "ligatures": ""
- },
- "setIdx": 0,
- "iconIdx": 88
- },
- {
- "icon": {
- "paths": [
- "M1024 384h-384l143.53-143.53c-72.53-72.526-168.96-112.47-271.53-112.47-102.57 0-199 39.944-271.53 112.47-72.526 72.53-112.47 168.96-112.47 271.53 0 102.57 39.944 199 112.47 271.53 72.53 72.526 168.96 112.47 271.53 112.47 102.57 0 199-39.944 271.528-112.472 6.056-6.054 11.86-12.292 17.456-18.668l96.32 84.282c-93.846 107.166-231.664 174.858-385.304 174.858-282.77 0-512-229.23-512-512 0-282.77 229.23-512 512-512 141.386 0 269.368 57.326 362.016 149.984l149.984-149.984v384z"
- ],
- "tags": [
- "spinner",
- "loading",
- "busy",
- "wait",
- "wheel",
- "repeat"
- ],
- "grid": 16
- },
- "properties": {
- "id": 125,
- "order": 12,
- "prevSize": 32,
- "code": 58889,
- "name": "spinner",
- "ligatures": ""
- },
- "setIdx": 0,
- "iconIdx": 125
- },
- {
- "icon": {
- "paths": [
- "M933.79 610.25c-53.726-93.054-21.416-212.304 72.152-266.488l-100.626-174.292c-28.75 16.854-62.176 26.518-97.846 26.518-107.536 0-194.708-87.746-194.708-195.99l-201.258 0c0.266 33.41-8.074 67.282-25.958 98.252-53.724 93.056-173.156 124.702-266.862 70.758l-100.624 174.292c28.97 16.472 54.050 40.588 71.886 71.478 53.638 92.908 21.512 211.92-71.708 266.224l100.626 174.292c28.65-16.696 61.916-26.254 97.4-26.254 107.196 0 194.144 87.192 194.7 194.958h201.254c-0.086-33.074 8.272-66.57 25.966-97.218 53.636-92.906 172.776-124.594 266.414-71.012l100.626-174.29c-28.78-16.466-53.692-40.498-71.434-71.228zM512 719.332c-114.508 0-207.336-92.824-207.336-207.334 0-114.508 92.826-207.334 207.336-207.334 114.508 0 207.332 92.826 207.332 207.334-0.002 114.51-92.824 207.334-207.332 207.334z"
- ],
- "tags": [
- "cog",
- "preferences",
- "settings",
- "gear",
- "generate",
- "control",
- "options"
- ],
- "grid": 16
- },
- "properties": {
- "id": 142,
- "order": 10,
- "prevSize": 32,
- "code": 58890,
- "name": "cog",
- "ligatures": ""
- },
- "setIdx": 0,
- "iconIdx": 142
- },
- {
- "icon": {
- "paths": [
- "M640 146.588v135.958c36.206 15.804 69.5 38.408 98.274 67.18 60.442 60.44 93.726 140.8 93.726 226.274s-33.286 165.834-93.726 226.274c-60.44 60.44-140.798 93.726-226.274 93.726s-165.834-33.286-226.274-93.726c-60.44-60.44-93.726-140.8-93.726-226.274s33.286-165.834 93.726-226.274c28.774-28.774 62.068-51.378 98.274-67.182v-135.956c-185.048 55.080-320 226.472-320 429.412 0 247.424 200.578 448 448 448 247.424 0 448-200.576 448-448 0-202.94-134.95-374.332-320-429.412zM448 0h128v512h-128z"
- ],
- "tags": [
- "switch",
- "power",
- "turn off",
- "off",
- "shutdown"
- ],
- "grid": 16
- },
- "properties": {
- "id": 177,
- "order": 11,
- "prevSize": 32,
- "code": 58891,
- "name": "switch",
- "ligatures": ""
- },
- "setIdx": 0,
- "iconIdx": 177
- },
- {
- "icon": {
- "paths": [
- "M0 0h256v256h-256zM384 64h640v128h-640zM0 384h256v256h-256zM384 448h640v128h-640zM0 768h256v256h-256zM384 832h640v128h-640z"
- ],
- "tags": [
- "list",
- "bullet",
- "ul",
- "todo",
- "menu"
- ],
- "grid": 16
- },
- "properties": {
- "id": 180,
- "order": 13,
- "prevSize": 32,
- "code": 58892,
- "name": "list",
- "ligatures": ""
- },
- "setIdx": 0,
- "iconIdx": 180
- },
- {
- "icon": {
- "paths": [
- "M384 64h640v128h-640v-128zM384 448h640v128h-640v-128zM384 832h640v128h-640v-128zM0 128c0-70.692 57.308-128 128-128 70.692 0 128 57.308 128 128 0 70.692-57.308 128-128 128-70.692 0-128-57.308-128-128zM0 512c0-70.692 57.308-128 128-128 70.692 0 128 57.308 128 128 0 70.692-57.308 128-128 128-70.692 0-128-57.308-128-128zM0 896c0-70.692 57.308-128 128-128 70.692 0 128 57.308 128 128 0 70.692-57.308 128-128 128-70.692 0-128-57.308-128-128z"
- ],
- "tags": [
- "list",
- "bullet",
- "ul",
- "todo",
- "menu"
- ],
- "grid": 16
- },
- "properties": {
- "id": 181,
- "order": 14,
- "prevSize": 32,
- "code": 58893,
- "name": "list2",
- "ligatures": ""
- },
- "setIdx": 0,
- "iconIdx": 181
- },
- {
- "icon": {
- "paths": [
- "M384 832h640v128h-640zM384 448h640v128h-640zM384 64h640v128h-640zM192 0v256h-64v-192h-64v-64zM128 526v50h128v64h-192v-146l128-60v-50h-128v-64h192v146zM256 704v320h-192v-64h128v-64h-128v-64h128v-64h-128v-64z"
- ],
- "tags": [
- "numbered-list",
- "list",
- "items",
- "nl"
- ],
- "grid": 16
- },
- "properties": {
- "id": 182,
- "order": 15,
- "prevSize": 32,
- "code": 58894,
- "name": "numbered-list",
- "ligatures": ""
- },
- "setIdx": 0,
- "iconIdx": 182
- },
- {
- "icon": {
- "paths": [
- "M64 192h896v192h-896zM64 448h896v192h-896zM64 704h896v192h-896z"
- ],
- "tags": [
- "menu",
- "list",
- "items",
- "lines",
- "options"
- ],
- "grid": 16
- },
- "properties": {
- "id": 184,
- "order": 16,
- "prevSize": 32,
- "code": 58895,
- "name": "menu",
- "ligatures": ""
- },
- "setIdx": 0,
- "iconIdx": 184
- },
- {
- "icon": {
- "paths": [
- "M1024 736 736 0h-448l-288 288v448l288 288h448l288-288v-448l-288-288zM576 832h-128v-128h128v128zM576 576h-128v-384h128v384z"
- ],
- "tags": [
- "spam",
- "notice",
- "notification",
- "exclamation"
- ],
- "grid": 16
- },
- "properties": {
- "id": 252,
- "order": 17,
- "prevSize": 32,
- "code": 58896,
- "name": "spam",
- "ligatures": ""
- },
- "setIdx": 0,
- "iconIdx": 252
- },
- {
- "icon": {
- "paths": [
- "M1014.662 822.66c-0.004-0.004-0.008-0.008-0.012-0.010l-310.644-310.65 310.644-310.65c0.004-0.004 0.008-0.006 0.012-0.010 3.344-3.346 5.762-7.254 7.312-11.416 4.246-11.376 1.824-24.682-7.324-33.83l-146.746-146.746c-9.148-9.146-22.45-11.566-33.828-7.32-4.16 1.55-8.070 3.968-11.418 7.31 0 0.004-0.004 0.006-0.008 0.010l-310.648 310.652-310.648-310.65c-0.004-0.004-0.006-0.006-0.010-0.010-3.346-3.342-7.254-5.76-11.414-7.31-11.38-4.248-24.682-1.826-33.83 7.32l-146.748 146.748c-9.148 9.148-11.568 22.452-7.322 33.828 1.552 4.16 3.97 8.072 7.312 11.416 0.004 0.002 0.006 0.006 0.010 0.010l310.65 310.648-310.65 310.652c-0.002 0.004-0.006 0.006-0.008 0.010-3.342 3.346-5.76 7.254-7.314 11.414-4.248 11.376-1.826 24.682 7.322 33.83l146.748 146.746c9.15 9.148 22.452 11.568 33.83 7.322 4.16-1.552 8.070-3.97 11.416-7.312 0.002-0.004 0.006-0.006 0.010-0.010l310.648-310.65 310.648 310.65c0.004 0.002 0.008 0.006 0.012 0.008 3.348 3.344 7.254 5.762 11.414 7.314 11.378 4.246 24.684 1.826 33.828-7.322l146.746-146.748c9.148-9.148 11.57-22.454 7.324-33.83-1.552-4.16-3.97-8.068-7.314-11.414z"
- ],
- "tags": [
- "close",
- "cancel",
- "quit",
- "remove",
- "cross"
- ],
- "grid": 16
- },
- "properties": {
- "id": 253,
- "order": 18,
- "prevSize": 32,
- "code": 58897,
- "name": "close",
- "ligatures": ""
- },
- "setIdx": 0,
- "iconIdx": 253
- },
- {
- "icon": {
- "paths": [
- "M864 128l-480 480-224-224-160 160 384 384 640-640z"
- ],
- "tags": [
- "checkmark",
- "tick",
- "correct",
- "accept",
- "ok"
- ],
- "grid": 16
- },
- "properties": {
- "id": 254,
- "order": 19,
- "prevSize": 32,
- "code": 58898,
- "name": "checkmark",
- "ligatures": ""
- },
- "setIdx": 0,
- "iconIdx": 254
- },
- {
- "icon": {
- "paths": [
- "M0 416v192c0 17.672 14.328 32 32 32h960c17.672 0 32-14.328 32-32v-192c0-17.672-14.328-32-32-32h-960c-17.672 0-32 14.328-32 32z"
- ],
- "tags": [
- "minus",
- "minimize",
- "subtract"
- ],
- "grid": 16
- },
- "properties": {
- "id": 257,
- "order": 20,
- "prevSize": 32,
- "code": 58899,
- "name": "minus",
- "ligatures": ""
- },
- "setIdx": 0,
- "iconIdx": 257
- },
- {
- "icon": {
- "paths": [
- "M992 384h-352v-352c0-17.672-14.328-32-32-32h-192c-17.672 0-32 14.328-32 32v352h-352c-17.672 0-32 14.328-32 32v192c0 17.672 14.328 32 32 32h352v352c0 17.672 14.328 32 32 32h192c17.672 0 32-14.328 32-32v-352h352c17.672 0 32-14.328 32-32v-192c0-17.672-14.328-32-32-32z"
- ],
- "tags": [
- "plus",
- "add",
- "sum"
- ],
- "grid": 16
- },
- "properties": {
- "id": 258,
- "order": 21,
- "prevSize": 32,
- "code": 58900,
- "name": "plus",
- "ligatures": ""
- },
- "setIdx": 0,
- "iconIdx": 258
- },
- {
- "icon": {
- "paths": [
- "M192 128l640 384-640 384z"
- ],
- "tags": [
- "play",
- "media control",
- "audio"
- ],
- "grid": 16
- },
- "properties": {
- "id": 266,
- "order": 22,
- "prevSize": 32,
- "code": 58901,
- "name": "play",
- "ligatures": ""
- },
- "setIdx": 0,
- "iconIdx": 266
- },
- {
- "icon": {
- "paths": [
- "M128 128h320v768h-320zM576 128h320v768h-320z"
- ],
- "tags": [
- "pause",
- "media control",
- "audio"
- ],
- "grid": 16
- },
- "properties": {
- "id": 267,
- "order": 23,
- "prevSize": 32,
- "code": 58902,
- "name": "pause",
- "ligatures": ""
- },
- "setIdx": 0,
- "iconIdx": 267
- },
- {
- "icon": {
- "paths": [
- "M128 128h768v768h-768z"
- ],
- "tags": [
- "stop",
- "media control",
- "audio",
- "square"
- ],
- "grid": 16
- },
- "properties": {
- "id": 268,
- "order": 24,
- "prevSize": 32,
- "code": 58903,
- "name": "stop",
- "ligatures": ""
- },
- "setIdx": 0,
- "iconIdx": 268
- },
- {
- "icon": {
- "paths": [
- "M576 160v320l320-320v704l-320-320v320l-352-352z"
- ],
- "tags": [
- "backward",
- "media control",
- "audio"
- ],
- "grid": 16
- },
- "properties": {
- "id": 269,
- "order": 25,
- "prevSize": 32,
- "code": 58904,
- "name": "backward",
- "ligatures": ""
- },
- "setIdx": 0,
- "iconIdx": 269
- },
- {
- "icon": {
- "paths": [
- "M512 864v-320l-320 320v-704l320 320v-320l352 352z"
- ],
- "tags": [
- "forward",
- "media control",
- "audio"
- ],
- "grid": 16
- },
- "properties": {
- "id": 270,
- "order": 26,
- "prevSize": 32,
- "code": 58905,
- "name": "forward",
- "ligatures": ""
- },
- "setIdx": 0,
- "iconIdx": 270
- },
- {
- "icon": {
- "paths": [
- "M128 896v-768h128v352l320-320v320l320-320v704l-320-320v320l-320-320v352z"
- ],
- "tags": [
- "first",
- "media control",
- "audio"
- ],
- "grid": 16
- },
- "properties": {
- "id": 271,
- "order": 27,
- "prevSize": 32,
- "code": 58906,
- "name": "first",
- "ligatures": ""
- },
- "setIdx": 0,
- "iconIdx": 271
- },
- {
- "icon": {
- "paths": [
- "M896 128v768h-128v-352l-320 320v-320l-320 320v-704l320 320v-320l320 320v-352z"
- ],
- "tags": [
- "last",
- "media control",
- "audio"
- ],
- "grid": 16
- },
- "properties": {
- "id": 272,
- "order": 28,
- "prevSize": 32,
- "code": 58907,
- "name": "last",
- "ligatures": ""
- },
- "setIdx": 0,
- "iconIdx": 272
- },
- {
- "icon": {
- "paths": [
- "M256 896v-768h128v352l320-320v704l-320-320v352z"
- ],
- "tags": [
- "previous",
- "media control",
- "audio"
- ],
- "grid": 16
- },
- "properties": {
- "id": 273,
- "order": 29,
- "prevSize": 32,
- "code": 58908,
- "name": "previous",
- "ligatures": ""
- },
- "setIdx": 0,
- "iconIdx": 273
- },
- {
- "icon": {
- "paths": [
- "M768 128v768h-128v-352l-320 320v-704l320 320v-352z"
- ],
- "tags": [
- "next",
- "media control",
- "audio"
- ],
- "grid": 16
- },
- "properties": {
- "id": 274,
- "order": 30,
- "prevSize": 32,
- "code": 58909,
- "name": "next",
- "ligatures": ""
- },
- "setIdx": 0,
- "iconIdx": 274
- },
- {
- "icon": {
- "paths": [
- "M0 768h1024v128h-1024zM512 128l512 512h-1024z"
- ],
- "tags": [
- "eject",
- "media control",
- "audio"
- ],
- "grid": 16
- },
- "properties": {
- "id": 275,
- "order": 31,
- "prevSize": 32,
- "code": 58910,
- "name": "eject",
- "ligatures": ""
- },
- "setIdx": 0,
- "iconIdx": 275
- },
- {
- "icon": {
- "paths": [
- "M890.040 922.040c-12.286 0-24.568-4.686-33.942-14.058-18.744-18.746-18.744-49.136 0-67.882 87.638-87.642 135.904-204.16 135.904-328.1 0-123.938-48.266-240.458-135.904-328.098-18.744-18.746-18.744-49.138 0-67.882 18.744-18.744 49.138-18.744 67.882 0 105.77 105.772 164.022 246.4 164.022 395.98 0 149.582-58.252 290.208-164.022 395.98-9.372 9.374-21.656 14.060-33.94 14.060zM719.53 831.53c-12.286 0-24.568-4.686-33.942-14.058-18.744-18.744-18.744-49.136 0-67.882 131.006-131.006 131.006-344.17 0-475.176-18.744-18.746-18.744-49.138 0-67.882 18.744-18.742 49.138-18.744 67.882 0 81.594 81.592 126.53 190.076 126.53 305.468 0 115.39-44.936 223.876-126.53 305.47-9.372 9.374-21.656 14.060-33.94 14.060zM549.020 741.020c-12.286 0-24.568-4.686-33.942-14.058-18.746-18.746-18.746-49.136 0-67.882 81.1-81.1 81.1-213.058 0-294.156-18.746-18.746-18.746-49.138 0-67.882 18.746-18.744 49.136-18.744 67.882 0 118.53 118.53 118.53 311.392 0 429.922-9.372 9.37-21.656 14.056-33.94 14.056zM401.332 78.668c25.668-25.668 46.668-16.968 46.668 19.332v828c0 36.3-21 44.998-46.668 19.33l-241.332-241.33h-160v-384h160l241.332-241.332z"
- ],
- "width": 1088,
- "tags": [
- "volume-high",
- "speaker",
- "media control",
- "audio"
- ],
- "grid": 16
- },
- "properties": {
- "id": 276,
- "order": 32,
- "prevSize": 32,
- "code": 58911,
- "name": "volume-high",
- "ligatures": ""
- },
- "setIdx": 0,
- "iconIdx": 276
- },
- {
- "icon": {
- "paths": [
- "M719.53 831.53c-12.286 0-24.568-4.686-33.942-14.058-18.744-18.744-18.744-49.136 0-67.882 131.006-131.006 131.006-344.17 0-475.176-18.744-18.746-18.744-49.138 0-67.882 18.744-18.742 49.138-18.744 67.882 0 81.594 81.592 126.53 190.076 126.53 305.468 0 115.39-44.936 223.876-126.53 305.47-9.372 9.374-21.656 14.060-33.94 14.060zM549.020 741.020c-12.286 0-24.568-4.686-33.942-14.058-18.746-18.746-18.746-49.136 0-67.882 81.1-81.1 81.1-213.058 0-294.156-18.746-18.746-18.746-49.138 0-67.882 18.746-18.744 49.136-18.744 67.882 0 118.53 118.53 118.53 311.392 0 429.922-9.372 9.37-21.656 14.056-33.94 14.056zM401.332 78.668c25.668-25.668 46.668-16.968 46.668 19.332v828c0 36.3-21 44.998-46.668 19.33l-241.332-241.33h-160v-384h160l241.332-241.332z"
- ],
- "tags": [
- "volume-medium",
- "speaker",
- "media control",
- "audio"
- ],
- "grid": 16
- },
- "properties": {
- "id": 277,
- "order": 33,
- "prevSize": 32,
- "code": 58912,
- "name": "volume-medium",
- "ligatures": ""
- },
- "setIdx": 0,
- "iconIdx": 277
- },
- {
- "icon": {
- "paths": [
- "M549.020 741.020c-12.286 0-24.568-4.686-33.942-14.058-18.746-18.746-18.746-49.136 0-67.882 81.1-81.1 81.1-213.058 0-294.156-18.746-18.746-18.746-49.138 0-67.882 18.746-18.744 49.136-18.744 67.882 0 118.53 118.53 118.53 311.392 0 429.922-9.372 9.37-21.656 14.056-33.94 14.056zM401.332 78.668c25.668-25.668 46.668-16.968 46.668 19.332v828c0 36.3-21 44.998-46.668 19.33l-241.332-241.33h-160v-384h160l241.332-241.332z"
- ],
- "tags": [
- "volume-low",
- "speaker",
- "media control",
- "audio"
- ],
- "grid": 16
- },
- "properties": {
- "id": 278,
- "order": 34,
- "prevSize": 32,
- "code": 58913,
- "name": "volume-low",
- "ligatures": ""
- },
- "setIdx": 0,
- "iconIdx": 278
- },
- {
- "icon": {
- "paths": [
- "M401.332 78.668c25.668-25.668 46.668-16.968 46.668 19.332v828c0 36.3-21 44.998-46.668 19.33l-241.332-241.33h-160v-384h160l241.332-241.332z"
- ],
- "tags": [
- "volume-mute",
- "speaker",
- "media control",
- "audio",
- "mute"
- ],
- "grid": 16
- },
- "properties": {
- "id": 279,
- "order": 35,
- "prevSize": 32,
- "code": 58914,
- "name": "volume-mute",
- "ligatures": ""
- },
- "setIdx": 0,
- "iconIdx": 279
- },
- {
- "icon": {
- "paths": [
- "M401.332 78.668c25.668-25.668 46.668-16.968 46.668 19.332v828c0 36.3-21 44.998-46.668 19.33l-241.332-241.33h-160v-384h160l241.332-241.332zM960 619.148v84.852h-84.852l-107.148-107.148-107.148 107.148h-84.852v-84.852l107.148-107.148-107.148-107.148v-84.852h84.852l107.148 107.148 107.148-107.148h84.852v84.852l-107.148 107.148z"
- ],
- "tags": [
- "volume-mute",
- "speaker",
- "media control",
- "audio",
- "mute"
- ],
- "grid": 16
- },
- "properties": {
- "id": 280,
- "order": 36,
- "prevSize": 32,
- "code": 58915,
- "name": "volume-mute2",
- "ligatures": ""
- },
- "setIdx": 0,
- "iconIdx": 280
- },
- {
- "icon": {
- "paths": [
- "M428.164 63.918c11.976 0 19.836 11.878 19.838 34.082v828c0 22.206-7.856 34.082-19.836 34.082-7.604 0-16.868-4.788-26.834-14.752l-241.332-241.33h-160v-384h160l241.332-241.332c9.966-9.966 19.228-14.75 26.832-14.75zM1024 576h-192v192h-128v-192h-192v-128h192v-192h128v192h192z"
- ],
- "tags": [
- "volume-increase",
- "speaker",
- "media control",
- "audio"
- ],
- "grid": 16
- },
- "properties": {
- "id": 281,
- "order": 37,
- "prevSize": 32,
- "code": 58916,
- "name": "volume-increase",
- "ligatures": ""
- },
- "setIdx": 0,
- "iconIdx": 281
- },
- {
- "icon": {
- "paths": [
- "M428.164 63.918c11.976 0 19.836 11.878 19.838 34.082v828c0 22.206-7.856 34.082-19.836 34.082-7.604 0-16.868-4.788-26.834-14.752l-241.332-241.33h-160v-384h160l241.332-241.332c9.966-9.966 19.228-14.75 26.832-14.75zM512 448h512v128h-512z"
- ],
- "tags": [
- "volume-decrease",
- "speaker",
- "media control",
- "audio"
- ],
- "grid": 16
- },
- "properties": {
- "id": 282,
- "order": 38,
- "prevSize": 32,
- "code": 58917,
- "name": "volume-decrease",
- "ligatures": ""
- },
- "setIdx": 0,
- "iconIdx": 282
- },
- {
- "icon": {
- "paths": [
- "M128 320h640v192l256-256-256-256v192h-768v384h128zM896 704h-640v-192l-256 256 256 256v-192h768v-384h-128z"
- ],
- "tags": [
- "loop",
- "repeat",
- "reload",
- "refresh",
- "update",
- "upgrade",
- "synchronize",
- "media control",
- "arrows"
- ],
- "grid": 16
- },
- "properties": {
- "id": 283,
- "order": 39,
- "prevSize": 32,
- "code": 58918,
- "name": "loop",
- "ligatures": ""
- },
- "setIdx": 0,
- "iconIdx": 283
- },
- {
- "icon": {
- "paths": [
- "M874.022 149.98c-92.652-92.656-220.636-149.98-362.022-149.98-219.488 0-406.69 138.128-479.498 332.188l119.876 44.954c54.604-145.546 195.006-249.142 359.622-249.142 106.040 0 202.020 43 271.506 112.494l-143.506 143.506h384v-384l-149.978 149.98zM512 896c-106.040 0-202.026-42.992-271.512-112.488l143.512-143.512h-384v384l149.994-149.994c92.646 92.662 220.618 149.994 362.006 149.994 219.49 0 406.692-138.128 479.5-332.188l-119.876-44.954c-54.604 145.546-195.006 249.142-359.624 249.142z"
- ],
- "tags": [
- "loop",
- "repeat",
- "reload",
- "refresh",
- "update",
- "upgrade",
- "synchronize",
- "media control",
- "arrows"
- ],
- "grid": 16
- },
- "properties": {
- "id": 284,
- "order": 40,
- "prevSize": 32,
- "code": 58919,
- "name": "loop2",
- "ligatures": ""
- },
- "setIdx": 0,
- "iconIdx": 284
- },
- {
- "icon": {
- "paths": [
- "M320 640v-192h192l-256-256-256 256h192v320h384l-128-128zM832 576v-320h-384l128 128h128v192h-192l256 256 256-256z"
- ],
- "tags": [
- "loop",
- "repeat",
- "reload",
- "refresh",
- "update",
- "upgrade",
- "synchronize",
- "media control",
- "arrows"
- ],
- "grid": 16
- },
- "properties": {
- "id": 285,
- "order": 41,
- "prevSize": 32,
- "code": 58920,
- "name": "loop3",
- "ligatures": ""
- },
- "setIdx": 0,
- "iconIdx": 285
- },
- {
- "icon": {
- "paths": [
- "M1024 256l-256-256v192c-130.772 0-230.752 31.208-305.65 95.408-5.25 4.5-10.284 9.1-15.162 13.774 27.52 38.164 48.716 77.516 67.772 115.090 48.322-58.402 118.054-96.272 253.040-96.272v192 0 192c-216.446 0-265.126-97.36-326.756-220.622-34.306-68.612-69.78-139.56-135.592-195.97-74.9-64.2-174.88-95.408-305.652-95.408v128c216.446 0 265.126 97.36 326.756 220.622 34.306 68.612 69.78 139.56 135.592 195.97 74.9 64.2 174.882 95.408 305.652 95.408v192l256-256-256-256 256-256zM0 704v128c130.772 0 230.75-31.208 305.65-95.408 5.25-4.498 10.284-9.1 15.162-13.776-27.52-38.162-48.718-77.516-67.772-115.090-48.32 58.402-118.052 96.274-253.040 96.274z"
- ],
- "tags": [
- "shuffle",
- "media control",
- "random"
- ],
- "grid": 16
- },
- "properties": {
- "id": 286,
- "order": 42,
- "prevSize": 32,
- "code": 58921,
- "name": "shuffle",
- "ligatures": ""
- },
- "setIdx": 0,
- "iconIdx": 286
- }
- ],
- "height": 1024,
- "metadata": {
- "name": "icomoon"
- },
- "preferences": {
- "fontPref": {
- "prefix": "icon-",
- "metadata": {
- "fontFamily": "icomoon"
- },
- "showGlyphs": true,
- "metrics": {
- "emSize": 512,
- "baseline": 6.25,
- "whitespace": 50
- },
- "resetPoint": 58880,
- "showQuickUse": true,
- "quickUsageToken": false,
- "showMetrics": true,
- "showMetadata": false
- },
- "imagePref": {
- "color": 0,
- "height": 32,
- "columns": 16,
- "margin": 16,
- "png": false,
- "sprites": true
- },
- "historySize": 100,
- "showCodes": true,
- "gridSize": 16,
- "showLiga": false,
- "showGrid": true,
- "showGlyphs": true,
- "showQuickUse": true,
- "search": ""
- }
+ "IcoMoonType": "selection",
+ "icons": [
+ {
+ "icon": {
+ "paths": [
+ "M320 192l704-192v64 128 544c0 88.366-100.29 160-224 160s-224-71.634-224-160c0-88.366 100.29-160 224-160 34.358 0 66.902 5.532 96 15.406v-329.588l-448 122.182v480c0 88.366-100.288 160-224 160-123.712 0-224-71.634-224-160 0-88.366 100.288-160 224-160 34.358 0 66.902 5.532 96 15.406v-335.406-192z"
+ ],
+ "tags": [
+ "music",
+ "song",
+ "audio",
+ "sound"
+ ],
+ "grid": 16
+ },
+ "properties": {
+ "id": 16,
+ "order": 1,
+ "prevSize": 32,
+ "code": 58880,
+ "name": "music",
+ "ligatures": ""
+ },
+ "setIdx": 0,
+ "iconIdx": 16
+ },
+ {
+ "icon": {
+ "paths": [
+ "M192 578.286v443.43c10.454 1.496 21.134 2.286 32 2.286h32v-448.002h-32c-10.866 0-21.546 0.79-32 2.286zM768 576v448h32c10.868 0 21.546-0.79 32-2.286v-443.428c-10.454-1.496-21.132-2.286-32-2.286h-32zM1024 512c0-282.77-229.23-512-512-512s-512 229.23-512 512c0 61.418 10.828 120.306 30.656 174.874-19.472 33.202-30.656 71.852-30.656 113.126 0 89.354 52.326 166.478 128 202.432v-404.864c-20.126 9.562-38.58 22.060-54.858 36.904-5.992-29.22-9.142-59.478-9.142-90.472 0-247.424 200.576-448 448-448s448 200.576 448 448c0 30.994-3.148 61.252-9.142 90.472-16.28-14.844-34.73-27.342-54.858-36.904v404.864c75.676-35.954 128-113.078 128-202.432 0-41.274-11.184-79.924-30.656-113.126 19.828-54.568 30.656-113.456 30.656-174.874z"
+ ],
+ "tags": [
+ "headphones",
+ "headset",
+ "music",
+ "song",
+ "audio"
+ ],
+ "grid": 16
+ },
+ "properties": {
+ "id": 17,
+ "order": 2,
+ "prevSize": 32,
+ "code": 58881,
+ "name": "headphones",
+ "ligatures": ""
+ },
+ "setIdx": 0,
+ "iconIdx": 17
+ },
+ {
+ "icon": {
+ "paths": [
+ "M640 576c105.87 0 201.87 43.066 271.402 112.598l-90.468 90.468c-46.354-46.356-110.356-75.066-180.934-75.066s-134.578 28.71-180.934 75.066l-90.468-90.468c69.532-69.532 165.532-112.598 271.402-112.598zM187.452 507.452c120.88-120.88 281.598-187.452 452.548-187.452s331.668 66.572 452.55 187.452l-90.51 90.508c-96.706-96.704-225.28-149.96-362.040-149.96-136.762 0-265.334 53.256-362.038 149.962l-90.51-90.51zM988.784 134.438c106.702 45.132 202.516 109.728 284.782 191.996v0l-90.508 90.508c-145.056-145.056-337.92-224.942-543.058-224.942-205.14 0-398 79.886-543.058 224.942l-90.51-90.51c82.268-82.266 178.082-146.862 284.784-191.994 110.504-46.738 227.852-70.438 348.784-70.438 120.932 0 238.278 23.7 348.784 70.438zM576 896c0-35.346 28.654-64 64-64s64 28.654 64 64c0 35.346-28.654 64-64 64-35.346 0-64-28.654-64-64z"
+ ],
+ "width": 1280,
+ "tags": [
+ "connection",
+ "broadcast",
+ "wifi",
+ "wave",
+ "feed"
+ ],
+ "grid": 16
+ },
+ "properties": {
+ "id": 28,
+ "order": 3,
+ "prevSize": 32,
+ "code": 58882,
+ "name": "connection",
+ "ligatures": ""
+ },
+ "setIdx": 0,
+ "iconIdx": 28
+ },
+ {
+ "icon": {
+ "paths": [
+ "M896 128v832h-672c-53.022 0-96-42.98-96-96 0-53.018 42.978-96 96-96h608v-768h-640c-70.398 0-128 57.6-128 128v768c0 70.4 57.602 128 128 128h768v-896h-64zM256 832h576v64h-576z"
+ ],
+ "tags": [
+ "book",
+ "reading"
+ ],
+ "grid": 16
+ },
+ "properties": {
+ "id": 31,
+ "order": 5,
+ "prevSize": 32,
+ "code": 58883,
+ "name": "book",
+ "ligatures": ""
+ },
+ "setIdx": 0,
+ "iconIdx": 31
+ },
+ {
+ "icon": {
+ "paths": [
+ "M576.234 289.27l242.712-81.432 203.584 606.784-242.712 81.432zM0 896h256v-704h-256v704zM64 320h128v64h-128v-64zM320 896h256v-704h-256v704zM384 320h128v64h-128v-64z"
+ ],
+ "tags": [
+ "books",
+ "library",
+ "archive"
+ ],
+ "grid": 16
+ },
+ "properties": {
+ "id": 32,
+ "order": 4,
+ "prevSize": 32,
+ "code": 58884,
+ "name": "books",
+ "ligatures": ""
+ },
+ "setIdx": 0,
+ "iconIdx": 32
+ },
+ {
+ "icon": {
+ "paths": [
+ "M864 0h-768c-52.8 0-96 43.2-96 96v832c0 52.8 43.2 96 96 96h768c52.8 0 96-43.2 96-96v-832c0-52.8-43.2-96-96-96zM832 896h-704v-768h704v768zM256 448h448v64h-448zM256 576h448v64h-448zM256 704h448v64h-448zM256 320h448v64h-448z"
+ ],
+ "tags": [
+ "file",
+ "list",
+ "paper",
+ "page",
+ "document"
+ ],
+ "grid": 16
+ },
+ "properties": {
+ "id": 34,
+ "order": 6,
+ "prevSize": 32,
+ "code": 58885,
+ "name": "file",
+ "ligatures": ""
+ },
+ "setIdx": 0,
+ "iconIdx": 34
+ },
+ {
+ "icon": {
+ "paths": [
+ "M0 320h1024l-64 640h-896l-64-640zM928 192l32 64h-896l64-128h352l32 64h416z"
+ ],
+ "tags": [
+ "folder",
+ "directory",
+ "category",
+ "browse"
+ ],
+ "grid": 16
+ },
+ "properties": {
+ "id": 46,
+ "order": 7,
+ "prevSize": 32,
+ "code": 58886,
+ "name": "folder",
+ "ligatures": ""
+ },
+ "setIdx": 0,
+ "iconIdx": 46
+ },
+ {
+ "icon": {
+ "paths": [
+ "M832 960l192-512h-832l-192 512zM128 384l-128 576v-832h288l128 128h416v128z"
+ ],
+ "tags": [
+ "folder-open",
+ "directory",
+ "category",
+ "browse"
+ ],
+ "grid": 16
+ },
+ "properties": {
+ "id": 47,
+ "order": 8,
+ "prevSize": 32,
+ "code": 58887,
+ "name": "folder-open",
+ "ligatures": ""
+ },
+ "setIdx": 0,
+ "iconIdx": 47
+ },
+ {
+ "icon": {
+ "paths": [
+ "M704 0h-384l-192 128v256h768v-256l-192-128zM640 320h-64v-42.666c0-11.734-9.6-21.334-21.334-21.334h-85.332c-11.732 0-21.334 9.6-21.334 21.334l-0 42.666h-64v-106.666c0-11.734 9.602-21.334 21.334-21.334h213.33c11.734 0 21.336 9.6 21.336 21.334v106.666zM128 704.002h768v-256.002h-768v256.002zM384 533.332c0-11.734 9.602-21.332 21.334-21.332h213.33c11.734 0 21.336 9.598 21.336 21.332v106.668h-64v-42.668c0-11.734-9.6-21.332-21.334-21.332h-85.332c-11.732 0-21.334 9.598-21.334 21.332l-0 42.668h-64v-106.668zM128 1024h768v-255.998h-768v255.998zM384 853.332c0-11.734 9.602-21.332 21.334-21.332h213.33c11.734 0 21.336 9.598 21.336 21.332v106.668h-64v-42.668c0-11.734-9.6-21.332-21.334-21.332h-85.332c-11.732 0-21.334 9.598-21.334 21.332l-0 42.668h-64v-106.668z"
+ ],
+ "tags": [
+ "cabinet",
+ "storage",
+ "drawer",
+ "archive",
+ "office"
+ ],
+ "grid": 16
+ },
+ "properties": {
+ "id": 88,
+ "order": 9,
+ "prevSize": 32,
+ "code": 58888,
+ "name": "cabinet",
+ "ligatures": ""
+ },
+ "setIdx": 0,
+ "iconIdx": 88
+ },
+ {
+ "icon": {
+ "paths": [
+ "M1024 384h-384l143.53-143.53c-72.53-72.526-168.96-112.47-271.53-112.47-102.57 0-199 39.944-271.53 112.47-72.526 72.53-112.47 168.96-112.47 271.53 0 102.57 39.944 199 112.47 271.53 72.53 72.526 168.96 112.47 271.53 112.47 102.57 0 199-39.944 271.528-112.472 6.056-6.054 11.86-12.292 17.456-18.668l96.32 84.282c-93.846 107.166-231.664 174.858-385.304 174.858-282.77 0-512-229.23-512-512 0-282.77 229.23-512 512-512 141.386 0 269.368 57.326 362.016 149.984l149.984-149.984v384z"
+ ],
+ "tags": [
+ "spinner",
+ "loading",
+ "busy",
+ "wait",
+ "wheel",
+ "repeat"
+ ],
+ "grid": 16
+ },
+ "properties": {
+ "id": 125,
+ "order": 12,
+ "prevSize": 32,
+ "code": 58889,
+ "name": "spinner",
+ "ligatures": ""
+ },
+ "setIdx": 0,
+ "iconIdx": 125
+ },
+ {
+ "icon": {
+ "paths": [
+ "M933.79 610.25c-53.726-93.054-21.416-212.304 72.152-266.488l-100.626-174.292c-28.75 16.854-62.176 26.518-97.846 26.518-107.536 0-194.708-87.746-194.708-195.99l-201.258 0c0.266 33.41-8.074 67.282-25.958 98.252-53.724 93.056-173.156 124.702-266.862 70.758l-100.624 174.292c28.97 16.472 54.050 40.588 71.886 71.478 53.638 92.908 21.512 211.92-71.708 266.224l100.626 174.292c28.65-16.696 61.916-26.254 97.4-26.254 107.196 0 194.144 87.192 194.7 194.958h201.254c-0.086-33.074 8.272-66.57 25.966-97.218 53.636-92.906 172.776-124.594 266.414-71.012l100.626-174.29c-28.78-16.466-53.692-40.498-71.434-71.228zM512 719.332c-114.508 0-207.336-92.824-207.336-207.334 0-114.508 92.826-207.334 207.336-207.334 114.508 0 207.332 92.826 207.332 207.334-0.002 114.51-92.824 207.334-207.332 207.334z"
+ ],
+ "tags": [
+ "cog",
+ "preferences",
+ "settings",
+ "gear",
+ "generate",
+ "control",
+ "options"
+ ],
+ "grid": 16
+ },
+ "properties": {
+ "id": 142,
+ "order": 10,
+ "prevSize": 32,
+ "code": 58890,
+ "name": "cog",
+ "ligatures": ""
+ },
+ "setIdx": 0,
+ "iconIdx": 142
+ },
+ {
+ "icon": {
+ "paths": [
+ "M640 146.588v135.958c36.206 15.804 69.5 38.408 98.274 67.18 60.442 60.44 93.726 140.8 93.726 226.274s-33.286 165.834-93.726 226.274c-60.44 60.44-140.798 93.726-226.274 93.726s-165.834-33.286-226.274-93.726c-60.44-60.44-93.726-140.8-93.726-226.274s33.286-165.834 93.726-226.274c28.774-28.774 62.068-51.378 98.274-67.182v-135.956c-185.048 55.080-320 226.472-320 429.412 0 247.424 200.578 448 448 448 247.424 0 448-200.576 448-448 0-202.94-134.95-374.332-320-429.412zM448 0h128v512h-128z"
+ ],
+ "tags": [
+ "switch",
+ "power",
+ "turn off",
+ "off",
+ "shutdown"
+ ],
+ "grid": 16
+ },
+ "properties": {
+ "id": 177,
+ "order": 11,
+ "prevSize": 32,
+ "code": 58891,
+ "name": "switch",
+ "ligatures": ""
+ },
+ "setIdx": 0,
+ "iconIdx": 177
+ },
+ {
+ "icon": {
+ "paths": [
+ "M0 0h256v256h-256zM384 64h640v128h-640zM0 384h256v256h-256zM384 448h640v128h-640zM0 768h256v256h-256zM384 832h640v128h-640z"
+ ],
+ "tags": [
+ "list",
+ "bullet",
+ "ul",
+ "todo",
+ "menu"
+ ],
+ "grid": 16
+ },
+ "properties": {
+ "id": 180,
+ "order": 13,
+ "prevSize": 32,
+ "code": 58892,
+ "name": "list",
+ "ligatures": ""
+ },
+ "setIdx": 0,
+ "iconIdx": 180
+ },
+ {
+ "icon": {
+ "paths": [
+ "M384 64h640v128h-640v-128zM384 448h640v128h-640v-128zM384 832h640v128h-640v-128zM0 128c0-70.692 57.308-128 128-128 70.692 0 128 57.308 128 128 0 70.692-57.308 128-128 128-70.692 0-128-57.308-128-128zM0 512c0-70.692 57.308-128 128-128 70.692 0 128 57.308 128 128 0 70.692-57.308 128-128 128-70.692 0-128-57.308-128-128zM0 896c0-70.692 57.308-128 128-128 70.692 0 128 57.308 128 128 0 70.692-57.308 128-128 128-70.692 0-128-57.308-128-128z"
+ ],
+ "tags": [
+ "list",
+ "bullet",
+ "ul",
+ "todo",
+ "menu"
+ ],
+ "grid": 16
+ },
+ "properties": {
+ "id": 181,
+ "order": 14,
+ "prevSize": 32,
+ "code": 58893,
+ "name": "list2",
+ "ligatures": ""
+ },
+ "setIdx": 0,
+ "iconIdx": 181
+ },
+ {
+ "icon": {
+ "paths": [
+ "M384 832h640v128h-640zM384 448h640v128h-640zM384 64h640v128h-640zM192 0v256h-64v-192h-64v-64zM128 526v50h128v64h-192v-146l128-60v-50h-128v-64h192v146zM256 704v320h-192v-64h128v-64h-128v-64h128v-64h-128v-64z"
+ ],
+ "tags": [
+ "numbered-list",
+ "list",
+ "items",
+ "nl"
+ ],
+ "grid": 16
+ },
+ "properties": {
+ "id": 182,
+ "order": 15,
+ "prevSize": 32,
+ "code": 58894,
+ "name": "numbered-list",
+ "ligatures": ""
+ },
+ "setIdx": 0,
+ "iconIdx": 182
+ },
+ {
+ "icon": {
+ "paths": [
+ "M64 192h896v192h-896zM64 448h896v192h-896zM64 704h896v192h-896z"
+ ],
+ "tags": [
+ "menu",
+ "list",
+ "items",
+ "lines",
+ "options"
+ ],
+ "grid": 16
+ },
+ "properties": {
+ "id": 184,
+ "order": 16,
+ "prevSize": 32,
+ "code": 58895,
+ "name": "menu",
+ "ligatures": ""
+ },
+ "setIdx": 0,
+ "iconIdx": 184
+ },
+ {
+ "icon": {
+ "paths": [
+ "M1024 736 736 0h-448l-288 288v448l288 288h448l288-288v-448l-288-288zM576 832h-128v-128h128v128zM576 576h-128v-384h128v384z"
+ ],
+ "tags": [
+ "spam",
+ "notice",
+ "notification",
+ "exclamation"
+ ],
+ "grid": 16
+ },
+ "properties": {
+ "id": 252,
+ "order": 17,
+ "prevSize": 32,
+ "code": 58896,
+ "name": "spam",
+ "ligatures": ""
+ },
+ "setIdx": 0,
+ "iconIdx": 252
+ },
+ {
+ "icon": {
+ "paths": [
+ "M1014.662 822.66c-0.004-0.004-0.008-0.008-0.012-0.010l-310.644-310.65 310.644-310.65c0.004-0.004 0.008-0.006 0.012-0.010 3.344-3.346 5.762-7.254 7.312-11.416 4.246-11.376 1.824-24.682-7.324-33.83l-146.746-146.746c-9.148-9.146-22.45-11.566-33.828-7.32-4.16 1.55-8.070 3.968-11.418 7.31 0 0.004-0.004 0.006-0.008 0.010l-310.648 310.652-310.648-310.65c-0.004-0.004-0.006-0.006-0.010-0.010-3.346-3.342-7.254-5.76-11.414-7.31-11.38-4.248-24.682-1.826-33.83 7.32l-146.748 146.748c-9.148 9.148-11.568 22.452-7.322 33.828 1.552 4.16 3.97 8.072 7.312 11.416 0.004 0.002 0.006 0.006 0.010 0.010l310.65 310.648-310.65 310.652c-0.002 0.004-0.006 0.006-0.008 0.010-3.342 3.346-5.76 7.254-7.314 11.414-4.248 11.376-1.826 24.682 7.322 33.83l146.748 146.746c9.15 9.148 22.452 11.568 33.83 7.322 4.16-1.552 8.070-3.97 11.416-7.312 0.002-0.004 0.006-0.006 0.010-0.010l310.648-310.65 310.648 310.65c0.004 0.002 0.008 0.006 0.012 0.008 3.348 3.344 7.254 5.762 11.414 7.314 11.378 4.246 24.684 1.826 33.828-7.322l146.746-146.748c9.148-9.148 11.57-22.454 7.324-33.83-1.552-4.16-3.97-8.068-7.314-11.414z"
+ ],
+ "tags": [
+ "close",
+ "cancel",
+ "quit",
+ "remove",
+ "cross"
+ ],
+ "grid": 16
+ },
+ "properties": {
+ "id": 253,
+ "order": 18,
+ "prevSize": 32,
+ "code": 58897,
+ "name": "close",
+ "ligatures": ""
+ },
+ "setIdx": 0,
+ "iconIdx": 253
+ },
+ {
+ "icon": {
+ "paths": [
+ "M864 128l-480 480-224-224-160 160 384 384 640-640z"
+ ],
+ "tags": [
+ "checkmark",
+ "tick",
+ "correct",
+ "accept",
+ "ok"
+ ],
+ "grid": 16
+ },
+ "properties": {
+ "id": 254,
+ "order": 19,
+ "prevSize": 32,
+ "code": 58898,
+ "name": "checkmark",
+ "ligatures": ""
+ },
+ "setIdx": 0,
+ "iconIdx": 254
+ },
+ {
+ "icon": {
+ "paths": [
+ "M0 416v192c0 17.672 14.328 32 32 32h960c17.672 0 32-14.328 32-32v-192c0-17.672-14.328-32-32-32h-960c-17.672 0-32 14.328-32 32z"
+ ],
+ "tags": [
+ "minus",
+ "minimize",
+ "subtract"
+ ],
+ "grid": 16
+ },
+ "properties": {
+ "id": 257,
+ "order": 20,
+ "prevSize": 32,
+ "code": 58899,
+ "name": "minus",
+ "ligatures": ""
+ },
+ "setIdx": 0,
+ "iconIdx": 257
+ },
+ {
+ "icon": {
+ "paths": [
+ "M992 384h-352v-352c0-17.672-14.328-32-32-32h-192c-17.672 0-32 14.328-32 32v352h-352c-17.672 0-32 14.328-32 32v192c0 17.672 14.328 32 32 32h352v352c0 17.672 14.328 32 32 32h192c17.672 0 32-14.328 32-32v-352h352c17.672 0 32-14.328 32-32v-192c0-17.672-14.328-32-32-32z"
+ ],
+ "tags": [
+ "plus",
+ "add",
+ "sum"
+ ],
+ "grid": 16
+ },
+ "properties": {
+ "id": 258,
+ "order": 21,
+ "prevSize": 32,
+ "code": 58900,
+ "name": "plus",
+ "ligatures": ""
+ },
+ "setIdx": 0,
+ "iconIdx": 258
+ },
+ {
+ "icon": {
+ "paths": [
+ "M192 128l640 384-640 384z"
+ ],
+ "tags": [
+ "play",
+ "media control",
+ "audio"
+ ],
+ "grid": 16
+ },
+ "properties": {
+ "id": 266,
+ "order": 22,
+ "prevSize": 32,
+ "code": 58901,
+ "name": "play",
+ "ligatures": ""
+ },
+ "setIdx": 0,
+ "iconIdx": 266
+ },
+ {
+ "icon": {
+ "paths": [
+ "M128 128h320v768h-320zM576 128h320v768h-320z"
+ ],
+ "tags": [
+ "pause",
+ "media control",
+ "audio"
+ ],
+ "grid": 16
+ },
+ "properties": {
+ "id": 267,
+ "order": 23,
+ "prevSize": 32,
+ "code": 58902,
+ "name": "pause",
+ "ligatures": ""
+ },
+ "setIdx": 0,
+ "iconIdx": 267
+ },
+ {
+ "icon": {
+ "paths": [
+ "M128 128h768v768h-768z"
+ ],
+ "tags": [
+ "stop",
+ "media control",
+ "audio",
+ "square"
+ ],
+ "grid": 16
+ },
+ "properties": {
+ "id": 268,
+ "order": 24,
+ "prevSize": 32,
+ "code": 58903,
+ "name": "stop",
+ "ligatures": ""
+ },
+ "setIdx": 0,
+ "iconIdx": 268
+ },
+ {
+ "icon": {
+ "paths": [
+ "M576 160v320l320-320v704l-320-320v320l-352-352z"
+ ],
+ "tags": [
+ "backward",
+ "media control",
+ "audio"
+ ],
+ "grid": 16
+ },
+ "properties": {
+ "id": 269,
+ "order": 25,
+ "prevSize": 32,
+ "code": 58904,
+ "name": "backward",
+ "ligatures": ""
+ },
+ "setIdx": 0,
+ "iconIdx": 269
+ },
+ {
+ "icon": {
+ "paths": [
+ "M512 864v-320l-320 320v-704l320 320v-320l352 352z"
+ ],
+ "tags": [
+ "forward",
+ "media control",
+ "audio"
+ ],
+ "grid": 16
+ },
+ "properties": {
+ "id": 270,
+ "order": 26,
+ "prevSize": 32,
+ "code": 58905,
+ "name": "forward",
+ "ligatures": ""
+ },
+ "setIdx": 0,
+ "iconIdx": 270
+ },
+ {
+ "icon": {
+ "paths": [
+ "M128 896v-768h128v352l320-320v320l320-320v704l-320-320v320l-320-320v352z"
+ ],
+ "tags": [
+ "first",
+ "media control",
+ "audio"
+ ],
+ "grid": 16
+ },
+ "properties": {
+ "id": 271,
+ "order": 27,
+ "prevSize": 32,
+ "code": 58906,
+ "name": "first",
+ "ligatures": ""
+ },
+ "setIdx": 0,
+ "iconIdx": 271
+ },
+ {
+ "icon": {
+ "paths": [
+ "M896 128v768h-128v-352l-320 320v-320l-320 320v-704l320 320v-320l320 320v-352z"
+ ],
+ "tags": [
+ "last",
+ "media control",
+ "audio"
+ ],
+ "grid": 16
+ },
+ "properties": {
+ "id": 272,
+ "order": 28,
+ "prevSize": 32,
+ "code": 58907,
+ "name": "last",
+ "ligatures": ""
+ },
+ "setIdx": 0,
+ "iconIdx": 272
+ },
+ {
+ "icon": {
+ "paths": [
+ "M256 896v-768h128v352l320-320v704l-320-320v352z"
+ ],
+ "tags": [
+ "previous",
+ "media control",
+ "audio"
+ ],
+ "grid": 16
+ },
+ "properties": {
+ "id": 273,
+ "order": 29,
+ "prevSize": 32,
+ "code": 58908,
+ "name": "previous",
+ "ligatures": ""
+ },
+ "setIdx": 0,
+ "iconIdx": 273
+ },
+ {
+ "icon": {
+ "paths": [
+ "M768 128v768h-128v-352l-320 320v-704l320 320v-352z"
+ ],
+ "tags": [
+ "next",
+ "media control",
+ "audio"
+ ],
+ "grid": 16
+ },
+ "properties": {
+ "id": 274,
+ "order": 30,
+ "prevSize": 32,
+ "code": 58909,
+ "name": "next",
+ "ligatures": ""
+ },
+ "setIdx": 0,
+ "iconIdx": 274
+ },
+ {
+ "icon": {
+ "paths": [
+ "M0 768h1024v128h-1024zM512 128l512 512h-1024z"
+ ],
+ "tags": [
+ "eject",
+ "media control",
+ "audio"
+ ],
+ "grid": 16
+ },
+ "properties": {
+ "id": 275,
+ "order": 31,
+ "prevSize": 32,
+ "code": 58910,
+ "name": "eject",
+ "ligatures": ""
+ },
+ "setIdx": 0,
+ "iconIdx": 275
+ },
+ {
+ "icon": {
+ "paths": [
+ "M890.040 922.040c-12.286 0-24.568-4.686-33.942-14.058-18.744-18.746-18.744-49.136 0-67.882 87.638-87.642 135.904-204.16 135.904-328.1 0-123.938-48.266-240.458-135.904-328.098-18.744-18.746-18.744-49.138 0-67.882 18.744-18.744 49.138-18.744 67.882 0 105.77 105.772 164.022 246.4 164.022 395.98 0 149.582-58.252 290.208-164.022 395.98-9.372 9.374-21.656 14.060-33.94 14.060zM719.53 831.53c-12.286 0-24.568-4.686-33.942-14.058-18.744-18.744-18.744-49.136 0-67.882 131.006-131.006 131.006-344.17 0-475.176-18.744-18.746-18.744-49.138 0-67.882 18.744-18.742 49.138-18.744 67.882 0 81.594 81.592 126.53 190.076 126.53 305.468 0 115.39-44.936 223.876-126.53 305.47-9.372 9.374-21.656 14.060-33.94 14.060zM549.020 741.020c-12.286 0-24.568-4.686-33.942-14.058-18.746-18.746-18.746-49.136 0-67.882 81.1-81.1 81.1-213.058 0-294.156-18.746-18.746-18.746-49.138 0-67.882 18.746-18.744 49.136-18.744 67.882 0 118.53 118.53 118.53 311.392 0 429.922-9.372 9.37-21.656 14.056-33.94 14.056zM401.332 78.668c25.668-25.668 46.668-16.968 46.668 19.332v828c0 36.3-21 44.998-46.668 19.33l-241.332-241.33h-160v-384h160l241.332-241.332z"
+ ],
+ "width": 1088,
+ "tags": [
+ "volume-high",
+ "speaker",
+ "media control",
+ "audio"
+ ],
+ "grid": 16
+ },
+ "properties": {
+ "id": 276,
+ "order": 32,
+ "prevSize": 32,
+ "code": 58911,
+ "name": "volume-high",
+ "ligatures": ""
+ },
+ "setIdx": 0,
+ "iconIdx": 276
+ },
+ {
+ "icon": {
+ "paths": [
+ "M719.53 831.53c-12.286 0-24.568-4.686-33.942-14.058-18.744-18.744-18.744-49.136 0-67.882 131.006-131.006 131.006-344.17 0-475.176-18.744-18.746-18.744-49.138 0-67.882 18.744-18.742 49.138-18.744 67.882 0 81.594 81.592 126.53 190.076 126.53 305.468 0 115.39-44.936 223.876-126.53 305.47-9.372 9.374-21.656 14.060-33.94 14.060zM549.020 741.020c-12.286 0-24.568-4.686-33.942-14.058-18.746-18.746-18.746-49.136 0-67.882 81.1-81.1 81.1-213.058 0-294.156-18.746-18.746-18.746-49.138 0-67.882 18.746-18.744 49.136-18.744 67.882 0 118.53 118.53 118.53 311.392 0 429.922-9.372 9.37-21.656 14.056-33.94 14.056zM401.332 78.668c25.668-25.668 46.668-16.968 46.668 19.332v828c0 36.3-21 44.998-46.668 19.33l-241.332-241.33h-160v-384h160l241.332-241.332z"
+ ],
+ "tags": [
+ "volume-medium",
+ "speaker",
+ "media control",
+ "audio"
+ ],
+ "grid": 16
+ },
+ "properties": {
+ "id": 277,
+ "order": 33,
+ "prevSize": 32,
+ "code": 58912,
+ "name": "volume-medium",
+ "ligatures": ""
+ },
+ "setIdx": 0,
+ "iconIdx": 277
+ },
+ {
+ "icon": {
+ "paths": [
+ "M549.020 741.020c-12.286 0-24.568-4.686-33.942-14.058-18.746-18.746-18.746-49.136 0-67.882 81.1-81.1 81.1-213.058 0-294.156-18.746-18.746-18.746-49.138 0-67.882 18.746-18.744 49.136-18.744 67.882 0 118.53 118.53 118.53 311.392 0 429.922-9.372 9.37-21.656 14.056-33.94 14.056zM401.332 78.668c25.668-25.668 46.668-16.968 46.668 19.332v828c0 36.3-21 44.998-46.668 19.33l-241.332-241.33h-160v-384h160l241.332-241.332z"
+ ],
+ "tags": [
+ "volume-low",
+ "speaker",
+ "media control",
+ "audio"
+ ],
+ "grid": 16
+ },
+ "properties": {
+ "id": 278,
+ "order": 34,
+ "prevSize": 32,
+ "code": 58913,
+ "name": "volume-low",
+ "ligatures": ""
+ },
+ "setIdx": 0,
+ "iconIdx": 278
+ },
+ {
+ "icon": {
+ "paths": [
+ "M401.332 78.668c25.668-25.668 46.668-16.968 46.668 19.332v828c0 36.3-21 44.998-46.668 19.33l-241.332-241.33h-160v-384h160l241.332-241.332z"
+ ],
+ "tags": [
+ "volume-mute",
+ "speaker",
+ "media control",
+ "audio",
+ "mute"
+ ],
+ "grid": 16
+ },
+ "properties": {
+ "id": 279,
+ "order": 35,
+ "prevSize": 32,
+ "code": 58914,
+ "name": "volume-mute",
+ "ligatures": ""
+ },
+ "setIdx": 0,
+ "iconIdx": 279
+ },
+ {
+ "icon": {
+ "paths": [
+ "M401.332 78.668c25.668-25.668 46.668-16.968 46.668 19.332v828c0 36.3-21 44.998-46.668 19.33l-241.332-241.33h-160v-384h160l241.332-241.332zM960 619.148v84.852h-84.852l-107.148-107.148-107.148 107.148h-84.852v-84.852l107.148-107.148-107.148-107.148v-84.852h84.852l107.148 107.148 107.148-107.148h84.852v84.852l-107.148 107.148z"
+ ],
+ "tags": [
+ "volume-mute",
+ "speaker",
+ "media control",
+ "audio",
+ "mute"
+ ],
+ "grid": 16
+ },
+ "properties": {
+ "id": 280,
+ "order": 36,
+ "prevSize": 32,
+ "code": 58915,
+ "name": "volume-mute2",
+ "ligatures": ""
+ },
+ "setIdx": 0,
+ "iconIdx": 280
+ },
+ {
+ "icon": {
+ "paths": [
+ "M428.164 63.918c11.976 0 19.836 11.878 19.838 34.082v828c0 22.206-7.856 34.082-19.836 34.082-7.604 0-16.868-4.788-26.834-14.752l-241.332-241.33h-160v-384h160l241.332-241.332c9.966-9.966 19.228-14.75 26.832-14.75zM1024 576h-192v192h-128v-192h-192v-128h192v-192h128v192h192z"
+ ],
+ "tags": [
+ "volume-increase",
+ "speaker",
+ "media control",
+ "audio"
+ ],
+ "grid": 16
+ },
+ "properties": {
+ "id": 281,
+ "order": 37,
+ "prevSize": 32,
+ "code": 58916,
+ "name": "volume-increase",
+ "ligatures": ""
+ },
+ "setIdx": 0,
+ "iconIdx": 281
+ },
+ {
+ "icon": {
+ "paths": [
+ "M428.164 63.918c11.976 0 19.836 11.878 19.838 34.082v828c0 22.206-7.856 34.082-19.836 34.082-7.604 0-16.868-4.788-26.834-14.752l-241.332-241.33h-160v-384h160l241.332-241.332c9.966-9.966 19.228-14.75 26.832-14.75zM512 448h512v128h-512z"
+ ],
+ "tags": [
+ "volume-decrease",
+ "speaker",
+ "media control",
+ "audio"
+ ],
+ "grid": 16
+ },
+ "properties": {
+ "id": 282,
+ "order": 38,
+ "prevSize": 32,
+ "code": 58917,
+ "name": "volume-decrease",
+ "ligatures": ""
+ },
+ "setIdx": 0,
+ "iconIdx": 282
+ },
+ {
+ "icon": {
+ "paths": [
+ "M128 320h640v192l256-256-256-256v192h-768v384h128zM896 704h-640v-192l-256 256 256 256v-192h768v-384h-128z"
+ ],
+ "tags": [
+ "loop",
+ "repeat",
+ "reload",
+ "refresh",
+ "update",
+ "upgrade",
+ "synchronize",
+ "media control",
+ "arrows"
+ ],
+ "grid": 16
+ },
+ "properties": {
+ "id": 283,
+ "order": 39,
+ "prevSize": 32,
+ "code": 58918,
+ "name": "loop",
+ "ligatures": ""
+ },
+ "setIdx": 0,
+ "iconIdx": 283
+ },
+ {
+ "icon": {
+ "paths": [
+ "M874.022 149.98c-92.652-92.656-220.636-149.98-362.022-149.98-219.488 0-406.69 138.128-479.498 332.188l119.876 44.954c54.604-145.546 195.006-249.142 359.622-249.142 106.040 0 202.020 43 271.506 112.494l-143.506 143.506h384v-384l-149.978 149.98zM512 896c-106.040 0-202.026-42.992-271.512-112.488l143.512-143.512h-384v384l149.994-149.994c92.646 92.662 220.618 149.994 362.006 149.994 219.49 0 406.692-138.128 479.5-332.188l-119.876-44.954c-54.604 145.546-195.006 249.142-359.624 249.142z"
+ ],
+ "tags": [
+ "loop",
+ "repeat",
+ "reload",
+ "refresh",
+ "update",
+ "upgrade",
+ "synchronize",
+ "media control",
+ "arrows"
+ ],
+ "grid": 16
+ },
+ "properties": {
+ "id": 284,
+ "order": 40,
+ "prevSize": 32,
+ "code": 58919,
+ "name": "loop2",
+ "ligatures": ""
+ },
+ "setIdx": 0,
+ "iconIdx": 284
+ },
+ {
+ "icon": {
+ "paths": [
+ "M320 640v-192h192l-256-256-256 256h192v320h384l-128-128zM832 576v-320h-384l128 128h128v192h-192l256 256 256-256z"
+ ],
+ "tags": [
+ "loop",
+ "repeat",
+ "reload",
+ "refresh",
+ "update",
+ "upgrade",
+ "synchronize",
+ "media control",
+ "arrows"
+ ],
+ "grid": 16
+ },
+ "properties": {
+ "id": 285,
+ "order": 41,
+ "prevSize": 32,
+ "code": 58920,
+ "name": "loop3",
+ "ligatures": ""
+ },
+ "setIdx": 0,
+ "iconIdx": 285
+ },
+ {
+ "icon": {
+ "paths": [
+ "M1024 256l-256-256v192c-130.772 0-230.752 31.208-305.65 95.408-5.25 4.5-10.284 9.1-15.162 13.774 27.52 38.164 48.716 77.516 67.772 115.090 48.322-58.402 118.054-96.272 253.040-96.272v192 0 192c-216.446 0-265.126-97.36-326.756-220.622-34.306-68.612-69.78-139.56-135.592-195.97-74.9-64.2-174.88-95.408-305.652-95.408v128c216.446 0 265.126 97.36 326.756 220.622 34.306 68.612 69.78 139.56 135.592 195.97 74.9 64.2 174.882 95.408 305.652 95.408v192l256-256-256-256 256-256zM0 704v128c130.772 0 230.75-31.208 305.65-95.408 5.25-4.498 10.284-9.1 15.162-13.776-27.52-38.162-48.718-77.516-67.772-115.090-48.32 58.402-118.052 96.274-253.040 96.274z"
+ ],
+ "tags": [
+ "shuffle",
+ "media control",
+ "random"
+ ],
+ "grid": 16
+ },
+ "properties": {
+ "id": 286,
+ "order": 42,
+ "prevSize": 32,
+ "code": 58921,
+ "name": "shuffle",
+ "ligatures": ""
+ },
+ "setIdx": 0,
+ "iconIdx": 286
+ }
+ ],
+ "height": 1024,
+ "metadata": {
+ "name": "icomoon"
+ },
+ "preferences": {
+ "fontPref": {
+ "prefix": "icon-",
+ "metadata": {
+ "fontFamily": "icomoon"
+ },
+ "showGlyphs": true,
+ "metrics": {
+ "emSize": 512,
+ "baseline": 6.25,
+ "whitespace": 50
+ },
+ "resetPoint": 58880,
+ "showQuickUse": true,
+ "quickUsageToken": false,
+ "showMetrics": true,
+ "showMetadata": false
+ },
+ "imagePref": {
+ "color": 0,
+ "height": 32,
+ "columns": 16,
+ "margin": 16,
+ "png": false,
+ "sprites": true
+ },
+ "historySize": 100,
+ "showCodes": true,
+ "gridSize": 16,
+ "showLiga": false,
+ "showGrid": true,
+ "showGlyphs": true,
+ "showQuickUse": true,
+ "search": ""
+ }
}
\ No newline at end of file
diff --git a/mopidy_touchscreen/gpio_inpput_manager.py b/mopidy_touchscreen/gpio_inpput_manager.py
index 0423828..dc6ea6e 100644
--- a/mopidy_touchscreen/gpio_inpput_manager.py
+++ b/mopidy_touchscreen/gpio_inpput_manager.py
@@ -18,7 +18,8 @@ class GPIOManager():
# Right Button
GPIO.setup(pins['right'], GPIO.IN, pull_up_down=GPIO.PUD_UP)
- GPIO.add_event_detect(pins['right'], GPIO.BOTH, callback=right,
+ GPIO.add_event_detect(pins['right'], GPIO.BOTH,
+ callback=right,
bouncetime=30)
# Up Button
@@ -33,7 +34,8 @@ class GPIOManager():
# Enter Button
GPIO.setup(pins['enter'], GPIO.IN, pull_up_down=GPIO.PUD_UP)
- GPIO.add_event_detect(pins['enter'], GPIO.BOTH, callback=right,
+ GPIO.add_event_detect(pins['enter'], GPIO.BOTH,
+ callback=right,
bouncetime=30)
diff --git a/mopidy_touchscreen/input_manager.py b/mopidy_touchscreen/input_manager.py
index 7e47842..5d76127 100644
--- a/mopidy_touchscreen/input_manager.py
+++ b/mopidy_touchscreen/input_manager.py
@@ -34,19 +34,24 @@ class InputManager():
if event.type == pygame.MOUSEBUTTONUP:
if event.button == 4:
- touch_event = InputEvent(InputManager.swipe, self.down_pos,
- self.up_pos, True, InputManager.up)
+ touch_event = InputEvent(InputManager.swipe,
+ self.down_pos,
+ self.up_pos, True,
+ InputManager.up)
return touch_event
elif event.button == 5:
- touch_event = InputEvent(InputManager.swipe, self.down_pos,
- self.up_pos, True, InputManager.down)
+ touch_event = InputEvent(InputManager.swipe,
+ self.down_pos,
+ self.up_pos, True,
+ InputManager.down)
return touch_event
elif event.button == 1 and self.down_button == 1:
touch_event = self.mouse_up(event)
return touch_event
elif event.button == 3 and self.down_button == 3:
touch_event = InputEvent(InputManager.long_click,
- self.down_pos, self.up_pos, None, None)
+ self.down_pos, self.up_pos,
+ None, None)
return touch_event
else:
return None
@@ -78,7 +83,8 @@ class InputManager():
else:
return None
if direction is not None:
- return InputEvent(InputManager.key, None, None, None, direction)
+ return InputEvent(InputManager.key, None, None, None,
+ direction)
def mouse_down(self, event):
self.down_pos = event.pos
@@ -87,26 +93,33 @@ class InputManager():
def mouse_up(self, event):
self.up_pos = event.pos
- if abs(self.down_pos[0] - self.up_pos[0]) < self.max_move_margin:
- if abs(self.down_pos[1] - self.up_pos[1]) < self.max_move_margin:
+ if abs(self.down_pos[0] - self.up_pos[
+ 0]) < self.max_move_margin:
+ if abs(self.down_pos[1] - self.up_pos[
+ 1]) < self.max_move_margin:
if time.time() - InputManager.long_click_min_time > \
self.down_time:
- return InputEvent(InputManager.long_click, self.down_pos,
+ return InputEvent(InputManager.long_click,
+ self.down_pos,
self.up_pos, None, None)
else:
- return InputEvent(InputManager.click, self.down_pos,
+ return InputEvent(InputManager.click,
+ self.down_pos,
self.up_pos, None, None)
- elif abs(self.down_pos[1] - self.up_pos[1]) > self.min_swipe_move:
+ elif abs(self.down_pos[1] - self.up_pos[
+ 1]) > self.min_swipe_move:
return InputEvent(InputManager.swipe, self.down_pos,
self.up_pos, True, None)
elif self.down_pos[1] - self.up_pos[1] < self.max_move_margin:
- if abs(self.down_pos[0] - self.up_pos[0]) > self.min_swipe_move:
+ if abs(self.down_pos[0] - self.up_pos[
+ 0]) > self.min_swipe_move:
return InputEvent(InputManager.swipe, self.down_pos,
self.up_pos, False, None)
class InputEvent():
- def __init__(self, event_type, down_pos, current_pos, vertical, direction):
+ def __init__(self, event_type, down_pos, current_pos, vertical,
+ direction):
self.type = event_type
self.down_pos = down_pos
self.current_pos = current_pos
diff --git a/mopidy_touchscreen/library_screen.py b/mopidy_touchscreen/library_screen.py
index 7380578..cb1361c 100644
--- a/mopidy_touchscreen/library_screen.py
+++ b/mopidy_touchscreen/library_screen.py
@@ -1,5 +1,4 @@
import logging
-
import mopidy.models
from .list_view import ListView
@@ -15,7 +14,8 @@ class LibraryScreen():
self.manager = manager
self.list_view = ListView((0, self.base_size), (
self.size[0], self.size[1] - 2 * self.base_size),
- self.base_size, manager.fonts['base'])
+ self.base_size,
+ manager.fonts['base'])
self.directory_list = []
self.current_directory = None
self.library = None
@@ -23,7 +23,7 @@ class LibraryScreen():
self.lookup_uri(None)
def get_dirty_area(self):
- return self.list_view.get_dirty_area()
+ return self.list_view.get_dirty_area()
def go_inside_directory(self, uri):
self.directory_list.append(self.current_directory)
@@ -46,7 +46,7 @@ class LibraryScreen():
self.lookup_uri(directory)
def update(self, screen, update_all):
- self.list_view.render(screen)
+ self.list_view.render(screen)
def touch_event(self, touch_event):
clicked = self.list_view.touch_event(touch_event)
@@ -56,7 +56,8 @@ class LibraryScreen():
if clicked == 0:
self.go_up_directory()
else:
- self.play_uri(self.library[clicked - 1].uri, False)
+ self.play_uri(self.library[clicked - 1].uri,
+ False)
else:
self.play_uri(self.library[clicked].uri, False)
else:
@@ -65,16 +66,19 @@ class LibraryScreen():
self.go_up_directory()
else:
if self.library[
- clicked - 1].type == mopidy.models.Ref.TRACK:
- self.play_uri(self.library[clicked - 1].uri, True)
+ clicked - 1].type == mopidy.models.Ref.TRACK:
+ self.play_uri(
+ self.library[clicked - 1].uri, True)
else:
self.go_inside_directory(
self.library[clicked - 1].uri)
else:
- if self.library[clicked].type == mopidy.models.Track:
+ if self.library[
+ clicked].type == mopidy.models.Track:
self.play_uri(self.library[clicked].uri, True)
else:
- self.go_inside_directory(self.library[clicked].uri)
+ self.go_inside_directory(
+ self.library[clicked].uri)
def play_uri(self, uri, track):
self.manager.core.tracklist.clear()
diff --git a/mopidy_touchscreen/list_view.py b/mopidy_touchscreen/list_view.py
index eab3aef..bdad9ed 100644
--- a/mopidy_touchscreen/list_view.py
+++ b/mopidy_touchscreen/list_view.py
@@ -1,6 +1,7 @@
import logging
-from .screen_objects import ScreenObjectsManager, ScrollBar, TouchAndTextItem
+from .screen_objects import ScreenObjectsManager, ScrollBar, \
+ TouchAndTextItem
from .input_manager import InputManager
logger = logging.getLogger(__name__)
@@ -21,20 +22,20 @@ class ListView():
self.set_list([])
self.selected = []
- def get_dirty_area(self):
- return self.screen_objects.get_dirty_area()
-
# Sets the list for the lisview. It should be an iterable of strings
def set_list(self, item_list):
- self.screen_objects.clear()
+ self.screen_objects.clear()
self.list = item_list
self.list_size = len(item_list)
if self.max_rows < self.list_size:
self.scrollbar = True
scroll_bar = ScrollBar(
- (self.pos[0] + self.size[0] - self.base_size, self.pos[1]),
- (self.base_size, self.size[1]), self.list_size, self.max_rows)
- self.screen_objects.set_touch_object("scrollbar", scroll_bar)
+ (self.pos[0] + self.size[0] - self.base_size,
+ self.pos[1]),
+ (self.base_size, self.size[1]), self.list_size,
+ self.max_rows)
+ self.screen_objects.set_touch_object("scrollbar",
+ scroll_bar)
else:
self.scrollbar = False
self.load_new_item_position(0)
@@ -55,13 +56,12 @@ class ListView():
while i < self.list_size and z < self.max_rows:
item = TouchAndTextItem(self.font, self.list[i], (
self.pos[0], self.pos[1] + self.base_size * z),
- (width, -1))
+ (width, -1))
self.screen_objects.set_touch_object(str(i), item)
i += 1
z += 1
-
def render(self, surface):
self.screen_objects.render(surface)
@@ -95,14 +95,16 @@ class ListView():
if self.current_item + self.max_rows > self.list_size:
self.current_item = self.list_size - self.max_rows
self.load_new_item_position(self.current_item)
- self.screen_objects.get_touch_object("scrollbar").set_item(
+ self.screen_objects.get_touch_object(
+ "scrollbar").set_item(
self.current_item)
elif direction == -1:
self.current_item -= self.max_rows
if self.current_item < 0:
self.current_item = 0
self.load_new_item_position(self.current_item)
- self.screen_objects.get_touch_object("scrollbar").set_item(
+ self.screen_objects.get_touch_object(
+ "scrollbar").set_item(
self.current_item)
self.set_selected(self.selected)
@@ -110,13 +112,15 @@ class ListView():
def set_selected(self, selected):
for number in self.selected:
try:
- self.screen_objects.get_touch_object(str(number)).set_active(
+ self.screen_objects.get_touch_object(
+ str(number)).set_active(
False)
except KeyError:
pass
for number in selected:
try:
- self.screen_objects.get_touch_object(str(number)).set_active(
+ self.screen_objects.get_touch_object(
+ str(number)).set_active(
True)
except KeyError:
pass
diff --git a/mopidy_touchscreen/main_screen.py b/mopidy_touchscreen/main_screen.py
index d6b49be..b452cf8 100644
--- a/mopidy_touchscreen/main_screen.py
+++ b/mopidy_touchscreen/main_screen.py
@@ -6,13 +6,14 @@ import time
import urllib
import urllib2
from threading import Thread
-
import pygame
-from .screen_objects import (Progressbar, ScreenObjectsManager, TextItem,
+from .screen_objects import (Progressbar, ScreenObjectsManager,
+ TextItem,
TouchAndTextItem)
from .input_manager import InputManager
+
logger = logging.getLogger(__name__)
@@ -27,9 +28,7 @@ class MainScreen():
self.cache = cache
self.image = None
self.artists = None
- self.dirty_area = []
- self.track_duration = "00:00"
- self.image_now_loaded = False
+ self.track_duration = "00:00"
self.touch_text_manager = ScreenObjectsManager()
current_track = self.core.playback.current_track.get()
if current_track is None:
@@ -42,18 +41,13 @@ class MainScreen():
self.touch_text_manager.get_touch_object(
"time_progress").set_value(
self.core.playback.time_position.get() / 1000)
- self.touch_text_manager.get_touch_object("time_progress").set_text(
+ self.touch_text_manager.get_touch_object(
+ "time_progress").set_text(
time.strftime('%M:%S', time.gmtime(
self.core.playback.time_position.get() / 1000)) + "/" + self.track_duration)
- if update_all:
- if self.image is not None:
- screen.blit(self.image, (self.base_size / 2, self.base_size + self.base_size / 2))
- self.image_now_loaded = False
- elif self.image_now_loaded:
- self.dirty_area.append(pygame.Rect(self.base_size / 2, self.base_size + self.base_size / 2, self.image.get_rect().width,self.image.get_rect().height))
- screen.blit(self.image, (self.base_size / 2, self.base_size + self.base_size / 2))
- self.image_now_loaded = False
- self.touch_text_manager.render(screen)
+ screen.blit(self.image, (
+ self.base_size / 2, self.base_size + self.base_size / 2))
+ self.touch_text_manager.render(screen)
return screen
def track_started(self, track):
@@ -61,7 +55,8 @@ class MainScreen():
x = self.base_size * 5
width = self.size[0] - self.base_size / 2 - x
- self.track_duration = time.strftime('%M:%S', time.gmtime(track.length / 1000))
+ self.track_duration = time.strftime('%M:%S', time.gmtime(
+ track.length / 1000))
# Load all artists
self.artists = []
@@ -69,7 +64,8 @@ class MainScreen():
self.artists.append(artist)
# Track name
- label = TextItem(self.fonts['base'], MainScreen.get_track_name(track),
+ label = TextItem(self.fonts['base'],
+ MainScreen.get_track_name(track),
(x, self.base_size * 2),
(width, self.size[1]))
self.touch_text_manager.set_object("track_name", label)
@@ -83,7 +79,8 @@ class MainScreen():
# Artist
label = TextItem(self.fonts['base'], self.get_artist_string(),
- (x, self.base_size * 4), (width, self.size[1]))
+ (x, self.base_size * 4),
+ (width, self.size[1]))
self.touch_text_manager.set_object("artist_name", label)
# Previous track button
@@ -94,17 +91,24 @@ class MainScreen():
size_2 = self.fonts['icon'].size(u"\ue61d")[0]
button = TouchAndTextItem(self.fonts['icon'], u"\ue61d",
- (self.size[0] - size_2, self.base_size * 6),
+ (self.size[0] - size_2,
+ self.base_size * 6),
None)
self.touch_text_manager.set_touch_object("next", button)
# Progress
- progress = Progressbar(self.fonts['base'],time.strftime('%M:%S', time.gmtime(0)) + "/" + time.strftime('%M:%S',time.gmtime(0)),
+ progress = Progressbar(self.fonts['base'],
+ time.strftime('%M:%S', time.gmtime(
+ 0)) + "/" + time.strftime('%M:%S',
+ time.gmtime(
+ 0)),
(size_1, self.base_size * 6),
(
- self.size[0] - size_1 - size_2, self.base_size),
+ self.size[0] - size_1 - size_2,
+ self.base_size),
track.length / 1000, False)
- self.touch_text_manager.set_touch_object("time_progress", progress)
+ self.touch_text_manager.set_touch_object("time_progress",
+ progress)
self.track = track
if not self.is_image_in_cache():
@@ -113,10 +117,6 @@ class MainScreen():
else:
self.load_image()
- def get_dirty_area(self):
- dirty = self.touch_text_manager.get_dirty_area() + self.dirty_area
- self.dirty_area = []
- return dirty
def get_artist_string(self):
artists_string = ''
@@ -175,28 +175,36 @@ class MainScreen():
current = TextItem(self.fonts['base'],
MainScreen.get_track_name(self.track),
- (self.base_size / 2, self.base_size * 2),
+ (self.base_size / 2,
+ self.base_size * 2),
(width, -1))
self.touch_text_manager.set_object("track_name", current)
current = TextItem(self.fonts['base'],
- MainScreen.get_track_album_name(self.track),
- (self.base_size / 2, self.base_size * 3),
+ MainScreen.get_track_album_name(
+ self.track),
+ (self.base_size / 2,
+ self.base_size * 3),
(width, -1))
self.touch_text_manager.set_object("album_name", current)
- current = TextItem(self.fonts['base'], self.get_artist_string(),
- (self.base_size / 2, self.base_size * 4),
+ current = TextItem(self.fonts['base'],
+ self.get_artist_string(),
+ (self.base_size / 2,
+ self.base_size * 4),
(width, -1))
self.touch_text_manager.set_object("artist_name", current)
def track_playback_ended(self, tl_track, time_position):
- if self.image is not None:
- self.dirty_area.append(pygame.Rect(self.base_size / 2, self.base_size + self.base_size / 2, self.image.get_rect().width,self.image.get_rect().height))
+ if self.image is not None:
+ self.dirty_area.append(pygame.Rect(self.base_size / 2,
+ self.base_size + self.base_size / 2,
+ self.image.get_rect().width,
+ self.image.get_rect().height))
self.image = None
- self.track_duration = "00:00"
-
+ self.track_duration = "00:00"
+
# There is no cover so it will use all the screen size for the text
width = self.size[0] - self.base_size
@@ -223,7 +231,7 @@ class MainScreen():
self.get_cover_folder() +
self.get_image_file_name()).convert(),
(size, size))
- self.image_now_loaded = True
+ self.image_now_loaded = True
def touch_event(self, event):
if event.type == InputManager.click:
@@ -233,9 +241,10 @@ class MainScreen():
for key in objects:
if key == "time_progress":
value = self.touch_text_manager.get_touch_object(
- key).get_pos_value(event.current_pos) * 1000
+ key).get_pos_value(
+ event.current_pos) * 1000
self.core.playback.seek(value)
-
+
elif key == "previous":
self.core.playback.previous()
elif key == "next":
diff --git a/mopidy_touchscreen/menu_screen.py b/mopidy_touchscreen/menu_screen.py
index 08dfb61..6bd09d7 100644
--- a/mopidy_touchscreen/menu_screen.py
+++ b/mopidy_touchscreen/menu_screen.py
@@ -1,6 +1,5 @@
import os
import socket
-
import mopidy
from .screen_objects import ScreenObjectsManager, TouchAndTextItem
@@ -16,29 +15,38 @@ class MenuScreen():
self.screen_objects = ScreenObjectsManager()
# Exit mopidy button
- button = TouchAndTextItem(self.manager.fonts['icon'], u"\ue611",
+ button = TouchAndTextItem(self.manager.fonts['icon'],
+ u"\ue611",
(0, self.base_size), None)
self.screen_objects.set_touch_object("exit_icon", button)
- button = TouchAndTextItem(self.manager.fonts['base'], "Exit Mopidy",
- (button.get_right_pos(), self.base_size),
+ button = TouchAndTextItem(self.manager.fonts['base'],
+ "Exit Mopidy",
+ (button.get_right_pos(),
+ self.base_size),
None)
self.screen_objects.set_touch_object("exit", button)
# Shutdown button
- button = TouchAndTextItem(self.manager.fonts['icon'], u"\ue60b",
+ button = TouchAndTextItem(self.manager.fonts['icon'],
+ u"\ue60b",
(0, self.base_size * 2), None)
self.screen_objects.set_touch_object("shutdown_icon", button)
- button = TouchAndTextItem(self.manager.fonts['base'], "Shutdown",
- (button.get_right_pos(), self.base_size * 2),
+ button = TouchAndTextItem(self.manager.fonts['base'],
+ "Shutdown",
+ (button.get_right_pos(),
+ self.base_size * 2),
None)
self.screen_objects.set_touch_object("shutdown", button)
# Restart button
- button = TouchAndTextItem(self.manager.fonts['icon'], u"\ue609",
+ button = TouchAndTextItem(self.manager.fonts['icon'],
+ u"\ue609",
(0, self.base_size * 3), None)
self.screen_objects.set_touch_object("restart_icon", button)
- button = TouchAndTextItem(self.manager.fonts['base'], "Restart",
- (button.get_right_pos(), self.base_size * 3),
+ button = TouchAndTextItem(self.manager.fonts['base'],
+ "Restart",
+ (button.get_right_pos(),
+ self.base_size * 3),
None)
self.screen_objects.set_touch_object("restart", button)
@@ -50,9 +58,6 @@ class MenuScreen():
def update(self, screen, update_all):
self.screen_objects.render(screen)
- def get_dirty_area(self):
- return self.screen_objects.get_dirty_area()
-
def touch_event(self, event):
if event.type == InputManager.click:
clicked = self.screen_objects.get_touch_objects_in_pos(
diff --git a/mopidy_touchscreen/playlist_screen.py b/mopidy_touchscreen/playlist_screen.py
index ac24045..d40ef16 100644
--- a/mopidy_touchscreen/playlist_screen.py
+++ b/mopidy_touchscreen/playlist_screen.py
@@ -8,16 +8,14 @@ class PlaylistScreen():
self.manager = manager
self.list_view = ListView((0, self.base_size), (
self.size[0], self.size[1] - 2 * self.base_size),
- self.base_size, manager.fonts['base'])
+ self.base_size,
+ manager.fonts['base'])
self.playlists_strings = []
self.playlists = []
self.playlists_loaded()
- def get_dirty_area(self):
- return self.list_view.get_dirty_area()
-
def update(self, screen, update_all):
- self.list_view.render(screen)
+ self.list_view.render(screen)
def playlists_loaded(self):
self.playlists_strings = []
@@ -31,5 +29,6 @@ class PlaylistScreen():
clicked = self.list_view.touch_event(touch_event)
if clicked is not None:
self.manager.core.tracklist.clear()
- self.manager.core.tracklist.add(uri=self.playlists[clicked].uri)
+ self.manager.core.tracklist.add(
+ uri=self.playlists[clicked].uri)
self.manager.core.playback.play()
diff --git a/mopidy_touchscreen/screen_manager.py b/mopidy_touchscreen/screen_manager.py
index fcc7187..9e92c51 100644
--- a/mopidy_touchscreen/screen_manager.py
+++ b/mopidy_touchscreen/screen_manager.py
@@ -1,6 +1,5 @@
import logging
import traceback
-
import mopidy
import mopidy.core
import pygame
@@ -10,31 +9,35 @@ from .library_screen import LibraryScreen
from .main_screen import MainScreen
from .menu_screen import MenuScreen
from .playlist_screen import PlaylistScreen
-from .screen_objects import Progressbar, ScreenObjectsManager, TouchAndTextItem
+from .screen_objects import Progressbar, ScreenObjectsManager, \
+ TouchAndTextItem
from .input_manager import InputManager
from .tracklist import Tracklist
+
logger = logging.getLogger(__name__)
class ScreenManager():
- def __init__(self, size, core, backend, cache):
+ def __init__(self, size, core, cache):
self.size = size
self.core = core
- self.backend = backend
self.fonts = {}
self.current_screen = 0
self.base_size = self.size[1] / 8
- font = resource_filename(Requirement.parse("mopidy-touchscreen"),
- "mopidy_touchscreen/icomoon.ttf")
- self.fonts['base'] = pygame.font.SysFont("verdana", self.base_size)
+ font = resource_filename(
+ Requirement.parse("mopidy-touchscreen"),
+ "mopidy_touchscreen/icomoon.ttf")
+ self.fonts['base'] = pygame.font.SysFont("verdana",
+ self.base_size)
self.fonts['icon'] = pygame.font.Font(font, self.base_size)
try:
- self.screens = [MainScreen(size, self, cache, core, self.fonts),
- Tracklist(size, self.base_size, self),
- LibraryScreen(size, self.base_size, self),
- PlaylistScreen(size, self.base_size, self),
- MenuScreen(size, self.base_size, self)]
+ self.screens = [
+ MainScreen(size, self, cache, core, self.fonts),
+ Tracklist(size, self.base_size, self),
+ LibraryScreen(size, self.base_size, self),
+ PlaylistScreen(size, self.base_size, self),
+ MenuScreen(size, self.base_size, self)]
except:
traceback.print_exc()
self.track = None
@@ -42,8 +45,8 @@ class ScreenManager():
self.top_bar_objects = ScreenObjectsManager()
self.down_bar_objects = ScreenObjectsManager()
self.selected_zone = self.top_bar_objects
- self.dirty_area = []
- self.screen_changed = True
+ self.dirty_area = []
+ self.screen_changed = True
# Top bar
self.top_bar = pygame.Surface((self.size[0], self.base_size),
@@ -51,38 +54,45 @@ class ScreenManager():
self.top_bar.fill((0, 0, 0, 128))
# Play/pause
- button = TouchAndTextItem(self.fonts['icon'], u"\ue615 ", (0, 0), None)
+ button = TouchAndTextItem(self.fonts['icon'], u"\ue615 ",
+ (0, 0), None)
self.top_bar_objects.set_touch_object("pause_play", button)
x = button.get_right_pos()
# Random
- button = TouchAndTextItem(self.fonts['icon'], u"\ue629 ", (x, 0), None)
+ button = TouchAndTextItem(self.fonts['icon'], u"\ue629 ",
+ (x, 0), None)
self.top_bar_objects.set_touch_object("random", button)
x = button.get_right_pos()
# Repeat
- button = TouchAndTextItem(self.fonts['icon'], u"\ue626", (x, 0), None)
+ button = TouchAndTextItem(self.fonts['icon'], u"\ue626",
+ (x, 0), None)
self.top_bar_objects.set_touch_object("repeat", button)
x = button.get_right_pos()
# Single
- button = TouchAndTextItem(self.fonts['base'], " 1 ", (x, 0), None)
+ button = TouchAndTextItem(self.fonts['base'], " 1 ", (x, 0),
+ None)
self.top_bar_objects.set_touch_object("single", button)
x = button.get_right_pos()
# Internet
- button = TouchAndTextItem(self.fonts['icon'], u"\ue602 ", (x, 0), None)
+ button = TouchAndTextItem(self.fonts['icon'], u"\ue602 ",
+ (x, 0), None)
self.top_bar_objects.set_touch_object("internet", button)
x = button.get_right_pos()
# Mute
- button = TouchAndTextItem(self.fonts['icon'], u"\ue61f ", (x, 0), None)
+ button = TouchAndTextItem(self.fonts['icon'], u"\ue61f ",
+ (x, 0), None)
self.top_bar_objects.set_touch_object("mute", button)
x = button.get_right_pos()
# Volume
progress = Progressbar(self.fonts['base'], "100", (x, 0),
- (self.size[0] - x, self.base_size), 100, True)
+ (self.size[0] - x, self.base_size),
+ 100, True)
self.top_bar_objects.set_touch_object("volume", progress)
progress.set_value(self.core.playback.volume.get())
@@ -92,25 +102,29 @@ class ScreenManager():
# Main button
button = TouchAndTextItem(self.fonts['icon'], u" \ue600",
- (0, self.base_size * 7), button_size)
+ (0, self.base_size * 7),
+ button_size)
self.down_bar_objects.set_touch_object("menu_0", button)
x = button.get_right_pos()
# Tracklist button
button = TouchAndTextItem(self.fonts['icon'], u" \ue60d",
- (x, self.base_size * 7), button_size)
+ (x, self.base_size * 7),
+ button_size)
self.down_bar_objects.set_touch_object("menu_1", button)
x = button.get_right_pos()
# Library button
button = TouchAndTextItem(self.fonts['icon'], u" \ue604",
- (x, self.base_size * 7), button_size)
+ (x, self.base_size * 7),
+ button_size)
self.down_bar_objects.set_touch_object("menu_2", button)
x = button.get_right_pos()
# Playlist button
button = TouchAndTextItem(self.fonts['icon'], u" \ue605",
- (x, self.base_size * 7), button_size)
+ (x, self.base_size * 7),
+ button_size)
self.down_bar_objects.set_touch_object("menu_3", button)
x = button.get_right_pos()
@@ -121,7 +135,8 @@ class ScreenManager():
# Down bar
self.down_bar = pygame.Surface(
- (self.size[0], self.size[1] - self.base_size * 7), pygame.SRCALPHA)
+ (self.size[0], self.size[1] - self.base_size * 7),
+ pygame.SRCALPHA)
self.down_bar.fill((0, 0, 0, 128))
self.options_changed()
@@ -135,13 +150,14 @@ class ScreenManager():
def update(self):
surface = pygame.Surface(self.size)
- surface.fill([200,200,200])
- self.screens[self.current_screen].update(surface, self.screen_changed)
+ surface.fill([200, 200, 200])
+ self.screens[self.current_screen].update(surface,
+ self.screen_changed)
surface.blit(self.top_bar, (0, 0))
surface.blit(self.down_bar, (0, self.base_size * 7))
self.top_bar_objects.render(surface)
self.down_bar_objects.render(surface)
- self.screen_changed = False
+ self.screen_changed = False
return surface
def track_started(self, track):
@@ -150,12 +166,13 @@ class ScreenManager():
self.screens[1].track_started(track)
def get_dirty_area(self):
- self.dirty_area = self.dirty_area + self.top_bar_objects.get_dirty_area()
+ self.dirty_area = self.dirty_area + self.top_bar_objects.get_dirty_area()
self.dirty_area = self.dirty_area + self.down_bar_objects.get_dirty_area()
- self.dirty_area = self.dirty_area + self.screens[self.current_screen].get_dirty_area()
- dirty_area = self.dirty_area
- self.dirty_area = []
- return dirty_area
+ self.dirty_area = self.dirty_area + self.screens[
+ self.current_screen].get_dirty_area()
+ dirty_area = self.dirty_area
+ self.dirty_area = []
+ return dirty_area
def track_playback_ended(self, tl_track, time_position):
self.screens[0].track_playback_ended(tl_track, time_position)
@@ -166,8 +183,9 @@ class ScreenManager():
if event.type == InputManager.click:
objects = self.top_bar_objects.get_touch_objects_in_pos(
event.current_pos)
- objects.extend(self.down_bar_objects.get_touch_objects_in_pos(
- event.current_pos))
+ objects.extend(
+ self.down_bar_objects.get_touch_objects_in_pos(
+ event.current_pos))
self.click_on_objects(objects, event)
elif event.type == InputManager.key and event.direction == InputManager.enter:
objects = [self.selected_zone.selected_key]
@@ -175,7 +193,8 @@ class ScreenManager():
elif event.type == InputManager.key:
if event.direction == InputManager.enter:
logger.error(self.selected_zone.selected_key)
- self.click_on_objects([self.selected_zone.selected_key], event)
+ self.click_on_objects(
+ [self.selected_zone.selected_key], event)
else:
self.change_selection(event, None)
self.screens[self.current_screen].touch_event(event)
@@ -183,16 +202,20 @@ class ScreenManager():
def volume_changed(self, volume):
if not self.core.playback.mute.get():
if volume > 80:
- self.top_bar_objects.get_touch_object("mute").set_text(
+ self.top_bar_objects.get_touch_object(
+ "mute").set_text(
u"\ue61f", False)
elif volume > 50:
- self.top_bar_objects.get_touch_object("mute").set_text(
+ self.top_bar_objects.get_touch_object(
+ "mute").set_text(
u"\ue620", False)
elif volume > 20:
- self.top_bar_objects.get_touch_object("mute").set_text(
+ self.top_bar_objects.get_touch_object(
+ "mute").set_text(
u"\ue621", False)
else:
- self.top_bar_objects.get_touch_object("mute").set_text(
+ self.top_bar_objects.get_touch_object(
+ "mute").set_text(
u"\ue622", False)
self.top_bar_objects.get_touch_object("volume").set_value(
volume)
@@ -227,13 +250,12 @@ class ScreenManager():
elif key[:-1] == "menu_":
self.change_screen(int(key[-1:]))
- def change_volume(self,event):
+ def change_volume(self, event):
manager = self.top_bar_objects
volume = manager.get_touch_object("volume")
pos = event.current_pos
value = volume.get_pos_value(pos)
- self.backend.tell(
- {'action': 'volume', 'value': value})
+ self.core.playback.volume = value
self.volume_changed(value)
def playback_state_changed(self, old_state, new_state):
@@ -265,13 +287,14 @@ class ScreenManager():
self.core.tracklist.single.get())
def change_screen(self, new_screen):
- self.screen_changed = True
+ self.screen_changed = True
self.down_bar_objects.get_touch_object(
"menu_" + str(self.current_screen)).set_active(False)
self.current_screen = new_screen
self.down_bar_objects.get_touch_object(
"menu_" + str(new_screen)).set_active(True)
- self.dirty_area.append(pygame.Rect(0,0,self.size[0],self.size[1]))
+ self.dirty_area.append(
+ pygame.Rect(0, 0, self.size[0], self.size[1]))
def playlists_loaded(self):
self.screens[3].playlists_loaded()
@@ -287,13 +310,17 @@ class ScreenManager():
def change_selection(self, event, pos):
if self.selected_zone == self.top_bar_objects:
- if not self.top_bar_objects.change_selected(event.direction, pos) and event.direction == InputManager.down:
+ if not self.top_bar_objects.change_selected(
+ event.direction,
+ pos) and event.direction == InputManager.down:
pos = self.top_bar_objects.selected.pos
self.selected_zone = self.down_bar_objects
self.top_bar_objects.set_selected(None)
self.change_selection(event, pos)
elif self.selected_zone == self.down_bar_objects:
- if not self.down_bar_objects.change_selected(event.direction, pos) and event.direction == InputManager.up:
+ if not self.down_bar_objects.change_selected(
+ event.direction,
+ pos) and event.direction == InputManager.up:
pos = self.down_bar_objects.selected.pos
self.selected_zone = self.top_bar_objects
self.down_bar_objects.set_selected(None)
diff --git a/mopidy_touchscreen/screen_objects.py b/mopidy_touchscreen/screen_objects.py
index 122b81b..c7fe782 100644
--- a/mopidy_touchscreen/screen_objects.py
+++ b/mopidy_touchscreen/screen_objects.py
@@ -1,6 +1,5 @@
import logging
import math
-
import pygame
from .input_manager import InputManager
@@ -15,23 +14,13 @@ class ScreenObjectsManager():
self.text_objects = {}
self.selected = None
self.selected_key = None
- self.dirty_area = []
def clear(self):
- for key in self.touch_objects:
- self.dirty_area.append(self.touch_objects[key].rect_in_pos)
- for key in self.text_objects:
- self.dirty_area.append(self.text_objects[key].rect_in_pos)
- self.touch_objects = {}
+ self.touch_objects = {}
self.text_objects = {}
def set_object(self, key, add_object):
- try:
- self.dirty_area.append(self.text_objects[key].rect_in_pos)
- except KeyError:
- pass
self.text_objects[key] = add_object
- self.dirty_area.append(add_object.rect_in_pos)
def get_object(self, key):
return self.text_objects[key]
@@ -45,19 +34,12 @@ class ScreenObjectsManager():
def render(self, surface):
for key in self.text_objects:
- if self.text_objects[key].update():
- self.dirty_area.append(self.text_objects[key].rect_in_pos)
+ self.text_objects[key].update()
self.text_objects[key].render(surface)
for key in self.touch_objects:
- if self.touch_objects[key].update():
- self.dirty_area.append(self.touch_objects[key].rect_in_pos)
+ self.touch_objects[key].update()
self.touch_objects[key].render(surface)
- def get_dirty_area(self):
- dirty_area = self.dirty_area
- self.dirty_area = []
- return dirty_area
-
def get_touch_objects_in_pos(self, pos):
touched_objects = []
for key in self.touch_objects:
@@ -89,16 +71,20 @@ class ScreenObjectsManager():
if pos is None:
pos = self.selected.pos
if direction == InputManager.right:
- bests = self.find_nearest_objects(self.find_in_quadrant(False, True, pos), True, pos)
+ bests = self.find_nearest_objects(
+ self.find_in_quadrant(False, True, pos), True, pos)
best_key = self.find_best_object(bests, False, True, pos)
elif direction == InputManager.left:
- bests = self.find_nearest_objects(self.find_in_quadrant(False, False, pos), True, pos)
+ bests = self.find_nearest_objects(
+ self.find_in_quadrant(False, False, pos), True, pos)
best_key = self.find_best_object(bests, False, False, pos)
elif direction == InputManager.down:
- bests = self.find_nearest_objects(self.find_in_quadrant(True, True, pos), False, pos)
+ bests = self.find_nearest_objects(
+ self.find_in_quadrant(True, True, pos), False, pos)
best_key = self.find_best_object(bests, True, True, pos)
elif direction == InputManager.up:
- bests = self.find_nearest_objects(self.find_in_quadrant(True, False, pos), False, pos)
+ bests = self.find_nearest_objects(
+ self.find_in_quadrant(True, False, pos), False, pos)
best_key = self.find_best_object(bests, True, False, pos)
if best_key is None:
return False
@@ -175,7 +161,8 @@ class ScreenObjectsManager():
if best_pos is None:
best_pos = objects[key].pos[1]
best_key = key
- elif objects[key].pos[1] >= pos[1] and objects[key].pos[1] < best_pos:
+ elif objects[key].pos[1] >= pos[1] and \
+ objects[key].pos[1] < best_pos:
best_pos = objects[key].pos[1]
best_key = key
else:
@@ -183,7 +170,8 @@ class ScreenObjectsManager():
if best_pos is None:
best_pos = objects[key].pos[1]
best_key = key
- elif objects[key].pos[1] <= pos[1] and objects[key].pos[1] > best_pos:
+ elif objects[key].pos[1] <= pos[1] and \
+ objects[key].pos[1] > best_pos:
best_pos = objects[key].pos[1]
best_key = key
else:
@@ -192,7 +180,8 @@ class ScreenObjectsManager():
if best_pos is None:
best_pos = objects[key].pos[0]
best_key = key
- elif objects[key].pos[0] >= pos[0] and objects[key].pos[0] < best_pos:
+ elif objects[key].pos[0] >= pos[0] and \
+ objects[key].pos[0] < best_pos:
best_pos = objects[key].pos[0]
best_key = key
else:
@@ -200,35 +189,28 @@ class ScreenObjectsManager():
if best_pos is None:
best_pos = objects[key].pos[0]
best_key = key
- elif objects[key].pos[0] <= pos[0] and objects[key].pos[0] > best_pos:
+ elif objects[key].pos[0] <= pos[0] and \
+ objects[key].pos[0] > best_pos:
best_pos = objects[key].pos[0]
best_key = key
return best_key
-
-
-
-
class BaseItem():
def __init__(self, pos, size):
self.pos = pos
self.size = size
- self.dirty = True
self.rect = pygame.Rect(0, 0, self.size[0], self.size[1])
- self.rect_in_pos = pygame.Rect(self.pos[0], self.pos[1], self.size[0],
+ self.rect_in_pos = pygame.Rect(self.pos[0], self.pos[1],
+ self.size[0],
self.size[1])
def get_right_pos(self):
return self.pos[0] + self.size[0]
-
- # Returns if must be redraw
+
+
def update(self):
- if self.dirty:
- self.dirty = False
- return True
- else:
- return False
+ pass
class TextItem(BaseItem):
@@ -246,12 +228,14 @@ class TextItem(BaseItem):
else:
BaseItem.__init__(self, pos, self.font.size(text))
if size is not None:
- if self.pos[0] + self.box.get_rect().width > pos[0] + size[0]:
+ if self.pos[0] + self.box.get_rect().width > pos[0] + \
+ size[0]:
self.fit_horizontal = False
self.step = 0
else:
self.fit_horizontal = True
- if self.pos[1] + self.box.get_rect().height > pos[1] + size[1]:
+ if self.pos[1] + self.box.get_rect().height > pos[1] + \
+ size[1]:
self.fit_vertical = False
else:
self.fit_vertical = True
@@ -262,30 +246,30 @@ class TextItem(BaseItem):
def update(self):
if not self.fit_horizontal:
if self.step > self.box.get_rect().width:
- self.step = -self.size[0]
+ self.step = -self.size[0]
else:
- self.step = self.step + 1
- return True
- else:
- return BaseItem.update(self)
+ self.step = self.step + 1
+ return True
+ else:
+ return BaseItem.update(self)
def render(self, surface):
if self.fit_horizontal:
surface.blit(self.box, self.pos, area=self.rect)
else:
- surface.blit(self.box, self.pos, area=pygame.Rect(self.step, 0, self.size[0], self.size[1]))
-
+ surface.blit(self.box, self.pos,
+ area=pygame.Rect(self.step, 0, self.size[0],
+ self.size[1]))
+
def set_text(self, text, change_size):
- if text != self.text:
- self.dirty = True
+ if text != self.text:
if change_size:
- TextItem.__init__(self, self.font, text, self.pos, None)
+ TextItem.__init__(self, self.font, text, self.pos,
+ None)
else:
- TextItem.__init__(self, self.font, text, self.pos, self.size)
- return True
- else:
- return False
+ TextItem.__init__(self, self.font, text, self.pos,
+ self.size)
class TouchObject(BaseItem):
@@ -298,11 +282,9 @@ class TouchObject(BaseItem):
return self.rect_in_pos.collidepoint(pos)
def set_active(self, active):
- self.dirty = True
self.active = active
def set_selected(self, selected):
- self.dirty = True
self.selected = selected
@@ -312,21 +294,25 @@ class TouchAndTextItem(TouchObject, TextItem):
TouchObject.__init__(self, pos, self.size)
self.active_color = (0, 150, 255)
self.selected_color = (150, 0, 255)
- self.active_box = self.font.render(text, True, self.active_color)
- self.selected_box = self.font.render(text, True, self.selected_color)
+ self.active_box = self.font.render(text, True,
+ self.active_color)
+ self.selected_box = self.font.render(text, True,
+ self.selected_color)
def update(self):
- return TextItem.update(self)
+ TextItem.update(self)
def set_text(self, text, change_size):
- self.dirty = True
TextItem.set_text(self, text, change_size)
- self.active_box = self.font.render(text, True, self.active_color)
- self.selected_box = self.font.render(text, True, self.selected_color)
+ self.active_box = self.font.render(text, True,
+ self.active_color)
+ self.selected_box = self.font.render(text, True,
+ self.selected_color)
def render(self, surface):
if not self.fit_horizontal:
- self.rect = pygame.Rect(self.step, 0, self.size[0], self.size[1])
+ self.rect = pygame.Rect(self.step, 0, self.size[0],
+ self.size[1])
if self.selected:
surface.blit(self.selected_box, self.pos, area=self.rect)
elif self.active:
@@ -347,14 +333,16 @@ class Progressbar(TouchObject):
self.value_text = value_text
if value_text:
self.text = TextItem(font, str(max_value), pos, None)
- self.text.pos = (self.pos[0] + self.size[0] / 2 - self.text.size[0] /
- 2, self.text.pos[1])
+ self.text.pos = (
+ self.pos[0] + self.size[0] / 2 - self.text.size[0] /
+ 2, self.text.pos[1])
self.text.set_text(str(self.value), True)
else:
self.text = TextItem(font, text, pos, None)
- self.text.pos = (self.pos[0] + self.size[0] / 2 - self.text.size[0] /
- 2, self.text.pos[1])
-
+ self.text.pos = (
+ self.pos[0] + self.size[0] / 2 - self.text.size[0] /
+ 2, self.text.pos[1])
+
def render(self, surface):
surface.blit(self.surface, self.pos)
@@ -362,12 +350,12 @@ class Progressbar(TouchObject):
def set_value(self, value):
if value != self.value:
- self.dirty = True
self.value = value
if self.value_text:
self.set_text(str(self.value))
- self.text.pos = (self.pos[0] + self.size[0] / 2 - self.text.size[0] /
- 2, self.text.pos[1])
+ self.text.pos = (
+ self.pos[0] + self.size[0] / 2 - self.text.size[0] /
+ 2, self.text.pos[1])
self.surface.fill(self.back_color)
pos_pixel = value * self.size[0] / self.max
rect = pygame.Rect(0, 0, pos_pixel, self.size[1])
@@ -378,12 +366,13 @@ class Progressbar(TouchObject):
return x * self.max / self.size[0]
def set_text(self, text):
- self.dirty = self.text.set_text(text, True)
+ self.text.set_text(text, True)
class ScrollBar(TouchObject):
def __init__(self, pos, size, max_value, items_on_screen):
- BaseItem.__init__(self, pos, (pos[0] + size[0], pos[1] + size[1]))
+ BaseItem.__init__(self, pos,
+ (pos[0] + size[0], pos[1] + size[1]))
self.pos = pos
self.size = size
self.max = max_value
@@ -403,7 +392,8 @@ class ScrollBar(TouchObject):
def render(self, surface):
surface.blit(self.back_bar, self.pos)
- surface.blit(self.bar, (self.pos[0], self.pos[1] + self.bar_pos))
+ surface.blit(self.bar,
+ (self.pos[0], self.pos[1] + self.bar_pos))
def touch(self, pos):
if pos[1] < self.pos[1] + self.bar_pos:
@@ -414,7 +404,7 @@ class ScrollBar(TouchObject):
return 0
def set_item(self, current_item):
- self.dirty = True
self.current_item = current_item
- self.bar_pos = float(self.current_item) / float(self.max) * float(
+ self.bar_pos = float(self.current_item) / float(
+ self.max) * float(
self.size[1])
diff --git a/mopidy_touchscreen/touch_screen.py b/mopidy_touchscreen/touch_screen.py
index 79deb44..e8a07a1 100644
--- a/mopidy_touchscreen/touch_screen.py
+++ b/mopidy_touchscreen/touch_screen.py
@@ -9,32 +9,35 @@ from mopidy import core
from .screen_manager import ScreenManager
+
logger = logging.getLogger(__name__)
class TouchScreen(pykka.ThreadingActor, core.CoreListener):
def __init__(self, config, core):
super(TouchScreen, self).__init__()
- self.backend = \
- pykka.ActorRegistry.get_by_class_name("TouchScreenBackend")[0]
self.core = core
self.running = False
self.screen_size = (config['touchscreen']['screen_width'],
config['touchscreen']['screen_height'])
self.cache_dir = config['touchscreen']['cache_dir']
self.fullscreen = config['touchscreen']['fullscreen']
- os.environ["SDL_FBDEV"] = config['touchscreen']['sdl_fbdev']
- os.environ["SDL_MOUSEDRV"] = config['touchscreen']['sdl_mousdrv']
- os.environ["SDL_MOUSEDEV"] = config['touchscreen']['sdl_mousedev']
+ os.environ["SDL_FBDEV"] = config['touchscreen']['sdl_fbdev']
+ os.environ["SDL_MOUSEDRV"] = config['touchscreen'][
+ 'sdl_mousdrv']
+ os.environ["SDL_MOUSEDEV"] = config['touchscreen'][
+ 'sdl_mousedev']
pygame.init()
self.cursor = config['touchscreen']['cursor']
- self.screen_manager = ScreenManager(self.screen_size, self.core,
- self.backend, self.cache_dir)
+ self.screen_manager = ScreenManager(self.screen_size,
+ self.core,
+ self.cache_dir)
# Raspberry pi GPIO
self.gpio = config['touchscreen']['gpio']
if self.gpio:
from .gpio_inpput_manager import GPIOManager
+
pins = {}
pins['left'] = config['touchscreen']['gpio_left']
pins['right'] = config['touchscreen']['gpio_right']
@@ -54,7 +57,7 @@ class TouchScreen(pykka.ThreadingActor, core.CoreListener):
while self.running:
clock.tick(15)
screen.blit(self.screen_manager.update(), (0, 0))
- pygame.display.update(self.screen_manager.get_dirty_area())
+ pygame.display.flip()
for event in pygame.event.get():
if event.type == pygame.QUIT:
self.running = False
@@ -86,7 +89,8 @@ class TouchScreen(pykka.ThreadingActor, core.CoreListener):
self.screen_manager.volume_changed(volume)
def playback_state_changed(self, old_state, new_state):
- self.screen_manager.playback_state_changed(old_state, new_state)
+ self.screen_manager.playback_state_changed(old_state,
+ new_state)
def tracklist_changed(self):
try:
@@ -95,7 +99,8 @@ class TouchScreen(pykka.ThreadingActor, core.CoreListener):
traceback.print_exc()
def track_playback_ended(self, tl_track, time_position):
- self.screen_manager.track_playback_ended(tl_track, time_position)
+ self.screen_manager.track_playback_ended(tl_track,
+ time_position)
def options_changed(self):
try:
diff --git a/mopidy_touchscreen/touch_screen_backend.py b/mopidy_touchscreen/touch_screen_backend.py
deleted file mode 100644
index c58e2e9..0000000
--- a/mopidy_touchscreen/touch_screen_backend.py
+++ /dev/null
@@ -1,21 +0,0 @@
-import logging
-
-import pykka
-from mopidy import backend
-
-logger = logging.getLogger(__name__)
-
-
-class TouchScreenBackend(pykka.ThreadingActor, backend.Backend):
- def __init__(self, config, audio):
- super(TouchScreenBackend, self).__init__()
- self.audio = audio
-
- def on_receive(self, message):
- action = message['action']
- if action == 'volume':
- self.audio.set_volume(message['value'])
- elif action == "mute":
- self.audio.set_mute(message['value'])
- elif action == "random":
- self.audio.set_random(message['value'])
diff --git a/mopidy_touchscreen/tracklist.py b/mopidy_touchscreen/tracklist.py
index b60c296..6f3ee52 100644
--- a/mopidy_touchscreen/tracklist.py
+++ b/mopidy_touchscreen/tracklist.py
@@ -9,16 +9,14 @@ class Tracklist():
self.manager = manager
self.list_view = ListView((0, self.base_size), (
self.size[0], self.size[1] - 2 * self.base_size),
- self.base_size, manager.fonts['base'])
+ self.base_size,
+ manager.fonts['base'])
self.tracks = []
self.tracks_strings = []
self.update_list()
- def get_dirty_area(self):
- return self.list_view.get_dirty_area()
-
def update(self, screen, update_all):
- self.list_view.render(screen)
+ self.list_view.render(screen)
def tracklist_changed(self):
self.update_list()