From dc52edb57418a749cf618996cd23eb99a10173f1 Mon Sep 17 00:00:00 2001 From: slook Date: Sat, 8 Nov 2025 17:52:16 +0000 Subject: [PATCH] feat(scrollbar): add hover and borderColor style for slider --- libs/pyTermTk/TermTk/TTkCore/canvas.py | 6 +++--- libs/pyTermTk/TermTk/TTkTheme/draw_ascii.py | 4 ++-- libs/pyTermTk/TermTk/TTkTheme/draw_utf8.py | 4 ++-- libs/pyTermTk/TermTk/TTkWidgets/scrollbar.py | 11 +++++++---- 4 files changed, 14 insertions(+), 11 deletions(-) diff --git a/libs/pyTermTk/TermTk/TTkCore/canvas.py b/libs/pyTermTk/TermTk/TTkCore/canvas.py index acfc0603..189f44b5 100644 --- a/libs/pyTermTk/TermTk/TTkCore/canvas.py +++ b/libs/pyTermTk/TermTk/TTkCore/canvas.py @@ -381,20 +381,20 @@ class TTkCanvas(): for ix in vlines: self._set(y+iy, x+ix, gg[0x0A], color) - def drawScroll(self, pos, size, slider, orientation, color=TTkColor.RST): + def drawScroll(self, pos, size, slider, orientation, color=TTkColor.RST, borderColor=TTkColor.RST): if not self._visible: return x,y = pos f,t = slider # slider from-to position if orientation == TTkK.HORIZONTAL: for i in range(x+1,x+size-1): # H line - self._set(y,x+i, TTkCfg.theme.hscroll[1], color) + self._set(y,x+i, TTkCfg.theme.hscroll[1], borderColor) for i in range(f,t): # Slider self._set(y,x+i, TTkCfg.theme.hscroll[2], color) self._set(y,x, TTkCfg.theme.hscroll[0], color) # Left Arrow self._set(y,x+size-1, TTkCfg.theme.hscroll[3], color) # Right Arrow else: for i in range(y+1,y+size-1): # V line - self._set(y+i,x, TTkCfg.theme.vscroll[1], color) + self._set(y+i,x, TTkCfg.theme.vscroll[1], borderColor) for i in range(f,t): # Slider self._set(y+i,x, TTkCfg.theme.vscroll[2], color) self._set(y,x, TTkCfg.theme.vscroll[0], color) # Up Arrow diff --git a/libs/pyTermTk/TermTk/TTkTheme/draw_ascii.py b/libs/pyTermTk/TermTk/TTkTheme/draw_ascii.py index 7f3f36fd..15666443 100644 --- a/libs/pyTermTk/TermTk/TTkTheme/draw_ascii.py +++ b/libs/pyTermTk/TermTk/TTkTheme/draw_ascii.py @@ -85,8 +85,8 @@ class TTkTheme(): combobox = {'( )','(x)'} checkbox = {'[ ]','[x]','[/]'} - hscroll = ('<','-','X','>') - vscroll = ('^','|','X','v') + hscroll = ('<','-','+','>') + vscroll = ('^','|','+','v') tree = (' ','+','-',' ', '|','|','v','^',) diff --git a/libs/pyTermTk/TermTk/TTkTheme/draw_utf8.py b/libs/pyTermTk/TermTk/TTkTheme/draw_utf8.py index 7b714a41..80168d29 100644 --- a/libs/pyTermTk/TermTk/TTkTheme/draw_utf8.py +++ b/libs/pyTermTk/TermTk/TTkTheme/draw_utf8.py @@ -141,8 +141,8 @@ class TTkTheme(): combobox = {'◯','◉'} checkbox = {'□','▣','◪'} - hscroll = ('◀','┄','▓','▶') - vscroll = ('▲','┊','▓','▼') + hscroll = ('◀','─','■','▶') + vscroll = ('▲','│','█','▼') tree = ('•','▶','▼',' ', '│','╿','▼','▲') diff --git a/libs/pyTermTk/TermTk/TTkWidgets/scrollbar.py b/libs/pyTermTk/TermTk/TTkWidgets/scrollbar.py index 3362bf48..bb22e05f 100644 --- a/libs/pyTermTk/TermTk/TTkWidgets/scrollbar.py +++ b/libs/pyTermTk/TermTk/TTkWidgets/scrollbar.py @@ -36,9 +36,10 @@ class TTkScrollBar(TTkWidget): '''TTkScrollBar''' classStyle = { - 'default': {'color': TTkColor.RST}, + 'default': {'color': TTkColor.fg('#AAAACC'), 'borderColor': TTkColor.fg('#004080')}, 'disabled': {'color': TTkColor.fg('#888888')}, - 'focus': {'color': TTkColor.fg('#cccc00')}, + 'focus': {'color': TTkColor.fg('#cccc00'), 'borderColor': TTkColor.fg('#AAAA88')}, + 'hover': {'color': TTkColor.fg('#0088FF'), 'borderColor': TTkColor.fg('#6666BB')}, } __slots__ = ( @@ -108,7 +109,8 @@ class TTkScrollBar(TTkWidget): ''' def paintEvent(self, canvas): style = self.currentStyle() - color = style['color'] + color = style.get('color', TTkColor.RST) + borderColor = style.get('borderColor', color) if self._orientation == TTkK.VERTICAL: size=self._height @@ -128,7 +130,8 @@ class TTkScrollBar(TTkWidget): # convert i screen coordinates aa = asciiDrawingSize * a // (self._maximum - self._minimum) bb = aa + asciiStep - canvas.drawScroll(pos=(0,0),size=size,slider=(aa+1,bb+1),orientation=self._orientation, color=color) + canvas.drawScroll(pos=(0,0),size=size,slider=(aa+1,bb+1),orientation=self._orientation, + color=color,borderColor=borderColor) # Update the screen position coordinates self._screenPgDown = ( 1 , aa+1 ) self._screenScroller = ( aa+1 , bb+1)