summaryrefslogtreecommitdiff
path: root/gtk+-mingw/share/gtk-doc/html/gtk3/gtk-getting-started.html
diff options
context:
space:
mode:
Diffstat (limited to 'gtk+-mingw/share/gtk-doc/html/gtk3/gtk-getting-started.html')
-rw-r--r--gtk+-mingw/share/gtk-doc/html/gtk3/gtk-getting-started.html1095
1 files changed, 0 insertions, 1095 deletions
diff --git a/gtk+-mingw/share/gtk-doc/html/gtk3/gtk-getting-started.html b/gtk+-mingw/share/gtk-doc/html/gtk3/gtk-getting-started.html
deleted file mode 100644
index c73fec5..0000000
--- a/gtk+-mingw/share/gtk-doc/html/gtk3/gtk-getting-started.html
+++ /dev/null
@@ -1,1095 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Getting Started with GTK+</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
-<link rel="home" href="index.html" title="GTK+ 3 Reference Manual">
-<link rel="up" href="gtk.html" title="Part I. GTK+ Overview">
-<link rel="prev" href="gtk.html" title="Part I. GTK+ Overview">
-<link rel="next" href="gtk-building.html" title="Compiling the GTK+ libraries">
-<meta name="generator" content="GTK-Doc V1.18.1 (XML mode)">
-<link rel="stylesheet" href="style.css" type="text/css">
-</head>
-<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
-<td><a accesskey="p" href="gtk.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
-<td><a accesskey="u" href="gtk.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
-<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
-<th width="100%" align="center">GTK+ 3 Reference Manual</th>
-<td><a accesskey="n" href="gtk-building.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
-</tr></table>
-<div class="chapter">
-<div class="titlepage"><div><div><h2 class="title">
-<a name="gtk-getting-started"></a>Getting Started with GTK+</h2></div></div></div>
-<p>This chapter is contains some tutorial information to get you
- started with GTK+ programming. It assumes that you have GTK+, its
- dependencies and a C compiler installed and ready to use. If you
- need to build GTK+ itself first, refer to the
- <a class="link" href="gtk-compiling.html" title="Compiling GTK+ Applications">Compiling the GTK+ libraries</a>
- section in this reference.</p>
-<div class="simplesect">
-<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="id511213"></a>Basics</h2></div></div></div>
-<p>To begin our introduction to GTK, we'll start with the simplest
- program possible. This program will create an empty 200x200 pixel
- window:</p>
-<p>
- <img src="window-default.png">
- </p>
-<div class="informalexample">
- <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
- <tbody>
- <tr>
- <td class="listing_lines" align="right"><pre>1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20</pre></td>
- <td class="listing_code"><pre class="programlisting"><span class="preproc">#include</span><span class="normal"> </span><span class="string">&lt;gtk/gtk.h&gt;</span>
-
-<span class="type">int</span>
-<span class="function">main</span><span class="normal"> </span><span class="symbol">(</span><span class="type">int</span><span class="normal"> argc</span><span class="symbol">,</span>
-<span class="type">char</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">argv</span><span class="symbol">[])</span>
-<span class="cbracket">{</span>
-<span class="normal"> </span><span class="usertype">GtkWidget</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">window</span><span class="symbol">;</span>
-
-<span class="normal"> </span><span class="function"><a href="gtk3-General.html#gtk-init">gtk_init</a></span><span class="normal"> </span><span class="symbol">(&amp;</span><span class="normal">argc</span><span class="symbol">,</span><span class="normal"> </span><span class="symbol">&amp;</span><span class="normal">argv</span><span class="symbol">);</span>
-
-<span class="normal"> window </span><span class="symbol">=</span><span class="normal"> </span><span class="function"><a href="GtkWindow.html#gtk-window-new">gtk_window_new</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal"><a href="gtk3-Standard-Enumerations.html#GTK-WINDOW-TOPLEVEL:CAPS">GTK_WINDOW_TOPLEVEL</a></span><span class="symbol">);</span>
-
-<span class="normal"> </span><span class="function"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#g-signal-connect">g_signal_connect</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">window</span><span class="symbol">,</span><span class="normal"> </span><span class="string">"destroy"</span><span class="symbol">,</span><span class="normal"> </span><span class="function"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Closures.html#G-CALLBACK:CAPS">G_CALLBACK</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal"><a href="gtk3-General.html#gtk-main-quit">gtk_main_quit</a></span><span class="symbol">),</span><span class="normal"> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS">NULL</a></span><span class="symbol">);</span>
-
-<span class="normal"> </span><span class="function"><a href="GtkWidget.html#gtk-widget-show">gtk_widget_show</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">window</span><span class="symbol">);</span>
-
-<span class="normal"> </span><span class="function"><a href="gtk3-General.html#gtk-main">gtk_main</a></span><span class="normal"> </span><span class="symbol">();</span>
-
-<span class="normal"> </span><span class="keyword">return</span><span class="normal"> </span><span class="number">0</span><span class="symbol">;</span>
-<span class="cbracket">}</span></pre></td>
- </tr>
- </tbody>
- </table>
-</div>
-
-<p>You can compile the program above with GCC using:</p>
-<div class="literallayout"><p><br>
-      <code class="literal">gcc `pkg-config --cflags gtk+-3.0` -o window-default window-default.c `pkg-config --libs gtk+-3.0`</code><br>
-    </p></div>
-<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
-<h3 class="title">Note</h3>
-<p>For more information on how to compile a GTK+ application, please
- refer to the <a class="link" href="gtk-compiling.html" title="Compiling GTK+ Applications">Compiling GTK+ Applications</a>
- section in this reference.</p>
-</div>
-<p>All GTK+ applications will, of course, include
- <code class="filename">gtk/gtk.h</code>, which declares functions, types and
- macros required by GTK+ applications.</p>
-<div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;">
-<h3 class="title">Warning</h3>
-<p>Even if GTK+ installs multiple header files, only the
- top-level <code class="filename">gtk/gtk.h</code> header can be directly included
- by third party code. The compiler will abort with an error if any other
- header is directly included.</p>
-</div>
-<p>We then proceed into the <code class="function">main</code>() function of the
- application, and we declare a <code class="varname">window</code> variable as a pointer
- of type <a class="link" href="GtkWidget.html" title="GtkWidget"><span class="type">GtkWidget</span></a>.</p>
-<p>The following line will call <a class="link" href="gtk3-General.html#gtk-init" title="gtk_init ()"><code class="function">gtk_init()</code></a>, which
- is the initialization function for GTK+; this function will set up GTK+,
- the type system, the connection to the windowing environment, etc. The
- <a class="link" href="gtk3-General.html#gtk-init" title="gtk_init ()"><code class="function">gtk_init()</code></a> 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.</p>
-<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
-<h3 class="title">Note</h3>
-<p>For more information on which command line arguments GTK+
- recognizes, please refer to the <a class="link" href="gtk-running.html" title="Running GTK+ Applications">Running GTK+
- Applications</a> section in this reference.</p>
-</div>
-<p>The call to <a class="link" href="GtkWindow.html#gtk-window-new" title="gtk_window_new ()"><code class="function">gtk_window_new()</code></a> will create a new <a class="link" href="GtkWindow.html" title="GtkWindow"><span class="type">GtkWindow</span></a> and store
- it inside the <code class="varname">window</code> variable. The type of the window
- is <a class="link" href="gtk3-Standard-Enumerations.html#GTK-WINDOW-TOPLEVEL:CAPS"><code class="literal">GTK_WINDOW_TOPLEVEL</code></a>, which means that the <a class="link" href="GtkWindow.html" title="GtkWindow"><span class="type">GtkWindow</span></a> will be managed
- by the windowing system: it will have a frame, a title bar and window
- controls, depending on the platform.</p>
-<p>In order to terminate the application when the <a class="link" href="GtkWindow.html" title="GtkWindow"><span class="type">GtkWindow</span></a> is
- destroyed, we connect the <a class="link" href="GtkWidget.html#GtkWidget-destroy" title='The "destroy" signal'><span class="type">"destroy"</span></a> signal to the <a class="link" href="gtk3-General.html#gtk-main-quit" title="gtk_main_quit ()"><code class="function">gtk_main_quit()</code></a>
- function. This function will terminate the GTK+ main loop started by calling
- <a class="link" href="gtk3-General.html#gtk-main" title="gtk_main ()"><code class="function">gtk_main()</code></a> later. The <a class="link" href="GtkWidget.html#GtkWidget-destroy" title='The "destroy" signal'><span class="type">"destroy"</span></a> signal is emitted when a widget is
- destroyed, either by explicitly calling <a class="link" href="GtkWidget.html#gtk-widget-destroy" title="gtk_widget_destroy ()"><code class="function">gtk_widget_destroy()</code></a> or when the
- widget is unparented. Top-level <a class="link" href="GtkWindow.html" title="GtkWindow"><span class="type">GtkWindow</span></a>s are also destroyed when
- the Close window control button is clicked.</p>
-<p><a class="link" href="GtkWidget.html" title="GtkWidget"><span class="type">GtkWidget</span></a>s are hidden by default. By calling <a class="link" href="GtkWidget.html#gtk-widget-show" title="gtk_widget_show ()"><code class="function">gtk_widget_show()</code></a>
- on a <a class="link" href="GtkWidget.html" title="GtkWidget"><span class="type">GtkWidget</span></a> 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.</p>
-<p>The last line of interest is the call to <a class="link" href="gtk3-General.html#gtk-main" title="gtk_main ()"><code class="function">gtk_main()</code></a>. This function will
- start the GTK+ main loop and will block the control flow of the
- <code class="function">main()</code> until the <a class="link" href="gtk3-General.html#gtk-main-quit" title="gtk_main_quit ()"><code class="function">gtk_main_quit()</code></a> function is called.</p>
-<p>While the program is running, GTK+ is receiving
- <em class="firstterm">events</em>. These are typically input events caused by
- the user interacting with your program, but also things like messages from
- the window manager or other applications. GTK+ processes these and as a
- result, <em class="firstterm">signals</em> may be emitted on your widgets.
- Connecting handlers for these signals is how you normally make your
- program do something in response to user input.</p>
-<p>The following example is slightly more complex, and tries to
- showcase some of the capabilities of GTK+.</p>
-<p>In the long tradition of programming languages and libraries,
- it is called <span class="emphasis"><em>Hello, World</em></span>.</p>
-<p>
- <img src="hello-world.png">
- </p>
-<div class="example">
-<a name="gtk-getting-started-hello-world"></a><p class="title"><b>Example 1. Hello World in GTK+</b></p>
-<div class="example-contents">
- <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
- <tbody>
- <tr>
- <td class="listing_lines" align="right"><pre>1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-52
-53
-54
-55
-56
-57
-58
-59
-60
-61
-62
-63
-64
-65
-66
-67
-68
-69
-70
-71
-72
-73
-74
-75
-76
-77
-78
-79
-80
-81
-82
-83
-84
-85
-86
-87
-88
-89
-90
-91
-92
-93
-94
-95
-96
-97
-98
-99
-100
-101
-102
-103
-104</pre></td>
- <td class="listing_code"><pre class="programlisting"><span class="preproc">#include</span><span class="normal"> </span><span class="string">&lt;gtk/gtk.h&gt;</span>
-
-<span class="comment">/* This is a callback function. The data arguments are ignored</span>
-<span class="comment"> * in this example. More on callbacks below.</span>
-<span class="comment"> */</span>
-<span class="keyword">static</span><span class="normal"> </span><span class="type">void</span>
-<span class="function">print_hello</span><span class="normal"> </span><span class="symbol">(</span><span class="usertype">GtkWidget</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">widget</span><span class="symbol">,</span>
-<span class="normal"> </span><span class="usertype">gpointer</span><span class="normal"> data</span><span class="symbol">)</span>
-<span class="cbracket">{</span>
-<span class="normal"> </span><span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-Warnings-and-Assertions.html#g-print">g_print</a></span><span class="normal"> </span><span class="symbol">(</span><span class="string">"Hello World</span><span class="specialchar">\n</span><span class="string">"</span><span class="symbol">);</span>
-<span class="cbracket">}</span>
-
-<span class="keyword">static</span><span class="normal"> <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean">gboolean</a></span>
-<span class="function">on_delete_event</span><span class="normal"> </span><span class="symbol">(</span><span class="usertype">GtkWidget</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">widget</span><span class="symbol">,</span>
-<span class="normal"> </span><span class="usertype">GdkEvent</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">event</span><span class="symbol">,</span>
-<span class="normal"> </span><span class="usertype">gpointer</span><span class="normal"> data</span><span class="symbol">)</span>
-<span class="cbracket">{</span>
-<span class="normal"> </span><span class="comment">/* If you return FALSE in the "delete_event" signal handler,</span>
-<span class="comment"> * GTK will emit the "destroy" signal. Returning TRUE means</span>
-<span class="comment"> * you don't want the window to be destroyed.</span>
-<span class="comment"> *</span>
-<span class="comment"> * This is useful for popping up 'are you sure you want to quit?'</span>
-<span class="comment"> * type dialogs.</span>
-<span class="comment"> */</span>
-
-<span class="normal"> </span><span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-Warnings-and-Assertions.html#g-print">g_print</a></span><span class="normal"> </span><span class="symbol">(</span><span class="string">"delete event occurred</span><span class="specialchar">\n</span><span class="string">"</span><span class="symbol">);</span>
-
-<span class="normal"> </span><span class="keyword">return</span><span class="normal"> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS">TRUE</a></span><span class="symbol">;</span>
-<span class="cbracket">}</span>
-
-<span class="type">int</span>
-<span class="function">main</span><span class="normal"> </span><span class="symbol">(</span><span class="type">int</span><span class="normal"> argc</span><span class="symbol">,</span>
-<span class="normal"> </span><span class="type">char</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">argv</span><span class="symbol">[])</span>
-<span class="cbracket">{</span>
-<span class="normal"> </span><span class="comment">/* GtkWidget is the storage type for widgets */</span>
-<span class="normal"> </span><span class="usertype">GtkWidget</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">window</span><span class="symbol">;</span>
-<span class="normal"> </span><span class="usertype">GtkWidget</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">button</span><span class="symbol">;</span>
-
-<span class="normal"> </span><span class="comment">/* This is called in all GTK applications. Arguments are parsed</span>
-<span class="comment"> * from the command line and are returned to the application.</span>
-<span class="comment"> */</span>
-<span class="normal"> </span><span class="function"><a href="gtk3-General.html#gtk-init">gtk_init</a></span><span class="normal"> </span><span class="symbol">(&amp;</span><span class="normal">argc</span><span class="symbol">,</span><span class="normal"> </span><span class="symbol">&amp;</span><span class="normal">argv</span><span class="symbol">);</span>
-
-<span class="normal"> </span><span class="comment">/* create a new window, and set its title */</span>
-<span class="normal"> window </span><span class="symbol">=</span><span class="normal"> </span><span class="function"><a href="GtkWindow.html#gtk-window-new">gtk_window_new</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal"><a href="gtk3-Standard-Enumerations.html#GTK-WINDOW-TOPLEVEL:CAPS">GTK_WINDOW_TOPLEVEL</a></span><span class="symbol">);</span>
-<span class="normal"> </span><span class="function"><a href="GtkWindow.html#gtk-window-set-title">gtk_window_set_title</a></span><span class="normal"> </span><span class="symbol">(</span><span class="function">GTK_WINDOW</span><span class="normal"> </span><span class="symbol">(</span><span class="normal">window</span><span class="symbol">),</span><span class="normal"> </span><span class="string">"Hello"</span><span class="symbol">);</span>
-
-<span class="normal"> </span><span class="comment">/* When the window emits the "delete-event" signal (which is emitted</span>
-<span class="comment"> * by GTK+ in response to an event coming from the window manager,</span>
-<span class="comment"> * usually as a result of clicking the "close" window control), we</span>
-<span class="comment"> * ask it to call the on_delete_event() function as defined above.</span>
-<span class="comment"> *</span>
-<span class="comment"> * The data passed to the callback function is NULL and is ignored</span>
-<span class="comment"> * in the callback function.</span>
-<span class="comment"> */</span>
-<span class="normal"> </span><span class="function"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#g-signal-connect">g_signal_connect</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">window</span><span class="symbol">,</span><span class="normal"> </span><span class="string">"delete-event"</span><span class="symbol">,</span><span class="normal"> </span><span class="function"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Closures.html#G-CALLBACK:CAPS">G_CALLBACK</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">on_delete_event</span><span class="symbol">),</span><span class="normal"> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS">NULL</a></span><span class="symbol">);</span>
-
-<span class="normal"> </span><span class="comment">/* Here we connect the "destroy" event to the gtk_main_quit() function.</span>
-<span class="comment"> *</span>
-<span class="comment"> * This signal is emitted when we call gtk_widget_destroy() on the window,</span>
-<span class="comment"> * or if we return FALSE in the "delete_event" callback.</span>
-<span class="comment"> */</span>
-<span class="normal"> </span><span class="function"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#g-signal-connect">g_signal_connect</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">window</span><span class="symbol">,</span><span class="normal"> </span><span class="string">"destroy"</span><span class="symbol">,</span><span class="normal"> </span><span class="function"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Closures.html#G-CALLBACK:CAPS">G_CALLBACK</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal"><a href="gtk3-General.html#gtk-main-quit">gtk_main_quit</a></span><span class="symbol">),</span><span class="normal"> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS">NULL</a></span><span class="symbol">);</span>
-
-<span class="normal"> </span><span class="comment">/* Sets the border width of the window. */</span>
-<span class="normal"> </span><span class="function"><a href="GtkContainer.html#gtk-container-set-border-width">gtk_container_set_border_width</a></span><span class="normal"> </span><span class="symbol">(</span><span class="function">GTK_CONTAINER</span><span class="normal"> </span><span class="symbol">(</span><span class="normal">window</span><span class="symbol">),</span><span class="normal"> </span><span class="number">10</span><span class="symbol">);</span>
-
-<span class="normal"> </span><span class="comment">/* Creates a new button with the label "Hello World". */</span>
-<span class="normal"> button </span><span class="symbol">=</span><span class="normal"> </span><span class="function"><a href="GtkButton.html#gtk-button-new-with-label">gtk_button_new_with_label</a></span><span class="normal"> </span><span class="symbol">(</span><span class="string">"Hello World"</span><span class="symbol">);</span>
-
-<span class="normal"> </span><span class="comment">/* When the button receives the "clicked" signal, it will call the</span>
-<span class="comment"> * function print_hello() passing it NULL as its argument.</span>
-<span class="comment"> *</span>
-<span class="comment"> * The print_hello() function is defined above.</span>
-<span class="comment"> */</span>
-<span class="normal"> </span><span class="function"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#g-signal-connect">g_signal_connect</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">button</span><span class="symbol">,</span><span class="normal"> </span><span class="string">"clicked"</span><span class="symbol">,</span><span class="normal"> </span><span class="function"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Closures.html#G-CALLBACK:CAPS">G_CALLBACK</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">print_hello</span><span class="symbol">),</span><span class="normal"> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS">NULL</a></span><span class="symbol">);</span>
-
-<span class="normal"> </span><span class="comment">/* The g_signal_connect_swapped() function will connect the "clicked" signal</span>
-<span class="comment"> * of the button to the gtk_widget_destroy() function; instead of calling it</span>
-<span class="comment"> * using the button as its argument, it will swap it with the user data</span>
-<span class="comment"> * argument. This will cause the window to be destroyed by calling</span>
-<span class="comment"> * gtk_widget_destroy() on the window.</span>
-<span class="comment"> */</span>
-<span class="normal"> </span><span class="function"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#g-signal-connect-swapped">g_signal_connect_swapped</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">button</span><span class="symbol">,</span><span class="normal"> </span><span class="string">"clicked"</span><span class="symbol">,</span><span class="normal"> </span><span class="function"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Closures.html#G-CALLBACK:CAPS">G_CALLBACK</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal"><a href="GtkWidget.html#gtk-widget-destroy">gtk_widget_destroy</a></span><span class="symbol">),</span><span class="normal"> window</span><span class="symbol">);</span>
-
-<span class="normal"> </span><span class="comment">/* This packs the button into the window. A GtkWindow inherits from GtkBin,</span>
-<span class="comment"> * which is a special container that can only have one child</span>
-<span class="comment"> */</span>
-<span class="normal"> </span><span class="function"><a href="GtkContainer.html#gtk-container-add">gtk_container_add</a></span><span class="normal"> </span><span class="symbol">(</span><span class="function">GTK_CONTAINER</span><span class="normal"> </span><span class="symbol">(</span><span class="normal">window</span><span class="symbol">),</span><span class="normal"> button</span><span class="symbol">);</span>
-
-<span class="normal"> </span><span class="comment">/* The final step is to display this newly created widget... */</span>
-<span class="normal"> </span><span class="function"><a href="GtkWidget.html#gtk-widget-show">gtk_widget_show</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">button</span><span class="symbol">);</span>
-
-<span class="normal"> </span><span class="comment">/* ... and the window */</span>
-<span class="normal"> </span><span class="function"><a href="GtkWidget.html#gtk-widget-show">gtk_widget_show</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">window</span><span class="symbol">);</span>
-
-<span class="normal"> </span><span class="comment">/* All GTK applications must have a gtk_main(). Control ends here</span>
-<span class="comment"> * and waits for an event to occur (like a key press or a mouse event),</span>
-<span class="comment"> * until gtk_main_quit() is called.</span>
-<span class="comment"> */</span>
-<span class="normal"> </span><span class="function"><a href="gtk3-General.html#gtk-main">gtk_main</a></span><span class="normal"> </span><span class="symbol">();</span>
-
-<span class="normal"> </span><span class="keyword">return</span><span class="normal"> </span><span class="number">0</span><span class="symbol">;</span>
-<span class="cbracket">}</span></pre></td>
- </tr>
- </tbody>
- </table>
-</div>
-
-</div>
-<br class="example-break">
-</div>
-<div class="simplesect">
-<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="id508058"></a>Packing</h2></div></div></div>
-<p>When creating an application, you'll want to put more than one widget
- inside a window. Our first helloworld example only used one widget so we
- could simply use a <a class="link" href="GtkContainer.html#gtk-container-add" title="gtk_container_add ()"><code class="function">gtk_container_add()</code></a> call to "pack" the widget into the
- window. But when you want to put more than one widget into a window, it
- it becomes important to control how each widget is positioned and sized.
- This is where packing comes in.</p>
-<p>GTK+ comes with a large variety of <em class="firstterm">layout containers</em>
- whose purpose it is to control the layout of the child widgets that are
- added to them. See <a class="xref" href="LayoutContainers.html" title="Layout Containers"><i>Layout Containers</i></a> for an overview.</p>
-<p>The following example shows how the GtkGrid container lets you
- arrange several buttons:</p>
-<p>
- <img src="grid-packing.png">
- </p>
-<div class="example">
-<a name="gtk-getting-started-grid-packing"></a><p class="title"><b>Example 2. Packing buttons</b></p>
-<div class="example-contents">
- <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
- <tbody>
- <tr>
- <td class="listing_lines" align="right"><pre>1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-52
-53
-54
-55
-56
-57
-58
-59
-60
-61
-62
-63
-64
-65
-66
-67
-68
-69
-70
-71
-72
-73</pre></td>
- <td class="listing_code"><pre class="programlisting"><span class="preproc">#include</span><span class="normal"> </span><span class="string">&lt;gtk/gtk.h&gt;</span>
-
-<span class="keyword">static</span><span class="normal"> </span><span class="type">void</span>
-<span class="function">print_hello</span><span class="normal"> </span><span class="symbol">(</span><span class="usertype">GtkWidget</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">widget</span><span class="symbol">,</span>
-<span class="normal"> </span><span class="usertype">gpointer</span><span class="normal"> data</span><span class="symbol">)</span>
-<span class="cbracket">{</span>
-<span class="normal"> </span><span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-Warnings-and-Assertions.html#g-print">g_print</a></span><span class="normal"> </span><span class="symbol">(</span><span class="string">"Hello World</span><span class="specialchar">\n</span><span class="string">"</span><span class="symbol">);</span>
-<span class="cbracket">}</span>
-
-<span class="type">int</span>
-<span class="function">main</span><span class="normal"> </span><span class="symbol">(</span><span class="type">int</span><span class="normal"> argc</span><span class="symbol">,</span>
-<span class="normal"> </span><span class="type">char</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">argv</span><span class="symbol">[])</span>
-<span class="cbracket">{</span>
-<span class="normal"> </span><span class="usertype">GtkWidget</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">window</span><span class="symbol">;</span>
-<span class="normal"> </span><span class="usertype">GtkWidget</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">grid</span><span class="symbol">;</span>
-<span class="normal"> </span><span class="usertype">GtkWidget</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">button</span><span class="symbol">;</span>
-
-<span class="normal"> </span><span class="comment">/* This is called in all GTK applications. Arguments are parsed</span>
-<span class="comment"> * from the command line and are returned to the application.</span>
-<span class="comment"> */</span>
-<span class="normal"> </span><span class="function"><a href="gtk3-General.html#gtk-init">gtk_init</a></span><span class="normal"> </span><span class="symbol">(&amp;</span><span class="normal">argc</span><span class="symbol">,</span><span class="normal"> </span><span class="symbol">&amp;</span><span class="normal">argv</span><span class="symbol">);</span>
-
-<span class="normal"> </span><span class="comment">/* create a new window, and set its title */</span>
-<span class="normal"> window </span><span class="symbol">=</span><span class="normal"> </span><span class="function"><a href="GtkWindow.html#gtk-window-new">gtk_window_new</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal"><a href="gtk3-Standard-Enumerations.html#GTK-WINDOW-TOPLEVEL:CAPS">GTK_WINDOW_TOPLEVEL</a></span><span class="symbol">);</span>
-<span class="normal"> </span><span class="function"><a href="GtkWindow.html#gtk-window-set-title">gtk_window_set_title</a></span><span class="normal"> </span><span class="symbol">(</span><span class="function">GTK_WINDOW</span><span class="normal"> </span><span class="symbol">(</span><span class="normal">window</span><span class="symbol">),</span><span class="normal"> </span><span class="string">"Grid"</span><span class="symbol">);</span>
-<span class="normal"> </span><span class="function"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#g-signal-connect">g_signal_connect</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">window</span><span class="symbol">,</span><span class="normal"> </span><span class="string">"destroy"</span><span class="symbol">,</span><span class="normal"> </span><span class="function"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Closures.html#G-CALLBACK:CAPS">G_CALLBACK</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal"><a href="gtk3-General.html#gtk-main-quit">gtk_main_quit</a></span><span class="symbol">),</span><span class="normal"> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS">NULL</a></span><span class="symbol">);</span>
-<span class="normal"> </span><span class="function"><a href="GtkContainer.html#gtk-container-set-border-width">gtk_container_set_border_width</a></span><span class="normal"> </span><span class="symbol">(</span><span class="function">GTK_CONTAINER</span><span class="normal"> </span><span class="symbol">(</span><span class="normal">window</span><span class="symbol">),</span><span class="normal"> </span><span class="number">10</span><span class="symbol">);</span>
-
-<span class="normal"> </span><span class="comment">/* Here we construct the container that is going pack our buttons */</span>
-<span class="normal"> grid </span><span class="symbol">=</span><span class="normal"> </span><span class="function"><a href="GtkGrid.html#gtk-grid-new">gtk_grid_new</a></span><span class="normal"> </span><span class="symbol">();</span>
-
-<span class="normal"> </span><span class="comment">/* Pack the container in the window */</span>
-<span class="normal"> </span><span class="function"><a href="GtkContainer.html#gtk-container-add">gtk_container_add</a></span><span class="normal"> </span><span class="symbol">(</span><span class="function">GTK_CONTAINER</span><span class="normal"> </span><span class="symbol">(</span><span class="normal">window</span><span class="symbol">),</span><span class="normal"> grid</span><span class="symbol">);</span>
-
-<span class="normal"> button </span><span class="symbol">=</span><span class="normal"> </span><span class="function"><a href="GtkButton.html#gtk-button-new-with-label">gtk_button_new_with_label</a></span><span class="normal"> </span><span class="symbol">(</span><span class="string">"Button 1"</span><span class="symbol">);</span>
-<span class="normal"> </span><span class="function"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#g-signal-connect">g_signal_connect</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">button</span><span class="symbol">,</span><span class="normal"> </span><span class="string">"clicked"</span><span class="symbol">,</span><span class="normal"> </span><span class="function"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Closures.html#G-CALLBACK:CAPS">G_CALLBACK</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">print_hello</span><span class="symbol">),</span><span class="normal"> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS">NULL</a></span><span class="symbol">);</span>
-
-<span class="normal"> </span><span class="comment">/* Place the first button in the grid cell (0, 0), and make it fill</span>
-<span class="comment"> * just 1 cell horizontally and vertically (ie no spanning)</span>
-<span class="comment"> */</span>
-<span class="normal"> </span><span class="function"><a href="GtkGrid.html#gtk-grid-attach">gtk_grid_attach</a></span><span class="normal"> </span><span class="symbol">(</span><span class="function">GTK_GRID</span><span class="normal"> </span><span class="symbol">(</span><span class="normal">grid</span><span class="symbol">),</span><span class="normal"> button</span><span class="symbol">,</span><span class="normal"> </span><span class="number">0</span><span class="symbol">,</span><span class="normal"> </span><span class="number">0</span><span class="symbol">,</span><span class="normal"> </span><span class="number">1</span><span class="symbol">,</span><span class="normal"> </span><span class="number">1</span><span class="symbol">);</span>
-
-<span class="normal"> button </span><span class="symbol">=</span><span class="normal"> </span><span class="function"><a href="GtkButton.html#gtk-button-new-with-label">gtk_button_new_with_label</a></span><span class="normal"> </span><span class="symbol">(</span><span class="string">"Button 2"</span><span class="symbol">);</span>
-<span class="normal"> </span><span class="function"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#g-signal-connect">g_signal_connect</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">button</span><span class="symbol">,</span><span class="normal"> </span><span class="string">"clicked"</span><span class="symbol">,</span><span class="normal"> </span><span class="function"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Closures.html#G-CALLBACK:CAPS">G_CALLBACK</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">print_hello</span><span class="symbol">),</span><span class="normal"> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS">NULL</a></span><span class="symbol">);</span>
-
-<span class="normal"> </span><span class="comment">/* Place the second button in the grid cell (1, 0), and make it fill</span>
-<span class="comment"> * just 1 cell horizontally and vertically (ie no spanning)</span>
-<span class="comment"> */</span>
-<span class="normal"> </span><span class="function"><a href="GtkGrid.html#gtk-grid-attach">gtk_grid_attach</a></span><span class="normal"> </span><span class="symbol">(</span><span class="function">GTK_GRID</span><span class="normal"> </span><span class="symbol">(</span><span class="normal">grid</span><span class="symbol">),</span><span class="normal"> button</span><span class="symbol">,</span><span class="normal"> </span><span class="number">1</span><span class="symbol">,</span><span class="normal"> </span><span class="number">0</span><span class="symbol">,</span><span class="normal"> </span><span class="number">1</span><span class="symbol">,</span><span class="normal"> </span><span class="number">1</span><span class="symbol">);</span>
-
-<span class="normal"> button </span><span class="symbol">=</span><span class="normal"> </span><span class="function"><a href="GtkButton.html#gtk-button-new-with-label">gtk_button_new_with_label</a></span><span class="normal"> </span><span class="symbol">(</span><span class="string">"Quit"</span><span class="symbol">);</span>
-<span class="normal"> </span><span class="function"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#g-signal-connect">g_signal_connect</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">button</span><span class="symbol">,</span><span class="normal"> </span><span class="string">"clicked"</span><span class="symbol">,</span><span class="normal"> </span><span class="function"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Closures.html#G-CALLBACK:CAPS">G_CALLBACK</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal"><a href="gtk3-General.html#gtk-main-quit">gtk_main_quit</a></span><span class="symbol">),</span><span class="normal"> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS">NULL</a></span><span class="symbol">);</span>
-
-<span class="normal"> </span><span class="comment">/* Place the Quit button in the grid cell (0, 1), and make it</span>
-<span class="comment"> * span 2 columns.</span>
-<span class="comment"> */</span>
-<span class="normal"> </span><span class="function"><a href="GtkGrid.html#gtk-grid-attach">gtk_grid_attach</a></span><span class="normal"> </span><span class="symbol">(</span><span class="function">GTK_GRID</span><span class="normal"> </span><span class="symbol">(</span><span class="normal">grid</span><span class="symbol">),</span><span class="normal"> button</span><span class="symbol">,</span><span class="normal"> </span><span class="number">0</span><span class="symbol">,</span><span class="normal"> </span><span class="number">1</span><span class="symbol">,</span><span class="normal"> </span><span class="number">2</span><span class="symbol">,</span><span class="normal"> </span><span class="number">1</span><span class="symbol">);</span>
-
-<span class="normal"> </span><span class="comment">/* Now that we are done packing our widgets, we show them all</span>
-<span class="comment"> * in one go, by calling gtk_widget_show_all() on the window.</span>
-<span class="comment"> * This call recursively calls gtk_widget_show() on all widgets</span>
-<span class="comment"> * that are contained in the window, directly or indirectly.</span>
-<span class="comment"> */</span>
-<span class="normal"> </span><span class="function"><a href="GtkWidget.html#gtk-widget-show-all">gtk_widget_show_all</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">window</span><span class="symbol">);</span>
-
-<span class="normal"> </span><span class="comment">/* All GTK applications must have a gtk_main(). Control ends here</span>
-<span class="comment"> * and waits for an event to occur (like a key press or a mouse event),</span>
-<span class="comment"> * until gtk_main_quit() is called.</span>
-<span class="comment"> */</span>
-<span class="normal"> </span><span class="function"><a href="gtk3-General.html#gtk-main">gtk_main</a></span><span class="normal"> </span><span class="symbol">();</span>
-
-<span class="normal"> </span><span class="keyword">return</span><span class="normal"> </span><span class="number">0</span><span class="symbol">;</span>
-<span class="cbracket">}</span></pre></td>
- </tr>
- </tbody>
- </table>
-</div>
-
-</div>
-<br class="example-break">
-</div>
-<div class="simplesect">
-<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="id517517"></a>Drawing</h2></div></div></div>
-<p>Many widgets, like buttons, do all their drawing themselves. You
- just tell them the label you want to see, and they figure out what font
- to use, draw the button outline and focus rectangle, etc. Sometimes, it
- is necessary to do some custom drawing. In that case, a <a class="link" href="GtkDrawingArea.html" title="GtkDrawingArea"><span class="type">GtkDrawingArea</span></a>
- might be the right widget to use. It offers a canvas on which you can
- draw by connecting to the <a class="link" href="GtkWidget.html#GtkWidget-draw" title='The "draw" signal'><span class="type">"draw"</span></a> signal.
- </p>
-<p>The contents of a widget often need to be partially or fully redrawn,
- e.g. when another window is moved and uncovers part of the widget, or
- when tie window containing it is resized. It is also possible to explicitly
- cause part or all of the widget to be redrawn, by calling
- <a class="link" href="GtkWidget.html#gtk-widget-queue-draw" title="gtk_widget_queue_draw ()"><code class="function">gtk_widget_queue_draw()</code></a> or its variants. GTK+ takes care of most of the
- details by providing a ready-to-use cairo context to the ::draw signal
- handler.</p>
-<p>The following example shows a ::draw signal handler. It is a bit
- more complicated than the previous examples, since it also demonstrates
- input event handling by means of ::button-press and ::motion-notify
- handlers.</p>
-<p>
- <img src="drawing.png">
- </p>
-<div class="example">
-<a name="gtk-getting-started-drawing"></a><p class="title"><b>Example 3. Drawing in response to input</b></p>
-<div class="example-contents">
- <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
- <tbody>
- <tr>
- <td class="listing_lines" align="right"><pre>1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-52
-53
-54
-55
-56
-57
-58
-59
-60
-61
-62
-63
-64
-65
-66
-67
-68
-69
-70
-71
-72
-73
-74
-75
-76
-77
-78
-79
-80
-81
-82
-83
-84
-85
-86
-87
-88
-89
-90
-91
-92
-93
-94
-95
-96
-97
-98
-99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-138
-139
-140
-141
-142
-143
-144
-145
-146
-147
-148
-149
-150
-151
-152
-153
-154
-155
-156
-157
-158
-159
-160
-161
-162
-163
-164
-165
-166
-167
-168
-169
-170
-171
-172
-173
-174
-175
-176
-177
-178
-179
-180
-181
-182
-183
-184</pre></td>
- <td class="listing_code"><pre class="programlisting"><span class="preproc">#include</span><span class="normal"> </span><span class="string">&lt;gtk/gtk.h&gt;</span>
-
-<span class="comment">/* Surface to store current scribbles */</span>
-<span class="keyword">static</span><span class="normal"> </span><span class="usertype">cairo_surface_t</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">surface </span><span class="symbol">=</span><span class="normal"> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS">NULL</a></span><span class="symbol">;</span>
-
-<span class="keyword">static</span><span class="normal"> </span><span class="type">void</span>
-<span class="function">clear_surface</span><span class="normal"> </span><span class="symbol">(</span><span class="type">void</span><span class="symbol">)</span>
-<span class="cbracket">{</span>
-<span class="normal"> </span><span class="usertype">cairo_t</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">cr</span><span class="symbol">;</span>
-
-<span class="normal"> cr </span><span class="symbol">=</span><span class="normal"> </span><span class="function"><a href="/usr/share/gtk-doc/html/cairo/cairo-cairo-t.html#cairo-create">cairo_create</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">surface</span><span class="symbol">);</span>
-
-<span class="normal"> </span><span class="function"><a href="/usr/share/gtk-doc/html/cairo/cairo-cairo-t.html#cairo-set-source-rgb">cairo_set_source_rgb</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">cr</span><span class="symbol">,</span><span class="normal"> </span><span class="number">1</span><span class="symbol">,</span><span class="normal"> </span><span class="number">1</span><span class="symbol">,</span><span class="normal"> </span><span class="number">1</span><span class="symbol">);</span>
-<span class="normal"> </span><span class="function"><a href="/usr/share/gtk-doc/html/cairo/cairo-cairo-t.html#cairo-paint">cairo_paint</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">cr</span><span class="symbol">);</span>
-
-<span class="normal"> </span><span class="function"><a href="/usr/share/gtk-doc/html/cairo/cairo-cairo-t.html#cairo-destroy">cairo_destroy</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">cr</span><span class="symbol">);</span>
-<span class="cbracket">}</span>
-
-<span class="comment">/* Create a new surface of the appropriate size to store our scribbles */</span>
-<span class="keyword">static</span><span class="normal"> <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean">gboolean</a></span>
-<span class="function">configure_event_cb</span><span class="normal"> </span><span class="symbol">(</span><span class="usertype">GtkWidget</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">widget</span><span class="symbol">,</span>
-<span class="normal"> </span><span class="usertype">GdkEventConfigure</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">event</span><span class="symbol">,</span>
-<span class="normal"> </span><span class="usertype">gpointer</span><span class="normal"> data</span><span class="symbol">)</span>
-<span class="cbracket">{</span>
-<span class="normal"> </span><span class="keyword">if</span><span class="normal"> </span><span class="symbol">(</span><span class="normal">surface</span><span class="symbol">)</span>
-<span class="normal"> </span><span class="function"><a href="/usr/share/gtk-doc/html/cairo/cairo-cairo-surface-t.html#cairo-surface-destroy">cairo_surface_destroy</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">surface</span><span class="symbol">);</span>
-
-<span class="normal"> surface </span><span class="symbol">=</span><span class="normal"> </span><span class="function"><a href="http://developer.gnome.org/gdk/gdk3-Cairo-Interaction.html#gdk-window-create-similar-surface">gdk_window_create_similar_surface</a></span><span class="normal"> </span><span class="symbol">(</span><span class="function"><a href="GtkWidget.html#gtk-widget-get-window">gtk_widget_get_window</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">widget</span><span class="symbol">),</span>
-<span class="normal"> <a href="/usr/share/gtk-doc/html/cairo/cairo-cairo-surface-t.html#CAIRO-CONTENT-COLOR:CAPS">CAIRO_CONTENT_COLOR</a></span><span class="symbol">,</span>
-<span class="normal"> </span><span class="function"><a href="GtkWidget.html#gtk-widget-get-allocated-width">gtk_widget_get_allocated_width</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">widget</span><span class="symbol">),</span>
-<span class="normal"> </span><span class="function"><a href="GtkWidget.html#gtk-widget-get-allocated-height">gtk_widget_get_allocated_height</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">widget</span><span class="symbol">));</span>
-
-<span class="normal"> </span><span class="comment">/* Initialize the surface to white */</span>
-<span class="normal"> </span><span class="function">clear_surface</span><span class="normal"> </span><span class="symbol">();</span>
-
-<span class="normal"> </span><span class="comment">/* We've handled the configure event, no need for further processing. */</span>
-<span class="normal"> </span><span class="keyword">return</span><span class="normal"> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS">TRUE</a></span><span class="symbol">;</span>
-<span class="cbracket">}</span>
-
-<span class="comment">/* Redraw the screen from the surface. Note that the ::draw</span>
-<span class="comment"> * signal receives a ready-to-be-used cairo_t that is already</span>
-<span class="comment"> * clipped to only draw the exposed areas of the widget</span>
-<span class="comment"> */</span>
-<span class="keyword">static</span><span class="normal"> <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean">gboolean</a></span>
-<span class="function">draw_cb</span><span class="normal"> </span><span class="symbol">(</span><span class="usertype">GtkWidget</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">widget</span><span class="symbol">,</span>
-<span class="normal"> </span><span class="usertype">cairo_t</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">cr</span><span class="symbol">,</span>
-<span class="normal"> </span><span class="usertype">gpointer</span><span class="normal"> data</span><span class="symbol">)</span>
-<span class="cbracket">{</span>
-<span class="normal"> </span><span class="function"><a href="/usr/share/gtk-doc/html/cairo/cairo-cairo-t.html#cairo-set-source-surface">cairo_set_source_surface</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">cr</span><span class="symbol">,</span><span class="normal"> surface</span><span class="symbol">,</span><span class="normal"> </span><span class="number">0</span><span class="symbol">,</span><span class="normal"> </span><span class="number">0</span><span class="symbol">);</span>
-<span class="normal"> </span><span class="function"><a href="/usr/share/gtk-doc/html/cairo/cairo-cairo-t.html#cairo-paint">cairo_paint</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">cr</span><span class="symbol">);</span>
-
-<span class="normal"> </span><span class="keyword">return</span><span class="normal"> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS">FALSE</a></span><span class="symbol">;</span>
-<span class="cbracket">}</span>
-
-<span class="comment">/* Draw a rectangle on the surface at the given position */</span>
-<span class="keyword">static</span><span class="normal"> </span><span class="type">void</span>
-<span class="function">draw_brush</span><span class="normal"> </span><span class="symbol">(</span><span class="usertype">GtkWidget</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">widget</span><span class="symbol">,</span>
-<span class="normal"> </span><span class="usertype">gdouble</span><span class="normal"> x</span><span class="symbol">,</span>
-<span class="normal"> </span><span class="usertype">gdouble</span><span class="normal"> y</span><span class="symbol">)</span>
-<span class="cbracket">{</span>
-<span class="normal"> </span><span class="usertype">cairo_t</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">cr</span><span class="symbol">;</span>
-
-<span class="normal"> </span><span class="comment">/* Paint to the surface, where we store our state */</span>
-<span class="normal"> cr </span><span class="symbol">=</span><span class="normal"> </span><span class="function"><a href="/usr/share/gtk-doc/html/cairo/cairo-cairo-t.html#cairo-create">cairo_create</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">surface</span><span class="symbol">);</span>
-
-<span class="normal"> </span><span class="function"><a href="/usr/share/gtk-doc/html/cairo/cairo-Paths.html#cairo-rectangle">cairo_rectangle</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">cr</span><span class="symbol">,</span><span class="normal"> x </span><span class="symbol">-</span><span class="normal"> </span><span class="number">3</span><span class="symbol">,</span><span class="normal"> y </span><span class="symbol">-</span><span class="normal"> </span><span class="number">3</span><span class="symbol">,</span><span class="normal"> </span><span class="number">6</span><span class="symbol">,</span><span class="normal"> </span><span class="number">6</span><span class="symbol">);</span>
-<span class="normal"> </span><span class="function"><a href="/usr/share/gtk-doc/html/cairo/cairo-cairo-t.html#cairo-fill">cairo_fill</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">cr</span><span class="symbol">);</span>
-
-<span class="normal"> </span><span class="function"><a href="/usr/share/gtk-doc/html/cairo/cairo-cairo-t.html#cairo-destroy">cairo_destroy</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">cr</span><span class="symbol">);</span>
-
-<span class="normal"> </span><span class="comment">/* Now invalidate the affected region of the drawing area. */</span>
-<span class="normal"> </span><span class="function"><a href="GtkWidget.html#gtk-widget-queue-draw-area">gtk_widget_queue_draw_area</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">widget</span><span class="symbol">,</span><span class="normal"> x </span><span class="symbol">-</span><span class="normal"> </span><span class="number">3</span><span class="symbol">,</span><span class="normal"> y </span><span class="symbol">-</span><span class="normal"> </span><span class="number">3</span><span class="symbol">,</span><span class="normal"> </span><span class="number">6</span><span class="symbol">,</span><span class="normal"> </span><span class="number">6</span><span class="symbol">);</span>
-<span class="cbracket">}</span>
-
-<span class="comment">/* Handle button press events by either drawing a rectangle</span>
-<span class="comment"> * or clearing the surface, depending on which button was pressed.</span>
-<span class="comment"> * The ::button-press signal handler receives a GdkEventButton</span>
-<span class="comment"> * struct which contains this information.</span>
-<span class="comment"> */</span>
-<span class="keyword">static</span><span class="normal"> <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean">gboolean</a></span>
-<span class="function">button_press_event_cb</span><span class="normal"> </span><span class="symbol">(</span><span class="usertype">GtkWidget</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">widget</span><span class="symbol">,</span>
-<span class="normal"> </span><span class="usertype">GdkEventButton</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">event</span><span class="symbol">,</span>
-<span class="normal"> </span><span class="usertype">gpointer</span><span class="normal"> data</span><span class="symbol">)</span>
-<span class="cbracket">{</span>
-<span class="normal"> </span><span class="comment">/* paranoia check, in case we haven't gotten a configure event */</span>
-<span class="normal"> </span><span class="keyword">if</span><span class="normal"> </span><span class="symbol">(</span><span class="normal">surface </span><span class="symbol">==</span><span class="normal"> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS">NULL</a></span><span class="symbol">)</span>
-<span class="normal"> </span><span class="keyword">return</span><span class="normal"> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS">FALSE</a></span><span class="symbol">;</span>
-
-<span class="normal"> </span><span class="keyword">if</span><span class="normal"> </span><span class="symbol">(</span><span class="normal">event</span><span class="symbol">-&gt;</span><span class="normal">button </span><span class="symbol">==</span><span class="normal"> <a href="http://developer.gnome.org/gdk/gdk3-Events.html#GDK-BUTTON-PRIMARY:CAPS">GDK_BUTTON_PRIMARY</a></span><span class="symbol">)</span>
-<span class="normal"> </span><span class="cbracket">{</span>
-<span class="normal"> </span><span class="function">draw_brush</span><span class="normal"> </span><span class="symbol">(</span><span class="normal">widget</span><span class="symbol">,</span><span class="normal"> event</span><span class="symbol">-&gt;</span><span class="normal">x</span><span class="symbol">,</span><span class="normal"> event</span><span class="symbol">-&gt;</span><span class="normal">y</span><span class="symbol">);</span>
-<span class="normal"> </span><span class="cbracket">}</span>
-<span class="normal"> </span><span class="keyword">else</span><span class="normal"> </span><span class="keyword">if</span><span class="normal"> </span><span class="symbol">(</span><span class="normal">event</span><span class="symbol">-&gt;</span><span class="normal">button </span><span class="symbol">==</span><span class="normal"> <a href="http://developer.gnome.org/gdk/gdk3-Events.html#GDK-BUTTON-SECONDARY:CAPS">GDK_BUTTON_SECONDARY</a></span><span class="symbol">)</span>
-<span class="normal"> </span><span class="cbracket">{</span>
-<span class="normal"> </span><span class="function">clear_surface</span><span class="normal"> </span><span class="symbol">();</span>
-<span class="normal"> </span><span class="function"><a href="GtkWidget.html#gtk-widget-queue-draw">gtk_widget_queue_draw</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">widget</span><span class="symbol">);</span>
-<span class="normal"> </span><span class="cbracket">}</span>
-
-<span class="normal"> </span><span class="comment">/* We've handled the event, stop processing */</span>
-<span class="normal"> </span><span class="keyword">return</span><span class="normal"> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS">TRUE</a></span><span class="symbol">;</span>
-<span class="cbracket">}</span>
-
-<span class="comment">/* Handle motion events by continuing to draw if button 1 is</span>
-<span class="comment"> * still held down. The ::motion-notify signal handler receives</span>
-<span class="comment"> * a GdkEventMotion struct which contains this information.</span>
-<span class="comment"> */</span>
-<span class="keyword">static</span><span class="normal"> <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean">gboolean</a></span>
-<span class="function">motion_notify_event_cb</span><span class="normal"> </span><span class="symbol">(</span><span class="usertype">GtkWidget</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">widget</span><span class="symbol">,</span>
-<span class="normal"> </span><span class="usertype">GdkEventMotion</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">event</span><span class="symbol">,</span>
-<span class="normal"> </span><span class="usertype">gpointer</span><span class="normal"> data</span><span class="symbol">)</span>
-<span class="cbracket">{</span>
-<span class="normal"> </span><span class="comment">/* paranoia check, in case we haven't gotten a configure event */</span>
-<span class="normal"> </span><span class="keyword">if</span><span class="normal"> </span><span class="symbol">(</span><span class="normal">surface </span><span class="symbol">==</span><span class="normal"> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS">NULL</a></span><span class="symbol">)</span>
-<span class="normal"> </span><span class="keyword">return</span><span class="normal"> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS">FALSE</a></span><span class="symbol">;</span>
-
-<span class="normal"> </span><span class="keyword">if</span><span class="normal"> </span><span class="symbol">(</span><span class="normal">event</span><span class="symbol">-&gt;</span><span class="normal">state </span><span class="symbol">&amp;</span><span class="normal"> <a href="http://developer.gnome.org/gdk/gdk3-Windows.html#GDK-BUTTON1-MASK:CAPS">GDK_BUTTON1_MASK</a></span><span class="symbol">)</span>
-<span class="normal"> </span><span class="function">draw_brush</span><span class="normal"> </span><span class="symbol">(</span><span class="normal">widget</span><span class="symbol">,</span><span class="normal"> event</span><span class="symbol">-&gt;</span><span class="normal">x</span><span class="symbol">,</span><span class="normal"> event</span><span class="symbol">-&gt;</span><span class="normal">y</span><span class="symbol">);</span>
-
-<span class="normal"> </span><span class="comment">/* We've handled it, stop processing */</span>
-<span class="normal"> </span><span class="keyword">return</span><span class="normal"> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS">TRUE</a></span><span class="symbol">;</span>
-<span class="cbracket">}</span>
-
-<span class="keyword">static</span><span class="normal"> </span><span class="type">void</span>
-<span class="function">close_window</span><span class="normal"> </span><span class="symbol">(</span><span class="type">void</span><span class="symbol">)</span>
-<span class="cbracket">{</span>
-<span class="normal"> </span><span class="keyword">if</span><span class="normal"> </span><span class="symbol">(</span><span class="normal">surface</span><span class="symbol">)</span>
-<span class="normal"> </span><span class="function"><a href="/usr/share/gtk-doc/html/cairo/cairo-cairo-surface-t.html#cairo-surface-destroy">cairo_surface_destroy</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">surface</span><span class="symbol">);</span>
-
-<span class="normal"> </span><span class="function"><a href="gtk3-General.html#gtk-main-quit">gtk_main_quit</a></span><span class="normal"> </span><span class="symbol">();</span>
-<span class="cbracket">}</span>
-
-<span class="type">int</span>
-<span class="function">main</span><span class="normal"> </span><span class="symbol">(</span><span class="type">int</span><span class="normal"> argc</span><span class="symbol">,</span>
-<span class="normal"> </span><span class="type">char</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">argv</span><span class="symbol">[])</span>
-<span class="cbracket">{</span>
-<span class="normal"> </span><span class="usertype">GtkWidget</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">window</span><span class="symbol">;</span>
-<span class="normal"> </span><span class="usertype">GtkWidget</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">frame</span><span class="symbol">;</span>
-<span class="normal"> </span><span class="usertype">GtkWidget</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">da</span><span class="symbol">;</span>
-
-<span class="normal"> </span><span class="function"><a href="gtk3-General.html#gtk-init">gtk_init</a></span><span class="normal"> </span><span class="symbol">(&amp;</span><span class="normal">argc</span><span class="symbol">,</span><span class="normal"> </span><span class="symbol">&amp;</span><span class="normal">argv</span><span class="symbol">);</span>
-
-<span class="normal"> window </span><span class="symbol">=</span><span class="normal"> </span><span class="function"><a href="GtkWindow.html#gtk-window-new">gtk_window_new</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal"><a href="gtk3-Standard-Enumerations.html#GTK-WINDOW-TOPLEVEL:CAPS">GTK_WINDOW_TOPLEVEL</a></span><span class="symbol">);</span>
-<span class="normal"> </span><span class="function"><a href="GtkWindow.html#gtk-window-set-title">gtk_window_set_title</a></span><span class="normal"> </span><span class="symbol">(</span><span class="function">GTK_WINDOW</span><span class="normal"> </span><span class="symbol">(</span><span class="normal">window</span><span class="symbol">),</span><span class="normal"> </span><span class="string">"Drawing Area"</span><span class="symbol">);</span>
-
-<span class="normal"> </span><span class="function"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#g-signal-connect">g_signal_connect</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">window</span><span class="symbol">,</span><span class="normal"> </span><span class="string">"destroy"</span><span class="symbol">,</span><span class="normal"> </span><span class="function"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Closures.html#G-CALLBACK:CAPS">G_CALLBACK</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">close_window</span><span class="symbol">),</span><span class="normal"> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS">NULL</a></span><span class="symbol">);</span>
-
-<span class="normal"> </span><span class="function"><a href="GtkContainer.html#gtk-container-set-border-width">gtk_container_set_border_width</a></span><span class="normal"> </span><span class="symbol">(</span><span class="function">GTK_CONTAINER</span><span class="normal"> </span><span class="symbol">(</span><span class="normal">window</span><span class="symbol">),</span><span class="normal"> </span><span class="number">8</span><span class="symbol">);</span>
-
-<span class="normal"> frame </span><span class="symbol">=</span><span class="normal"> </span><span class="function"><a href="GtkFrame.html#gtk-frame-new">gtk_frame_new</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal"><a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS">NULL</a></span><span class="symbol">);</span>
-<span class="normal"> </span><span class="function"><a href="GtkFrame.html#gtk-frame-set-shadow-type">gtk_frame_set_shadow_type</a></span><span class="normal"> </span><span class="symbol">(</span><span class="function">GTK_FRAME</span><span class="normal"> </span><span class="symbol">(</span><span class="normal">frame</span><span class="symbol">),</span><span class="normal"> <a href="gtk3-Standard-Enumerations.html#GTK-SHADOW-IN:CAPS">GTK_SHADOW_IN</a></span><span class="symbol">);</span>
-<span class="normal"> </span><span class="function"><a href="GtkContainer.html#gtk-container-add">gtk_container_add</a></span><span class="normal"> </span><span class="symbol">(</span><span class="function">GTK_CONTAINER</span><span class="normal"> </span><span class="symbol">(</span><span class="normal">window</span><span class="symbol">),</span><span class="normal"> frame</span><span class="symbol">);</span>
-
-<span class="normal"> da </span><span class="symbol">=</span><span class="normal"> </span><span class="function"><a href="GtkDrawingArea.html#gtk-drawing-area-new">gtk_drawing_area_new</a></span><span class="normal"> </span><span class="symbol">();</span>
-<span class="normal"> </span><span class="comment">/* set a minimum size */</span>
-<span class="normal"> </span><span class="function"><a href="GtkWidget.html#gtk-widget-set-size-request">gtk_widget_set_size_request</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">da</span><span class="symbol">,</span><span class="normal"> </span><span class="number">100</span><span class="symbol">,</span><span class="normal"> </span><span class="number">100</span><span class="symbol">);</span>
-
-<span class="normal"> </span><span class="function"><a href="GtkContainer.html#gtk-container-add">gtk_container_add</a></span><span class="normal"> </span><span class="symbol">(</span><span class="function">GTK_CONTAINER</span><span class="normal"> </span><span class="symbol">(</span><span class="normal">frame</span><span class="symbol">),</span><span class="normal"> da</span><span class="symbol">);</span>
-
-<span class="normal"> </span><span class="comment">/* Signals used to handle the backing surface */</span>
-<span class="normal"> </span><span class="function"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#g-signal-connect">g_signal_connect</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">da</span><span class="symbol">,</span><span class="normal"> </span><span class="string">"draw"</span><span class="symbol">,</span>
-<span class="normal"> </span><span class="function"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Closures.html#G-CALLBACK:CAPS">G_CALLBACK</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">draw_cb</span><span class="symbol">),</span><span class="normal"> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS">NULL</a></span><span class="symbol">);</span>
-<span class="normal"> </span><span class="function"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#g-signal-connect">g_signal_connect</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">da</span><span class="symbol">,</span><span class="string">"configure-event"</span><span class="symbol">,</span>
-<span class="normal"> </span><span class="function"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Closures.html#G-CALLBACK:CAPS">G_CALLBACK</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">configure_event_cb</span><span class="symbol">),</span><span class="normal"> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS">NULL</a></span><span class="symbol">);</span>
-
-<span class="normal"> </span><span class="comment">/* Event signals */</span>
-<span class="normal"> </span><span class="function"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#g-signal-connect">g_signal_connect</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">da</span><span class="symbol">,</span><span class="normal"> </span><span class="string">"motion-notify-event"</span><span class="symbol">,</span>
-<span class="normal"> </span><span class="function"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Closures.html#G-CALLBACK:CAPS">G_CALLBACK</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">motion_notify_event_cb</span><span class="symbol">),</span><span class="normal"> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS">NULL</a></span><span class="symbol">);</span>
-<span class="normal"> </span><span class="function"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#g-signal-connect">g_signal_connect</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">da</span><span class="symbol">,</span><span class="normal"> </span><span class="string">"button-press-event"</span><span class="symbol">,</span>
-<span class="normal"> </span><span class="function"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-Closures.html#G-CALLBACK:CAPS">G_CALLBACK</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">button_press_event_cb</span><span class="symbol">),</span><span class="normal"> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS">NULL</a></span><span class="symbol">);</span>
-
-<span class="normal"> </span><span class="comment">/* Ask to receive events the drawing area doesn't normally</span>
-<span class="comment"> * subscribe to. In particular, we need to ask for the</span>
-<span class="comment"> * button press and motion notify events that want to handle.</span>
-<span class="comment"> */</span>
-<span class="normal"> </span><span class="function"><a href="GtkWidget.html#gtk-widget-set-events">gtk_widget_set_events</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">da</span><span class="symbol">,</span><span class="normal"> </span><span class="function"><a href="GtkWidget.html#gtk-widget-get-events">gtk_widget_get_events</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">da</span><span class="symbol">)</span>
-<span class="normal"> </span><span class="symbol">|</span><span class="normal"> <a href="http://developer.gnome.org/gdk/gdk3-Events.html#GDK-BUTTON-PRESS-MASK:CAPS">GDK_BUTTON_PRESS_MASK</a></span>
-<span class="normal"> </span><span class="symbol">|</span><span class="normal"> <a href="http://developer.gnome.org/gdk/gdk3-Events.html#GDK-POINTER-MOTION-MASK:CAPS">GDK_POINTER_MOTION_MASK</a></span><span class="symbol">);</span>
-
-<span class="normal"> </span><span class="function"><a href="GtkWidget.html#gtk-widget-show-all">gtk_widget_show_all</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">window</span><span class="symbol">);</span>
-
-<span class="normal"> </span><span class="function"><a href="gtk3-General.html#gtk-main">gtk_main</a></span><span class="normal"> </span><span class="symbol">();</span>
-
-<span class="normal"> </span><span class="keyword">return</span><span class="normal"> </span><span class="number">0</span><span class="symbol">;</span>
-<span class="cbracket">}</span></pre></td>
- </tr>
- </tbody>
- </table>
-</div>
-
-</div>
-<br class="example-break">
-</div>
-<div class="simplesect">
-<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="id481528"></a>Building interfaces</h2></div></div></div>
-<p>When construcing a more complicated user interface, with dozens
- or hundreds of widgets, doing all the setup work in C code is
- cumbersome, and making changes becomes next to impossible.</p>
-<p>Thankfully, GTK+ supports the separation of user interface
- layout from your business logic, by using UI descriptions in an
- XML format that can be parsed by the <a class="link" href="GtkBuilder.html" title="GtkBuilder"><span class="type">GtkBuilder</span></a> class.</p>
-<div class="example">
-<a name="id501584"></a><p class="title"><b>Example 4. Packing buttons with GtkBuilder</b></p>
-<div class="example-contents">
-<pre class="programlisting">
- #include &lt;gtk/gtk.h&gt;
-
-static void
-print_hello (GtkWidget *widget,
- gpointer data)
-{
- g_print ("Hello World\n");
-}
-
-int
-main (int argc,
- char *argv[])
-{
- GtkBuilder *builder;
- GObject *window;
- GObject *button;
-
- gtk_init (&amp;argc, &amp;argv);
-
- /* Construct a GtkBuilder instance and load our UI description */
- builder = gtk_builder_new ();
- gtk_builder_add_from_file (builder, "builder.ui", NULL);
-
- /* Connect signal handlers to the constructed widgets. */
- window = gtk_builder_get_object (builder, "window");
- g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL);
-
- button = gtk_builder_get_object (builder, "button1");
- g_signal_connect (button, "clicked", G_CALLBACK (print_hello), NULL);
-
- button = gtk_builder_get_object (builder, "button2");
- g_signal_connect (button, "clicked", G_CALLBACK (print_hello), NULL);
-
- button = gtk_builder_get_object (builder, "quit");
- g_signal_connect (button, "clicked", G_CALLBACK (gtk_main_quit), NULL);
-
- gtk_main ();
-
- return 0;
-}
-
- </pre>
- The builder.ui file looks like this:
- <pre class="programlisting">
- &lt;interface&gt;
- &lt;object id="window" class="GtkWindow"&gt;
- &lt;property name="visible"&gt;True&lt;/property&gt;
- &lt;property name="title"&gt;Grid&lt;/property&gt;
- &lt;property name="border-width"&gt;10&lt;/property&gt;
- &lt;child&gt;
- &lt;object id="grid" class="GtkGrid"&gt;
- &lt;property name="visible"&gt;True&lt;/property&gt;
- &lt;child&gt;
- &lt;object id="button1" class="GtkButton"&gt;
- &lt;property name="visible"&gt;True&lt;/property&gt;
- &lt;property name="label"&gt;Button 1&lt;/property&gt;
- &lt;/object&gt;
- &lt;packing&gt;
- &lt;property name="left-attach"&gt;0&lt;/property&gt;
- &lt;property name="top-attach"&gt;0&lt;/property&gt;
- &lt;/packing&gt;
- &lt;/child&gt;
- &lt;child&gt;
- &lt;object id="button2" class="GtkButton"&gt;
- &lt;property name="visible"&gt;True&lt;/property&gt;
- &lt;property name="label"&gt;Button 2&lt;/property&gt;
- &lt;/object&gt;
- &lt;packing&gt;
- &lt;property name="left-attach"&gt;1&lt;/property&gt;
- &lt;property name="top-attach"&gt;0&lt;/property&gt;
- &lt;/packing&gt;
- &lt;/child&gt;
- &lt;child&gt;
- &lt;object id="quit" class="GtkButton"&gt;
- &lt;property name="visible"&gt;True&lt;/property&gt;
- &lt;property name="label"&gt;Quit&lt;/property&gt;
- &lt;/object&gt;
- &lt;packing&gt;
- &lt;property name="left-attach"&gt;0&lt;/property&gt;
- &lt;property name="top-attach"&gt;1&lt;/property&gt;
- &lt;property name="width"&gt;2&lt;/property&gt;
- &lt;/packing&gt;
- &lt;/child&gt;
- &lt;/object&gt;
- &lt;packing&gt;
- &lt;/packing&gt;
- &lt;/child&gt;
- &lt;/object&gt;
-&lt;/interface&gt;
-
- </pre>
-</div>
-</div>
-<br class="example-break"><p>Note that GtkBuilder can also be used to construct objects
- that are not widgets, such as tree models, adjustments, etc.
- That is the reason the method we use here is called
- <a class="link" href="GtkBuilder.html#gtk-builder-get-object" title="gtk_builder_get_object ()"><code class="function">gtk_builder_get_object()</code></a> and returns a GObject* instead of a
- GtkWidget*.</p>
-<p>Normally, you would pass a full path to
- <a class="link" href="GtkBuilder.html#gtk-builder-add-from-file" title="gtk_builder_add_from_file ()"><code class="function">gtk_builder_add_from_file()</code></a> to make the execution of your program
- independent of the current directory. A common location to install
- UI descriptions and similar data is
- <code class="filename">/usr/share/<em class="replaceable"><code>appname</code></em></code>.
- </p>
-<p>It is also possible to embed the UI description in the source
- code as a string and use <a class="link" href="GtkBuilder.html#gtk-builder-add-from-string" title="gtk_builder_add_from_string ()"><code class="function">gtk_builder_add_from_string()</code></a> to load it.
- But keeping the UI description in a separate file has several
- advantages: It is then possible to make minor adjustments to the UI
- without recompiling your program, and, more importantly, graphical
- UI editors such as <a class="ulink" href="http://glade.gnome.org" target="_top">glade</a>
- can load the file and allow you to create and modify your UI by
- point-and-click.</p>
-</div>
-</div>
-<div class="footer">
-<hr>
- Generated by GTK-Doc V1.18.1</div>
-</body>
-</html> \ No newline at end of file