diff options
Diffstat (limited to 'gtk+-mingw/share/gtk-doc/html/gtk3/gtk-question-index.html')
-rw-r--r-- | gtk+-mingw/share/gtk-doc/html/gtk3/gtk-question-index.html | 1390 |
1 files changed, 0 insertions, 1390 deletions
diff --git a/gtk+-mingw/share/gtk-doc/html/gtk3/gtk-question-index.html b/gtk+-mingw/share/gtk-doc/html/gtk3/gtk-question-index.html deleted file mode 100644 index e8662bf..0000000 --- a/gtk+-mingw/share/gtk-doc/html/gtk3/gtk-question-index.html +++ /dev/null @@ -1,1390 +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>Common Questions</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-resources.html" title="Mailing lists and bug reports"> -<link rel="next" href="chap-drawing-model.html" title="The GTK+ Drawing Model"> -<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-resources.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="chap-drawing-model.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td> -</tr></table> -<div class="refentry"> -<a name="gtk-question-index"></a><div class="titlepage"></div> -<div class="refnamediv"><table width="100%"><tr> -<td valign="top"> -<h2><span class="refentrytitle">Common Questions</span></h2> -<p>Common Questions — -Find answers to common questions in the GTK+ manual -</p> -</td> -<td valign="top" align="right"></td> -</tr></table></div> -<div class="refsect1"> -<a name="id510184"></a><h2>Questions and Answers</h2> -<p> -This is an "index" of the reference manual organized by common "How do -I..." questions. If you aren't sure which documentation to read for -the question you have, this list is a good place to start. -</p> -<div class="qandaset"> -<a name="id504814"></a><table border="0" width="100%" summary="Q and A Set"> -<col align="left" width="1%"> -<col> -<tbody> -<tr class="qandadiv"><td align="left" valign="top" colspan="2"><h5 class="title"> -<a name="id507125"></a>1. General</h5></td></tr> -<tr class="question"> -<td align="left" valign="top"> -<a name="id480356"></a><a name="id487302"></a><p><b>1.1.</b></p> -</td> -<td align="left" valign="top"><p> -How do I get started with GTK+? -</p></td> -</tr> -<tr class="answer"> -<td align="left" valign="top"></td> -<td align="left" valign="top"><p> -The GTK+ <a class="ulink" href="http://www.gtk.org" target="_top">website</a> offers some -<a class="ulink" href="http://www.gtk.org/documentation" target="_top">tutorials</a> and other -documentation (most of it about GTK+ 2.x, but mostly still applicable). -More documentation ranging from whitepapers to online books can be found at -the <a class="ulink" href="http://developer.gnome.org" target="_top">GNOME developer's site</a>. -After studying these materials you should be well prepared to come back to -this reference manual for details. -</p></td> -</tr> -<tr class="question"> -<td align="left" valign="top"> -<a name="id525960"></a><a name="id514386"></a><p><b>1.2.</b></p> -</td> -<td align="left" valign="top"><p> -Where can I get help with GTK+, submit a bug report, or make a feature -request? -</p></td> -</tr> -<tr class="answer"> -<td align="left" valign="top"></td> -<td align="left" valign="top"><p> -See the <a class="link" href="gtk-resources.html" title="Mailing lists and bug reports">documentation on this topic</a>. -</p></td> -</tr> -<tr class="question"> -<td align="left" valign="top"> -<a name="id496528"></a><a name="id516181"></a><p><b>1.3.</b></p> -</td> -<td align="left" valign="top"><p>How do I port from one GTK+ -version to another?</p></td> -</tr> -<tr class="answer"> -<td align="left" valign="top"></td> -<td align="left" valign="top"> -<p> -See <a class="xref" href="gtk-migrating-2-to-3.html" title="Migrating from GTK+ 2.x to GTK+ 3"><i>Migrating from GTK+ 2.x to GTK+ 3</i></a>. -You may also find useful information in the documentation for -specific widgets and functions. -</p> -<p> -If you have a question not covered in the manual, feel free to -ask on the mailing lists and please <a class="ulink" href="http://bugzilla.gnome.org" target="_top">file a bug report</a> against the -documentation. -</p> -</td> -</tr> -<tr class="question"> -<td align="left" valign="top"> -<a name="id517268"></a><a name="id517270"></a><p><b>1.4.</b></p> -</td> -<td align="left" valign="top"><p> -How does memory management work in GTK+? Should I free data returned -from functions? -</p></td> -</tr> -<tr class="answer"> -<td align="left" valign="top"></td> -<td align="left" valign="top"> -<p> -See the documentation for <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="type">GObject</span></a> and <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned"><span class="type">GInitiallyUnowned</span></a>. For <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="type">GObject</span></a> note -specifically <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#g-object-ref"><code class="function">g_object_ref()</code></a> and <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#g-object-unref"><code class="function">g_object_unref()</code></a>. <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned"><span class="type">GInitiallyUnowned</span></a> is a -subclass of <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject"><span class="type">GObject</span></a> so the same points apply, except that it has a "floating" -state (explained in its documentation). -</p> -<p> -For strings returned from functions, they will be declared "const" -if they should not be freed. Non-const strings should be -freed with <a href="http://library.gnome.org/devel/glib/unstable/glib-Memory-Allocation.html#g-free"><code class="function">g_free()</code></a>. Arrays follow the same rule. If you find an -undocumented exception to the rules, please report a bug to <a class="ulink" href="http://bugzilla.gnome.org" target="_top">http://bugzilla.gnome.org</a>. -</p> -</td> -</tr> -<tr class="question"> -<td align="left" valign="top"> -<a name="id496669"></a><a name="id496672"></a><p><b>1.5.</b></p> -</td> -<td align="left" valign="top"><p> -Why does my program leak memory, if I destroy a widget immediately -after creating it ? -</p></td> -</tr> -<tr class="answer"> -<td align="left" valign="top"></td> -<td align="left" valign="top"> -<p> -If <span class="structname">GtkFoo</span> isn't a toplevel window, then -</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</pre></td> - <td class="listing_code"><pre class="programlisting"><span class="normal">foo </span><span class="symbol">=</span><span class="normal"> </span><span class="function">gtk_foo_new</span><span class="normal"> </span><span class="symbol">();</span> -<span class="function"><a href="GtkWidget.html#gtk-widget-destroy">gtk_widget_destroy</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">foo</span><span class="symbol">);</span></pre></td> - </tr> - </tbody> - </table> -</div> - -<p> -is a memory leak, because no one assumed the initial floating -reference. If you are using a widget and you aren't immediately -packing it into a container, then you probably want standard -reference counting, not floating reference counting. -</p> -<p> -To to get this, you must acquire a reference to the widget and drop the -floating reference (<span class="quote">“<span class="quote">ref and sink</span>”</span> in GTK+ parlance) after -creating it: -</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</pre></td> - <td class="listing_code"><pre class="programlisting"><span class="normal">foo </span><span class="symbol">=</span><span class="normal"> </span><span class="function">gtk_foo_new</span><span class="normal"> </span><span class="symbol">();</span> -<span class="function"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#g-object-ref-sink">g_object_ref_sink</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">foo</span><span class="symbol">);</span></pre></td> - </tr> - </tbody> - </table> -</div> - -<p> -When you want to get rid of the widget, you must call <a class="link" href="GtkWidget.html#gtk-widget-destroy" title="gtk_widget_destroy ()"><code class="function">gtk_widget_destroy()</code></a> -to break any external connections to the widget before dropping your -reference: -</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</pre></td> - <td class="listing_code"><pre class="programlisting"><span class="function"><a href="GtkWidget.html#gtk-widget-destroy">gtk_widget_destroy</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">foo</span><span class="symbol">);</span> -<span class="function"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#g-object-unref">g_object_unref</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">foo</span><span class="symbol">);</span></pre></td> - </tr> - </tbody> - </table> -</div> - -<p> -When you immediately add a widget to a container, it takes care of -assuming the initial floating reference and you don't have to worry -about reference counting at all ... just call <a class="link" href="GtkWidget.html#gtk-widget-destroy" title="gtk_widget_destroy ()"><code class="function">gtk_widget_destroy()</code></a> -to get rid of the widget. -</p> -</td> -</tr> -<tr class="question"> -<td align="left" valign="top"> -<a name="id481985"></a><a name="id481987"></a><p><b>1.6.</b></p> -</td> -<td align="left" valign="top"><p> -How do I use GTK+ with threads? -</p></td> -</tr> -<tr class="answer"> -<td align="left" valign="top"></td> -<td align="left" valign="top"><p> -This is covered in the <GTKDOCLINK HREF="gdk-Threads">GDK threads -documentation</GTKDOCLINK>. See also the <a href="http://library.gnome.org/devel/glib/unstable/glib-Threads.html">GThread</a> -documentation for portable threading primitives. -</p></td> -</tr> -<tr class="question"> -<td align="left" valign="top"> -<a name="id493799"></a><a name="id493801"></a><p><b>1.7.</b></p> -</td> -<td align="left" valign="top"><p> -How do I internationalize a GTK+ program? -</p></td> -</tr> -<tr class="answer"> -<td align="left" valign="top"></td> -<td align="left" valign="top"> -<p> -Most people use <a class="ulink" href="http://www.gnu.org/software/gettext/" target="_top">GNU -gettext</a>, already required in order to install GLib. On a UNIX -or Linux system with gettext installed, type <code class="literal">info gettext</code> -to read the documentation. -</p> -<p> -The short checklist on how to use gettext is: call <code class="function">bindtextdomain()</code> so -gettext can find the files containing your translations, call <code class="function">textdomain()</code> -to set the default translation domain, call <code class="function">bind_textdomain_codeset()</code> to -request that all translated strings are returned in UTF-8, then call -<code class="function">gettext()</code> to look up each string to be translated in the default domain. -</p> -<p> -<code class="filename">gi18n.h</code> provides the following shorthand macros for -convenience. -Conventionally, people define macros as follows for convenience: -</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</pre></td> - <td class="listing_code"><pre class="programlisting"><span class="preproc">#define</span><span class="normal"> </span><span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-I18N.html#gettext-macro">_</a></span><span class="symbol">(</span><span class="normal">x</span><span class="symbol">)</span><span class="normal"> </span><span class="function">gettext</span><span class="normal"> </span><span class="symbol">(</span><span class="normal">x</span><span class="symbol">)</span> -<span class="preproc">#define</span><span class="normal"> </span><span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-I18N.html#N-:CAPS">N_</a></span><span class="symbol">(</span><span class="normal">x</span><span class="symbol">)</span><span class="normal"> x</span> -<span class="preproc">#define</span><span class="normal"> </span><span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-I18N.html#C-:CAPS">C_</a></span><span class="symbol">(</span><span class="normal">ctx</span><span class="symbol">,</span><span class="normal">x</span><span class="symbol">)</span><span class="normal"> </span><span class="function">pgettext</span><span class="normal"> </span><span class="symbol">(</span><span class="normal">ctx</span><span class="symbol">,</span><span class="normal"> x</span><span class="symbol">)</span></pre></td> - </tr> - </tbody> - </table> -</div> - -<p> -You use <a href="http://library.gnome.org/devel/glib/unstable/glib-I18N.html#N-:CAPS"><code class="function">N_()</code></a> (N stands for no-op) to mark a string for translation in -a location where a function call to <code class="function">gettext()</code> is not allowed, such as -in an array initializer. -You eventually have to call <code class="function">gettext()</code> on the string to actually fetch -the translation. <a href="http://library.gnome.org/devel/glib/unstable/glib-I18N.html#gettext-macro"><code class="function">_()</code></a> both marks the string for translation and actually -translates it. -The <a href="http://library.gnome.org/devel/glib/unstable/glib-I18N.html#C-:CAPS"><code class="function">C_()</code></a> macro (C stands for context) adds an additional context to -the string that is marked for translation, which can help to disambiguate -short strings that might need different translations in different -parts of your program. -</p> -<p> -Code using these macros ends up looking like this: -</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</pre></td> - <td class="listing_code"><pre class="programlisting"><span class="preproc">#include</span><span class="normal"> </span><span class="string"><gi18n.h></span> - -<span class="keyword">static</span><span class="normal"> </span><span class="keyword">const</span><span class="normal"> </span><span class="type">char</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">global_variable </span><span class="symbol">=</span><span class="normal"> </span><span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-I18N.html#N-:CAPS">N_</a></span><span class="symbol">(</span><span class="string">"Translate this string"</span><span class="symbol">);</span> - -<span class="keyword">static</span><span class="normal"> </span><span class="type">void</span> -<span class="function">make_widgets</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">GtkWidget</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">label1</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">label2</span><span class="symbol">;</span> - -<span class="normal"> label1 </span><span class="symbol">=</span><span class="normal"> </span><span class="function"><a href="GtkLabel.html#gtk-label-new">gtk_label_new</a></span><span class="normal"> </span><span class="symbol">(</span><span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-I18N.html#gettext-macro">_</a></span><span class="symbol">(</span><span class="string">"Another string to translate"</span><span class="symbol">));</span> -<span class="normal"> label2 </span><span class="symbol">=</span><span class="normal"> </span><span class="function"><a href="GtkLabel.html#gtk-label-new">gtk_label_new</a></span><span class="normal"> </span><span class="symbol">(</span><span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-I18N.html#gettext-macro">_</a></span><span class="symbol">(</span><span class="normal">global_variable</span><span class="symbol">));</span> -<span class="symbol">...</span></pre></td> - </tr> - </tbody> - </table> -</div> - -<p> -</p> -<p> -Libraries using gettext should use <code class="function">dgettext()</code> instead of <code class="function">gettext()</code>, which -allows them to specify the translation domain each time they ask for a -translation. Libraries should also avoid calling <code class="function">textdomain()</code>, since -they will be specifying the domain instead of using the default. -</p> -<p> -With the convention that the macro <code class="literal">GETTEXT_PACKAGE</code> is -defined to hold your libraries translation domain, -<code class="filename">gi18n-lib.h</code> can be included to provide -the following convenience: -</p> -<div class="informalexample"> - <table class="listing_frame" border="0" cellpadding="0" cellspacing="0"> - <tbody> - <tr> - <td class="listing_lines" align="right"><pre>1</pre></td> - <td class="listing_code"><pre class="programlisting"><span class="preproc">#define</span><span class="normal"> </span><span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-I18N.html#gettext-macro">_</a></span><span class="symbol">(</span><span class="normal">x</span><span class="symbol">)</span><span class="normal"> </span><span class="function">dgettext</span><span class="normal"> </span><span class="symbol">(</span><span class="normal">GETTEXT_PACKAGE</span><span class="symbol">,</span><span class="normal"> x</span><span class="symbol">)</span></pre></td> - </tr> - </tbody> - </table> -</div> - -<p> -</p> -</td> -</tr> -<tr class="question"> -<td align="left" valign="top"> -<a name="id521100"></a><a name="id521102"></a><p><b>1.8.</b></p> -</td> -<td align="left" valign="top"><p> -How do I use non-ASCII characters in GTK+ programs ? -</p></td> -</tr> -<tr class="answer"> -<td align="left" valign="top"></td> -<td align="left" valign="top"> -<p> -GTK+ uses <a class="ulink" href="http://www.unicode.org" target="_top">Unicode</a> (more exactly -UTF-8) for all text. UTF-8 encodes each Unicode codepoint as a sequence of -one to six bytes and has a number of nice properties which make it a good -choice for working with Unicode text in C programs: -</p> -<div class="itemizedlist"><ul class="itemizedlist" type="disc"> -<li class="listitem"><p> -ASCII characters are encoded by their familiar ASCII codepoints. -</p></li> -<li class="listitem"><p> -ASCII characters never appear as part of any other character. -</p></li> -<li class="listitem"><p> -The zero byte doesn't occur as part of a character, so that UTF-8 strings -can be manipulated with the usual C library functions for handling -zero-terminated strings. -</p></li> -</ul></div> -<p> -More information about Unicode and UTF-8 can be found in the -<a class="ulink" href="http://www.cl.cam.ac.uk/~mgk25/unicode.html" target="_top">UTF-8 and Unicode -FAQ for Unix/Linux</a>. -GLib provides functions for converting strings between UTF-8 and other -encodings, see <a href="http://library.gnome.org/devel/glib/unstable/glib-Character-Set-Conversion.html#g-locale-to-utf8"><code class="function">g_locale_to_utf8()</code></a> and <a href="http://library.gnome.org/devel/glib/unstable/glib-Character-Set-Conversion.html#g-convert"><code class="function">g_convert()</code></a>. -</p> -<p> -Text coming from external sources (e.g. files or user input), has to be -converted to UTF-8 before being handed over to GTK+. The following example -writes the content of a IS0-8859-1 encoded text file to -<code class="literal">stdout</code>: -</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</pre></td> - <td class="listing_code"><pre class="programlisting"><span class="usertype">gchar</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">text</span><span class="symbol">,</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">utf8_text</span><span class="symbol">;</span> -<span class="usertype">gsize</span><span class="normal"> length</span><span class="symbol">;</span> -<span class="usertype">GError</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">error </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">if</span><span class="normal"> </span><span class="symbol">(</span><span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-File-Utilities.html#g-file-get-contents">g_file_get_contents</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">filename</span><span class="symbol">,</span><span class="normal"> </span><span class="symbol">&</span><span class="normal">text</span><span class="symbol">,</span><span class="normal"> </span><span class="symbol">&</span><span class="normal">length</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="cbracket">{</span> -<span class="normal"> utf8_text </span><span class="symbol">=</span><span class="normal"> </span><span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-Character-Set-Conversion.html#g-convert">g_convert</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">text</span><span class="symbol">,</span><span class="normal"> length</span><span class="symbol">,</span><span class="normal"> </span><span class="string">"UTF-8"</span><span class="symbol">,</span><span class="normal"> </span><span class="string">"ISO-8859-1"</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"> <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="symbol">&</span><span class="normal">error</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">error </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="cbracket">{</span> -<span class="normal"> </span><span class="function">fprintf</span><span class="normal"> </span><span class="symbol">(</span><span class="string">"Couldn't convert file %s to UTF-8</span><span class="specialchar">\n</span><span class="string">"</span><span class="symbol">,</span><span class="normal"> filename</span><span class="symbol">);</span> -<span class="normal"> </span><span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#g-error-free">g_error_free</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">error</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="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="normal">utf8_text</span><span class="symbol">);</span> -<span class="normal"> </span><span class="cbracket">}</span> -<span class="keyword">else</span> -<span class="normal"> </span><span class="function">fprintf</span><span class="normal"> </span><span class="symbol">(</span><span class="normal">stderr</span><span class="symbol">,</span><span class="normal"> </span><span class="string">"Unable to read file %s</span><span class="specialchar">\n</span><span class="string">"</span><span class="symbol">,</span><span class="normal"> filename</span><span class="symbol">);</span></pre></td> - </tr> - </tbody> - </table> -</div> - -<p> -</p> -<p> -For string literals in the source code, there are several alternatives for -handling non-ASCII content: -</p> -<div class="variablelist"><table border="0"> -<col align="left" valign="top"> -<tbody> -<tr> -<td><p><span class="term">direct UTF-8</span></p></td> -<td><p> -If your editor and compiler are capable of handling UTF-8 encoded sources, -it is very convenient to simply use UTF-8 for string literals, since it -allows you to edit the strings in "wysiwyg". Note that choosing this option -may reduce the portability of your code. -</p></td> -</tr> -<tr> -<td><p><span class="term">escaped UTF-8</span></p></td> -<td><p> -Even if your toolchain can't handle UTF-8 directly, you can still encode -string literals in UTF-8 by using octal or hexadecimal escapes like -<code class="literal">\212</code> or <code class="literal">\xa8</code> to encode each byte. -This is portable, but modifying the escaped strings is not very convenient. -Be careful when mixing hexadecimal escapes with ordinary text; -<code class="literal">"\xa8abcd"</code> is a string of length 1 ! -</p></td> -</tr> -<tr> -<td><p><span class="term">runtime conversion</span></p></td> -<td><p> -If the string literals can be represented in an encoding which your -toolchain can handle (e.g. IS0-8859-1), you can write your source files -in that encoding and use <a href="http://library.gnome.org/devel/glib/unstable/glib-Character-Set-Conversion.html#g-convert"><code class="function">g_convert()</code></a> to convert the strings to UTF-8 at -runtime. Note that this has some runtime overhead, so you may want to move -the conversion out of inner loops. -</p></td> -</tr> -</tbody> -</table></div> -<p> -Here is an example showing the three approaches using the copyright sign -© which has Unicode and ISO-8859-1 codepoint 169 and is represented -in UTF-8 by the two bytes 194, 169, or <code class="literal">"\302\251"</code> as -a string literal: -</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</pre></td> - <td class="listing_code"><pre class="programlisting"><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">"direct UTF-8: ©"</span><span class="symbol">);</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">"escaped UTF-8: </span><span class="specialchar">\3</span><span class="string">02</span><span class="specialchar">\2</span><span class="string">51"</span><span class="symbol">);</span> -<span class="normal">text </span><span class="symbol">=</span><span class="normal"> </span><span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-Character-Set-Conversion.html#g-convert">g_convert</a></span><span class="normal"> </span><span class="symbol">(</span><span class="string">"runtime conversion: ©"</span><span class="symbol">,</span><span class="normal"> </span><span class="symbol">-</span><span class="number">1</span><span class="symbol">,</span><span class="normal"> </span><span class="string">"ISO-8859-1"</span><span class="symbol">,</span><span class="normal"> </span><span class="string">"UTF-8"</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"> <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"> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS">NULL</a></span><span class="symbol">);</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="symbol">(</span><span class="normal">text</span><span class="symbol">);</span> -<span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-Memory-Allocation.html#g-free">g_free</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">text</span><span class="symbol">);</span></pre></td> - </tr> - </tbody> - </table> -</div> - -<p> -</p> -<p> -If you are using <code class="function">gettext()</code> to localize your application, you need to -call <code class="function">bind_textdomain_codeset()</code> to ensure that translated strings are -returned in UTF-8 encoding. -</p> -</td> -</tr> -<tr class="question"> -<td align="left" valign="top"> -<a name="id521306"></a><a name="id521309"></a><p><b>1.9.</b></p> -</td> -<td align="left" valign="top"><p> -How do I use GTK+ with C++? -</p></td> -</tr> -<tr class="answer"> -<td align="left" valign="top"></td> -<td align="left" valign="top"> -<p> -There are two ways to approach this. The GTK+ header files use the subset -of C that's also valid C++, so you can simply use the normal GTK+ API -in a C++ program. Alternatively, you can use a "C++ binding" -such as <a class="ulink" href="http://gtkmm.sourceforge.net/" target="_top">gtkmm</a> -which provides a native C++ API. -</p> -<p> -When using GTK+ directly, keep in mind that only functions can be -connected to signals, not methods. So you will need to use global -functions or "static" class functions for signal connections. -</p> -<p> -Another common issue when using GTK+ directly is that -C++ will not implicitly convert an integer to an enumeration. -This comes up when using bitfields; in C you can write the following -code: -</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</pre></td> - <td class="listing_code"><pre class="programlisting"><span class="function"><a href="http://developer.gnome.org/gdk/gdk3-Windows.html#gdk-window-set-events">gdk_window_set_events</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">gdk_window</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="symbol">|</span><span class="normal"> <a href="http://developer.gnome.org/gdk/gdk3-Events.html#GDK-BUTTON-RELEASE-MASK:CAPS">GDK_BUTTON_RELEASE_MASK</a></span><span class="symbol">);</span></pre></td> - </tr> - </tbody> - </table> -</div> - -<p> -while in C++ you must write: -</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</pre></td> - <td class="listing_code"><pre class="programlisting"><span class="function"><a href="http://developer.gnome.org/gdk/gdk3-Windows.html#gdk-window-set-events">gdk_window_set_events</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">gdk_window</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#GdkEventMask">GdkEventMask</a></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="symbol">|</span><span class="normal"> <a href="http://developer.gnome.org/gdk/gdk3-Events.html#GDK-BUTTON-RELEASE-MASK:CAPS">GDK_BUTTON_RELEASE_MASK</a></span><span class="symbol">);</span></pre></td> - </tr> - </tbody> - </table> -</div> - -<p> -There are very few functions that require this cast, however. -</p> -</td> -</tr> -<tr class="question"> -<td align="left" valign="top"> -<a name="id521362"></a><a name="id521365"></a><p><b>1.10.</b></p> -</td> -<td align="left" valign="top"><p> -How do I use GTK+ with other non-C languages? -</p></td> -</tr> -<tr class="answer"> -<td align="left" valign="top"></td> -<td align="left" valign="top"><p> -See the <a class="ulink" href="http://www.gtk.org/bindings.html" target="_top">list of language -bindings</a> on <a class="ulink" href="http://www.gtk.org" target="_top">http://www.gtk.org</a>. -</p></td> -</tr> -<tr class="question"> -<td align="left" valign="top"> -<a name="id521390"></a><a name="id521393"></a><p><b>1.11.</b></p> -</td> -<td align="left" valign="top"><p> -How do I load an image or animation from a file? -</p></td> -</tr> -<tr class="answer"> -<td align="left" valign="top"></td> -<td align="left" valign="top"> -<p> -To load an image file straight into a display widget, use -<a class="link" href="GtkImage.html#gtk-image-new-from-file" title="gtk_image_new_from_file ()"><code class="function">gtk_image_new_from_file()</code></a> <sup>[<a name="id521412" href="#ftn.id521412" class="footnote">1</a>]</sup>. -To load an image for another purpose, use <a href="http://library.gnome.org/devel/gdk-pixbuf/unstable/gdk-pixbuf-File-Loading.html#gdk-pixbuf-new-from-file"><code class="function">gdk_pixbuf_new_from_file()</code></a>. To i -load an animation, use <a href="http://library.gnome.org/devel/gdk-pixbuf/unstable/gdk-pixbuf-Animations.html#gdk-pixbuf-animation-new-from-file"><code class="function">gdk_pixbuf_animation_new_from_file()</code></a>. -<a href="http://library.gnome.org/devel/gdk-pixbuf/unstable/gdk-pixbuf-Animations.html#gdk-pixbuf-animation-new-from-file"><code class="function">gdk_pixbuf_animation_new_from_file()</code></a> can also load non-animated images, so -use it in combination with <a href="http://library.gnome.org/devel/gdk-pixbuf/unstable/gdk-pixbuf-Animations.html#gdk-pixbuf-animation-is-static-image"><code class="function">gdk_pixbuf_animation_is_static_image()</code></a> to load a -file of unknown type. -</p> -<p> -To load an image or animation file asynchronously (without blocking), use -<a href="http://library.gnome.org/devel/gdk-pixbuf/unstable/GdkPixbufLoader.html"><span class="type">GdkPixbufLoader</span></a>. -</p> -</td> -</tr> -<tr class="question"> -<td align="left" valign="top"> -<a name="id521499"></a><a name="id521501"></a><p><b>1.12.</b></p> -</td> -<td align="left" valign="top"><p> -How do I draw text ? -</p></td> -</tr> -<tr class="answer"> -<td align="left" valign="top"></td> -<td align="left" valign="top"> -<p> -To draw a piece of text, use a Pango layout and <a href="/home/mclasen/gnome/share/gtk-doc/html/pango/pango-Cairo-Rendering.html#pango-cairo-show-layout"><code class="function">pango_cairo_show_layout()</code></a>. -</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</pre></td> - <td class="listing_code"><pre class="programlisting"><span class="normal">layout </span><span class="symbol">=</span><span class="normal"> </span><span class="function"><a href="GtkWidget.html#gtk-widget-create-pango-layout">gtk_widget_create_pango_layout</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">widget</span><span class="symbol">,</span><span class="normal"> text</span><span class="symbol">);</span> -<span class="normal">fontdesc </span><span class="symbol">=</span><span class="normal"> </span><span class="function"><a href="/home/mclasen/gnome/share/gtk-doc/html/pango/pango-Fonts.html#pango-font-description-from-string">pango_font_description_from_string</a></span><span class="normal"> </span><span class="symbol">(</span><span class="string">"Luxi Mono 12"</span><span class="symbol">);</span> -<span class="function"><a href="/home/mclasen/gnome/share/gtk-doc/html/pango/pango-Layout-Objects.html#pango-layout-set-font-description">pango_layout_set_font_description</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">layout</span><span class="symbol">,</span><span class="normal"> fontdesc</span><span class="symbol">);</span> -<span class="function"><a href="/home/mclasen/gnome/share/gtk-doc/html/pango/pango-Cairo-Rendering.html#pango-cairo-show-layout">pango_cairo_show_layout</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">cr</span><span class="symbol">,</span><span class="normal"> layout</span><span class="symbol">);</span> -<span class="function"><a href="/home/mclasen/gnome/share/gtk-doc/html/pango/pango-Fonts.html#pango-font-description-free">pango_font_description_free</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">fontdesc</span><span class="symbol">);</span> -<span class="function"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#g-object-unref">g_object_unref</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">layout</span><span class="symbol">);</span></pre></td> - </tr> - </tbody> - </table> -</div> - -<p> -</p> -<p> -See also the -<a class="ulink" href="http://developer.gnome.org/pango/stable/pango-Cairo-Rendering.html" target="_top">Cairo Rendering</a> -section of <a class="ulink" href="http://developer.gnome.org/pango/stable/" target="_top">Pango manual</a>. -</p> -</td> -</tr> -<tr class="question"> -<td align="left" valign="top"> -<a name="id521552"></a><a name="id521554"></a><p><b>1.13.</b></p> -</td> -<td align="left" valign="top"><p> -How do I measure the size of a piece of text ? -</p></td> -</tr> -<tr class="answer"> -<td align="left" valign="top"></td> -<td align="left" valign="top"> -<p> -To obtain the size of a piece of text, use a Pango layout and -<a href="/home/mclasen/gnome/share/gtk-doc/html/pango/pango-Layout-Objects.html#pango-layout-get-pixel-size"><code class="function">pango_layout_get_pixel_size()</code></a>, using code like the following: -</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</pre></td> - <td class="listing_code"><pre class="programlisting"><span class="normal">layout </span><span class="symbol">=</span><span class="normal"> </span><span class="function"><a href="GtkWidget.html#gtk-widget-create-pango-layout">gtk_widget_create_pango_layout</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">widget</span><span class="symbol">,</span><span class="normal"> text</span><span class="symbol">);</span> -<span class="normal">fontdesc </span><span class="symbol">=</span><span class="normal"> </span><span class="function"><a href="/home/mclasen/gnome/share/gtk-doc/html/pango/pango-Fonts.html#pango-font-description-from-string">pango_font_description_from_string</a></span><span class="normal"> </span><span class="symbol">(</span><span class="string">"Luxi Mono 12"</span><span class="symbol">);</span> -<span class="function"><a href="/home/mclasen/gnome/share/gtk-doc/html/pango/pango-Layout-Objects.html#pango-layout-set-font-description">pango_layout_set_font_description</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">layout</span><span class="symbol">,</span><span class="normal"> fontdesc</span><span class="symbol">);</span> -<span class="function"><a href="/home/mclasen/gnome/share/gtk-doc/html/pango/pango-Layout-Objects.html#pango-layout-get-pixel-size">pango_layout_get_pixel_size</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">layout</span><span class="symbol">,</span><span class="normal"> </span><span class="symbol">&</span><span class="normal">width</span><span class="symbol">,</span><span class="normal"> </span><span class="symbol">&</span><span class="normal">height</span><span class="symbol">);</span> -<span class="function"><a href="/home/mclasen/gnome/share/gtk-doc/html/pango/pango-Fonts.html#pango-font-description-free">pango_font_description_free</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">fontdesc</span><span class="symbol">);</span> -<span class="function"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#g-object-unref">g_object_unref</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">layout</span><span class="symbol">);</span></pre></td> - </tr> - </tbody> - </table> -</div> - -<p> -</p> -<p> -See also the -<a class="ulink" href="http://developer.gnome.org/pango/stable/pango-Layout-Objects.html" target="_top">Layout Objects</a> -section of <a class="ulink" href="http://developer.gnome.org/pango/stable/" target="_top">Pango manual</a>. -</p> -</td> -</tr> -<tr class="question"> -<td align="left" valign="top"> -<a name="id521608"></a><a name="id521611"></a><p><b>1.14.</b></p> -</td> -<td align="left" valign="top"><p> -Why are types not registered if I use their <code class="literal">GTK_TYPE_BLAH</code> -macro ? -</p></td> -</tr> -<tr class="answer"> -<td align="left" valign="top"></td> -<td align="left" valign="top"> -<p> -The <code class="literal">GTK_TYPE_BLAH</code> macros are defined as calls to -<code class="literal"><code class="function">gtk_blah_get_type()</code></code>, and the <code class="literal"><code class="function">_get_type()</code></code> i -functions are declared as <a href="http://library.gnome.org/devel/glib/unstable/glib-Miscellaneous-Macros.html#G-GNUC-CONST:CAPS"><code class="literal">G_GNUC_CONST</code></a> which allows the compiler to optimize -the call away if it appears that the value is not being used. -</p> -<p> -A common workaround for this problem is to store the result in a volatile -variable, which keeps the compiler from optimizing the call away. -</p> -<div class="informalexample"> - <table class="listing_frame" border="0" cellpadding="0" cellspacing="0"> - <tbody> - <tr> - <td class="listing_lines" align="right"><pre>1</pre></td> - <td class="listing_code"><pre class="programlisting"><span class="keyword">volatile</span><span class="normal"> </span><span class="usertype">GType</span><span class="normal"> dummy </span><span class="symbol">=</span><span class="normal"> GTK_TYPE_BLAH</span><span class="symbol">;</span></pre></td> - </tr> - </tbody> - </table> -</div> - -<p> -</p> -</td> -</tr> -<tr class="question"> -<td align="left" valign="top"> -<a name="id521686"></a><a name="id521689"></a><p><b>1.15.</b></p> -</td> -<td align="left" valign="top"><p> -How do I create a transparent toplevel window ? -</p></td> -</tr> -<tr class="answer"> -<td align="left" valign="top"></td> -<td align="left" valign="top"> -<p> -To make a window transparent, it needs to use a visual which supports that. -This is done by getting the RGBA visual of the screen with -<a href="http://developer.gnome.org/gdk/GdkScreen.html#gdk-screen-get-rgba-visual"><code class="function">gdk_screen_get_rgba_visual()</code></a> and setting it on the window. Note that -<a href="http://developer.gnome.org/gdk/GdkScreen.html#gdk-screen-get-rgba-visual"><code class="function">gdk_screen_get_rgba_visual()</code></a> will return <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if transparent windows -are not supported on the screen, you should fall back to -<a href="http://developer.gnome.org/gdk/GdkScreen.html#gdk-screen-get-system-visual"><code class="function">gdk_screen_get_system_visual()</code></a> in that case. Additionally, note that this -will change from screen to screen, so it needs to be repeated whenever the -window is moved to a different screen. -</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</pre></td> - <td class="listing_code"><pre class="programlisting"><span class="usertype">GdkVisual</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">visual</span><span class="symbol">;</span> - -<span class="normal">visual </span><span class="symbol">=</span><span class="normal"> </span><span class="function"><a href="http://developer.gnome.org/gdk/GdkScreen.html#gdk-screen-get-rgba-visual">gdk_screen_get_rgba_visual</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">screen</span><span class="symbol">);</span> -<span class="keyword">if</span><span class="normal"> </span><span class="symbol">(</span><span class="normal">visual </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"> visual </span><span class="symbol">=</span><span class="normal"> </span><span class="function"><a href="http://developer.gnome.org/gdk/GdkScreen.html#gdk-screen-get-system-visual">gdk_screen_get_system_visual</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">screen</span><span class="symbol">);</span> - -<span class="function"><a href="GtkWidget.html#gtk-widget-set-visual">gtk_widget_set_visual</a></span><span class="normal"> </span><span class="symbol">(</span><span class="function">GTK_WIDGET</span><span class="normal"> </span><span class="symbol">(</span><span class="normal">window</span><span class="symbol">),</span><span class="normal"> visual</span><span class="symbol">);</span></pre></td> - </tr> - </tbody> - </table> -</div> - -<p> -To fill the alpha channel on the window simply use cairos -RGBA drawing capabilities. -</p> -<p> -Note that the presence of an RGBA visual is no guarantee that the -window will actually appear transparent on screen. On X11, this -requires a compositing manager to be running. See -<a class="link" href="GtkWidget.html#gtk-widget-is-composited" title="gtk_widget_is_composited ()"><code class="function">gtk_widget_is_composited()</code></a> for a way to find out if the alpha -channel will be respected. -</p> -</td> -</tr> -<tr class="qandadiv"><td align="left" valign="top" colspan="2"><h5 class="title"> -<a name="id521769"></a>2. Which widget should I use...</h5></td></tr> -<tr class="question"> -<td align="left" valign="top"> -<a name="id521774"></a><a name="id521776"></a><p><b>2.1.</b></p> -</td> -<td align="left" valign="top"><p> -...for lists and trees? -</p></td> -</tr> -<tr class="answer"> -<td align="left" valign="top"></td> -<td align="left" valign="top"><p> -See <a class="link" href="TreeWidget.html" title="Tree and List Widget Overview">tree widget overview</a> — you -should use the <a class="link" href="GtkTreeView.html" title="GtkTreeView"><span class="type">GtkTreeView</span></a> widget. (A list is just a tree with no branches, -so the tree widget is used for lists as well). -</p></td> -</tr> -<tr class="question"> -<td align="left" valign="top"> -<a name="id521804"></a><a name="id521806"></a><p><b>2.2.</b></p> -</td> -<td align="left" valign="top"><p> -...for multi-line text display or editing? -</p></td> -</tr> -<tr class="answer"> -<td align="left" valign="top"></td> -<td align="left" valign="top"> -<p> -See <a class="link" href="TextWidget.html" title="Text Widget Overview">text widget overview</a> — you -should use the <a class="link" href="GtkTextView.html" title="GtkTextView"><span class="type">GtkTextView</span></a> widget. -</p> -<p> -If you only have a small amount of text, <a class="link" href="GtkLabel.html" title="GtkLabel"><span class="type">GtkLabel</span></a> may also be appropriate -of course. It can be made selectable with <a class="link" href="GtkLabel.html#gtk-label-set-selectable" title="gtk_label_set_selectable ()"><code class="function">gtk_label_set_selectable()</code></a>. For a -single-line text entry, see <a class="link" href="GtkEntry.html" title="GtkEntry"><span class="type">GtkEntry</span></a>. -</p> -</td> -</tr> -<tr class="question"> -<td align="left" valign="top"> -<a name="id521861"></a><a name="id521863"></a><p><b>2.3.</b></p> -</td> -<td align="left" valign="top"><p> -...to display an image or animation? -</p></td> -</tr> -<tr class="answer"> -<td align="left" valign="top"></td> -<td align="left" valign="top"><p> -<a class="link" href="GtkImage.html" title="GtkImage"><span class="type">GtkImage</span></a> can display images in just about any format GTK+ understands. -You can also use <a class="link" href="GtkDrawingArea.html" title="GtkDrawingArea"><span class="type">GtkDrawingArea</span></a> if you need to do something more complex, -such as draw text or graphics over the top of the image. -</p></td> -</tr> -<tr class="question"> -<td align="left" valign="top"> -<a name="id521891"></a><a name="id521894"></a><p><b>2.4.</b></p> -</td> -<td align="left" valign="top"><p> -...for presenting a set of mutually-exclusive choices, where Windows -would use a combo box? -</p></td> -</tr> -<tr class="answer"> -<td align="left" valign="top"></td> -<td align="left" valign="top"><p> -With GTK+, a <a class="link" href="GtkComboBox.html" title="GtkComboBox"><span class="type">GtkComboBox</span></a> is the recommended widget to use for this use case. -This widget looks like either a combo box or the current option menu, depending -on the current theme. If you need an editable text entry, use the -<a class="link" href="GtkComboBox.html#GtkComboBox--has-entry" title='The "has-entry" property'><span class="type">"has-entry"</span></a> property. -</p></td> -</tr> -<tr class="qandadiv"><td align="left" valign="top" colspan="2"><h5 class="title"> -<a name="id521925"></a>3. GtkWidget</h5></td></tr> -<tr class="question"> -<td align="left" valign="top"> -<a name="id521930"></a><a name="id521932"></a><p><b>3.1.</b></p> -</td> -<td align="left" valign="top"><p> -How do I change the color of a widget? -</p></td> -</tr> -<tr class="answer"> -<td align="left" valign="top"></td> -<td align="left" valign="top"> -<p> -See <a class="link" href="GtkWidget.html#gtk-widget-override-color" title="gtk_widget_override_color ()"><code class="function">gtk_widget_override_color()</code></a> and <a class="link" href="GtkWidget.html#gtk-widget-override-background-color" title="gtk_widget_override_background_color ()"><code class="function">gtk_widget_override_background_color()</code></a>. -You can also change the appearance of a widget by installing a -custom style provider, see <a class="link" href="GtkStyleContext.html#gtk-style-context-add-provider" title="gtk_style_context_add_provider ()"><code class="function">gtk_style_context_add_provider()</code></a>. -</p> -<p>To change the background color for widgets such as <a class="link" href="GtkLabel.html" title="GtkLabel"><span class="type">GtkLabel</span></a> that -have no background, place them in a <a class="link" href="GtkEventBox.html" title="GtkEventBox"><span class="type">GtkEventBox</span></a> and set the background -of the event box. -</p> -</td> -</tr> -<tr class="question"> -<td align="left" valign="top"> -<a name="id521989"></a><a name="id521992"></a><p><b>3.2.</b></p> -</td> -<td align="left" valign="top"><p> -How do I change the font of a widget? -</p></td> -</tr> -<tr class="answer"> -<td align="left" valign="top"></td> -<td align="left" valign="top"> -<p> -This has several possible answers, depending on what exactly you want to -achieve. One option is <a class="link" href="GtkWidget.html#gtk-widget-override-font" title="gtk_widget_override_font ()"><code class="function">gtk_widget_override_font()</code></a>. -</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</pre></td> - <td class="listing_code"><pre class="programlisting"><span class="usertype">PangoFontDesc</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">font_desc </span><span class="symbol">=</span><span class="normal"> </span><span class="function"><a href="/home/mclasen/gnome/share/gtk-doc/html/pango/pango-Fonts.html#pango-font-description-new">pango_font_description_new</a></span><span class="normal"> </span><span class="symbol">();</span> -<span class="function"><a href="/home/mclasen/gnome/share/gtk-doc/html/pango/pango-Fonts.html#pango-font-description-set-size">pango_font_description_set_size</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">font_desc</span><span class="symbol">,</span><span class="normal"> </span><span class="number">40</span><span class="symbol">);</span> -<span class="function"><a href="GtkWidget.html#gtk-widget-override-font">gtk_widget_override_font</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">widget</span><span class="symbol">,</span><span class="normal"> font</span><span class="symbol">);</span> -<span class="function"><a href="/home/mclasen/gnome/share/gtk-doc/html/pango/pango-Fonts.html#pango-font-description-free">pango_font_description_free</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">font_desc</span><span class="symbol">);</span></pre></td> - </tr> - </tbody> - </table> -</div> - -<p> -</p> -<p> -If you want to make the text of a label larger, you can use -<a class="link" href="GtkLabel.html#gtk-label-set-markup" title="gtk_label_set_markup ()"><code class="function">gtk_label_set_markup()</code></a>: -</p> -<div class="informalexample"> - <table class="listing_frame" border="0" cellpadding="0" cellspacing="0"> - <tbody> - <tr> - <td class="listing_lines" align="right"><pre>1</pre></td> - <td class="listing_code"><pre class="programlisting"><span class="function"><a href="GtkLabel.html#gtk-label-set-markup">gtk_label_set_markup</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">label</span><span class="symbol">,</span><span class="normal"> </span><span class="string">"<big>big text</big>"</span><span class="symbol">);</span></pre></td> - </tr> - </tbody> - </table> -</div> - -<p> -This is preferred for many apps because it's a relative size to the -user's chosen font size. See <a href="http://library.gnome.org/devel/glib/unstable/glib-Simple-XML-Subset-Parser.html#g-markup-escape-text"><code class="function">g_markup_escape_text()</code></a> if you are -constructing such strings on the fly. -</p> -<p> -You can also change the font of a widget by putting -</p> -<pre class="programlisting"> - .my-widget-class { - font: Sans 30; - } -</pre> -<p> -in a CSS file, loading it with <a class="link" href="GtkCssProvider.html#gtk-css-provider-load-from-file" title="gtk_css_provider_load_from_file ()"><code class="function">gtk_css_provider_load_from_file()</code></a>, and -adding the provider with <a class="link" href="GtkStyleContext.html#gtk-style-context-add-provider-for-screen" title="gtk_style_context_add_provider_for_screen ()"><code class="function">gtk_style_context_add_provider_for_screen()</code></a>. -To associate this style information with your widget, set a style class -on its <a class="link" href="GtkStyleContext.html" title="GtkStyleContext"><span class="type">GtkStyleContext</span></a> using <a class="link" href="GtkStyleContext.html#gtk-style-context-add-class" title="gtk_style_context_add_class ()"><code class="function">gtk_style_context_add_class()</code></a>. -The advantage of this approach is that users can then override the font -you have chosen. See the <a class="link" href="GtkStyleContext.html" title="GtkStyleContext"><span class="type">GtkStyleContext</span></a> documentation for more discussion. -</p> -</td> -</tr> -<tr class="question"> -<td align="left" valign="top"> -<a name="id522108"></a><a name="id522110"></a><p><b>3.3.</b></p> -</td> -<td align="left" valign="top"><p> -How do I disable/ghost/desensitize a widget? -</p></td> -</tr> -<tr class="answer"> -<td align="left" valign="top"></td> -<td align="left" valign="top"><p> -In GTK+ a disabled widget is termed "insensitive." -See <a class="link" href="GtkWidget.html#gtk-widget-set-sensitive" title="gtk_widget_set_sensitive ()"><code class="function">gtk_widget_set_sensitive()</code></a>. -</p></td> -</tr> -<tr class="qandadiv"><td align="left" valign="top" colspan="2"><h5 class="title"> -<a name="id522132"></a>4. GtkTextView</h5></td></tr> -<tr class="question"> -<td align="left" valign="top"> -<a name="id522137"></a><a name="id522139"></a><p><b>4.1.</b></p> -</td> -<td align="left" valign="top"><p> -How do I get the contents of the entire text widget as a string? -</p></td> -</tr> -<tr class="answer"> -<td align="left" valign="top"></td> -<td align="left" valign="top"> -<p> -See <a class="link" href="GtkTextBuffer.html#gtk-text-buffer-get-bounds" title="gtk_text_buffer_get_bounds ()"><code class="function">gtk_text_buffer_get_bounds()</code></a> and <a class="link" href="GtkTextBuffer.html#gtk-text-buffer-get-text" title="gtk_text_buffer_get_text ()"><code class="function">gtk_text_buffer_get_text()</code></a> -or <a class="link" href="GtkTextIter.html#gtk-text-iter-get-text" title="gtk_text_iter_get_text ()"><code class="function">gtk_text_iter_get_text()</code></a>. -</p> -<p> -</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</pre></td> - <td class="listing_code"><pre class="programlisting"><span class="usertype">GtkTextIter</span><span class="normal"> start</span><span class="symbol">,</span><span class="normal"> end</span><span class="symbol">;</span> -<span class="usertype">GtkTextBuffer</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">buffer</span><span class="symbol">;</span> -<span class="type">char</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">text</span><span class="symbol">;</span> - -<span class="normal">buffer </span><span class="symbol">=</span><span class="normal"> </span><span class="function"><a href="GtkTextView.html#gtk-text-view-get-buffer">gtk_text_view_get_buffer</a></span><span class="normal"> </span><span class="symbol">(</span><span class="function">GTK_TEXT_VIEW</span><span class="normal"> </span><span class="symbol">(</span><span class="normal">text_view</span><span class="symbol">));</span> -<span class="function"><a href="GtkTextBuffer.html#gtk-text-buffer-get-bounds">gtk_text_buffer_get_bounds</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">buffer</span><span class="symbol">,</span><span class="normal"> </span><span class="symbol">&</span><span class="normal">start</span><span class="symbol">,</span><span class="normal"> </span><span class="symbol">&</span><span class="normal">end</span><span class="symbol">);</span> -<span class="normal">text </span><span class="symbol">=</span><span class="normal"> </span><span class="function"><a href="GtkTextIter.html#gtk-text-iter-get-text">gtk_text_iter_get_text</a></span><span class="normal"> </span><span class="symbol">(&</span><span class="normal">start</span><span class="symbol">,</span><span class="normal"> </span><span class="symbol">&</span><span class="normal">end</span><span class="symbol">);</span> -<span class="comment">/* use text */</span> -<span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-Memory-Allocation.html#g-free">g_free</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">text</span><span class="symbol">);</span></pre></td> - </tr> - </tbody> - </table> -</div> - -<p> -</p> -</td> -</tr> -<tr class="question"> -<td align="left" valign="top"> -<a name="id522192"></a><a name="id522195"></a><p><b>4.2.</b></p> -</td> -<td align="left" valign="top"><p> -How do I make a text widget display its complete contents in a specific font? -</p></td> -</tr> -<tr class="answer"> -<td align="left" valign="top"></td> -<td align="left" valign="top"> -<p> -If you use <a class="link" href="GtkTextBuffer.html#gtk-text-buffer-insert-with-tags" title="gtk_text_buffer_insert_with_tags ()"><code class="function">gtk_text_buffer_insert_with_tags()</code></a> with appropriate tags to -select the font, the inserted text will have the desired appearance, but -text typed in by the user before or after the tagged block will appear in -the default style. -</p> -<p> -To ensure that all text has the desired appearance, use -<a class="link" href="GtkWidget.html#gtk-widget-override-font" title="gtk_widget_override_font ()"><code class="function">gtk_widget_override_font()</code></a> to change the default font for the widget. -</p> -</td> -</tr> -<tr class="question"> -<td align="left" valign="top"> -<a name="id522230"></a><a name="id522232"></a><p><b>4.3.</b></p> -</td> -<td align="left" valign="top"><p> -How do I make a text view scroll to the end of the buffer automatically ? -</p></td> -</tr> -<tr class="answer"> -<td align="left" valign="top"></td> -<td align="left" valign="top"> -<p> -A good way to keep a text buffer scrolled to the end is to place a -<a class="link" href="GtkTextMark.html" title="GtkTextMark">mark</a> at the end of the buffer, and -give it right gravity. The gravity has the effect that text inserted -at the mark gets inserted <span class="emphasis"><em>before</em></span>, keeping the mark -at the end. -</p> -<p> -To ensure that the end of the buffer remains visible, use -<a class="link" href="GtkTextView.html#gtk-text-view-scroll-to-mark" title="gtk_text_view_scroll_to_mark ()"><code class="function">gtk_text_view_scroll_to_mark()</code></a> to scroll to the mark after -inserting new text. -</p> -<p> -The gtk-demo application contains an example of this technique. -</p> -</td> -</tr> -<tr class="qandadiv"><td align="left" valign="top" colspan="2"><h5 class="title"> -<a name="id522279"></a>5. <a class="link" href="GtkTreeView.html" title="GtkTreeView"><span class="type">GtkTreeView</span></a> -</h5></td></tr> -<tr class="question"> -<td align="left" valign="top"> -<a name="id522288"></a><a name="id522291"></a><p><b>5.1.</b></p> -</td> -<td align="left" valign="top"><p> -How do I associate some data with a row in the tree? -</p></td> -</tr> -<tr class="answer"> -<td align="left" valign="top"></td> -<td align="left" valign="top"><p> -Remember that the <a class="link" href="GtkTreeModel.html" title="GtkTreeModel"><span class="type">GtkTreeModel</span></a> columns don't necessarily have to be -displayed. So you can put non-user-visible data in your model just -like any other data, and retrieve it with <a class="link" href="GtkTreeModel.html#gtk-tree-model-get" title="gtk_tree_model_get ()"><code class="function">gtk_tree_model_get()</code></a>. -See the <a class="link" href="TreeWidget.html" title="Tree and List Widget Overview">tree widget overview</a>. -</p></td> -</tr> -<tr class="question"> -<td align="left" valign="top"> -<a name="id522328"></a><a name="id522330"></a><p><b>5.2.</b></p> -</td> -<td align="left" valign="top"><p> -How do I put an image and some text in the same column? -</p></td> -</tr> -<tr class="answer"> -<td align="left" valign="top"></td> -<td align="left" valign="top"><p> -You can pack more than one <a class="link" href="GtkCellRenderer.html" title="GtkCellRenderer"><span class="type">GtkCellRenderer</span></a> into a single <a class="link" href="GtkTreeViewColumn.html" title="GtkTreeViewColumn"><span class="type">GtkTreeViewColumn</span></a> -using <a class="link" href="GtkTreeViewColumn.html#gtk-tree-view-column-pack-start" title="gtk_tree_view_column_pack_start ()"><code class="function">gtk_tree_view_column_pack_start()</code></a> or <a class="link" href="GtkTreeViewColumn.html#gtk-tree-view-column-pack-end" title="gtk_tree_view_column_pack_end ()"><code class="function">gtk_tree_view_column_pack_end()</code></a>. -So pack both a <a class="link" href="GtkCellRendererPixbuf.html" title="GtkCellRendererPixbuf"><span class="type">GtkCellRendererPixbuf</span></a> and a <a class="link" href="GtkCellRendererText.html" title="GtkCellRendererText"><span class="type">GtkCellRendererText</span></a> into the -column. -</p></td> -</tr> -<tr class="question"> -<td align="left" valign="top"> -<a name="id522392"></a><a name="id522394"></a><p><b>5.3.</b></p> -</td> -<td align="left" valign="top"><p> -I can set data easily on my <a class="link" href="GtkTreeStore.html" title="GtkTreeStore"><span class="type">GtkTreeStore</span></a>/<a class="link" href="GtkListStore.html" title="GtkListStore"><span class="type">GtkListStore</span></a> models using -<a class="link" href="GtkListStore.html#gtk-list-store-set" title="gtk_list_store_set ()"><code class="function">gtk_list_store_set()</code></a> and <a class="link" href="GtkTreeStore.html#gtk-tree-store-set" title="gtk_tree_store_set ()"><code class="function">gtk_tree_store_set()</code></a>, but can't read it back? -</p></td> -</tr> -<tr class="answer"> -<td align="left" valign="top"></td> -<td align="left" valign="top"><p> -Both the <a class="link" href="GtkTreeStore.html" title="GtkTreeStore"><span class="type">GtkTreeStore</span></a> and the <a class="link" href="GtkListStore.html" title="GtkListStore"><span class="type">GtkListStore</span></a> implement the <a class="link" href="GtkTreeModel.html" title="GtkTreeModel"><span class="type">GtkTreeModel</span></a> -interface. Consequentially, you can use any function this interface -implements. The easiest way to read a set of data back is to use -<a class="link" href="GtkTreeModel.html#gtk-tree-model-get" title="gtk_tree_model_get ()"><code class="function">gtk_tree_model_get()</code></a>. -</p></td> -</tr> -<tr class="question"> -<td align="left" valign="top"> -<a name="id522472"></a><a name="id522475"></a><p><b>5.4.</b></p> -</td> -<td align="left" valign="top"><p> -How do I change the way that numbers are formatted by <a class="link" href="GtkTreeView.html" title="GtkTreeView"><span class="type">GtkTreeView</span></a>? -</p></td> -</tr> -<tr class="answer"> -<td align="left" valign="top"></td> -<td align="left" valign="top"> -<p> -Use <a class="link" href="GtkTreeView.html#gtk-tree-view-insert-column-with-data-func" title="gtk_tree_view_insert_column_with_data_func ()"><code class="function">gtk_tree_view_insert_column_with_data_func()</code></a> -or <a class="link" href="GtkTreeViewColumn.html#gtk-tree-view-column-set-cell-data-func" title="gtk_tree_view_column_set_cell_data_func ()"><code class="function">gtk_tree_view_column_set_cell_data_func()</code></a> and do the conversion -from number to string yourself (with, say, <a href="http://library.gnome.org/devel/glib/unstable/glib-String-Utility-Functions.html#g-strdup-printf"><code class="function">g_strdup_printf()</code></a>). -</p> -<p> -The following example demonstrates this: -</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 -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</pre></td> - <td class="listing_code"><pre class="programlisting"><span class="keyword">enum</span> -<span class="cbracket">{</span> -<span class="normal"> DOUBLE_COLUMN</span><span class="symbol">,</span> -<span class="normal"> N_COLUMNS</span> -<span class="cbracket">}</span><span class="symbol">;</span> - -<span class="usertype">GtkListStore</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">mycolumns</span><span class="symbol">;</span> -<span class="usertype">GtkTreeView</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">treeview</span><span class="symbol">;</span> - -<span class="type">void</span> -<span class="function">my_cell_double_to_text</span><span class="normal"> </span><span class="symbol">(</span><span class="usertype">GtkTreeViewColumn</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">tree_column</span><span class="symbol">,</span> -<span class="normal"> </span><span class="usertype">GtkCellRenderer</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">cell</span><span class="symbol">,</span> -<span class="normal"> </span><span class="usertype">GtkTreeModel</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">tree_model</span><span class="symbol">,</span> -<span class="normal"> </span><span class="usertype">GtkTreeIter</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">iter</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="usertype">GtkCellRendererText</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">cell_text </span><span class="symbol">=</span><span class="normal"> </span><span class="symbol">(</span><span class="normal"><a href="GtkCellRendererText.html">GtkCellRendererText</a> </span><span class="symbol">*)</span><span class="normal">cell</span><span class="symbol">;</span> -<span class="normal"> </span><span class="usertype">gdouble</span><span class="normal"> d</span><span class="symbol">;</span> -<span class="normal"> </span><span class="usertype">gchar</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">text</span><span class="symbol">;</span> - -<span class="normal"> </span><span class="comment">/* Get the double value from the model. */</span> -<span class="normal"> </span><span class="function"><a href="GtkTreeModel.html#gtk-tree-model-get">gtk_tree_model_get</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">tree_model</span><span class="symbol">,</span><span class="normal"> iter</span><span class="symbol">,</span><span class="normal"> </span><span class="symbol">(</span><span class="normal"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint">gint</a></span><span class="symbol">)</span><span class="normal">data</span><span class="symbol">,</span><span class="normal"> </span><span class="symbol">&</span><span class="normal">d</span><span class="symbol">,</span><span class="normal"> </span><span class="symbol">-</span><span class="number">1</span><span class="symbol">);</span> -<span class="normal"> </span><span class="comment">/* Now we can format the value ourselves. */</span> -<span class="normal"> text </span><span class="symbol">=</span><span class="normal"> </span><span class="function"><a href="http://library.gnome.org/devel/glib/unstable/glib-String-Utility-Functions.html#g-strdup-printf">g_strdup_printf</a></span><span class="normal"> </span><span class="symbol">(</span><span class="string">"%.2f"</span><span class="symbol">,</span><span class="normal"> d</span><span class="symbol">);</span> -<span class="normal"> </span><span class="function"><a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#g-object-set">g_object_set</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">cell</span><span class="symbol">,</span><span class="normal"> </span><span class="string">"text"</span><span class="symbol">,</span><span class="normal"> text</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/glib/unstable/glib-Memory-Allocation.html#g-free">g_free</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">text</span><span class="symbol">);</span> -<span class="cbracket">}</span> - -<span class="type">void</span> -<span class="function">set_up_new_columns</span><span class="normal"> </span><span class="symbol">(</span><span class="usertype">GtkTreeView</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">myview</span><span class="symbol">)</span> -<span class="cbracket">{</span> -<span class="normal"> </span><span class="usertype">GtkCellRendererText</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">renderer</span><span class="symbol">;</span> -<span class="normal"> </span><span class="usertype">GtkTreeViewColumn</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">column</span><span class="symbol">;</span> -<span class="normal"> </span><span class="usertype">GtkListStore</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">mycolumns</span><span class="symbol">;</span> - -<span class="normal"> </span><span class="comment">/* Create the data model and associate it with the given TreeView */</span> -<span class="normal"> mycolumns </span><span class="symbol">=</span><span class="normal"> </span><span class="function"><a href="GtkListStore.html#gtk-list-store-new">gtk_list_store_new</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">N_COLUMNS</span><span class="symbol">,</span><span class="normal"> <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Type-Information.html#G-TYPE-DOUBLE:CAPS">G_TYPE_DOUBLE</a></span><span class="symbol">);</span> -<span class="normal"> </span><span class="function"><a href="GtkTreeView.html#gtk-tree-view-set-model">gtk_tree_view_set_model</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">myview</span><span class="symbol">,</span><span class="normal"> </span><span class="function">GTK_TREE_MODEL</span><span class="normal"> </span><span class="symbol">(</span><span class="normal">mycolumns</span><span class="symbol">));</span> - -<span class="normal"> </span><span class="comment">/* Create a GtkCellRendererText */</span> -<span class="normal"> renderer </span><span class="symbol">=</span><span class="normal"> </span><span class="function"><a href="GtkCellRendererText.html#gtk-cell-renderer-text-new">gtk_cell_renderer_text_new</a></span><span class="normal"> </span><span class="symbol">();</span> - -<span class="normal"> </span><span class="comment">/* Create a new column that has a title ("Example column"),</span> -<span class="comment"> * uses the above created renderer that will render the double</span> -<span class="comment"> * value into text from the associated model's rows.</span> -<span class="comment"> */</span> -<span class="normal"> column </span><span class="symbol">=</span><span class="normal"> </span><span class="function"><a href="GtkTreeViewColumn.html#gtk-tree-view-column-new">gtk_tree_view_column_new</a></span><span class="normal"> </span><span class="symbol">();</span> -<span class="normal"> </span><span class="function"><a href="GtkTreeViewColumn.html#gtk-tree-view-column-set-title">gtk_tree_view_column_set_title</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">column</span><span class="symbol">,</span><span class="normal"> </span><span class="string">"Example column"</span><span class="symbol">);</span> -<span class="normal"> renderer </span><span class="symbol">=</span><span class="normal"> </span><span class="function"><a href="GtkCellRendererText.html#gtk-cell-renderer-text-new">gtk_cell_renderer_text_new</a></span><span class="normal"> </span><span class="symbol">();</span> -<span class="normal"> </span><span class="function"><a href="GtkTreeViewColumn.html#gtk-tree-view-column-pack-start">gtk_tree_view_column_pack_start</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">column</span><span class="symbol">,</span><span class="normal"> renderer</span><span class="symbol">,</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="normal"> </span><span class="comment">/* Append the new column after the GtkTreeView's previous columns. */</span> -<span class="normal"> </span><span class="function"><a href="GtkTreeView.html#gtk-tree-view-append-column">gtk_tree_view_append_column</a></span><span class="normal"> </span><span class="symbol">(</span><span class="function">GTK_TREE_VIEW</span><span class="normal"> </span><span class="symbol">(</span><span class="normal">myview</span><span class="symbol">),</span><span class="normal"> column</span><span class="symbol">);</span> -<span class="normal"> </span><span class="comment">/* Since we created the column by hand, we can set it up for our</span> -<span class="comment"> * needs, e.g. set its minimum and maximum width, etc.</span> -<span class="comment"> */</span> -<span class="normal"> </span><span class="comment">/* Set up a custom function that will be called when the column content</span> -<span class="comment"> * is rendered. We use the func_data pointer as an index into our</span> -<span class="comment"> * model. This is convenient when using multi column lists.</span> -<span class="comment"> */</span> -<span class="normal"> </span><span class="function"><a href="GtkTreeViewColumn.html#gtk-tree-view-column-set-cell-data-func">gtk_tree_view_column_set_cell_data_func</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">column</span><span class="symbol">,</span><span class="normal"> renderer</span><span class="symbol">,</span> -<span class="normal"> my_cell_double_to_text</span><span class="symbol">,</span> -<span class="normal"> </span><span class="symbol">(</span><span class="normal"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer">gpointer</a></span><span class="symbol">)</span><span class="normal">DOUBLE_COLUMN</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="cbracket">}</span></pre></td> - </tr> - </tbody> - </table> -</div> - -<p> -</p> -</td> -</tr> -<tr class="question"> -<td align="left" valign="top"> -<a name="id522556"></a><a name="id522559"></a><p><b>5.5.</b></p> -</td> -<td align="left" valign="top"><p> -How do I hide the expander arrows in my tree view ? -</p></td> -</tr> -<tr class="answer"> -<td align="left" valign="top"></td> -<td align="left" valign="top"><p> -Set the expander-column property of the tree view to a hidden column. -See <a class="link" href="GtkTreeView.html#gtk-tree-view-set-expander-column" title="gtk_tree_view_set_expander_column ()"><code class="function">gtk_tree_view_set_expander_column()</code></a> and <a class="link" href="GtkTreeViewColumn.html#gtk-tree-view-column-set-visible" title="gtk_tree_view_column_set_visible ()"><code class="function">gtk_tree_view_column_set_visible()</code></a>. -</p></td> -</tr> -<tr class="qandadiv"><td align="left" valign="top" colspan="2"><h5 class="title"> -<a name="id522590"></a>6. Using cairo with GTK+</h5></td></tr> -<tr class="question"> -<td align="left" valign="top"> -<a name="id522595"></a><a name="id522598"></a><p><b>6.1.</b></p> -</td> -<td align="left" valign="top"><p> -How do I use cairo to draw in GTK+ applications ? -</p></td> -</tr> -<tr class="answer"> -<td align="left" valign="top"></td> -<td align="left" valign="top"> -<p> -The <a class="link" href="GtkWidget.html#GtkWidget-draw" title='The "draw" signal'><span class="type">"draw"</span></a> signal gets a ready-to-use cairo context -as parameter that you should use. -</p> -<p> -All drawing in GTK+ is normally done in a draw handler, and GTK+ -creates a temporary pixmap for double-buffering the drawing. -It is possible to turn off double-buffering, with -<a class="link" href="GtkWidget.html#gtk-widget-set-double-buffered" title="gtk_widget_set_double_buffered ()"><code class="function">gtk_widget_set_double_buffered()</code></a>, but this is not ideal, -since it can cause some flickering. -</p> -</td> -</tr> -<tr class="question"> -<td align="left" valign="top"> -<a name="id522632"></a><a name="id522635"></a><p><b>6.2.</b></p> -</td> -<td align="left" valign="top"><p> -Can I improve the performance of my application by using the -Glitz or GL backend of cairo ? -</p></td> -</tr> -<tr class="answer"> -<td align="left" valign="top"></td> -<td align="left" valign="top"><p> -No. The GDK X11 backend uses the cairo X backend (and the other -GDK backends use their respective native cairo backends). The -GTK+ developers believe that the best way to improving the GDK -drawing performance is to optimize the cairo X backend and the -relevant code paths in the X server that is uses (mostly the -Render extension). -</p></td> -</tr> -<tr class="question"> -<td align="left" valign="top"> -<a name="id522649"></a><a name="id522651"></a><p><b>6.3.</b></p> -</td> -<td align="left" valign="top"><p> -Can I use cairo to draw on a <a href="http://library.gnome.org/devel/gdk-pixbuf/unstable/gdk-pixbuf-The-GdkPixbuf-Structure.html#GdkPixbuf"><span class="type">GdkPixbuf</span></a> ? -</p></td> -</tr> -<tr class="answer"> -<td align="left" valign="top"></td> -<td align="left" valign="top"><p> -No, at least not yet. The cairo image surface does not support the -pixel format used by GdkPixbuf. -</p></td> -</tr> -</tbody> -</table> -</div> -</div> -<div class="footnotes"> -<br><hr width="100" align="left"> -<div class="footnote"><p><sup>[<a id="ftn.id521412" href="#id521412" class="para">1</a>] </sup> If the file load fails, -<a class="link" href="GtkImage.html#gtk-image-new-from-file" title="gtk_image_new_from_file ()"><code class="function">gtk_image_new_from_file()</code></a> will display no image graphic — to detect -a failed load yourself, use <a href="http://library.gnome.org/devel/gdk-pixbuf/unstable/gdk-pixbuf-File-Loading.html#gdk-pixbuf-new-from-file"><code class="function">gdk_pixbuf_new_from_file()</code></a> directly, then -<a class="link" href="GtkImage.html#gtk-image-new-from-pixbuf" title="gtk_image_new_from_pixbuf ()"><code class="function">gtk_image_new_from_pixbuf()</code></a>.</p></div> -</div> -</div> -<div class="footer"> -<hr> - Generated by GTK-Doc V1.18.1</div> -</body> -</html>
\ No newline at end of file |