Progressbar touch to seekb

This commit is contained in:
9and3r
2014-07-19 23:32:10 +02:00
parent 8fb89127f3
commit f39989b9a0
6 changed files with 179 additions and 47 deletions

View File

@@ -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>

View File

@@ -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)

View File

@@ -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)

View File

@@ -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]

View 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

View File

@@ -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):