Browse Source

fix(scrollbar): show in small viewport (#515)

Co-authored-by: Pier CeccoPierangioliEugenio <ceccopierangiolieugenio@users.noreply.github.com>
pull/563/head
slook 3 months ago committed by GitHub
parent
commit
f861681fae
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 12
      libs/pyTermTk/TermTk/TTkAbstract/abstractscrollarea.py
  2. 5
      libs/pyTermTk/TermTk/TTkCore/canvas.py
  3. 9
      libs/pyTermTk/TermTk/TTkWidgets/scrollbar.py

12
libs/pyTermTk/TermTk/TTkAbstract/abstractscrollarea.py

@ -106,7 +106,7 @@ class TTkAbstractScrollArea(TTkContainer):
@pyTTkSlot() @pyTTkSlot()
def _viewportChanged(self) -> None: def _viewportChanged(self) -> None:
''' Internal slot to handle viewport changes and update scroll bar ranges and visibility ''' ''' Internal slot to handle viewport changes and update scroll bar ranges and visibility '''
if not self._viewport or not self.isVisible(): return if self._processing or not self._viewport or not self.isVisible(): return
w,h = self.size() w,h = self.size()
fw, fh = self._viewport.viewFullAreaSize() fw, fh = self._viewport.viewFullAreaSize()
dw, dh = self._viewport.viewDisplayedSize() dw, dh = self._viewport.viewDisplayedSize()
@ -126,10 +126,9 @@ class TTkAbstractScrollArea(TTkContainer):
self._horizontalScrollBar.setValue(ox) self._horizontalScrollBar.setValue(ox)
if self._verticalScrollBarPolicy == TTkK.ScrollBarAsNeeded: if self._verticalScrollBarPolicy == TTkK.ScrollBarAsNeeded:
if h<=4 or w<=1 or vrange<=0: if w<=self._verticalScrollBar.minimumWidth() or vrange<=0:
self._verticalScrollBar.hide() self._verticalScrollBar.hide()
elif dh>self._verticalScrollBar.minimumHeight()+1: elif dh>=self._verticalScrollBar.minimumHeight():
# we need enough space to display the bar to avoid endless loop
self._verticalScrollBar.show() self._verticalScrollBar.show()
elif self._verticalScrollBarPolicy == TTkK.ScrollBarAlwaysOn: elif self._verticalScrollBarPolicy == TTkK.ScrollBarAlwaysOn:
self._verticalScrollBar.show() self._verticalScrollBar.show()
@ -137,10 +136,9 @@ class TTkAbstractScrollArea(TTkContainer):
self._verticalScrollBar.hide() self._verticalScrollBar.hide()
if self._horizontalScrollBarPolicy == TTkK.ScrollBarAsNeeded: if self._horizontalScrollBarPolicy == TTkK.ScrollBarAsNeeded:
if w<=4 or h<=1 or hrange<=0: if h<=self._horizontalScrollBar.minimumHeight() or hrange<=0:
self._horizontalScrollBar.hide() self._horizontalScrollBar.hide()
elif dw>self._horizontalScrollBar.minimumWidth()+1: elif dw>=self._horizontalScrollBar.minimumWidth():
# we need enough space to display the bar to avoid endless loop
self._horizontalScrollBar.show() self._horizontalScrollBar.show()
elif self._horizontalScrollBarPolicy == TTkK.ScrollBarAlwaysOn: elif self._horizontalScrollBarPolicy == TTkK.ScrollBarAlwaysOn:
self._horizontalScrollBar.show() self._horizontalScrollBar.show()

5
libs/pyTermTk/TermTk/TTkCore/canvas.py

@ -390,16 +390,15 @@ class TTkCanvas():
self._set(y,x+i, TTkCfg.theme.hscroll[1], color) self._set(y,x+i, TTkCfg.theme.hscroll[1], color)
for i in range(f,t): # Slider for i in range(f,t): # Slider
self._set(y,x+i, TTkCfg.theme.hscroll[2], color) 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 self._set(y,x+size-1, TTkCfg.theme.hscroll[3], color) # Right Arrow
self._set(y,x, TTkCfg.theme.hscroll[0], color) # Left Arrow
else: else:
for i in range(y+1,y+size-1): # V line 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], color)
for i in range(f,t): # Slider for i in range(f,t): # Slider
self._set(y+i,x, TTkCfg.theme.vscroll[2], color) self._set(y+i,x, TTkCfg.theme.vscroll[2], color)
self._set(y,x, TTkCfg.theme.vscroll[0], color) # Up Arrow
self._set(y+size-1,x, TTkCfg.theme.vscroll[3], color) # Down Arrow self._set(y+size-1,x, TTkCfg.theme.vscroll[3], color) # Down Arrow
pass self._set(y,x, TTkCfg.theme.vscroll[0], color) # Up Arrow
def drawTabMenuButton( def drawTabMenuButton(
self, pos, size, text, slim=False, self, pos, size, text, slim=False,

9
libs/pyTermTk/TermTk/TTkWidgets/scrollbar.py

@ -84,12 +84,7 @@ class TTkScrollBar(TTkWidget):
TTkWidget.__init__(self, **kwargs) TTkWidget.__init__(self, **kwargs)
if self._orientation == TTkK.VERTICAL: self.setMinimumSize(1,1)
self.setMaximumWidth(1)
self.setMinimumSize(1,3)
else:
self.setMaximumHeight(1)
self.setMinimumSize(3,1)
self.setFocusPolicy(TTkK.ClickFocus) self.setFocusPolicy(TTkK.ClickFocus)
def orientation(self): def orientation(self):
@ -181,7 +176,7 @@ class TTkScrollBar(TTkWidget):
size2 = size-2 size2 = size-2
asciiStep = self._screenScroller[1] - self._screenScroller[0] asciiStep = self._screenScroller[1] - self._screenScroller[0]
asciiDrawingSize = size2 - asciiStep asciiDrawingSize = max(1, size2 - asciiStep)
a = aa * (self._maximum - self._minimum) // asciiDrawingSize a = aa * (self._maximum - self._minimum) // asciiDrawingSize

Loading…
Cancel
Save