64 lines
2 KiB
Python
64 lines
2 KiB
Python
from talon import Module, cron, ui
|
|
from talon.canvas import Canvas
|
|
|
|
mod = Module()
|
|
|
|
|
|
@mod.action_class
|
|
class Actions:
|
|
def screens_show_numbering():
|
|
"""Show screen number on each screen"""
|
|
screens = ui.screens()
|
|
number = 1
|
|
for screen in screens:
|
|
show_screen_number(screen, number)
|
|
number += 1
|
|
|
|
def screens_get_by_number(screen_number: int) -> ui.Screen:
|
|
"""Get screen by number"""
|
|
screens = ui.screens()
|
|
length = len(screens)
|
|
if screen_number < 1 or screen_number > length:
|
|
raise Exception(
|
|
f"Non-existing screen {screen_number} in range [1, {length}]"
|
|
)
|
|
return screens[screen_number - 1]
|
|
|
|
def screens_get_previous(screen: ui.Screen) -> ui.Screen:
|
|
"""Get the screen before this one"""
|
|
return get_screen_by_offset(screen, -1)
|
|
|
|
def screens_get_next(screen: ui.Screen) -> ui.Screen:
|
|
"""Get the screen after this one"""
|
|
return get_screen_by_offset(screen, 1)
|
|
|
|
|
|
def get_screen_by_offset(screen: ui.Screen, offset: int) -> ui.Screen:
|
|
screens = ui.screens()
|
|
index = (screens.index(screen) + offset) % len(screens)
|
|
return screens[index]
|
|
|
|
|
|
def show_screen_number(screen: ui.Screen, number: int):
|
|
def on_draw(c):
|
|
c.paint.typeface = "arial"
|
|
# The min(width, height) is to not get gigantic size on portrait screens
|
|
c.paint.textsize = round(min(c.width, c.height) / 2)
|
|
text = f"{number}"
|
|
rect = c.paint.measure_text(text)[1]
|
|
x = c.x + c.width / 2 - rect.x - rect.width / 2
|
|
y = c.y + c.height / 2 + rect.height / 2
|
|
|
|
c.paint.style = c.paint.Style.FILL
|
|
c.paint.color = "eeeeee"
|
|
c.draw_text(text, x, y)
|
|
|
|
c.paint.style = c.paint.Style.STROKE
|
|
c.paint.color = "000000"
|
|
c.draw_text(text, x, y)
|
|
|
|
cron.after("3s", canvas.close)
|
|
|
|
canvas = Canvas.from_rect(screen.rect)
|
|
canvas.register("draw", on_draw)
|
|
canvas.freeze()
|