mirror of
https://github.com/Febbweiss/mopidy-touchscreen.git
synced 2026-03-04 22:25:39 +00:00
Progressbar touch to seekb
This commit is contained in:
122
mopidy_touchscreen/.idea/workspace.xml
generated
122
mopidy_touchscreen/.idea/workspace.xml
generated
@@ -26,9 +26,23 @@
|
||||
<file leaf-file-name="main_screen.py" pinned="false" current="true" current-in-tab="true">
|
||||
<entry file="file://$PROJECT_DIR$/main_screen.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state vertical-scroll-proportion="0.36945814" vertical-offset="0" max-vertical-offset="1500">
|
||||
<caret line="10" column="20" selection-start-line="10" selection-start-column="20" selection-end-line="10" selection-end-column="20" />
|
||||
<folding />
|
||||
<state vertical-scroll-proportion="0.77832514" vertical-offset="1199" max-vertical-offset="1620">
|
||||
<caret line="101" column="105" selection-start-line="101" selection-start-column="105" selection-end-line="101" selection-end-column="105" />
|
||||
<folding>
|
||||
<element signature="e#0#13#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file leaf-file-name="screen_objects.py" pinned="false" current="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/screen_objects.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state vertical-scroll-proportion="-4.477612" vertical-offset="105" max-vertical-offset="2625">
|
||||
<caret line="27" column="17" selection-start-line="27" selection-start-column="17" selection-end-line="27" selection-end-column="17" />
|
||||
<folding>
|
||||
<element signature="e#0#13#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
@@ -36,9 +50,23 @@
|
||||
<file leaf-file-name="screen_manager.py" pinned="false" current="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/screen_manager.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="420">
|
||||
<caret line="22" column="0" selection-start-line="22" selection-start-column="0" selection-end-line="22" selection-end-column="0" />
|
||||
<folding />
|
||||
<state vertical-scroll-proportion="0.0" vertical-offset="121" max-vertical-offset="540">
|
||||
<caret line="24" column="53" selection-start-line="24" selection-start-column="53" selection-end-line="24" selection-end-column="53" />
|
||||
<folding>
|
||||
<element signature="e#0#35#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file leaf-file-name="touch_manager.py" pinned="false" current="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/touch_manager.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state vertical-scroll-proportion="0.0" vertical-offset="120" max-vertical-offset="570">
|
||||
<caret line="30" column="13" selection-start-line="30" selection-start-column="13" selection-end-line="30" selection-end-column="13" />
|
||||
<folding>
|
||||
<element signature="e#0#13#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
@@ -46,8 +74,8 @@
|
||||
<file leaf-file-name="touch_screen.py" pinned="false" current="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/touch_screen.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="855">
|
||||
<caret line="43" column="0" selection-start-line="43" selection-start-column="0" selection-end-line="43" selection-end-column="0" />
|
||||
<state vertical-scroll-proportion="0.0" vertical-offset="346" max-vertical-offset="855">
|
||||
<caret line="23" column="71" selection-start-line="23" selection-start-column="71" selection-end-line="23" selection-end-column="71" />
|
||||
<folding>
|
||||
<element signature="e#0#12#0" expanded="true" />
|
||||
</folding>
|
||||
@@ -65,9 +93,11 @@
|
||||
<component name="IdeDocumentHistory">
|
||||
<option name="changedFiles">
|
||||
<list>
|
||||
<option value="$PROJECT_DIR$/screen_manager.py" />
|
||||
<option value="$PROJECT_DIR$/touch_screen.py" />
|
||||
<option value="$PROJECT_DIR$/touch_text_manager.py" />
|
||||
<option value="$PROJECT_DIR$/touch_screen.py" />
|
||||
<option value="$PROJECT_DIR$/screen_manager.py" />
|
||||
<option value="$PROJECT_DIR$/touch_manager.py" />
|
||||
<option value="$PROJECT_DIR$/screen_objects.py" />
|
||||
<option value="$PROJECT_DIR$/main_screen.py" />
|
||||
</list>
|
||||
</option>
|
||||
@@ -342,7 +372,9 @@
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="1185">
|
||||
<caret line="26" column="100" selection-start-line="26" selection-start-column="100" selection-end-line="26" selection-end-column="100" />
|
||||
<folding />
|
||||
<folding>
|
||||
<element signature="e#0#13#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
@@ -350,7 +382,9 @@
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state vertical-scroll-proportion="0.0" vertical-offset="330" max-vertical-offset="450">
|
||||
<caret line="22" column="0" selection-start-line="22" selection-start-column="0" selection-end-line="22" selection-end-column="0" />
|
||||
<folding />
|
||||
<folding>
|
||||
<element signature="e#0#35#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
@@ -368,7 +402,9 @@
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="1335">
|
||||
<caret line="31" column="28" selection-start-line="31" selection-start-column="28" selection-end-line="31" selection-end-column="28" />
|
||||
<folding />
|
||||
<folding>
|
||||
<element signature="e#0#13#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
@@ -376,7 +412,9 @@
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state vertical-scroll-proportion="0.0" vertical-offset="330" max-vertical-offset="450">
|
||||
<caret line="22" column="0" selection-start-line="22" selection-start-column="0" selection-end-line="22" selection-end-column="0" />
|
||||
<folding />
|
||||
<folding>
|
||||
<element signature="e#0#35#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
@@ -394,7 +432,9 @@
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state vertical-scroll-proportion="0.0" vertical-offset="899" max-vertical-offset="1350">
|
||||
<caret line="67" column="30" selection-start-line="67" selection-start-column="30" selection-end-line="67" selection-end-column="30" />
|
||||
<folding />
|
||||
<folding>
|
||||
<element signature="e#0#13#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
@@ -402,7 +442,9 @@
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state vertical-scroll-proportion="0.0" vertical-offset="330" max-vertical-offset="450">
|
||||
<caret line="22" column="0" selection-start-line="22" selection-start-column="0" selection-end-line="22" selection-end-column="0" />
|
||||
<folding />
|
||||
<folding>
|
||||
<element signature="e#0#35#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
@@ -420,7 +462,9 @@
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="1230">
|
||||
<caret line="60" column="52" selection-start-line="60" selection-start-column="52" selection-end-line="60" selection-end-column="52" />
|
||||
<folding />
|
||||
<folding>
|
||||
<element signature="e#0#13#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
@@ -438,14 +482,16 @@
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="1245">
|
||||
<caret line="28" column="46" selection-start-line="28" selection-start-column="46" selection-end-line="28" selection-end-column="46" />
|
||||
<folding />
|
||||
<folding>
|
||||
<element signature="e#0#13#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/touch_screen.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="855">
|
||||
<caret line="43" column="0" selection-start-line="43" selection-start-column="0" selection-end-line="43" selection-end-column="0" />
|
||||
<state vertical-scroll-proportion="0.0" vertical-offset="436" max-vertical-offset="855">
|
||||
<caret line="23" column="71" selection-start-line="23" selection-start-column="71" selection-end-line="23" selection-end-column="71" />
|
||||
<folding>
|
||||
<element signature="e#0#12#0" expanded="true" />
|
||||
</folding>
|
||||
@@ -454,17 +500,41 @@
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/screen_manager.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="450">
|
||||
<caret line="22" column="0" selection-start-line="22" selection-start-column="0" selection-end-line="22" selection-end-column="0" />
|
||||
<folding />
|
||||
<state vertical-scroll-proportion="0.0" vertical-offset="121" max-vertical-offset="540">
|
||||
<caret line="24" column="53" selection-start-line="24" selection-start-column="53" selection-end-line="24" selection-end-column="53" />
|
||||
<folding>
|
||||
<element signature="e#0#35#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/touch_manager.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state vertical-scroll-proportion="0.0" vertical-offset="120" max-vertical-offset="570">
|
||||
<caret line="30" column="13" selection-start-line="30" selection-start-column="13" selection-end-line="30" selection-end-column="13" />
|
||||
<folding>
|
||||
<element signature="e#0#13#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/screen_objects.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state vertical-scroll-proportion="-4.477612" vertical-offset="105" max-vertical-offset="2625">
|
||||
<caret line="27" column="17" selection-start-line="27" selection-start-column="17" selection-end-line="27" selection-end-column="17" />
|
||||
<folding>
|
||||
<element signature="e#0#13#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/main_screen.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state vertical-scroll-proportion="0.36945814" vertical-offset="0" max-vertical-offset="1500">
|
||||
<caret line="10" column="20" selection-start-line="10" selection-start-column="20" selection-end-line="10" selection-end-column="20" />
|
||||
<folding />
|
||||
<state vertical-scroll-proportion="0.77832514" vertical-offset="1199" max-vertical-offset="1620">
|
||||
<caret line="101" column="105" selection-start-line="101" selection-start-column="105" selection-end-line="101" selection-end-column="105" />
|
||||
<folding>
|
||||
<element signature="e#0#13#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
|
||||
@@ -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)
|
||||
@@ -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)
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -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]
|
||||
|
||||
|
||||
33
mopidy_touchscreen/touch_manager.py
Normal file
33
mopidy_touchscreen/touch_manager.py
Normal file
@@ -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
|
||||
@@ -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):
|
||||
|
||||
Reference in New Issue
Block a user