diff options
| author | trustable-code <krauter.simon@arcor.de> | 2019-03-21 19:20:06 +0100 |
|---|---|---|
| committer | trustable-code <krauter.simon@arcor.de> | 2019-03-21 19:20:06 +0100 |
| commit | c4ed2fbec8b6dba6d80f49ef54c4112fed524bf6 (patch) | |
| tree | dae722693b7fb169691fd36ac58a48908f81b7de /src | |
| parent | ceff56275534042072cd228adfb19c424c23ba0a (diff) | |
| download | NiGui-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-x | src/nigui.nim | 36 |
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 |
