Implement click indicator with red circle display; update server run parameters
This commit is contained in:
parent
41f7d0e210
commit
66330bfc73
@ -1,6 +1,33 @@
|
|||||||
import pyautogui
|
import pyautogui
|
||||||
|
import threading
|
||||||
|
import time
|
||||||
|
import tkinter as tk
|
||||||
from objects.inputs import MouseInput, KeyboardInput, ButtonType
|
from objects.inputs import MouseInput, KeyboardInput, ButtonType
|
||||||
|
|
||||||
|
def show_click_indicator(x: int, y: int, duration: float = 2.0, size: int = 50) -> None:
|
||||||
|
"""Display a red circle at (x, y) for the given duration."""
|
||||||
|
# Create a top-level window without decorations
|
||||||
|
root = tk.Tk()
|
||||||
|
root.overrideredirect(True)
|
||||||
|
root.attributes('-topmost', True)
|
||||||
|
# Semi-transparent window and disable to allow click-through
|
||||||
|
root.attributes('-alpha', 0.5)
|
||||||
|
try:
|
||||||
|
root.attributes('-disabled', True)
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
|
# Position and size
|
||||||
|
half = size // 2
|
||||||
|
root.geometry(f"{size}x{size}+{x-half}+{y-half}")
|
||||||
|
# Draw circle on canvas
|
||||||
|
canvas = tk.Canvas(root, width=size, height=size, highlightthickness=0, bg='white')
|
||||||
|
canvas.pack()
|
||||||
|
canvas.create_oval(2, 2, size-2, size-2, outline='red', width=4)
|
||||||
|
root.update()
|
||||||
|
# Keep displayed for duration seconds
|
||||||
|
time.sleep(duration)
|
||||||
|
root.destroy()
|
||||||
|
|
||||||
def press_mouse(mouse_input: MouseInput) -> None:
|
def press_mouse(mouse_input: MouseInput) -> None:
|
||||||
"""Presses mouse buttons at the given position."""
|
"""Presses mouse buttons at the given position."""
|
||||||
x, y = mouse_input.x, mouse_input.y
|
x, y = mouse_input.x, mouse_input.y
|
||||||
@ -13,6 +40,8 @@ def press_mouse(mouse_input: MouseInput) -> None:
|
|||||||
pyautogui.click(x, y, button='right')
|
pyautogui.click(x, y, button='right')
|
||||||
elif button == "middle":
|
elif button == "middle":
|
||||||
pyautogui.click(x, y, button='middle')
|
pyautogui.click(x, y, button='middle')
|
||||||
|
# Show red circle indicator at click position for 2 seconds
|
||||||
|
threading.Thread(target=show_click_indicator, args=(x, y), daemon=True).start()
|
||||||
|
|
||||||
def press_keyboard(keyboard_input: KeyboardInput) -> None:
|
def press_keyboard(keyboard_input: KeyboardInput) -> None:
|
||||||
"""Types the given sequence of keys."""
|
"""Types the given sequence of keys."""
|
||||||
|
2
main.py
2
main.py
@ -12,7 +12,7 @@ def main():
|
|||||||
model=os.getenv("OPENAI_MODEL", "gpt-4.1")
|
model=os.getenv("OPENAI_MODEL", "gpt-4.1")
|
||||||
)
|
)
|
||||||
server = webserver.web.WebServerApp(aip)
|
server = webserver.web.WebServerApp(aip)
|
||||||
server.run()
|
server.run(host="0.0.0.0", port=int(os.getenv("PORT", 5000)), debug=int(os.getenv("DEBUG", 0)) > 0)
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
main()
|
main()
|
||||||
|
@ -2,7 +2,7 @@ from flask import Flask, request, jsonify
|
|||||||
import os, ai.processor
|
import os, ai.processor
|
||||||
from dotenv import load_dotenv
|
from dotenv import load_dotenv
|
||||||
import io
|
import io
|
||||||
from PIL import ImageGrab
|
from PIL import ImageGrab # type: ignore
|
||||||
|
|
||||||
load_dotenv()
|
load_dotenv()
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user