浏览代码

Progressbar touch to seekb

9and3r 11 年之前
父节点
当前提交
f39989b9a0

+ 96 - 26
mopidy_touchscreen/.idea/workspace.xml

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

+ 13 - 4
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)

+ 16 - 10
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():
-
 
+class ScreenManager():
 
-    def __init__(self,size):
-        self.screen_size=size
-        self.screens=[MainScreen(size,self,"/home/ander")]
-        self.track=None
+    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,core):
-        return self.screens[0].update(core)
+    def update(self):
+        return self.screens[0].update()
 
-    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)
+
 
 

+ 18 - 4
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]
+

+ 33 - 0
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

+ 3 - 3
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):