feat: improve divider dragging with real-time mouse tracking
This commit is contained in:
parent
f58ae2783f
commit
494d25bf1b
|
|
@ -51,7 +51,11 @@ def main(stdscr, filename):
|
||||||
# Vertical divider
|
# Vertical divider
|
||||||
divider_char = "║" if dragging_divider else "│"
|
divider_char = "║" if dragging_divider else "│"
|
||||||
for y in range(height):
|
for y in range(height):
|
||||||
|
try:
|
||||||
stdscr.addch(y, divider_col, divider_char)
|
stdscr.addch(y, divider_col, divider_char)
|
||||||
|
except curses.error:
|
||||||
|
# Avoid errors when drawing at the last column
|
||||||
|
pass
|
||||||
|
|
||||||
# Draw file content (right pane)
|
# Draw file content (right pane)
|
||||||
for i, line in enumerate(visible_lines):
|
for i, line in enumerate(visible_lines):
|
||||||
|
|
@ -79,10 +83,10 @@ def main(stdscr, filename):
|
||||||
_, mx, my, _, bstate = curses.getmouse()
|
_, mx, my, _, bstate = curses.getmouse()
|
||||||
|
|
||||||
if bstate & curses.BUTTON1_PRESSED:
|
if bstate & curses.BUTTON1_PRESSED:
|
||||||
if mx == divider_col:
|
if mx == divider_col or (mx >= divider_col-1 and mx <= divider_col+1):
|
||||||
dragging_divider = True
|
dragging_divider = True
|
||||||
|
|
||||||
# Update divider position while dragging
|
# Always update divider position if dragging, regardless of button state
|
||||||
if dragging_divider:
|
if dragging_divider:
|
||||||
min_col = 10
|
min_col = 10
|
||||||
max_col = width - 20 # leave space for right pane
|
max_col = width - 20 # leave space for right pane
|
||||||
|
|
@ -95,12 +99,14 @@ def main(stdscr, filename):
|
||||||
except curses.error:
|
except curses.error:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
# Continue updating divider position even without explicit mouse events
|
# Force a mouse position check every loop iteration while dragging
|
||||||
elif dragging_divider:
|
if dragging_divider:
|
||||||
|
# Set a very short timeout to make the UI responsive
|
||||||
|
stdscr.timeout(1)
|
||||||
try:
|
try:
|
||||||
_, mx, my, _, bstate = curses.getmouse()
|
_, mx, my, _, bstate = curses.getmouse()
|
||||||
|
|
||||||
# Update divider position
|
# Always update divider position while dragging
|
||||||
min_col = 10
|
min_col = 10
|
||||||
max_col = width - 20 # leave space for right pane
|
max_col = width - 20 # leave space for right pane
|
||||||
divider_col = max(min_col, min(mx, max_col))
|
divider_col = max(min_col, min(mx, max_col))
|
||||||
|
|
@ -108,8 +114,9 @@ def main(stdscr, filename):
|
||||||
# Check for mouse button release
|
# Check for mouse button release
|
||||||
if bstate & curses.BUTTON1_RELEASED or not (bstate & curses.BUTTON1_PRESSED):
|
if bstate & curses.BUTTON1_RELEASED or not (bstate & curses.BUTTON1_PRESSED):
|
||||||
dragging_divider = False
|
dragging_divider = False
|
||||||
|
stdscr.timeout(-1) # Reset to blocking mode when done dragging
|
||||||
except curses.error:
|
except curses.error:
|
||||||
# If we can't get mouse state, keep the divider where it is
|
# If we can't get mouse state, try again on next iteration
|
||||||
pass
|
pass
|
||||||
|
|
||||||
#
|
#
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue