diff options
| author | trustable-code <krauter.simon@arcor.de> | 2020-02-15 23:49:03 +0100 |
|---|---|---|
| committer | trustable-code <krauter.simon@arcor.de> | 2020-02-15 23:49:03 +0100 |
| commit | 5debbd2c24803baf46060cf114d65c6ca1a1ae6f (patch) | |
| tree | 4da7f9e49930c1aafbbb337c9bda193941c4fd96 /src | |
| parent | 75b1bc9fe70d586fdb44d5fb749ab3924f6c46bd (diff) | |
| download | NiGui-5debbd2c24803baf46060cf114d65c6ca1a1ae6f.tar.gz NiGui-5debbd2c24803baf46060cf114d65c6ca1a1ae6f.zip | |
Gtk: Update scrollbars after scrollbar size was determined
Diffstat (limited to 'src')
| -rwxr-xr-x | src/nigui.nim | 13 | ||||
| -rwxr-xr-x | src/nigui/private/gtk3/platform_impl.nim | 11 |
2 files changed, 19 insertions, 5 deletions
diff --git a/src/nigui.nim b/src/nigui.nim index 3529965..b70d5b0 100755 --- a/src/nigui.nim +++ b/src/nigui.nim @@ -1044,7 +1044,9 @@ proc triggerRelayout(window: Window) method destroy(control: Control) {.base, locks: "unknown".} -proc triggerRelayout(control: Control) +method triggerRelayout(control: Control) + +method triggerRelayoutDownwards(control: Control) proc triggerRelayoutIfModeIsAuto(control: Control) @@ -1699,7 +1701,7 @@ method parentWindow(control: Control): WindowImpl = else: result = control.parentControl.parentWindow -proc triggerRelayout(control: Control) = +method triggerRelayout(control: Control) = var con = control while con.parentControl != nil: con = con.parentControl @@ -1709,6 +1711,9 @@ proc triggerRelayout(control: Control) = control.parentControl.triggerRelayout() control.realignChildControls() +method triggerRelayoutDownwards(control: Control) = + control.triggerRelayout() + proc triggerRelayoutIfModeIsAuto(control: Control) = if control.widthMode == WidthMode_Auto or control.heightMode == HeightMode_Auto: control.triggerRelayout() @@ -2083,6 +2088,10 @@ method realignChildControls(container: Container) = innerHeight = container.height container.updateInnerSize(innerWidth - padding.left - padding.right - container.xScrollbarSpace, innerHeight - padding.top - padding.bottom - container.yScrollbarSpace) +method triggerRelayoutDownwards(container: Container) = + for control in container.childControls: + control.triggerRelayoutDownwards() + method `onDraw=`(container: ContainerImpl, callback: DrawProc) = raiseError("ContainerImpl does not allow onDraw.") diff --git a/src/nigui/private/gtk3/platform_impl.nim b/src/nigui/private/gtk3/platform_impl.nim index 7f17bf2..c3df5f7 100755 --- a/src/nigui/private/gtk3/platform_impl.nim +++ b/src/nigui/private/gtk3/platform_impl.nim @@ -781,6 +781,9 @@ proc pMainScrollbarDraw(widget: pointer, cr: pointer, data: pointer): Gboolean { gtk_widget_get_allocation(scrollbar, allocation) gtk_scrolled_window_set_policy(widget, GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC) fScrollbarSize = allocation.height + for window in windowList: + if window.control != nil: + window.control.triggerRelayoutDownwards() proc pWindowStateEventSignal(widget: pointer, event: var GdkEventWindowState, user_data: pointer): Gboolean {.cdecl.} = let window = cast[WindowImpl](user_data) @@ -901,6 +904,10 @@ method `iconPath=`(window: WindowImpl, iconPath: string) = method pUpdateScrollBar(control: ControlImpl) {.base.} +method triggerRelayout(control: ControlImpl) = + procCall control.Control.triggerRelayout() + control.pUpdateScrollBar() + proc pControlDrawSignal(widget: pointer, cr: pointer, data: pointer): Gboolean {.cdecl.} = let control = cast[ControlImpl](data) @@ -1226,9 +1233,7 @@ method pUpdateScrollBar(container: ContainerImpl) = return if fScrollbarSize == -1: - return - - # echo "container.pUpdateScrollBar" + return container.fXScrollEnabled = false container.fYScrollEnabled = false |
