+++ /dev/null
-Anton Gorenko
\ No newline at end of file
+++ /dev/null
-Anton Gorenko
\ No newline at end of file
+++ /dev/null
-! Copyright (C) 2010 Anton Gorenko.
-! See http://factorcode.org/license.txt for BSD license.
-USING: alien.strings gobject.ffi gtk.ffi io.encodings.utf8
-kernel locals ;
-IN: gir.samples.lowlevel.hello-world
-
-:: hello-world-win ( -- window )
- GTK_WINDOW_TOPLEVEL gtk_window_new :> window
-
- window
- [ "Hello world!" utf8 string>alien gtk_window_set_title ]
- [ 300 200 gtk_window_set_default_size ]
- [ GTK_WIN_POS_CENTER gtk_window_set_position ] tri
-
- gtk_fixed_new :> frame
- window frame gtk_container_add
-
- "Say 'Hello!'" utf8 string>alien gtk_button_new_with_label :> button
- button 140 30 gtk_widget_set_size_request
- frame button 80 60 gtk_fixed_put
-
- "" utf8 string>alien gtk_label_new :> label
- frame label 120 110 gtk_fixed_put
-
- button "clicked" utf8 string>alien
- [ nip "Hello! :)" utf8 string>alien gtk_label_set_text t ] GtkButton:clicked
- label f 0 g_signal_connect_data drop
-
- window ;
-
-:: hello-world-main ( -- )
- f f gtk_init
- hello-world-win :> window
-
- window "destroy" utf8 string>alien
- [ 2drop gtk_main_quit ] GtkObject:destroy
- f f 0 g_signal_connect_data drop
-
- window gtk_widget_show_all
-
- gtk_main ;
-
-MAIN: hello-world-main
-
+++ /dev/null
-! Copyright (C) 2010 Anton Gorenko.
-! See http://factorcode.org/license.txt for BSD license.
-USING: alien.c-types alien.strings byte-arrays classes.struct
-glib.ffi gobject.ffi gtk.ffi io.encodings.utf8 kernel
-literals locals make math prettyprint sequences specialized-arrays
-gir.samples.lowlevel.hello-world
-gir.samples.lowlevel.opengl
-gir.samples.lowlevel.gstreamer ;
-IN: gir.samples.lowlevel
-
-SPECIALIZED-ARRAY: ulong
-
-CONSTANT: samples {
- { "hello-world" "Simple 'Hello world!' program" [ hello-world-win ] }
- { "opengl" "GtkGLExt sample program" [ opengl-win ] }
- { "gstreamer" "Small GStreamer-based multimedia player " [ gstreamer-win ] }
-}
-
-:: list-on-row-activited ( sender path column user_data -- )
- path gtk_tree_path_get_indices *int samples nth last
- call( -- win ) gtk_widget_show_all ;
-
-:: main ( -- )
- f f gtk_init
-
- GTK_WINDOW_TOPLEVEL gtk_window_new :> window
-
- window
- [ "Low-level Gtk samples" utf8 string>alien gtk_window_set_title ]
- [ 300 400 gtk_window_set_default_size ]
- [ GTK_WIN_POS_CENTER gtk_window_set_position ] tri
-
- gtk_tree_view_new :> list
- list f gtk_tree_view_set_headers_visible
-
- gtk_cell_renderer_text_new :> renderer
- gtk_tree_view_column_new :> column
- column "Sample" utf8 string>alien gtk_tree_view_column_set_title
- column renderer t gtk_tree_view_column_pack_start
- column renderer "markup" utf8 string>alien 0 gtk_tree_view_column_add_attribute
- list column gtk_tree_view_append_column drop
-
- ulong-array{ $ G_TYPE_STRING }
- [ length ] keep gtk_list_store_newv :> store
-
- list store gtk_tree_view_set_model
-
- store g_object_unref
-
- GtkTreeIter <struct> :> iter
- GValue <struct> :> value
- value G_TYPE_STRING g_value_init drop
- samples [
- first2 swap [ "<big><b>" % % "</b></big>\n" % % ] "" make
- value swap utf8 string>alien g_value_set_string
- store iter gtk_list_store_append
- store iter 0 value gtk_list_store_set_value
- ] each
-
- list 300 300 gtk_widget_set_size_request
-
- window list gtk_container_add
-
- list "row-activated"
- utf8 string>alien
- [ list-on-row-activited ] GtkTreeView:row-activated
- f f 0 g_signal_connect_data drop
-
- window "destroy" utf8 string>alien
- [ 2drop gtk_main_quit ] GtkObject:destroy
- f f 0 g_signal_connect_data drop
-
- window gtk_widget_show_all
-
- gtk_main ;
-
-MAIN: main
-
+++ /dev/null
-Anton Gorenko
\ No newline at end of file
+++ /dev/null
-! Copyright (C) 2010 Anton Gorenko.
-! See http://factorcode.org/license.txt for BSD license.
-USING: alien.strings gdk.gl.ffi gobject.ffi gtk.ffi gtk.gl.ffi
-io.encodings.utf8 kernel locals opengl.gl ;
-IN: gir.samples.lowlevel.opengl
-
-! This sample is based on
-! http://code.valaide.org/content/simple-opengl-sample-using-gtkglext
-
-:: on-configure ( sender event user-data -- result )
- sender gtk_widget_get_gl_context :> gl-context
- sender gtk_widget_get_gl_window :> gl-drawable
-
- gl-drawable gl-context gdk_gl_drawable_gl_begin dup
- [
- 0 0 200 200 glViewport
- gl-drawable gdk_gl_drawable_gl_end
- ] when ;
-
-:: on-expose ( sender event user-data -- result )
- sender gtk_widget_get_gl_context :> gl-context
- sender gtk_widget_get_gl_window :> gl-drawable
-
- gl-drawable gl-context gdk_gl_drawable_gl_begin dup
- [
- GL_COLOR_BUFFER_BIT glClear
-
- GL_TRIANGLES glBegin
- 1.0 0.0 0.0 glColor3f
- 0 1 glVertex2i
- 0.0 1.0 0.0 glColor3f
- -1 -1 glVertex2i
- 0.0 0.0 1.0 glColor3f
- 1 -1 glVertex2i
- glEnd
-
- gl-drawable gdk_gl_drawable_is_double_buffered 1 =
- [ gl-drawable gdk_gl_drawable_swap_buffers ]
- [ glFlush ] if
-
- gl-drawable gdk_gl_drawable_gl_end
- ] when ;
-
-:: opengl-win ( -- window )
- GTK_WINDOW_TOPLEVEL gtk_window_new :> window
-
- window
- [ "OpenGL" utf8 string>alien gtk_window_set_title ]
- [ 200 200 gtk_window_set_default_size ]
- [ GTK_WIN_POS_CENTER gtk_window_set_position ] tri
-
- GDK_GL_MODE_RGBA gdk_gl_config_new_by_mode :> gl-config
-
- window gl-config f t GDK_GL_RGBA_TYPE
- gtk_widget_set_gl_capability drop
-
- window "configure-event" utf8 string>alien
- [ on-configure ] GtkWidget:configure-event
- f f 0 g_signal_connect_data drop
-
- window "expose-event" utf8 string>alien
- [ on-expose ] GtkWidget:expose-event
- f f 0 g_signal_connect_data drop
-
- window ;
-
-:: opengl-main ( -- )
- f f gtk_init
- f f gtk_gl_init
- opengl-win :> window
-
- window "destroy" utf8 string>alien
- [ 2drop gtk_main_quit ] GtkObject:destroy
- f f 0 g_signal_connect_data drop
-
- window gtk_widget_show_all
-
- gtk_main ;
-
-MAIN: opengl-main
-
--- /dev/null
+Anton Gorenko
\ No newline at end of file
--- /dev/null
+! Copyright (C) 2010 Anton Gorenko.
+! See http://factorcode.org/license.txt for BSD license.
+USING: alien.strings gobject.ffi gtk.ffi io.encodings.utf8
+kernel locals ;
+IN: gtk-samples.hello-world
+
+: on-button-clicked ( button label-user-data -- )
+ nip "Hello! :)" utf8 string>alien gtk_label_set_text ;
+
+:: hello-world-win ( -- window )
+ GTK_WINDOW_TOPLEVEL gtk_window_new :> window
+
+ window
+ [ "Hello world!" utf8 string>alien gtk_window_set_title ]
+ [ 300 200 gtk_window_set_default_size ]
+ [ GTK_WIN_POS_CENTER gtk_window_set_position ] tri
+
+ gtk_fixed_new :> frame
+ window frame gtk_container_add
+
+ "Say 'Hello!'" utf8 string>alien gtk_button_new_with_label :> button
+ button 140 30 gtk_widget_set_size_request
+ frame button 80 60 gtk_fixed_put
+
+ "" utf8 string>alien gtk_label_new :> label
+ frame label 120 110 gtk_fixed_put
+
+ button "clicked" utf8 string>alien
+ [ on-button-clicked ] GtkButton:clicked label
+ g_signal_connect drop
+
+ window ;
+
+:: hello-world-main ( -- )
+ f f gtk_init
+ hello-world-win :> window
+
+ window "destroy" utf8 string>alien
+ [ 2drop gtk_main_quit ] GtkObject:destroy f
+ g_signal_connect drop
+
+ window gtk_widget_show_all
+
+ gtk_main ;
+
+MAIN: hello-world-main
+
--- /dev/null
+Anton Gorenko
\ No newline at end of file
--- /dev/null
+! Copyright (C) 2010 Anton Gorenko.
+! See http://factorcode.org/license.txt for BSD license.
+USING: alien.strings gdk.gl.ffi gobject.ffi gtk.ffi gtk.gl.ffi
+io.encodings.utf8 kernel locals opengl.gl ;
+IN: gtk-samples.opengl
+
+! This sample is based on
+! http://code.valaide.org/content/simple-opengl-sample-using-gtkglext
+
+:: on-configure ( sender event user-data -- result )
+ sender gtk_widget_get_gl_context :> gl-context
+ sender gtk_widget_get_gl_window :> gl-drawable
+
+ gl-drawable gl-context gdk_gl_drawable_gl_begin dup
+ [
+ 0 0 200 200 glViewport
+ gl-drawable gdk_gl_drawable_gl_end
+ ] when ;
+
+:: on-expose ( sender event user-data -- result )
+ sender gtk_widget_get_gl_context :> gl-context
+ sender gtk_widget_get_gl_window :> gl-drawable
+
+ gl-drawable gl-context gdk_gl_drawable_gl_begin dup
+ [
+ GL_COLOR_BUFFER_BIT glClear
+
+ GL_TRIANGLES glBegin
+ 1.0 0.0 0.0 glColor3f
+ 0 1 glVertex2i
+ 0.0 1.0 0.0 glColor3f
+ -1 -1 glVertex2i
+ 0.0 0.0 1.0 glColor3f
+ 1 -1 glVertex2i
+ glEnd
+
+ gl-drawable gdk_gl_drawable_is_double_buffered 1 =
+ [ gl-drawable gdk_gl_drawable_swap_buffers ]
+ [ glFlush ] if
+
+ gl-drawable gdk_gl_drawable_gl_end
+ ] when ;
+
+:: opengl-win ( -- window )
+ GTK_WINDOW_TOPLEVEL gtk_window_new :> window
+
+ window
+ [ "OpenGL" utf8 string>alien gtk_window_set_title ]
+ [ 200 200 gtk_window_set_default_size ]
+ [ GTK_WIN_POS_CENTER gtk_window_set_position ] tri
+
+ GDK_GL_MODE_RGBA gdk_gl_config_new_by_mode :> gl-config
+
+ window gl-config f t GDK_GL_RGBA_TYPE
+ gtk_widget_set_gl_capability drop
+
+ window "configure-event" utf8 string>alien
+ [ on-configure ] GtkWidget:configure-event f
+ g_signal_connect drop
+
+ window "expose-event" utf8 string>alien
+ [ on-expose ] GtkWidget:expose-event f
+ g_signal_connect drop
+
+ window ;
+
+:: opengl-main ( -- )
+ f f gtk_init
+ f f gtk_gl_init
+ opengl-win :> window
+
+ window "destroy" utf8 string>alien
+ [ 2drop gtk_main_quit ] GtkObject:destroy
+ f f 0 g_signal_connect_data drop
+
+ window gtk_widget_show_all
+
+ gtk_main ;
+
+MAIN: opengl-main
+