summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authortrustable-code <krauter.simon@arcor.de>2019-03-21 19:20:06 +0100
committertrustable-code <krauter.simon@arcor.de>2019-03-21 19:20:06 +0100
commitc4ed2fbec8b6dba6d80f49ef54c4112fed524bf6 (patch)
treedae722693b7fb169691fd36ac58a48908f81b7de /src
parentceff56275534042072cd228adfb19c424c23ba0a (diff)
downloadNiGui-c4ed2fbec8b6dba6d80f49ef54c4112fed524bf6.tar.gz
NiGui-c4ed2fbec8b6dba6d80f49ef54c4112fed524bf6.zip
Respect size of scrollbars for layout
This fixes the issue, that one scrollbar triggers the other scrollbar, because the additional space for the scrollbar was not respected.
Diffstat (limited to 'src')
-rwxr-xr-xsrc/nigui.nim36
1 files changed, 25 insertions, 11 deletions
diff --git a/src/nigui.nim b/src/nigui.nim
index ac3c862..a318ea4 100755
--- a/src/nigui.nim
+++ b/src/nigui.nim
@@ -1585,15 +1585,19 @@ method getTextWidth(control: Control, text: string): int =
for line in text.splitLines:
result = max(result, control.getTextLineWidth(line))
-method visibleWidth(control: Control): int =
- result = control.width
+method xScrollbarSpace(control: Control): int =
+ if control.fYScrollEnabled:
+ result.inc(fScrollbarSize)
+
+method yScrollbarSpace(control: Control): int =
if control.fXScrollEnabled:
- result.dec(fScrollbarSize)
+ result.inc(fScrollbarSize)
+
+method visibleWidth(control: Control): int =
+ result = control.width - control.xScrollbarSpace
method visibleHeight(control: Control): int =
- result = control.height
- if control.fYScrollEnabled:
- result.dec(fScrollbarSize)
+ result = control.height - control.yScrollbarSpace
method xScrollPos(control: Control): int = control.fXScrollPos
@@ -1809,6 +1813,7 @@ method minWidth(container: Container): int =
let padding = container.getPadding()
result.inc(padding.left)
result.inc(padding.right)
+ result.inc(container.xScrollbarSpace)
result = max(result, container.fMinWidth)
method minHeight(container: Container): int =
@@ -1820,6 +1825,7 @@ method minHeight(container: Container): int =
let padding = container.getPadding()
result.inc(padding.top)
result.inc(padding.bottom)
+ result.inc(container.yScrollbarSpace)
result = max(result, container.fMinHeight)
method naturalWidth(container: Container): int =
@@ -1837,6 +1843,7 @@ method naturalWidth(container: Container): int =
let padding = container.getPadding()
result.inc(padding.left)
result.inc(padding.right)
+ result.inc(container.xScrollbarSpace)
if container.frame != nil and container.frame.visible:
result = max(result, container.frame.naturalWidth)
@@ -1855,6 +1862,7 @@ method naturalHeight(container: Container): int =
let padding = container.getPadding()
result.inc(padding.top)
result.inc(padding.bottom)
+ result.inc(container.yScrollbarSpace)
method getPadding(container: Container): Spacing =
if container.frame != nil and container.frame.visible:
@@ -1865,8 +1873,8 @@ method setInnerSize(container: Container, width, height: int) = discard
method updateInnerSize(container: Container, pInnerWidth, pInnerHeight: int) {.base.} =
let padding = container.getPadding()
- let clientWidth = container.width - padding.left - padding.right
- let clientHeight = container.height - padding.top - padding.bottom
+ let clientWidth = container.visibleWidth - padding.left - padding.right
+ let clientHeight = container.visibleHeight - padding.top - padding.bottom
var innerWidth = pInnerWidth
var innerHeight = pInnerHeight
@@ -1888,6 +1896,7 @@ method updateInnerSize(container: Container, pInnerWidth, pInnerHeight: int) {.b
container.scrollableWidth = innerWidth
container.scrollableHeight = innerHeight
+
container.setInnerSize(innerWidth, innerHeight)
method realignChildControls(container: Container) =
@@ -1898,7 +1907,7 @@ method realignChildControls(container: Container) =
innerWidth = container.width
if innerHeight == -1:
innerHeight = container.height
- container.updateInnerSize(innerWidth - padding.left - padding.right, innerHeight - padding.top - padding.bottom)
+ container.updateInnerSize(innerWidth - padding.left - padding.right - container.xScrollbarSpace, innerHeight - padding.top - padding.bottom - container.yScrollbarSpace)
method `onDraw=`(container: ContainerImpl, callback: DrawProc) = raiseError("ContainerImpl does not allow onDraw.")
@@ -1938,6 +1947,7 @@ method naturalWidth(container: LayoutContainer): int =
result.inc(container.padding * 2)
if container.layout == Layout_Horizontal and container.childControls.len > 1:
result.inc(container.spacing * (container.childControls.len - 1))
+ result.inc(container.xScrollbarSpace)
if container.frame != nil and container.frame.visible:
result = max(result, container.frame.naturalWidth)
@@ -1960,6 +1970,7 @@ method naturalHeight(container: LayoutContainer): int =
result.inc(padding.top)
result.inc(padding.bottom)
result.inc(container.padding * 2)
+ result.inc(container.yScrollbarSpace)
if container.layout == Layout_Vertical and container.childControls.len > 1:
result.inc(container.spacing * (container.childControls.len - 1))
@@ -1978,6 +1989,7 @@ method minWidth(container: LayoutContainer): int =
result.inc(container.padding * 2)
if container.layout == Layout_Horizontal and container.childControls.len > 1:
result.inc(container.spacing * (container.childControls.len - 1))
+ result.inc(container.xScrollbarSpace)
result = max(result, container.fMinWidth)
method minHeight(container: LayoutContainer): int =
@@ -1995,6 +2007,7 @@ method minHeight(container: LayoutContainer): int =
result.inc(container.padding * 2)
if container.layout == Layout_Vertical and container.childControls.len > 1:
result.inc(container.spacing * (container.childControls.len - 1))
+ result.inc(container.yScrollbarSpace)
result = max(result, container.fMinHeight)
method setControlPosition(container: LayoutContainer, control: Control, x, y: int) =
@@ -2037,8 +2050,9 @@ method realignChildControls(container: LayoutContainer) =
return
# echo " container size: " & $container.width & ", " & $container.height
let padding = container.getPadding()
- let clientWidth = container.width - padding.left - padding.right
- let clientHeight = container.height - padding.top - padding.bottom
+ let clientWidth = container.visibleWidth - padding.left - padding.right
+ let clientHeight = container.visibleHeight - padding.top - padding.bottom
+
# echo " client size: " & $clientWidth & ", " & $clientHeight
var minInnerWidth = 0
var minInnerHeight = 0