class ScreenOverlay:
"""Прозрачный оверлей поверх экрана для отрисовки подсветки ходов"""
def __init__(self):
self.root = None
self.canvas = None
self.show_highlight = False
self.current_move = None
def start(self):
self.root = tk.Tk()
self.root.overrideredirect(True)
self.root.attributes("-topmost", True)
self.root.attributes("-transparentcolor", "black")
screen_w = self.root.winfo_screenwidth()
screen_h = self.root.winfo_screenheight()
self.root.geometry(f"{screen_w}x{screen_h}+0+0")
# Пропуск кликов мыши сквозь окно (Click-Through)
hwnd = ctypes.windll.user32.GetParent(self.root.winfo_id())
style = ctypes.windll.user32.GetWindowLongW(hwnd, -20)
ctypes.windll.user32.SetWindowLongW(hwnd, -20, style | 0x00000020 | 0x00080000)
self.canvas = tk.Canvas(self.root, bg="black", highlightthickness=0)
self.canvas.pack(fill="both", expand=True)
self.root.mainloop()
def toggle_highlight(self):
"""Включение/выключение отображения по клавише V"""
self.show_highlight = not self.show_highlight
status = "ВКЛЮЧЕНА" if self.show_highlight else "ВЫКЛЮЧЕНА"
print(f"\n[OVERLAY]: Подсветка ходов {status}")
if self.root:
self.root.after(0, self.redraw)
def update_move(self, src_box, dst_box):
"""Обновление координат хода (Зеленый / Красный)"""
self.current_move = {"from": src_box, "to": dst_box}
if self.root and self.show_highlight:
self.root.after(0, self.redraw)
def redraw(self):
if not self.canvas:
return
self.canvas.delete("all")
if not self.show_highlight or not self.current_move:
return
# Зелёная рамка (Откуда)
fx, fy, fw, fh = self.current_move["from"]
self.canvas.create_rectangle(fx, fy, fx + fw, fy + fh, outline="#00FF00", width=4)
# Красная рамка (Куда)
tx, ty, tw, th = self.current_move["to"]
self.canvas.create_rectangle(tx, ty, tx + tw, ty + th, outline="#FF0000", width=4)