diff --git a/direct/src/gui/DirectScrolledFrame.py b/direct/src/gui/DirectScrolledFrame.py index 7b30ba499e..c860797b74 100644 --- a/direct/src/gui/DirectScrolledFrame.py +++ b/direct/src/gui/DirectScrolledFrame.py @@ -77,9 +77,11 @@ class DirectScrolledFrame(DirectFrame): self.initialiseoptions(DirectScrolledFrame) def setScrollBarWidth(self): + if self.fInit: return + w = self['scrollBarWidth'] - self.verticalScroll["frameSize"] = (-w / 2.0, w / 2.0, -1, 1) - self.horizontalScroll["frameSize"] = (-1, 1, -w / 2.0, w / 2.0) + self.verticalScroll["frameSize"] = (-w / 2.0, w / 2.0, self.verticalScroll["frameSize"][2], self.verticalScroll["frameSize"][3]) + self.horizontalScroll["frameSize"] = (self.horizontalScroll["frameSize"][0], self.horizontalScroll["frameSize"][1], -w / 2.0, w / 2.0) def setCanvasSize(self): f = self['canvasSize'] diff --git a/tests/gui/test_DirectScrolledFrame.py b/tests/gui/test_DirectScrolledFrame.py new file mode 100644 index 0000000000..85ad8a53d4 --- /dev/null +++ b/tests/gui/test_DirectScrolledFrame.py @@ -0,0 +1,36 @@ +from direct.gui.DirectScrolledFrame import DirectScrolledFrame +import pytest + + +def test_set_scrollbar_width(): + w = 1 + + frm = DirectScrolledFrame(scrollBarWidth=w) + + assert frm['scrollBarWidth'] == 1 + + assert frm.verticalScroll['frameSize'] == (-w / 2.0, w / 2.0, -1, 1) + assert frm.horizontalScroll['frameSize'] == (-1, 1, -w / 2.0, w / 2.0) + + # manual changes to the framesize + frm.verticalScroll['frameSize'] = (-2, 2, -4, 4) + frm.horizontalScroll['frameSize'] = (-4, 4, -2, 2) + assert frm.verticalScroll['frameSize'] == (-2, 2, -4, 4) + assert frm.horizontalScroll['frameSize'] == (-4, 4, -2, 2) + + # change scrollbar width to a new value + w = 2 + frm['scrollBarWidth'] = w + + # check, new value is set correct + assert frm['scrollBarWidth'] == 2 + + # check if new size is set correct + assert frm.verticalScroll['frameSize'] == (-w / 2.0, w / 2.0, -4, 4) + assert frm.horizontalScroll['frameSize'] == (-4, 4, -w / 2.0, w / 2.0) + + +def test_set_scrollbar_width_on_init(): + frm = DirectScrolledFrame(verticalScroll_frameSize=(-2, 2, -4, 4), horizontalScroll_frameSize=(-4, 4, -2, 2)) + assert frm.verticalScroll['frameSize'] == (-2, 2, -4, 4) + assert frm.horizontalScroll['frameSize'] == (-4, 4, -2, 2)