Same inaSpeechSegmenter engine split into reusable core/ (fftools, segmenter, exporters) + utils/ and a CustomTkinter multi-tab UI. Adds JSON and ffmpeg-script export. Extracted from the stream_tools app. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
65 lines
1.7 KiB
Python
65 lines
1.7 KiB
Python
"""
|
|
Theme, DPI, and shared styling constants.
|
|
"""
|
|
|
|
import sys
|
|
|
|
# ── DPI awareness (call before any Tk/CTk window) ────────────────────────────
|
|
def setup_dpi():
|
|
if sys.platform == "win32":
|
|
try:
|
|
import ctypes
|
|
ctypes.windll.shcore.SetProcessDpiAwareness(2)
|
|
except Exception:
|
|
try:
|
|
import ctypes
|
|
ctypes.windll.user32.SetProcessDPIAware()
|
|
except Exception:
|
|
pass
|
|
|
|
|
|
def dpi_scale(widget) -> float:
|
|
try:
|
|
return max(1.0, widget.winfo_fpixels("1i") / 96.0)
|
|
except Exception:
|
|
return 1.0
|
|
|
|
|
|
# ── Color accents ─────────────────────────────────────────────────────────────
|
|
# Each feature area has its own accent color scheme: (light_mode, dark_mode)
|
|
|
|
ACCENT_BLUE = {
|
|
"fg": ("#3B82F6", "#2563EB"),
|
|
"hover": ("#2563EB", "#1D4ED8"),
|
|
}
|
|
|
|
ACCENT_PURPLE = {
|
|
"fg": ("#EDE9FE", "#3B1F6E"),
|
|
"text": ("#5B21B6", "#C4B5FD"),
|
|
"hover": ("#DDD6FE", "#4C2889"),
|
|
"preview": ("#7C3AED", "#A78BFA"),
|
|
}
|
|
|
|
ACCENT_GREEN = {
|
|
"fg": ("#10B981", "#059669"),
|
|
"hover": ("#059669", "#047857"),
|
|
}
|
|
|
|
ACCENT_AMBER = {
|
|
"fg": ("#F59E0B", "#D97706"),
|
|
"hover": ("#D97706", "#B45309"),
|
|
}
|
|
|
|
# Neutral button style
|
|
BTN_NEUTRAL = {
|
|
"fg_color": ("gray80", "gray25"),
|
|
"text_color": ("gray10", "gray90"),
|
|
"hover_color": ("gray70", "gray35"),
|
|
}
|
|
|
|
BTN_SIDE = {
|
|
"fg_color": ("gray82", "gray22"),
|
|
"text_color": ("gray10", "gray90"),
|
|
"hover_color": ("gray72", "gray32"),
|
|
}
|