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()
def _viewportChanged(self) -> None:
''' 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()
fw, fh = self._viewport.viewFullAreaSize()
dw, dh = self._viewport.viewDisplayedSize()
@ -126,10 +126,9 @@ class TTkAbstractScrollArea(TTkContainer):
self._horizontalScrollBar.setValue(ox)
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()
elif dh>self._verticalScrollBar.minimumHeight()+1:
# we need enough space to display the bar to avoid endless loop
elif dh>=self._verticalScrollBar.minimumHeight():
self._verticalScrollBar.show()
elif self._verticalScrollBarPolicy == TTkK.ScrollBarAlwaysOn:
self._verticalScrollBar.show()
@ -137,10 +136,9 @@ class TTkAbstractScrollArea(TTkContainer):
self._verticalScrollBar.hide()
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()
elif dw>self._horizontalScrollBar.minimumWidth()+1:
# we need enough space to display the bar to avoid endless loop
elif dw>=self._horizontalScrollBar.minimumWidth():
self._horizontalScrollBar.show()
elif self._horizontalScrollBarPolicy == TTkK.ScrollBarAlwaysOn:
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)
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
self._set(y,x, TTkCfg.theme.hscroll[0], color) # Left Arrow
else:
for i in range(y+1,y+size-1): # V line
self._set(y+i,x, TTkCfg.theme.vscroll[1], color)
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
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(
self, pos, size, text, slim=False,

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

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

Loading…
Cancel
Save