diff --git a/mopidy_touchscreen/.idea/workspace.xml b/mopidy_touchscreen/.idea/workspace.xml
index 3c4cc4f..dbedb36 100644
--- a/mopidy_touchscreen/.idea/workspace.xml
+++ b/mopidy_touchscreen/.idea/workspace.xml
@@ -26,9 +26,23 @@
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -36,9 +50,23 @@
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -46,8 +74,8 @@
-
-
+
+
@@ -65,9 +93,11 @@
@@ -342,7 +372,9 @@
-
+
+
+
@@ -350,7 +382,9 @@
-
+
+
+
@@ -368,7 +402,9 @@
-
+
+
+
@@ -376,7 +412,9 @@
-
+
+
+
@@ -394,7 +432,9 @@
-
+
+
+
@@ -402,7 +442,9 @@
-
+
+
+
@@ -420,7 +462,9 @@
-
+
+
+
@@ -438,14 +482,16 @@
-
+
+
+
-
-
+
+
@@ -454,17 +500,41 @@
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
+
+
+
+
+
diff --git a/mopidy_touchscreen/main_screen.py b/mopidy_touchscreen/main_screen.py
index fe83580..5234c18 100644
--- a/mopidy_touchscreen/main_screen.py
+++ b/mopidy_touchscreen/main_screen.py
@@ -16,7 +16,8 @@ logger = logging.getLogger(__name__)
class MainScreen():
- def __init__(self,size,manager,cache):
+ def __init__(self,size,manager,cache,core):
+ self.core = core
self.size = size
self.base_size = self.size[1]/12
self.manager = manager
@@ -28,14 +29,14 @@ class MainScreen():
self.touch_text_manager.add_touch_object("pause_play","Play",(0,0),(255,255,255))
- def update(self,core):
+ def update(self):
screen = pygame.Surface(self.size)
self.background.drawBackground(screen)
if self.track is not None:
if self.image is not None:
screen.blit(self.image, (self.base_size, self.base_size*3))
- self.touch_text_manager.get_touch_object("time_progress").set_value(core.playback.time_position.get()/1000)
- self.touch_text_manager.get_object("track_time").set_text(time.strftime('%M:%S', time.gmtime(core.playback.time_position.get()/1000))+"/"+time.strftime('%M:%S', time.gmtime(self.track.length/1000)))
+ self.touch_text_manager.get_touch_object("time_progress").set_value(self.core.playback.time_position.get()/1000)
+ self.touch_text_manager.get_object("track_time").set_text(time.strftime('%M:%S', time.gmtime(self.core.playback.time_position.get()/1000))+"/"+time.strftime('%M:%S', time.gmtime(self.track.length/1000)))
self.touch_text_manager.render(screen)
return screen
@@ -92,3 +93,11 @@ class MainScreen():
size = self.base_size*6
self.image = pygame.transform.scale(pygame.image.load(self.getCoverFolder()+self.getImageFileName()).convert(),(size,size))
+ def touch_event(self, event):
+ objects = self.touch_text_manager.get_touch_objects_in_pos(event.current_pos)
+ logger.error(objects)
+ if objects is not None:
+ for key in objects:
+ if key == "time_progress":
+ value = self.touch_text_manager.get_touch_object(key).get_pos_value(event.current_pos) * 1000
+ self.core.playback.seek(value)
\ No newline at end of file
diff --git a/mopidy_touchscreen/screen_manager.py b/mopidy_touchscreen/screen_manager.py
index 023fdcd..dfef78a 100644
--- a/mopidy_touchscreen/screen_manager.py
+++ b/mopidy_touchscreen/screen_manager.py
@@ -1,24 +1,30 @@
from .main_screen import MainScreen
+from .touch_manager import TouchManager
import pygame
import logging
logger = logging.getLogger(__name__)
+
class ScreenManager():
+ def __init__(self, size, core):
+ self.screen_size = size
+ self.screens = [MainScreen(size, self, "/home/ander", core)]
+ self.track = None
+ self.touch_manager = TouchManager()
+ def update(self):
+ return self.screens[0].update()
- def __init__(self,size):
- self.screen_size=size
- self.screens=[MainScreen(size,self,"/home/ander")]
- self.track=None
-
- def update(self,core):
- return self.screens[0].update(core)
-
- def track_started(self,track):
- self.track=track
+ def track_started(self, track):
+ self.track = track
self.screens[0].track_started(track.track)
+ def event(self, event):
+ touch_event = self.touch_manager.event(event)
+ if touch_event is not None:
+ self.screens[0].touch_event(touch_event)
+
diff --git a/mopidy_touchscreen/screen_objects.py b/mopidy_touchscreen/screen_objects.py
index a96811c..be8fb4c 100644
--- a/mopidy_touchscreen/screen_objects.py
+++ b/mopidy_touchscreen/screen_objects.py
@@ -20,13 +20,13 @@ class ScreenObjectsManager():
return self.text_objects[key]
def add_touch_object(self, key, text, pos, color):
- self.touch_objects['key'] = TouchAndTextItem(text, pos, color, self.base_size)
+ self.touch_objects[key] = TouchAndTextItem(text, pos, color, self.base_size)
def get_touch_object(self,key):
- return self.touch_objects['key']
+ return self.touch_objects[key]
def add_progressbar(self, key, pos, pos2, max):
- self.touch_objects['key'] = Progressbar(pos,pos2,max)
+ self.touch_objects[key] = Progressbar(pos,pos2,max)
def render(self, surface):
for key in self.text_objects:
@@ -35,6 +35,13 @@ class ScreenObjectsManager():
for key in self.touch_objects:
self.touch_objects[key].render(surface)
+ def get_touch_objects_in_pos(self, pos):
+ objects = []
+ for key in self.touch_objects:
+ if self.touch_objects[key].is_pos_inside(pos):
+ objects.append(key)
+ return objects
+
class BaseItem():
@@ -45,6 +52,7 @@ class BaseItem():
self.size[0] = self.pos2[0] - self.pos[0]
self.size[1] = self.pos2[1] - self.pos[1]
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.size[1])
class TextItem(BaseItem):
@@ -114,6 +122,8 @@ class TouchObject(BaseItem):
def render(self,surface):
surface.blit(self.background_box, self.pos)
+ def is_pos_inside(self, pos):
+ return self.rect_in_pos.collidepoint(pos)
class TouchAndTextItem(TouchObject, TextItem):
@@ -128,7 +138,7 @@ class TouchAndTextItem(TouchObject, TextItem):
TouchObject.render(self,surface)
TextItem.render(self,surface)
-class Progressbar(BaseItem):
+class Progressbar(TouchObject):
def __init__(self, pos, pos2, max):
BaseItem.__init__(self, pos, pos2)
@@ -153,3 +163,7 @@ class Progressbar(BaseItem):
rect = pygame.Rect(0,0,pos_pixel,self.size[1])
self.surface.fill(self.main_color, rect)
+ def get_pos_value(self, pos):
+ x = pos[0] - self.pos[0]
+ return x * self.max / self.size[0]
+
diff --git a/mopidy_touchscreen/touch_manager.py b/mopidy_touchscreen/touch_manager.py
new file mode 100644
index 0000000..401257a
--- /dev/null
+++ b/mopidy_touchscreen/touch_manager.py
@@ -0,0 +1,33 @@
+import pygame
+import logging
+
+logger = logging.getLogger(__name__)
+
+
+class TouchManager():
+
+ click = 1
+
+ def __init__(self):
+ self.down_pos = (0, 0)
+ self.up_pos = (0, 0)
+
+ def event(self, event):
+ if event.type == pygame.MOUSEBUTTONUP:
+ return self.mouse_up(event)
+ elif event.type == pygame.MOUSEBUTTONDOWN:
+ return None
+
+ def mouse_down(self, event):
+ self.down_pos = event.pos
+
+ def mouse_up(self,event):
+ self.up_pos = event.pos
+ return TouchEvent(TouchManager.click, self.down_pos, self.up_pos)
+
+class TouchEvent():
+
+ def __init__(self, event_type, down_pos, current_pos):
+ self.type = event_type
+ self.down_pos = down_pos
+ self.current_pos = current_pos
\ No newline at end of file
diff --git a/mopidy_touchscreen/touch_screen.py b/mopidy_touchscreen/touch_screen.py
index 25a241d..a2c24e4 100644
--- a/mopidy_touchscreen/touch_screen.py
+++ b/mopidy_touchscreen/touch_screen.py
@@ -21,17 +21,17 @@ class TouchScreen(pykka.ThreadingActor, core.CoreListener):
#self.screen_size=(320, 240)
self.screen_size=(800, 600)
pygame.init()
- self.screen_manager = ScreenManager(self.screen_size)
+ self.screen_manager = ScreenManager(self.screen_size,self.core)
def start_thread(self):
clock = pygame.time.Clock()
screen = pygame.display.set_mode(self.screen_size)
while self.running:
clock.tick(30)
- screen.blit(self.screen_manager.update(self.core),(0,0))
+ screen.blit(self.screen_manager.update(),(0,0))
pygame.display.flip()
for event in pygame.event.get():
- pass
+ self.screen_manager.event(event)
pygame.quit()
def on_start(self):