From: Matt Birkholz Date: Tue, 14 Aug 2012 03:25:18 +0000 (-0700) Subject: gtk: Replaced deprecated GtkBox with GtkGrid. X-Git-Tag: mit-scheme-pucked-9.2.12~563 X-Git-Url: https://birchwood-abbey.net/git?a=commitdiff_plain;h=fd76e8a49bc281e7fbd89443d4ab5db8f135f040;p=mit-scheme.git gtk: Replaced deprecated GtkBox with GtkGrid. --- diff --git a/doc/gtk/gtk.texinfo b/doc/gtk/gtk.texinfo index e9c74d052..4e08a120c 100644 --- a/doc/gtk/gtk.texinfo +++ b/doc/gtk/gtk.texinfo @@ -210,7 +210,7 @@ the Gtk interface. * Gtk Label:: * Gtk Button:: * Gtk Check Button:: -* Gtk Box:: +* Gtk Grid:: * Gtk Frame:: * Gtk Scrolled Window:: * Scheme Widget:: @@ -1040,18 +1040,31 @@ The layout will be empty unless @var{text}, a string, is provided. If @bref{pango-layout-context-changed} to re-lay-out the text. @end deffn -@anchor{gtk-widget-set-size-request} +@deffn Procedure gtk-widget-get-size widget +Gets @var{widget}'s size allocation, a pair of integers: +@code{(width . height)}. +@end deffn + +@deffn Procedure gtk-widget-set-hexpand widget expand? +Set whether @var{widget} would like any available extra horizontal +space or not, overriding the default expand behavior. +@end deffn + +@deffn Procedure gtk-widget-set-vexpand widget expand? +Set whether @var{widget} would like any available extra vertical +space or not, overriding the default expand behavior. +@end deffn + @deffn Procedure gtk-widget-set-size-request widget width height Notify the toolkit of @var{widget}'s natural size. @var{Width} and @var{height} should be positive. This is just a request. @var{Widget}'s size-allocate callback will be applied when its size is initialized or changed. +Unfortunately this procedure also overrides the minimum width and +height so that a top-level window cannot be resized to a smaller size. @end deffn -@deffn Procedure gtk-widget-get-size widget -Gets @var{widget}'s size allocation, a pair of integers: -@code{(width . height)}. -@end deffn +@anchor{gtk-widget-set-size-request} @subsection Gtk Widget Colors & Fonts @@ -1154,7 +1167,7 @@ Adds @var{child} to @var{container}. @var{Child} should not already be in a container. Typically used for GtkBins, where positioning the child in the container is trivial. When applied to a more complex container, the results may be unexpected. Consider a more specialized -procedure like @bref{gtk-box-pack-start}. +procedure like @bref{gtk-grid-attach}. @end deffn @deffn Procedure gtk-container-remove container child @@ -1256,7 +1269,7 @@ Windows. Sets @var{window}'s default size to @var{width} x @var{height}. If either dimension is -1, the default for that dimension is unset. If a dimension is 0, it is treated like 1, which means ``as small as -possible'' (which is effectively ``unset''?). With a default size +possible''. With a default size set, @var{window} may still request a larger size. The final size will be clamped according to @var{window}'s geometry hints. If @var{window} has already been shown, this procedure has no effect; it @@ -1288,8 +1301,7 @@ procedure overrides @var{window}'s default size. See @bref{gtk-window-set-default-size}. These come from geometry hints, and a default constraint that windows -not be sized smaller than their natural size. To force @var{window}'s -``natural'' size, apply @bref{gtk-widget-set-size-request}. +not be sized smaller than their natural size. @end deffn @deffn Procedure gtk-window-present window @@ -1364,7 +1376,7 @@ will apply @var{callback} to @var{button}. Do @emph{not} capture @var{button} in @var{callback}'s closure, else it cannot be GCed. @end deffn -@node Gtk Check Button, Gtk Box, Gtk Button, API Reference +@node Gtk Check Button, Gtk Grid, Gtk Button, API Reference @section Gtk Check Button @deffn Class @@ -1397,67 +1409,59 @@ will apply @var{callback} to @var{button}. Do @emph{not} capture @var{button} in @var{callback}'s closure, else it cannot be GCed. @end deffn -@node Gtk Box, Gtk Frame, Gtk Check Button, API Reference -@section Gtk Box +@node Gtk Grid, Gtk Frame, Gtk Check Button, API Reference +@section Gtk Grid -Gtk boxes can be vboxes or hboxes arranging their children vertically -or horizontally, respectively. +GtkGrids arrange their children in rows and columns. -@anchor{gtk-box-pack-start} -@deffn Procedure gtk-box-pack-start box child expand? fill? padding -Adds @var{child} to @var{box} @emph{after} siblings previously packed -with this procedure, and @emph{before} siblings previously packed with -@bref{gtk-box-pack-end}. @var{Box} can be a gtk-vbox or gtk-hbox. If -@var{expand?}, the new child is positioned within a share of any extra -space. If @var{fill?} (and @var{expand?}), the child is allocated the -share of extra space. @var{Padding} is the space around the child, -e.g. between it and its neighbors @emph{and} the edge of the box. +@deffn Class +A direct subclass of gtk-container representing a reference to a GtkGrid. @end deffn -@anchor{gtk-box-pack-end} -@deffn Procedure gtk-box-pack-end box child expand? fill? padding -Just like @bref{gtk-box-pack-start}, except @var{child} is packed -@emph{before} siblings previously packed with this procedure, -@emph{after} siblings packed with gtk-box-pack-start. +@deffn Procedure gtk-grid? object +Type predicate. @end deffn -@deffn Class -A direct subclass of gtk-container representing a reference to a GtkVBox. +@deffn Procedure guarantee-gtk-grid object operator +Type guarantor. @end deffn -@deffn Procedure gtk-vbox? object -Type predicate. +@deffn Procedure gtk-grid-new +A new gtk-grid. @end deffn -@deffn Procedure guarantee-gtk-vbox object operator -Type guarantor. +@deffn Procedure gtk-grid-set-row-spacing grid space +Set the distance between rows of @var{grid} to @var{space} pixels. @end deffn -@deffn Procedure gtk-vbox-new homogeneous? spacing -A new gtk-vbox. If @var{homogeneous?} is not #f, all children are -given equal space allocations. @var{Spacing} is the distance between -children. +@deffn Procedure gtk-grid-set-column-spacing grid space +Set the distance between columns of @var{grid} to @var{space} pixels. @end deffn -@deffn Class -A direct subclass of gtk-container representing a reference to a GtkHBox. +@deffn Procedure gtk-grid-set-row-homogeneous grid homogeneous? +Set the homogeneity of row heights. If @var{homogeneous?} is +@code{#f}, rows can have different heights. Else they are all +allocated the same height. @end deffn -@deffn Procedure gtk-hbox? object -Type predicate. +@deffn Procedure gtk-grid-set-column-homogeneous grid homogeneous? +Set the homogeneity of column widths. If @var{homogeneous?} is +@code{#f}, columns can have different widths. Else they are all +allocated the same width. @end deffn -@deffn Procedure guarantee-gtk-hbox object operator -Type guarantor. +@anchor{gtk-grid-attach} +@deffn Procedure gtk-grid-attach grid widget left top width height +Place @var{widget} in @var{grid} at column @var{left} spanning +@var{width} columns, and at row @var{top} spanning @var{height} rows. @end deffn -@deffn Procedure gtk-hbox-new homogeneous? spacing -A new gtk-hbox. If @var{homogeneous?} is not #f, all children are -given equal space allocations. @var{Spacing} is the distance between -children. +@deffn Procedure gtk-orientable-set-orientation orientable orientation +Set a GtkOrientable to @var{orientation} which should be one of the +symbols @code{horizontal} or @code{vertical}. @end deffn -@node Gtk Frame, Gtk Scrolled Window, Gtk Box, API Reference +@node Gtk Frame, Gtk Scrolled Window, Gtk Grid, API Reference @section Gtk Frame A bin with a decorative frame and optional label. @@ -1524,8 +1528,11 @@ a ScmWidget toolkit object and connects to its various gsignals, like @code{size_allocate} and @code{realize}. Its representative in Scheme, a scm-widget instance, arranges to clean these up if it is garbage collected, like any other gobject instance. Scheme widgets -have a @code{set_scroll_adjustments} signal, like GtkLayout, allowing -them to be placed in Gtk scrolled windows. +implement the GtkScrollable interface, emitting a +@code{set_scroll_adjustments} signal when the ``vadjustment'' or +``hadjustment'' properties are set. They also participate in the +width-for-height (or height-for-width) geometry management protocol +in @code{GTK_SIZE_REQUEST_CONSTANT_SIZE} mode. @deffn Class A direct subclass of gtk-widget representing a reference to a ScmWidget. @@ -1538,6 +1545,19 @@ informed of any change to the widget's scroll position. The aliens will be NULL when the widget's scrollbars are removed. @end deffn +@anchor{set-scm-widget-minimum-size!} +@deffn Procedure set-scm-widget-minimum-size! widget width height +Sets @var{widget}'s minimum width and height. This procedure does not +request a resize; it only changes the values returned by ScmWidget +methods like @code{get_preferred_width}. +@end deffn + +@deffn Procedure set-scm-widget-natural-size! widget width height +Sets @var{widget}'s natural width and height. This procedure does not +request a resize; it only changes the values returned by ScmWidget +methods like @code{get_preferred_height_for_width}. +@end deffn + @section Fix Widget This simple Scheme widget manages the GdkWindow on which more diff --git a/src/gtk/Includes/gtk.cdecl b/src/gtk/Includes/gtk.cdecl index 62d4f5994..0cc5dd95c 100644 --- a/src/gtk/Includes/gtk.cdecl +++ b/src/gtk/Includes/gtk.cdecl @@ -4,16 +4,15 @@ gtk/gtk.h |# (include "gdk") (include "gtkadjustment") -(include "gtkbox") (include "gtkcontainer") (include "gtkenums") (include "gtkframe") -(include "gtkhbox") +(include "gtkgrid") (include "gtklabel") +(include "gtkorientable") (include "gtkscrolledwindow") (include "gtkstylecontext") (include "gtktogglebutton") (include "gtktypeutils") -(include "gtkvbox") (include "gtkwidget") (include "gtkwindow") \ No newline at end of file diff --git a/src/gtk/Includes/gtkbox.cdecl b/src/gtk/Includes/gtkbox.cdecl deleted file mode 100644 index 26c3f58e0..000000000 --- a/src/gtk/Includes/gtkbox.cdecl +++ /dev/null @@ -1,19 +0,0 @@ -#| -*-Scheme-*- - -gtk-2.0/gtk/gtkbox.h |# - -(extern void - gtk_box_pack_start - (box (* GtkBox)) - (child (* GtkWidget)) - (expand gboolean) - (fill gboolean) - (padding guint)) - -(extern void - gtk_box_pack_end - (box (* GtkBox)) - (child (* GtkWidget)) - (expand gboolean) - (fill gboolean) - (padding guint)) \ No newline at end of file diff --git a/src/gtk/Includes/gtkcontainer.cdecl b/src/gtk/Includes/gtkcontainer.cdecl index faf5cf016..88301aacb 100644 --- a/src/gtk/Includes/gtkcontainer.cdecl +++ b/src/gtk/Includes/gtkcontainer.cdecl @@ -1,6 +1,6 @@ #| -*-Scheme-*- -gtk+-2.4.0/gtk/gtkcontainer.h |# +gtk/gtkcontainer.h |# (extern void gtk_container_add @@ -15,4 +15,8 @@ gtk+-2.4.0/gtk/gtkcontainer.h |# (extern void gtk_container_set_border_width (container (* GtkContainer)) - (border_width guint)) \ No newline at end of file + (border_width guint)) + +(extern void + gtk_container_resize_children + (container (* GtkContainer))) \ No newline at end of file diff --git a/src/gtk/Includes/gtkgrid.cdecl b/src/gtk/Includes/gtkgrid.cdecl new file mode 100644 index 000000000..0f4718db2 --- /dev/null +++ b/src/gtk/Includes/gtkgrid.cdecl @@ -0,0 +1,41 @@ +#| -*-Scheme-*- + +gtk/gtkgrid.h |# + +(extern (* GtkWidget) gtk_grid_new) + +(extern void gtk_grid_attach + (grid (* GtkGrid)) + (child (* GtkWidget)) + (left gint) + (top gint) + (width gint) + (height gint)) + +(extern void gtk_grid_set_row_homogeneous + (grid (* GtkGrid)) + (homogeneous gboolean)) + +(extern gboolean gtk_grid_get_row_homogeneous + (grid (* GtkGrid))) + +(extern void gtk_grid_set_row_spacing + (grid (* GtkGrid)) + (spacing guint)) + +(extern guint gtk_grid_get_row_spacing + (grid (* GtkGrid))) + +(extern void gtk_grid_set_column_homogeneous + (gri (* GtkGrid)) + (homogeneous gboolean)) + +(extern gboolean gtk_grid_get_column_homogeneous + (grid (* GtkGrid))) + +(extern void gtk_grid_set_column_spacing + (grid (* GtkGrid)) + (spacing guint)) + +(extern guint gtk_grid_get_column_spacing + (grid (* GtkGrid))) \ No newline at end of file diff --git a/src/gtk/Includes/gtkhbox.cdecl b/src/gtk/Includes/gtkhbox.cdecl deleted file mode 100644 index 96b7e7c6e..000000000 --- a/src/gtk/Includes/gtkhbox.cdecl +++ /dev/null @@ -1,8 +0,0 @@ -#| -*-Scheme-*- - -gtk-2.0/gtk/gtkhbox.h |# - -(extern (* GtkWidget) - gtk_hbox_new - (homogeneous gboolean) - (spacing gint)) \ No newline at end of file diff --git a/src/gtk/Includes/gtkorientable.cdecl b/src/gtk/Includes/gtkorientable.cdecl new file mode 100644 index 000000000..c3bd41d6a --- /dev/null +++ b/src/gtk/Includes/gtkorientable.cdecl @@ -0,0 +1,10 @@ +#| -*-Scheme-*- + +gtk/gtkorientable.h |# + +(extern void gtk_orientable_set_orientation + (orientable (* GtkOrientable)) + (orientation GtkOrientation)) + +(extern GtkOrientation gtk_orientable_get_orientation + (orientable (* GtkOrientable))) \ No newline at end of file diff --git a/src/gtk/Includes/gtkvbox.cdecl b/src/gtk/Includes/gtkvbox.cdecl deleted file mode 100644 index 44a3d5a0a..000000000 --- a/src/gtk/Includes/gtkvbox.cdecl +++ /dev/null @@ -1,8 +0,0 @@ -#| -*-Scheme-*- - -gtk-2.0/gtk/gtkvbox.h |# - -(extern (* GtkWidget) - gtk_vbox_new - (homogeneous gboolean) - (spacing gint)) \ No newline at end of file diff --git a/src/gtk/Includes/gtkwidget.cdecl b/src/gtk/Includes/gtkwidget.cdecl index 7092e8a5f..2e732b7f6 100644 --- a/src/gtk/Includes/gtkwidget.cdecl +++ b/src/gtk/Includes/gtkwidget.cdecl @@ -96,6 +96,14 @@ gtk/gtkwidget.h |# (width gint) (height gint)) +(extern void gtk_widget_set_hexpand + (widget (* GtkWidget)) + (expand gboolean)) + +(extern void gtk_widget_set_vexpand + (widget (* GtkWidget)) + (expand gboolean)) + (extern gint gtk_widget_get_events (widget (* GtkWidget))) diff --git a/src/gtk/fix-demo.scm b/src/gtk/fix-demo.scm index f08abb0d8..ffe0aa6de 100644 --- a/src/gtk/fix-demo.scm +++ b/src/gtk/fix-demo.scm @@ -28,27 +28,38 @@ USA. (define spin? #t) (define (make-fix-layout-demo) - (let* ((window (gtk-window-new 'toplevel)) - (vbox (gtk-vbox-new #f 0)) + (let* ((window (let ((w (gtk-window-new 'toplevel))) + (gtk-window-set-opacity w 0.90) + (gtk-window-set-title w "fix-layout-demo") + (set-gtk-window-delete-event-callback! + w (lambda (w) (%trace ";closed "w"\n") 0)) + (gtk-container-set-border-width w 5) + w)) + (vgrid (let ((g (gtk-grid-new))) + (gtk-orientable-set-orientation g 'vertical) + g)) (scroller1 (gtk-scrolled-window-new)) (scroller2 (gtk-scrolled-window-new)) - (layout1 (make-demo-layout 200 200)) - (layout2 (make-demo-layout 200 200)) - (resizer (make-fix-resizer -1 10))) - (gtk-window-set-opacity window 0.90) - (gtk-window-set-title window "fix-layout-demo") - (gtk-window-set-default-size window 200 400) - (set-gtk-window-delete-event-callback! - window (lambda (w) (%trace ";closed "w"\n") 0)) - (gtk-container-set-border-width window 10) + (layout1 (let ((l (make-demo-layout 200 200))) + (gtk-widget-set-hexpand l #t) + (gtk-widget-set-vexpand l #t) + l)) + (layout2 (let ((l (make-demo-layout 200 200))) + (gtk-widget-set-hexpand l #t) + (gtk-widget-set-vexpand l #t) + l)) + (resizer (let ((r (make-fix-resizer 0 10))) + (gtk-widget-set-hexpand r #t) + r))) + (gtk-container-add scroller1 layout1) - (gtk-box-pack-start vbox scroller1 #t #t 0) + (gtk-container-add vgrid scroller1) (set-fix-resizer-before! resizer scroller1) (set-fix-resizer-after! resizer scroller2) - (gtk-box-pack-start vbox resizer #f #f 0) + (gtk-container-add vgrid resizer) (gtk-container-add scroller2 layout2) - (gtk-box-pack-start vbox scroller2 #t #t 0) - (gtk-container-add window vbox) + (gtk-container-add vgrid scroller2) + (gtk-container-add window vgrid) (gtk-widget-show-all window) (let ((drawing (make-demo-drawing layout1))) diff --git a/src/gtk/fix-layout.scm b/src/gtk/fix-layout.scm index 0af05068f..afa5982ad 100644 --- a/src/gtk/fix-layout.scm +++ b/src/gtk/fix-layout.scm @@ -45,24 +45,15 @@ USA. (define-guarantee fix-widget "a ") -(define-method initialize-instance ((widget ) width height) - - (define-integrable (->requisition-fixnum obj) - (if (and (fixnum? obj) (fix:> obj -2)) - obj - (error:wrong-type-argument obj "a positive fixnum, 0 or -1" - (list initialize-instance )))) +(define-integrable guarantee-size guarantee-non-negative-fixnum) +(define-method initialize-instance ((widget ) width height) (call-next-method widget) - (%trace "; (initialize-instance ) "widget" "width" "height"\n") - - (let ((alien (gobject-alien widget))) - (let ((w (->requisition-fixnum width)) - (h (->requisition-fixnum height))) - (set-scm-widget-size-request! widget 0 0 w h) - ;; Init. size, for a realize signal arriving before an allocation. - (set-fix-rect-size! (fix-widget-geometry widget) w h)) - (C-call "gtk_widget_set_has_window" alien 1)) + (%trace "; (initialize-instance ) "widget" "width"x"height"\n") + (set-scm-widget-natural-size! widget width height) + ;; Init. size, for a realize signal arriving before an allocation. + (set-fix-rect-size! (fix-widget-geometry widget) width height) + (C-call "gtk_widget_set_has_window" (gobject-alien widget) 1) (set-gtk-widget-realize-callback! widget fix-widget-realize-callback) (set-gtk-widget-size-allocate-callback! widget allocate-callback) @@ -373,7 +364,7 @@ USA. (define-method initialize-instance ((widget ) width height) (call-next-method widget width height) - (%trace "; (initialize-instance ) "widget" "width" "height"\n") + (%trace "; (initialize-instance ) "widget" "width"x"height"\n") (set-gtk-widget-draw-callback! widget layout-draw-callback) (set-scm-widget-set-scroll-adjustments-callback! widget adjustments-callback) (C-call "gtk_widget_set_can_focus" (gobject-alien widget) 1) @@ -426,8 +417,8 @@ USA. ;; Tells WIDGET to adjust its scrollable extent. Notifies any ;; scrollbars. (guarantee-fix-layout widget 'set-fix-layout-scroll-size!) - (guarantee-non-negative-fixnum width 'set-fix-layout-scroll-size!) - (guarantee-non-negative-fixnum height 'set-fix-layout-scroll-size!) + (guarantee-size width 'set-fix-layout-scroll-size!) + (guarantee-size height 'set-fix-layout-scroll-size!) (let ((extent (fix-layout-scrollable-extent widget))) (if (not (and (fix:= width (fix-rect-width extent)) (fix:= height (fix-rect-height extent)))) @@ -760,12 +751,16 @@ USA. (let ((w (fix:+ (car w.h-before) dx)) (h (fix:+ (cdr w.h-before) dy))) (%trace "; resizing "before" to "w"x"h"\n") - (set-scm-widget-size-request! (gtk-bin-child before) - 0 0 w h)) + (set-scm-widget-natural-size! (gtk-bin-child before) + w h)) (let ((w (fix:- (car w.h-after) dx)) (h (fix:- (cdr w.h-after) dy))) (%trace "; resizing "after" to "w"x"h"\n") - (set-scm-widget-size-request! after 0 0 w h)))))) + (set-scm-widget-natural-size! (gtk-bin-child after) + w h)) + (C-call "gtk_container_resize_children" + (gobject-alien + (gtk-widget-parent resizer))))))) (if (fix-resizer-stack-vertical? resizer) @@ -937,8 +932,8 @@ USA. (define (set-fix-drawing-size! drawing width height) (guarantee-fix-drawing drawing 'set-fix-drawing-size!) - (guarantee-non-negative-fixnum width 'set-drawing-size!) - (guarantee-non-negative-fixnum height 'set-drawing-size!) + (guarantee-size width 'set-drawing-size!) + (guarantee-size height 'set-drawing-size!) (set-fix-rect-size! (fix-drawing-extent drawing) width height) (for-each (lambda (widget) (set-fix-layout-scroll-size! widget width height)) @@ -1317,8 +1312,8 @@ USA. (define (set-rectangle-ink! ink x y width height) (guarantee-fixnum x 'set-rectangle-ink!) (guarantee-fixnum y 'set-rectangle-ink!) - (guarantee-non-negative-fixnum width 'set-rectangle-ink!) - (guarantee-non-negative-fixnum height 'set-rectangle-ink!) + (guarantee-size width 'set-rectangle-ink!) + (guarantee-size height 'set-rectangle-ink!) (without-interrupts (lambda () (let ((rect (rectangle-ink-rect ink))) @@ -1435,8 +1430,8 @@ USA. (define (set-arc-ink! ink x y width height) (guarantee-fixnum x 'set-arc-ink!) (guarantee-fixnum y 'set-arc-ink!) - (guarantee-non-negative-fixnum width 'set-arc-ink!) - (guarantee-non-negative-fixnum height 'set-arc-ink!) + (guarantee-size width 'set-arc-ink!) + (guarantee-size height 'set-arc-ink!) (without-interrupts (lambda () (let ((rect (arc-ink-rect ink))) @@ -1802,8 +1797,8 @@ USA. (define (set-box-ink! ink x y width height) (guarantee-fixnum x 'set-box-ink!) (guarantee-fixnum y 'set-box-ink!) - (guarantee-non-negative-fixnum width 'set-box-ink!) - (guarantee-non-negative-fixnum height 'set-box-ink!) + (guarantee-size width 'set-box-ink!) + (guarantee-size height 'set-box-ink!) (set-fix-ink! ink x y width height)) (define (set-box-ink-position! ink x y) @@ -1978,8 +1973,8 @@ USA. (define (gdk-rectangle #!optional x y width height) (if (not (default-object? x)) (guarantee-fixnum x 'gdk-rectangle)) (if (not (default-object? y)) (guarantee-fixnum y 'gdk-rectangle)) - (if (not (default-object? width)) (guarantee-non-negative-fixnum width 'gdk-rectangle)) - (if (not (default-object? height)) (guarantee-non-negative-fixnum height 'gdk-rectangle)) + (if (not (default-object? width)) (guarantee-size width 'gdk-rectangle)) + (if (not (default-object? height)) (guarantee-size height 'gdk-rectangle)) (let ((alien (malloc (C-sizeof "GdkRectangle") '|GdkRectangle|))) (if (default-object? x) alien (begin diff --git a/src/gtk/gtk-widget.scm b/src/gtk/gtk-widget.scm index 8604f62f7..7d5de4199 100644 --- a/src/gtk/gtk-widget.scm +++ b/src/gtk/gtk-widget.scm @@ -203,12 +203,23 @@ USA. (free allocation) (cons width height)))) +(define (guarantee-size object operator) + (if (and (fixnum? object) (fix:> object -2)) + object + (error:wrong-type-argument object "a positive fixnum, 0 or -1" operator))) + (define (gtk-widget-set-size-request widget width height) (guarantee-gtk-widget widget 'gtk-widget-set-size-request) - (guarantee-non-negative-fixnum width 'gtk-widget-set-size-request) - (guarantee-non-negative-fixnum height 'gtk-widget-set-size-request) + (guarantee-size width 'gtk-widget-set-size-request) + (guarantee-size height 'gtk-widget-set-size-request) (C-call "gtk_widget_set_size_request" (gobject-alien widget) width height)) +(define (gtk-widget-set-hexpand widget expand?) + (C-call "gtk_widget_set_hexpand" (gobject-alien widget) (if expand? 1 0))) + +(define (gtk-widget-set-vexpand widget expand?) + (C-call "gtk_widget_set_vexpand" (gobject-alien widget) (if expand? 1 0))) + (define (set-gtk-widget-size-allocate-callback! widget callback) (guarantee-gtk-widget widget 'set-gtk-widget-size-allocate-callback!) (guarantee-procedure-of-arity callback 2 'set-gtk-widget-size-allocate-callback!) @@ -514,57 +525,63 @@ USA. (named-lambda (gtk-check-button-toggled-callback button) (callback button))) -;;; GtkVBox +;;; GtkGrids -(define-class ( (constructor () (homogeneous? spacing))) +(define-class ( (constructor gtk-grid-new ())) ()) -(define-guarantee gtk-vbox "a ") +(define-guarantee gtk-grid "a ") -(define-method initialize-instance ((vbox ) homogeneous? spacing) - (call-next-method vbox) - (let ((alien (gobject-alien vbox))) - (C-call "gtk_vbox_new" alien (if homogeneous? 1 0) spacing) - (error-if-null alien "Could not create:" vbox) +(define-method initialize-instance ((grid )) + (call-next-method grid) + (let ((alien (gobject-alien grid))) + (C-call "gtk_grid_new" alien) + (error-if-null alien "Could not create:" grid) (C-call "g_object_ref_sink" alien alien)) - (set-gtk-widget-destroy-callback! vbox)) - -(define (gtk-vbox-new homogeneous? spacing) - (guarantee-boolean homogeneous? 'gtk-vbox-new) - (guarantee-non-negative-fixnum spacing 'gtk-vbox-new) - (make-gtk-vbox homogeneous? spacing)) - -(define-integrable-operator (guarantee-boolean object operator) - (if (not (or (eq? object #t) (eq? object #f))) - (error:wrong-type-argument object "#t or #f" operator))) - -(define-class ( (constructor () (homogeneous? spacing))) - ()) - -(define-guarantee gtk-hbox "a ") - -(define-method initialize-instance ((hbox ) homogeneous? spacing) - (call-next-method hbox) - (let ((alien (gobject-alien hbox))) - (C-call "gtk_hbox_new" alien (if homogeneous? 1 0) spacing) - (error-if-null alien "Could not create:" hbox) - (C-call "g_object_ref_sink" alien alien)) - (set-gtk-widget-destroy-callback! hbox)) - -(define (gtk-hbox-new homogeneous? spacing) - (guarantee-boolean homogeneous? 'gtk-hbox-new) - (guarantee-non-negative-fixnum spacing 'gtk-hbox-new) - (make-gtk-hbox homogeneous? spacing)) - -(define (gtk-box-pack-start box child expand? fill? padding) - (container-add! box child) - (C-call "gtk_box_pack_start" (gobject-alien box) (gobject-alien child) - (if expand? 1 0) (if fill? 1 0) padding)) - -(define (gtk-box-pack-end box child expand? fill? padding) - (container-add! box child) - (C-call "gtk_box_pack_end" (gobject-alien box) (gobject-alien child) - (if expand? 1 0) (if fill? 1 0) padding)) + (set-gtk-widget-destroy-callback! grid)) + +(define (gtk-grid-set-row-homogeneous grid homogeneous?) + (guarantee-gtk-grid grid 'gtk-grid-set-row-homogeneous) + (C-call "gtk_grid_set_row_homogeneous" (gobject-alien grid) + (if homogeneous? 1 0))) + +(define (gtk-grid-set-column-homogeneous grid homogeneous?) + (guarantee-gtk-grid grid 'gtk-grid-set-column-homogeneous) + (C-call "gtk_grid_set_column_homogeneous" (gobject-alien grid) + (if homogeneous? 1 0))) + +(define (gtk-grid-set-row-spacing grid spacing) + (guarantee-gtk-grid grid 'gtk-grid-set-row-spacing) + (guarantee-non-negative-fixnum spacing 'gtk-grid-set-row-spacing) + (C-call "gtk_grid_set_row_spacing" (gobject-alien grid) spacing)) + +(define (gtk-grid-set-column-spacing grid spacing) + (guarantee-gtk-grid grid 'gtk-grid-set-column-spacing) + (guarantee-non-negative-fixnum spacing 'gtk-grid-set-column-spacing) + (C-call "gtk_grid_set_column_spacing" (gobject-alien grid) spacing)) + +(define (gtk-grid-attach grid widget left top width height) + (guarantee-gtk-grid grid 'gtk-grid-attach) + (guarantee-gtk-widget widget 'gtk-grid-attach) + (guarantee-fixnum left 'gtk-grid-attach) + (guarantee-fixnum top 'gtk-grid-attach) + (guarantee-fixnum width 'gtk-grid-attach) + (guarantee-fixnum height 'gtk-grid-attach) + (container-add! grid widget) + (C-call "gtk_grid_attach" (gobject-alien grid) (gobject-alien widget) + left top width height)) + +(define (gtk-orientable-set-orientation orientable orientation) + (C-call "gtk_orientable_set_orientation" (gobject-alien orientable) + (case orientation + ((VERTICAL) (C-enum "GTK_ORIENTATION_VERTICAL")) + ((HORIZONTAL) (C-enum "GTK_ORIENTATION_HORIZONTAL")) + (else (error:wrong-type-argument + orientation + "an orientation (vertical or horizontal)" + 'gtk-orientable-set-orientation))))) + +;;; GtkFrames (define-class ( (constructor () (label))) ()) diff --git a/src/gtk/gtk.pkg b/src/gtk/gtk.pkg index 779d11d66..45e0d19ad 100644 --- a/src/gtk/gtk.pkg +++ b/src/gtk/gtk.pkg @@ -153,6 +153,8 @@ USA. gtk-widget-get-pango-context gtk-widget-create-pango-layout gtk-widget-get-size + gtk-widget-set-hexpand + gtk-widget-set-vexpand gtk-widget-set-size-request ;;gtk-widget-set-can-focus set-gtk-widget-size-allocate-callback! @@ -194,9 +196,13 @@ USA. gtk-check-button-new gtk-check-button-get-active gtk-check-button-set-active set-gtk-check-button-toggled-callback! - gtk-vbox? guarantee-gtk-vbox gtk-vbox-new - gtk-hbox? guarantee-gtk-hbox gtk-hbox-new - gtk-box-pack-start gtk-box-pack-end + gtk-grid? guarantee-gtk-grid gtk-grid-new + gtk-grid-set-row-spacing + gtk-grid-set-column-spacing + gtk-grid-set-row-homogeneous + gtk-grid-set-column-homogeneous + gtk-grid-attach + gtk-orientable-set-orientation gtk-frame? guarantee-gtk-frame gtk-frame-new gtk-frame-set-shadow-type gtk-scrolled-window? @@ -213,7 +219,7 @@ USA. (export (gtk) set-scm-widget-set-scroll-adjustments-callback! - set-scm-widget-size-request!)) + set-scm-widget-minimum-size! set-scm-widget-natural-size!)) (define-package (gtk fix-layout) (parent (gtk)) diff --git a/src/gtk/gtkio.c.stay b/src/gtk/gtkio.c.stay index 85ae82a75..a4de9d827 100644 --- a/src/gtk/gtkio.c.stay +++ b/src/gtk/gtkio.c.stay @@ -528,14 +528,18 @@ static void open_slice_window (void) { slice_window = gtk_window_new (GTK_WINDOW_TOPLEVEL); - GtkWidget * vbox = gtk_vbox_new (FALSE, 5); + GtkWidget * grid = gtk_grid_new (); status_label = gtk_label_new ("Channels:"); slice_label = gtk_label_new ("Scheme time-slice: 0"); g_signal_connect (slice_window, "delete_event", G_CALLBACK (slice_window_delete_event), NULL); - gtk_container_add (GTK_CONTAINER (slice_window), vbox); - gtk_box_pack_start (GTK_BOX (vbox), status_label, FALSE, FALSE, 2); - gtk_box_pack_end (GTK_BOX (vbox), slice_label, FALSE, FALSE, 2); + gtk_grid_set_row_spacing (GTK_GRID (grid), 5); + gtk_orientable_set_orientation (GTK_ORIENTABLE (grid), + GTK_ORIENTATION_VERTICAL); + gtk_container_add (GTK_CONTAINER (grid), status_label); + gtk_container_add (GTK_CONTAINER (grid), slice_label); + gtk_container_add (GTK_CONTAINER (slice_window), grid); + gtk_container_set_border_width (GTK_CONTAINER (slice_window), 2); gtk_window_set_title (GTK_WINDOW (slice_window), "Scheme Time-Slice Counter"); gtk_window_set_type_hint (GTK_WINDOW (slice_window), GDK_WINDOW_TYPE_HINT_UTILITY); diff --git a/src/gtk/scm-widget.scm b/src/gtk/scm-widget.scm index acdeff238..981e21048 100644 --- a/src/gtk/scm-widget.scm +++ b/src/gtk/scm-widget.scm @@ -42,16 +42,18 @@ USA. (guarantee-procedure-of-arity callback 3 'set-scm-widget-set-scroll-adjustments-callback!) (g-signal-connect widget (C-callback "set_scroll_adjustments") callback)) -(define (set-scm-widget-size-request! widget - minimum-width minimum-height - natural-width natural-height) - (guarantee-scm-widget widget 'set-scm-widget-size-request!) - (guarantee-non-negative-fixnum minimum-width 'set-scm-widget-size-request!) - (guarantee-non-negative-fixnum minimum-height 'set-scm-widget-size-request!) - (guarantee-non-negative-fixnum natural-width 'set-scm-widget-size-request!) - (guarantee-non-negative-fixnum natural-height 'set-scm-widget-size-request!) +(define (set-scm-widget-minimum-size! widget width height) + (guarantee-scm-widget widget 'set-scm-widget-minimum-size!) + (guarantee-non-negative-fixnum width 'set-scm-widget-minimum-size!) + (guarantee-non-negative-fixnum height 'set-scm-widget-minimum-size!) (let ((a (gobject-alien widget))) - (C->= a "ScmWidget minimum_width" minimum-width) - (C->= a "ScmWidget minimum_height" minimum-height) - (C->= a "ScmWidget natural_width" natural-width) - (C->= a "ScmWidget natural_height" natural-height))) \ No newline at end of file + (C->= a "ScmWidget minimum_width" width) + (C->= a "ScmWidget minimum_height" height))) + +(define (set-scm-widget-natural-size! widget width height) + (guarantee-scm-widget widget 'set-scm-widget-natural-size!) + (guarantee-non-negative-fixnum width 'set-scm-widget-natural-size!) + (guarantee-non-negative-fixnum height 'set-scm-widget-natural-size!) + (let ((a (gobject-alien widget))) + (C->= a "ScmWidget natural_width" width) + (C->= a "ScmWidget natural_height" height))) \ No newline at end of file diff --git a/src/gtk/swat.scm b/src/gtk/swat.scm index 14d4a82d4..738ccceec 100644 --- a/src/gtk/swat.scm +++ b/src/gtk/swat.scm @@ -141,7 +141,7 @@ USA. (swat-handlers define standard initial-value '())) (define-method initialize-instance ((canvas ) width height) - (%trace ";(initialize-instance ) "canvas" "width" "height"\n") + (%trace ";(initialize-instance ) "canvas" "width"x"height"\n") (call-next-method canvas width height) (set-fix-layout-drawing! canvas (make-fix-drawing) 0 0)) @@ -999,10 +999,13 @@ USA. (define (%open children title) (let ((window (gtk-window-new 'toplevel)) - (box (gtk-hbox-new #f 5))) - (for-each (lambda (child) (gtk-container-add box child)) children) + (grid (gtk-grid-new))) + (gtk-grid-set-row-spacing grid 5) + (gtk-grid-set-column-spacing grid 5) + (gtk-orientable-set-orientation grid 'horizontal) + (for-each (lambda (child) (gtk-container-add grid child)) children) (gtk-window-set-title window title) - (gtk-container-add window box) + (gtk-container-add window grid) (gtk-widget-show-all window) window)) @@ -1072,14 +1075,16 @@ USA. ;;; make-hbox, make-array-box. (define (make-hbox . kids) - (let ((box (gtk-hbox-new #f 0))) - (for-each (lambda (kid) (gtk-container-add box kid)) kids) - box)) + (let ((grid (gtk-grid-new))) + (gtk-orientable-set-orientation grid 'horizontal) + (for-each (lambda (kid) (gtk-container-add grid kid)) kids) + grid)) (define (make-vbox . kids) - (let ((box (gtk-vbox-new #f 0))) - (for-each (lambda (kid) (gtk-container-add box kid)) kids) - box)) + (let ((grid (gtk-grid-new))) + (gtk-orientable-set-orientation grid 'vertical) + (for-each (lambda (kid) (gtk-container-add grid kid)) kids) + grid)) (define (box-children box) (gtk-container-children box))