📄 gdk-pango-interaction.html
字号:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"><title>Pango Interaction</title><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="GDK Reference Manual"><link rel="up" href="reference.html" title="API Reference"><link rel="prev" href="gdk-Input-Devices.html" title="Input Devices"><link rel="next" href="gdk-Cairo-Interaction.html" title="Cairo Interaction"><meta name="generator" content="GTK-Doc V1.9 (XML mode)"><link rel="stylesheet" href="style.css" type="text/css"><link rel="reference" href="reference.html" title="API Reference"><link rel="index" href="ix01.html" title="Index"><link rel="index" href="ix02.html" title="Index of deprecated symbols"><link rel="index" href="ix03.html" title="Index of new symbols in 2.2"><link rel="index" href="ix04.html" title="Index of new symbols in 2.4"><link rel="index" href="ix05.html" title="Index of new symbols in 2.6"><link rel="index" href="ix06.html" title="Index of new symbols in 2.8"><link rel="index" href="ix07.html" title="Index of new symbols in 2.10"><link rel="index" href="ix08.html" title="Index of new symbols in 2.12"></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="gdk-Input-Devices.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td><td><a accesskey="u" href="reference.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">GDK Reference Manual</th><td><a accesskey="n" href="gdk-Cairo-Interaction.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td></tr><tr><td colspan="5" class="shortcuts"><nobr><a href="#id3293599" class="shortcut">Top</a>  |  <a href="#id3294180" class="shortcut">Description</a>  |  <a href="#id3294114" class="shortcut">Object Hierarchy</a>  |  <a href="#id3294146" class="shortcut">Properties</a></nobr></td></tr></table><div class="refentry" lang="en"><a name="gdk-Pango-Interaction"></a><div class="titlepage"></div><div class="refnamediv"><table width="100%"><tr><td valign="top"><h2><a name="id3293599"></a><span class="refentrytitle">Pango Interaction</span></h2><p>Pango Interaction — Using Pango in GDK</p></td><td valign="top" align="right"></td></tr></table></div><div class="refsynopsisdiv"><h2>Synopsis</h2><a name="GdkPangoRenderer"></a><pre class="synopsis">#include <gdk/gdk.h> <a class="link" href="gdk-Pango-Interaction.html#GdkPangoRenderer-struct">GdkPangoRenderer</a>; <a class="link" href="gdk-Pango-Interaction.html#GdkPangoRendererClass">GdkPangoRendererClass</a>;<ahref="/usr/share/gtk-doc/html/pango/PangoRenderer.html">PangoRenderer</a>* <a class="link" href="gdk-Pango-Interaction.html#gdk-pango-renderer-new">gdk_pango_renderer_new</a> (<a class="link" href="GdkScreen.html" title="GdkScreen">GdkScreen</a> *screen);<ahref="/usr/share/gtk-doc/html/pango/PangoRenderer.html">PangoRenderer</a>* <a class="link" href="gdk-Pango-Interaction.html#gdk-pango-renderer-get-default">gdk_pango_renderer_get_default</a> (<a class="link" href="GdkScreen.html" title="GdkScreen">GdkScreen</a> *screen);void <a class="link" href="gdk-Pango-Interaction.html#gdk-pango-renderer-set-drawable">gdk_pango_renderer_set_drawable</a> (<a class="link" href="gdk-Pango-Interaction.html#GdkPangoRenderer">GdkPangoRenderer</a> *gdk_renderer, <a class="link" href="gdk-Drawing-Primitives.html#GdkDrawable">GdkDrawable</a> *drawable);void <a class="link" href="gdk-Pango-Interaction.html#gdk-pango-renderer-set-gc">gdk_pango_renderer_set_gc</a> (<a class="link" href="gdk-Pango-Interaction.html#GdkPangoRenderer">GdkPangoRenderer</a> *gdk_renderer, <a class="link" href="gdk-Graphics-Contexts.html#GdkGC">GdkGC</a> *gc);void <a class="link" href="gdk-Pango-Interaction.html#gdk-pango-renderer-set-stipple">gdk_pango_renderer_set_stipple</a> (<a class="link" href="gdk-Pango-Interaction.html#GdkPangoRenderer">GdkPangoRenderer</a> *gdk_renderer, <ahref="/usr/share/gtk-doc/html/pango/PangoRenderer.html#PangoRenderPart">PangoRenderPart</a> part, <a class="link" href="gdk-Bitmaps-and-Pixmaps.html#GdkBitmap">GdkBitmap</a> *stipple);void <a class="link" href="gdk-Pango-Interaction.html#gdk-pango-renderer-set-override-color">gdk_pango_renderer_set_override_color</a> (<a class="link" href="gdk-Pango-Interaction.html#GdkPangoRenderer">GdkPangoRenderer</a> *gdk_renderer, <ahref="/usr/share/gtk-doc/html/pango/PangoRenderer.html#PangoRenderPart">PangoRenderPart</a> part, const <a class="link" href="gdk-Colormaps-and-Colors.html#GdkColor">GdkColor</a> *color);<ahref="/usr/share/gtk-doc/html/pango/pango-Text-Processing.html#PangoContext">PangoContext</a>* <a class="link" href="gdk-Pango-Interaction.html#gdk-pango-context-get">gdk_pango_context_get</a> (void);<ahref="/usr/share/gtk-doc/html/pango/pango-Text-Processing.html#PangoContext">PangoContext</a>* <a class="link" href="gdk-Pango-Interaction.html#gdk-pango-context-get-for-screen">gdk_pango_context_get_for_screen</a> (<a class="link" href="GdkScreen.html" title="GdkScreen">GdkScreen</a> *screen);void <a class="link" href="gdk-Pango-Interaction.html#gdk-pango-context-set-colormap">gdk_pango_context_set_colormap</a> (<ahref="/usr/share/gtk-doc/html/pango/pango-Text-Processing.html#PangoContext">PangoContext</a> *context, <a class="link" href="gdk-Colormaps-and-Colors.html#GdkColormap">GdkColormap</a> *colormap); <a class="link" href="gdk-Pango-Interaction.html#GdkPangoAttrEmbossed">GdkPangoAttrEmbossed</a>; <a class="link" href="gdk-Pango-Interaction.html#GdkPangoAttrEmbossColor">GdkPangoAttrEmbossColor</a>; <a class="link" href="gdk-Pango-Interaction.html#GdkPangoAttrStipple">GdkPangoAttrStipple</a>;<ahref="/usr/share/gtk-doc/html/pango/pango-Text-Attributes.html#PangoAttribute">PangoAttribute</a>* <a class="link" href="gdk-Pango-Interaction.html#gdk-pango-attr-emboss-color-new">gdk_pango_attr_emboss_color_new</a> (const <a class="link" href="gdk-Colormaps-and-Colors.html#GdkColor">GdkColor</a> *color);<ahref="/usr/share/gtk-doc/html/pango/pango-Text-Attributes.html#PangoAttribute">PangoAttribute</a>* <a class="link" href="gdk-Pango-Interaction.html#gdk-pango-attr-embossed-new">gdk_pango_attr_embossed_new</a> (<ahref="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gboolean">gboolean</a> embossed);<ahref="/usr/share/gtk-doc/html/pango/pango-Text-Attributes.html#PangoAttribute">PangoAttribute</a>* <a class="link" href="gdk-Pango-Interaction.html#gdk-pango-attr-stipple-new">gdk_pango_attr_stipple_new</a> (<a class="link" href="gdk-Bitmaps-and-Pixmaps.html#GdkBitmap">GdkBitmap</a> *stipple);<a class="link" href="gdk-Points-Rectangles-and-Regions.html#GdkRegion">GdkRegion</a>* <a class="link" href="gdk-Pango-Interaction.html#gdk-pango-layout-get-clip-region">gdk_pango_layout_get_clip_region</a> (<ahref="/usr/share/gtk-doc/html/pango/pango-Layout-Objects.html#PangoLayout">PangoLayout</a> *layout, <ahref="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gint">gint</a> x_origin, <ahref="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gint">gint</a> y_origin, <ahref="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gint">gint</a> *index_ranges, <ahref="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gint">gint</a> n_ranges);<a class="link" href="gdk-Points-Rectangles-and-Regions.html#GdkRegion">GdkRegion</a>* <a class="link" href="gdk-Pango-Interaction.html#gdk-pango-layout-line-get-clip-region">gdk_pango_layout_line_get_clip_region</a> (<ahref="/usr/share/gtk-doc/html/pango/pango-Layout-Objects.html#PangoLayoutLine">PangoLayoutLine</a> *line, <ahref="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gint">gint</a> x_origin, <ahref="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gint">gint</a> y_origin, <ahref="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gint">gint</a> *index_ranges, <ahref="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gint">gint</a> n_ranges);</pre></div><div class="refsect1" lang="en"><a name="id3294114"></a><h2>Object Hierarchy</h2><pre class="synopsis"> <ahref="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GObject">GObject</a> +----<ahref="/usr/share/gtk-doc/html/pango/PangoRenderer.html">PangoRenderer</a> +----GdkPangoRenderer</pre></div><div class="refsect1" lang="en"><a name="id3294146"></a><h2>Properties</h2><pre class="synopsis"> "<a class="link" href="gdk-Pango-Interaction.html#GdkPangoRenderer--screen">screen</a>" <a class="link" href="GdkScreen.html" title="GdkScreen">GdkScreen</a> : Read / Write / Construct Only</pre></div><div class="refsect1" lang="en"><a name="id3294180"></a><h2>Description</h2><p>Pango is the text layout system used by GDK and GTK+. The functionsand types in this section are used to render Pango objects to GDK.drawables, and also extend the set of Pango attributes to includestippling and embossing.</p><p>Creating a <ahref="/usr/share/gtk-doc/html/pango/pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a> object is the first step in rendering text,and requires getting a handle to a <ahref="/usr/share/gtk-doc/html/pango/pango-Text-Processing.html#PangoContext"><span class="type">PangoContext</span></a>. For GTK+ programs,you'll usually want to use <ahref="/usr/share/gtk-doc/html/gtk/GtkWidget.html#gtk-widget-get-pango-context"><code class="function">gtk_widget_get_pango_context()</code></a>, or<ahref="/usr/share/gtk-doc/html/gtk/GtkWidget.html#gtk-widget-create-pango-layout"><code class="function">gtk_widget_create_pango_layout()</code></a>, rather than using the lowlevel<a class="link" href="gdk-Pango-Interaction.html#gdk-pango-context-get-for-screen"><code class="function">gdk_pango_context_get_for_screen()</code></a>. Once you have a <ahref="/usr/share/gtk-doc/html/pango/pango-Layout-Objects.html#PangoLayout"><span class="type">PangoLayout</span></a>, youcan set the text and attributes of it with Pango functions like<ahref="/usr/share/gtk-doc/html/pango/pango-Layout-Objects.html#pango-layout-set-text"><code class="function">pango_layout_set_text()</code></a> and get its size with <ahref="/usr/share/gtk-doc/html/pango/pango-Layout-Objects.html#pango-layout-get-size"><code class="function">pango_layout_get_size()</code></a>.(Note that Pango uses a fixed point system internally, so convertingbetween Pango units and pixels using PANGO_SCALE or the <ahref="/usr/share/gtk-doc/html/pango/pango-Glyph-Storage.html#PANGO-PIXELS:CAPS"><code class="function">PANGO_PIXELS()</code></a> macro.)</p><p>Rendering a Pango layout is done most simply with <a class="link" href="gdk-Drawing-Primitives.html#gdk-draw-layout"><code class="function">gdk_draw_layout()</code></a>;you can also draw pieces of the layout with <a class="link" href="gdk-Drawing-Primitives.html#gdk-draw-layout"><code class="function">gdk_draw_layout()</code></a> or<a class="link" href="gdk-Drawing-Primitives.html#gdk-draw-glyphs"><code class="function">gdk_draw_glyphs()</code></a>. <a class="link" href="gdk-Pango-Interaction.html#GdkPangoRenderer"><span class="type">GdkPangoRenderer</span></a> is a subclass of <ahref="/usr/share/gtk-doc/html/pango/PangoRenderer.html"><span class="type">PangoRenderer</span></a>that is used internally to implement these functions. Using itdirectly or subclassing it can be useful in some cases. See the<a class="link" href="gdk-Pango-Interaction.html#GdkPangoRenderer"><span class="type">GdkPangoRenderer</span></a> documentation for details.</p><div class="example"><a name="rotated-example"></a><p class="title"><b>Example 8. Using <a class="link" href="gdk-Pango-Interaction.html#GdkPangoRenderer"><span class="type">GdkPangoRenderer</span></a> to draw transformed text</b></p><div class="example-contents"><pre class="programlisting">#define RADIUS 100#define N_WORDS 10#define FONT "Sans Bold 18" GdkScreen *screen = gdk_drawable_get_screen (drawable);PangoRenderer *renderer;GdkGC *gc;PangoMatrix matrix = PANGO_MATRIX_INIT;PangoContext *context;PangoLayout *layout;PangoFontDescription *desc;double device_radius;int width, height;int i;/* Get the default renderer for the screen, and set it up for drawing */renderer = gdk_pango_renderer_get_default (screen);gdk_pango_renderer_set_drawable (GDK_PANGO_RENDERER (renderer), drawable);gc = gdk_gc_new (drawable);gdk_pango_renderer_set_gc (GDK_PANGO_RENDERER (renderer), gc);/* Set up a transformation matrix so that the user space coordinates for * where we are drawing are [-RADIUS, RADIUS], [-RADIUS, RADIUS] * We first center, then change the scale */gdk_drawable_get_size (drawable, &width, &height);device_radius = MIN (width, height) / 2.;pango_matrix_translate (&matrix, device_radius + (width - 2 * device_radius) / 2, device_radius + (height - 2 * device_radius) / 2);pango_matrix_scale (&matrix, device_radius / RADIUS, device_radius / RADIUS);/* Create a PangoLayout, set the font and text */context = gdk_pango_context_get_for_screen (screen);layout = pango_layout_new (context);pango_layout_set_text (layout, "Text", -1);desc = pango_font_description_from_string (FONT);pango_layout_set_font_description (layout, desc);pango_font_description_free (desc);/* Draw the layout N_WORDS times in a circle */for (i = 0; i < N_WORDS; i++) { GdkColor color; PangoMatrix rotated_matrix = matrix; int width, height; double angle = (360. * i) / N_WORDS; /* Gradient from red at angle == 60 to blue at angle == 300 */ color.red = 65535 * (1 + cos ((angle - 60) * M_PI / 180.)) / 2; color.green = 0; color.blue = 65535 - color.red; gdk_pango_renderer_set_override_color (GDK_PANGO_RENDERER (renderer), PANGO_RENDER_PART_FOREGROUND, &color); pango_matrix_rotate (&rotated_matrix, angle); pango_context_set_matrix (context, &rotated_matrix); /* Inform Pango to re-layout the text with the new transformation matrix */ pango_layout_context_changed (layout); pango_layout_get_size (layout, &width, &height); pango_renderer_draw_layout (renderer, layout, - width / 2, - RADIUS * PANGO_SCALE);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -