mirror of
https://github.com/Febbweiss/mopidy-touchscreen.git
synced 2026-03-04 22:25:39 +00:00
Keys work 1
This commit is contained in:
@@ -129,6 +129,8 @@ class ScreenManager():
|
||||
self.screens[4].check_connection()
|
||||
self.change_screen(self.current_screen)
|
||||
|
||||
self.screen_objects_manager.set_selected("pause_play")
|
||||
|
||||
def update(self):
|
||||
surface = pygame.Surface(self.size)
|
||||
self.background.draw_background(surface)
|
||||
@@ -186,6 +188,8 @@ class ScreenManager():
|
||||
self.screens[4].check_connection()
|
||||
elif key[:-1] == "menu_":
|
||||
self.change_screen(int(key[-1:]))
|
||||
elif event.type == InputManager.key:
|
||||
self.screen_objects_manager.change_selected((0,0), InputManager.down)
|
||||
self.screens[self.current_screen].touch_event(event)
|
||||
|
||||
def volume_changed(self, volume):
|
||||
|
||||
@@ -3,6 +3,9 @@ import math
|
||||
|
||||
import pygame
|
||||
|
||||
from .input_manager import InputManager
|
||||
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
@@ -10,6 +13,7 @@ class ScreenObjectsManager():
|
||||
def __init__(self):
|
||||
self.touch_objects = {}
|
||||
self.text_objects = {}
|
||||
self.selected = None
|
||||
|
||||
def set_object(self, key, add_object):
|
||||
self.text_objects[key] = add_object
|
||||
@@ -47,6 +51,37 @@ class ScreenObjectsManager():
|
||||
else:
|
||||
self.touch_objects = {}
|
||||
|
||||
def set_selected(self, key):
|
||||
if self.selected is not None:
|
||||
self.selected.set_selected(False)
|
||||
if key is not None:
|
||||
self.selected = self.touch_objects[key]
|
||||
self.selected.set_selected(True)
|
||||
|
||||
def change_selected(self, pos, direction):
|
||||
if direction == InputManager.up:
|
||||
pass
|
||||
elif direction == InputManager.down:
|
||||
best = None
|
||||
for key in self.touch_objects:
|
||||
if self.touch_objects[key].pos[1] > pos[1]:
|
||||
if best is None:
|
||||
best = self.touch_objects[key].pos[1]
|
||||
elif best > self.touch_objects[key].pos[1]:
|
||||
best = self.touch_objects[key].pos[1]
|
||||
self.set_selected(self.find_best(pos, True, best))
|
||||
|
||||
def find_best(self, pos, horizontal, best):
|
||||
if horizontal:
|
||||
keys = []
|
||||
for key in self.touch_objects:
|
||||
if self.touch_objects[key].pos[1] == best:
|
||||
keys.append(key)
|
||||
logger.error(keys)
|
||||
return keys[0]
|
||||
|
||||
|
||||
|
||||
|
||||
class BaseItem():
|
||||
def __init__(self, pos, size):
|
||||
@@ -129,6 +164,7 @@ class TouchObject(BaseItem):
|
||||
def __init__(self, pos, size):
|
||||
BaseItem.__init__(self, pos, size)
|
||||
self.active = False
|
||||
self.selected = False
|
||||
|
||||
def is_pos_inside(self, pos):
|
||||
return self.rect_in_pos.collidepoint(pos)
|
||||
@@ -136,13 +172,18 @@ class TouchObject(BaseItem):
|
||||
def set_active(self, active):
|
||||
self.active = active
|
||||
|
||||
def set_selected(self, selected):
|
||||
self.selected = selected
|
||||
|
||||
|
||||
class TouchAndTextItem(TouchObject, TextItem):
|
||||
def __init__(self, font, text, pos, size):
|
||||
TextItem.__init__(self, font, text, pos, size)
|
||||
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)
|
||||
|
||||
def update(self):
|
||||
TextItem.update(self)
|
||||
@@ -150,6 +191,7 @@ class TouchAndTextItem(TouchObject, TextItem):
|
||||
def set_text(self, text, change_size):
|
||||
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)
|
||||
|
||||
def render(self, surface):
|
||||
if self.fit_horizontal:
|
||||
@@ -160,8 +202,9 @@ class TouchAndTextItem(TouchObject, TextItem):
|
||||
self.active_color)
|
||||
else:
|
||||
self.box = self.font.render(self.text, True, self.color)
|
||||
if self.active:
|
||||
# Area h*2 to render letters like g, j, y...
|
||||
if self.selected:
|
||||
surface.blit(self.selected_box, self.pos, area=self.rect)
|
||||
elif self.active:
|
||||
surface.blit(self.active_box, self.pos, area=self.rect)
|
||||
else:
|
||||
surface.blit(self.box, self.pos, area=self.rect)
|
||||
|
||||
Reference in New Issue
Block a user