[gtk+] docs: Move the introduction of the tutorial in the reference
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] docs: Move the introduction of the tutorial in the reference
- Date: Fri, 15 Oct 2010 17:03:33 +0000 (UTC)
commit f085c8b27225baecbca270feb822efc94d1f120b
Author: Emmanuele Bassi <ebassi linux intel com>
Date: Fri Oct 15 11:04:27 2010 -0400
docs: Move the introduction of the tutorial in the reference
The tutorial should just go away, but some of its contents can be moved
to the API reference as chapters.
https://bugzilla.gnome.org/show_bug.cgi?id=632059
docs/reference/gtk/Makefile.am | 8 ++-
docs/reference/gtk/getting_started.xml | 96 +++++++++++++++++++++++++++++
docs/reference/gtk/gtk-docs.sgml | 1 +
examples/hello-world.c | 103 ++++++++++++++++++++++++++++++++
examples/window-default.c | 20 ++++++
5 files changed, 225 insertions(+), 3 deletions(-)
---
diff --git a/docs/reference/gtk/Makefile.am b/docs/reference/gtk/Makefile.am
index 4f71a8f..0140db6 100644
--- a/docs/reference/gtk/Makefile.am
+++ b/docs/reference/gtk/Makefile.am
@@ -132,16 +132,18 @@ content_files = \
gtk-query-immodules-3.0.xml \
gtk-update-icon-cache-3.0.xml \
gtk-builder-convert-3.0.xml \
- visual_index.xml
+ visual_index.xml \
+ getting_started.xml
expand_content_files = \
drawing-model.xml \
+ getting_started.xml \
glossary.xml \
migrating-2to3.xml \
migrating-checklist.sgml \
- tree_widget.sgml \
+ question_index.sgml \
text_widget.sgml \
- question_index.sgml
+ tree_widget.sgml
# Images to copy into HTML directory
HTML_IMAGES = \
diff --git a/docs/reference/gtk/getting_started.xml b/docs/reference/gtk/getting_started.xml
new file mode 100644
index 0000000..8ce21b9
--- /dev/null
+++ b/docs/reference/gtk/getting_started.xml
@@ -0,0 +1,96 @@
+<?xml version="1.0"?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
+ "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd" [
+]>
+<chapter id="gtk-getting-started" xmlns:xi="http://www.w3.org/2003/XInclude">
+ <title>Getting Started with GTK+</title>
+
+ <para>To begin our introduction to GTK, we'll start with the simplest
+ program possible. This program will create a 200x200 pixel window:</para>
+
+ <para>
+ <inlinegraphic fileref="window-default.png" format="PNG"></inlinegraphic>
+ </para>
+
+ <informalexample><programlisting>
+ <xi:include href="../../../../examples/window-default.c" parse="text">
+ <xi:fallback>FIXME: MISSING XINCLUDE CONTENT</xi:fallback>
+ </xi:include>
+ </programlisting></informalexample>
+
+ <para>You can compile the program above with GCC using:</para>
+
+ <para><literallayout>
+ <literal>gcc `pkg-config --cflags gtk+-3.0` -o window-default window-default.c `pkg-config --libs gtk+-3.0`</literal>
+ </literallayout></para>
+
+ <note><para>For more information on how to compile a GTK+ application, please
+ refer to the <link linkend="gtk-compiling">Compiling GTK+ Applications</link>
+ section in this reference.</para></note>
+
+ <para>All GTK+ applications will, of course, include
+ <filename>gtk/gtk.h</filename>, which declares functions, types and
+ macros required by GTK+ applications.</para>
+
+ <warning><para>Even if GTK+ installs multiple header files, only the
+ top-level <filename>gtk/gtk.h</filename> header can be directly included
+ by third party code. The compiler will abort with an error if any other
+ header will be included.</para></warning>
+
+ <para>We then proceed into the <function>main</function>() function of the
+ application, and we declare a <varname>window</varname> variable as a pointer
+ of type #GtkWidget.</para>
+
+ <para>The following line will call gtk_init(), which
+ is the initialization function for GTK+; this function will set up GTK+,
+ the type system, the connection to the windowing environment, etc. The
+ gtk_init() takes as arguments the pointers to the command line arguments
+ counter and string array; this allows GTK+ to parse specific command line
+ arguments that control the behavior of GTK+ itself. The parsed arguments
+ will be removed from the array, leaving the unrecognized ones for your
+ application to parse.</para>
+
+ <note><para>For more information on which command line arguments GTK+
+ recognizes, please refer to the <link linkend="gtk-running">Running GTK+
+ Applications</link> section in this reference.</para></note>
+
+ <para>The call to gtk_window_new() will create a new #GtkWindow and store
+ it inside the <varname>window</varname> variable. The type of the window
+ is %GTK_WINDOW_TOPLEVEL, which means that the #GtkWindow will be managed
+ by the windowing system: it will have a frame, a title bar and window
+ controls, depending on the platform.</para>
+
+ <para>In order to terminate the application when the #GtkWindow is
+ destroyed, we connect the #GtkWidget::destroy signal to the gtk_main_quit()
+ function. This function will terminate the GTK+ main loop started by calling
+ gtk_main() later. The #GtkWidget::destroy signal is emitted when a widget is
+ destroyed, either by explicitly calling gtk_widget_destroy() or when the
+ widget is unparented. Top-level #GtkWindow<!-- -->s are also destroyed when
+ the Close window control button is clicked.</para>
+
+ <para>#GtkWidget<!-- -->s are hidden by default. By calling gtk_widget_show()
+ on a #GtkWidget we are asking GTK+ to set the visibility attribute so that it
+ can be displayed. All this work is done after the main loop has been
+ started.</para>
+
+ <para>The last line of interest is the call to gtk_main(). This function will
+ start the GTK+ main loop and will block the control flow of the
+ <function>main</function>() until the gtk_main_quit() function is
+ called.</para>
+
+ <para>The following example is slightly more complex, and tries to
+ showcase some of the capabilities of GTK+.</para>
+
+ <para>In the long tradition of programming languages and libraries,
+ it is called <emphasis>Hello, World</emphasis>.</para>
+
+ <example id="gtk-getting-started-hello-world">
+ <title>Hello World in GTK+</title>
+ <programlisting>
+ <xi:include href="../../../examples/hello-world.c" parse="text">
+ <xi:fallback>FIXME: MISSING XINCLUDE CONTENT</xi:fallback>
+ </xi:include>
+ </programlisting>
+ </example>
+
+</chapter>
diff --git a/docs/reference/gtk/gtk-docs.sgml b/docs/reference/gtk/gtk-docs.sgml
index f5497d9..d089e86 100644
--- a/docs/reference/gtk/gtk-docs.sgml
+++ b/docs/reference/gtk/gtk-docs.sgml
@@ -115,6 +115,7 @@ that is, GUI components such as GtkButton or GtkTextView.
<xi:include href="building.sgml" />
<xi:include href="compiling.sgml" />
<xi:include href="running.sgml" />
+ <xi:include href="xml/getting_started.xml"/>
<xi:include href="x11.sgml" />
<xi:include href="windows.sgml" />
<xi:include href="osx.sgml" />
diff --git a/examples/hello-world.c b/examples/hello-world.c
new file mode 100644
index 0000000..50c792f
--- /dev/null
+++ b/examples/hello-world.c
@@ -0,0 +1,103 @@
+#include <gtk/gtk.h>
+
+/* This is a callback function. The data arguments are ignored
+ * in this example. More on callbacks below. */
+static void
+print_hello (GtkWidget *widget,
+ gpointer data)
+{
+ g_print ("Hello World\n");
+}
+
+static gboolean
+on_delete_event (GtkWidget *widget,
+ GdkEvent *event,
+ gpointer data)
+{
+ /* If you return FALSE in the "delete_event" signal handler,
+ * GTK will emit the "destroy" signal. Returning TRUE means
+ * you don't want the window to be destroyed.
+ *
+ * This is useful for popping up 'are you sure you want to quit?'
+ * type dialogs.
+ */
+
+ g_print ("delete event occurred\n");
+
+ return TRUE;
+}
+
+int
+main (int argc,
+ char *argv[])
+{
+ /* GtkWidget is the storage type for widgets */
+ GtkWidget *window;
+ GtkWidget *button;
+
+ /* This is called in all GTK applications. Arguments are parsed
+ * from the command line and are returned to the application.
+ */
+ gtk_init (&argc, &argv);
+
+ /* create a new window, and set its title */
+ window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_title (GTK_WINDOW (window), "Hello");
+
+ /* When the window emits the "delete-event" signal (which is emitted
+ * by GTK+ in response to an event coming from the window manager,
+ * usually as a result of clicking the "close" window control), we
+ * ask it to call the on_delete_event() function as defined above.
+ *
+ * The data passed to the callback function is NULL and is ignored
+ * in the callback function.
+ */
+ g_signal_connect (window, "delete-event", G_CALLBACK (on_delete_event), NULL);
+
+ /* Here we connect the "destroy" event to the gtk_main_quit() function.
+ *
+ * This signal is emitted when we call gtk_widget_destroy() on the window,
+ * or if we return FALSE in the "delete_event" callback.
+ */
+ g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL);
+
+ /* Sets the border width of the window. */
+ gtk_container_set_border_width (GTK_CONTAINER (window), 10);
+
+ /* Creates a new button with the label "Hello World". */
+ button = gtk_button_new_with_label ("Hello World");
+
+ /* When the button receives the "clicked" signal, it will call the
+ * function print_hello() passing it NULL as its argument.
+ *
+ * The print_hello() function is defined above.
+ */
+ g_signal_connect (button, "clicked", G_CALLBACK (print_hello), NULL);
+
+ /* The g_signal_connect_swapped() function will connect the "clicked" signal
+ * of the button to the gtk_widget_destroy() function; instead of calling it
+ * using the button as its argument, it will swap it with the user data
+ * argument. This will cause the window to be destroyed by calling
+ * gtk_widget_destroy() on the window.
+ */
+ g_signal_connect_swapped (button, "clicked", G_CALLBACK (gtk_widget_destroy), window);
+
+ /* This packs the button into the window. A GtkWindow inherits from GtkBin,
+ * which is a special container that can only have one child
+ */
+ gtk_container_add (GTK_CONTAINER (window), button);
+
+ /* The final step is to display this newly created widget... */
+ gtk_widget_show (button);
+
+ /* ... and the window */
+ gtk_widget_show (window);
+
+ /* All GTK applications must have a gtk_main(). Control ends here
+ * and waits for an event to occur (like a key press or a mouse event),
+ * until gtk_main_quit() is called.
+ */
+ gtk_main ();
+
+ return 0;
+}
diff --git a/examples/window-default.c b/examples/window-default.c
new file mode 100644
index 0000000..79888de
--- /dev/null
+++ b/examples/window-default.c
@@ -0,0 +1,20 @@
+#include <gtk/gtk.h>
+
+int
+main (int argc,
+ char *argv[])
+{
+ GtkWidget *window;
+
+ gtk_init (&argc, &argv);
+
+ window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+
+ g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL);
+
+ gtk_widget_show (window);
+
+ gtk_main ();
+
+ return 0;
+}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]