dgui: fix regression in DirectScrolledFrame (see #699)

Made initialization ignore the setScrollBarWidth function
Respect the length/height of the scrollbar and only change the actual
width in the setScrollBarWidth function
Added a very basic unittest class for the scrolledFrame

Closes #864
This commit is contained in:
Fireclaw 2020-02-07 21:49:33 +01:00 committed by rdb
parent 2b632c8e20
commit 5d93237386
2 changed files with 40 additions and 2 deletions

View File

@ -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']

View File

@ -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)