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