Skip to content

Commit f861681

Browse files
fix(scrollbar): show in small viewport (#515)
Co-authored-by: Pier CeccoPierangioliEugenio <ceccopierangiolieugenio@users.noreply.github.com>
1 parent b066ee0 commit f861681

3 files changed

Lines changed: 9 additions & 17 deletions

File tree

libs/pyTermTk/TermTk/TTkAbstract/abstractscrollarea.py

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ def resizeEvent(self, w: int, h: int) -> None:
106106
@pyTTkSlot()
107107
def _viewportChanged(self) -> None:
108108
''' Internal slot to handle viewport changes and update scroll bar ranges and visibility '''
109-
if not self._viewport or not self.isVisible(): return
109+
if self._processing or not self._viewport or not self.isVisible(): return
110110
w,h = self.size()
111111
fw, fh = self._viewport.viewFullAreaSize()
112112
dw, dh = self._viewport.viewDisplayedSize()
@@ -126,21 +126,19 @@ def _viewportChanged(self) -> None:
126126
self._horizontalScrollBar.setValue(ox)
127127

128128
if self._verticalScrollBarPolicy == TTkK.ScrollBarAsNeeded:
129-
if h<=4 or w<=1 or vrange<=0:
129+
if w<=self._verticalScrollBar.minimumWidth() or vrange<=0:
130130
self._verticalScrollBar.hide()
131-
elif dh>self._verticalScrollBar.minimumHeight()+1:
132-
# we need enough space to display the bar to avoid endless loop
131+
elif dh>=self._verticalScrollBar.minimumHeight():
133132
self._verticalScrollBar.show()
134133
elif self._verticalScrollBarPolicy == TTkK.ScrollBarAlwaysOn:
135134
self._verticalScrollBar.show()
136135
else:
137136
self._verticalScrollBar.hide()
138137

139138
if self._horizontalScrollBarPolicy == TTkK.ScrollBarAsNeeded:
140-
if w<=4 or h<=1 or hrange<=0:
139+
if h<=self._horizontalScrollBar.minimumHeight() or hrange<=0:
141140
self._horizontalScrollBar.hide()
142-
elif dw>self._horizontalScrollBar.minimumWidth()+1:
143-
# we need enough space to display the bar to avoid endless loop
141+
elif dw>=self._horizontalScrollBar.minimumWidth():
144142
self._horizontalScrollBar.show()
145143
elif self._horizontalScrollBarPolicy == TTkK.ScrollBarAlwaysOn:
146144
self._horizontalScrollBar.show()

libs/pyTermTk/TermTk/TTkCore/canvas.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -390,16 +390,15 @@ def drawScroll(self, pos, size, slider, orientation, color=TTkColor.RST):
390390
self._set(y,x+i, TTkCfg.theme.hscroll[1], color)
391391
for i in range(f,t): # Slider
392392
self._set(y,x+i, TTkCfg.theme.hscroll[2], color)
393-
self._set(y,x, TTkCfg.theme.hscroll[0], color) # Left Arrow
394393
self._set(y,x+size-1, TTkCfg.theme.hscroll[3], color) # Right Arrow
394+
self._set(y,x, TTkCfg.theme.hscroll[0], color) # Left Arrow
395395
else:
396396
for i in range(y+1,y+size-1): # V line
397397
self._set(y+i,x, TTkCfg.theme.vscroll[1], color)
398398
for i in range(f,t): # Slider
399399
self._set(y+i,x, TTkCfg.theme.vscroll[2], color)
400-
self._set(y,x, TTkCfg.theme.vscroll[0], color) # Up Arrow
401400
self._set(y+size-1,x, TTkCfg.theme.vscroll[3], color) # Down Arrow
402-
pass
401+
self._set(y,x, TTkCfg.theme.vscroll[0], color) # Up Arrow
403402

404403
def drawTabMenuButton(
405404
self, pos, size, text, slim=False,

libs/pyTermTk/TermTk/TTkWidgets/scrollbar.py

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -84,12 +84,7 @@ def __init__(self, *,
8484

8585
TTkWidget.__init__(self, **kwargs)
8686

87-
if self._orientation == TTkK.VERTICAL:
88-
self.setMaximumWidth(1)
89-
self.setMinimumSize(1,3)
90-
else:
91-
self.setMaximumHeight(1)
92-
self.setMinimumSize(3,1)
87+
self.setMinimumSize(1,1)
9388
self.setFocusPolicy(TTkK.ClickFocus)
9489

9590
def orientation(self):
@@ -181,7 +176,7 @@ def mouseDragEvent(self, evt:TTkMouseEvent) -> bool:
181176

182177
size2 = size-2
183178
asciiStep = self._screenScroller[1] - self._screenScroller[0]
184-
asciiDrawingSize = size2 - asciiStep
179+
asciiDrawingSize = max(1, size2 - asciiStep)
185180

186181
a = aa * (self._maximum - self._minimum) // asciiDrawingSize
187182

0 commit comments

Comments
 (0)