diff options
| author | trustable-code <krauter.simon@arcor.de> | 2020-06-19 14:55:47 +0200 |
|---|---|---|
| committer | trustable-code <krauter.simon@arcor.de> | 2020-06-19 14:55:47 +0200 |
| commit | 6b5a397d555ffe4f294531f90cbc9d490fef9a98 (patch) | |
| tree | 39619ac8fe6217bdd3abe9df91fd3f8470142336 | |
| parent | a7464ccdb303fb888cab3acc368a356dd8997d9d (diff) | |
| download | NiGui-6b5a397d555ffe4f294531f90cbc9d490fef9a98.tar.gz NiGui-6b5a397d555ffe4f294531f90cbc9d490fef9a98.zip | |
Allow container widgets to have a custom draw method
Gtk: Replace GtkFixed by GtkLayout
Windows: No change needed
| -rwxr-xr-x | src/nigui.nim | 2 | ||||
| -rwxr-xr-x | src/nigui/private/gtk3/gtk3.nim | 2 | ||||
| -rwxr-xr-x | src/nigui/private/gtk3/platform_impl.nim | 30 |
3 files changed, 18 insertions, 16 deletions
diff --git a/src/nigui.nim b/src/nigui.nim index 82e6282..b63ecbe 100755 --- a/src/nigui.nim +++ b/src/nigui.nim @@ -2116,8 +2116,6 @@ method triggerRelayoutDownwards(container: Container) = for control in container.childControls: control.triggerRelayoutDownwards() -method `onDraw=`(container: ContainerImpl, callback: DrawProc) = raiseError("ContainerImpl does not allow onDraw.") - # ---------------------------------------------------------------------------------------- # LayoutContainer diff --git a/src/nigui/private/gtk3/gtk3.nim b/src/nigui/private/gtk3/gtk3.nim index 5db784b..0b63e89 100755 --- a/src/nigui/private/gtk3/gtk3.nim +++ b/src/nigui/private/gtk3/gtk3.nim @@ -308,7 +308,7 @@ proc gtk_fixed_move*(fixed, widget: pointer, x, y: cint) {.importc, libgtk3.} proc gtk_layout_new*(hadjustment, vadjustment: pointer): pointer {.importc, libgtk3.} # proc gtk_layout_put*(layout, child_widget: pointer, x, y: cint) {.importc, libgtk3.} proc gtk_layout_move*(layout, child_widget: pointer, x, y: cint) {.importc, libgtk3.} -# proc gtk_layout_set_size*(layout: pointer, width, height: cint) {.importc, libgtk3.} +proc gtk_layout_set_size*(layout: pointer, width, height: cint) {.importc, libgtk3.} # proc gtk_layout_get_hadjustment*(layout: pointer): pointer {.importc, libgtk3.} # proc gtk_layout_get_vadjustment*(layout: pointer): pointer {.importc, libgtk3.} diff --git a/src/nigui/private/gtk3/platform_impl.nim b/src/nigui/private/gtk3/platform_impl.nim index 3cfff3e..786e1e8 100755 --- a/src/nigui/private/gtk3/platform_impl.nim +++ b/src/nigui/private/gtk3/platform_impl.nim @@ -1111,8 +1111,7 @@ method setSize(control: ControlImpl, width, height: int) = method setPosition(control: ControlImpl, x, y: int) = procCall control.Control.setPosition(x, y) if control.fParentControl != nil: - gtk_fixed_move(cast[ContainerImpl](control.fParentControl).fInnerHandle, control.fHandle, x.cint, y.cint) - # gtk_layout_move(cast[ContainerImpl](control.fParentControl).fHandle, control.fHandle, x.cint, y.cint) + gtk_layout_move(cast[ContainerImpl](control.fParentControl).fInnerHandle, control.fHandle, x.cint, y.cint) method forceRedraw(control: ControlImpl) = gtk_widget_queue_draw(control.fHandle) @@ -1193,12 +1192,15 @@ proc init(container: ContainerImpl) = gtk_widget_show(container.fScrollWndHandle) gtk_container_add(container.fHandle, container.fScrollWndHandle) # Inner: - container.fInnerHandle = gtk_fixed_new() + container.fInnerHandle = gtk_layout_new(nil, nil) gtk_widget_show(container.fInnerHandle) gtk_container_add(container.fScrollWndHandle, container.fInnerHandle) container.Container.init() + discard g_signal_connect_data(container.fInnerHandle, "draw", pControlDrawSignal, cast[pointer](container)) + method pAddButtonPressEvent(container: ContainerImpl) = + # Overwrite base method gtk_widget_add_events(container.fInnerHandle, GDK_BUTTON_PRESS_MASK) discard g_signal_connect_data(container.fInnerHandle, "button-press-event", pCustomControlButtonPressSignal, cast[pointer](container)) @@ -1245,6 +1247,8 @@ method pUpdateScrollBar(container: ContainerImpl) = if fScrollbarSize == -1: return + gtk_layout_set_size(container.fInnerHandle, container.scrollableWidth.cint, container.scrollableHeight.cint) + container.fXScrollEnabled = false container.fYScrollEnabled = false @@ -1258,22 +1262,22 @@ method pUpdateScrollBar(container: ContainerImpl) = if container.fYScrollEnabled and not container.fXScrollEnabled and container.scrollableWidth > container.width - fScrollbarSize: container.fXScrollEnabled = true - # TODO: move to common part - - var xPolicy: cint = GTK_POLICY_NEVER - var yPolicy: cint = GTK_POLICY_NEVER - if container.fXScrollEnabled: - xPolicy = GTK_POLICY_AUTOMATIC - if container.fYScrollEnabled: - yPolicy = GTK_POLICY_AUTOMATIC - gtk_scrolled_window_set_policy(container.fScrollWndHandle, xPolicy, yPolicy) - method mousePosition(control: Control): tuple[x, y: int] = var x, y: cint gtk_widget_get_pointer(cast[ControlImpl](control).fHandle, x, y) result.x = x result.y = y +method handleDrawEvent(container: ContainerImpl, event: DrawEvent) = + # Overwrites base method + let callback = container.onDraw + if callback != nil: + callback(event) + else: + # Draw regular window background + container.canvas.areaColor = app.defaultBackgroundColor + container.canvas.fill() + # ---------------------------------------------------------------------------------------- # Frame |
