のねのBlog

パソコンの問題や、ソフトウェアの開発で起きた問題など書いていきます。よろしくお願いします^^。

pango_cairo_show_layout

1132 pango_cairo_show_layout (cairo_t     *cr,
1133			 PangoLayout *layout)
1134 {
1135  g_return_if_fail (cr != NULL);
1136  g_return_if_fail (PANGO_IS_LAYOUT (layout));
1137
1138  _pango_cairo_do_layout (cr, layout, FALSE);
1139 }
1140
999  _pango_cairo_do_layout (cairo_t     *cr,
1000			PangoLayout *layout,
1001			gboolean     do_path)
1002 {
1003  PangoCairoRenderer *crenderer = acquire_renderer ();
1004  PangoRenderer *renderer = (PangoRenderer *) crenderer;
1005
1006  crenderer->cr = cr;
1007  crenderer->do_path = do_path;
1008  save_current_point (crenderer);
1009
1010  pango_renderer_draw_layout (renderer, layout, 0, 0);
1011
1012  restore_current_point (crenderer);
1013
1014  release_renderer (crenderer);
1015 }
159 pango_renderer_draw_layout (PangoRenderer    *renderer,
160	                                                 PangoLayout      *layout,
161	                                                 int               x,
162	                                                 int               y)
163 {
164     PangoLayoutIter *iter;
165
166     g_return_if_fail (PANGO_IS_RENDERER (renderer));
167     g_return_if_fail (PANGO_IS_LAYOUT (layout));
168
169     /* We only change the matrix if the renderer isn't already
170      * active.
171      */
172     if (!renderer->active_count)
173     {
174          PangoContext *context = pango_layout_get_context (layout);
175          pango_renderer_set_matrix (renderer,
176				 pango_context_get_matrix (context));
177      }
178
179      pango_renderer_activate (renderer);
180
181      iter = pango_layout_get_iter (layout);
182
183      do
184      {
185          PangoRectangle    logical_rect;
186          PangoLayoutLine *line;
187          int                           baseline;
188
189          line = pango_layout_iter_get_line_readonly (iter);
190
191           pango_layout_iter_get_line_extents (iter, NULL, &logical_rect);
192          baseline = pango_layout_iter_get_baseline (iter);
193
194          pango_renderer_draw_layout_line (renderer,
195				       line,
196				       x + logical_rect.x,
197				       y + baseline);
198       }
199       while (pango_layout_iter_next_line (iter));
200
201     pango_layout_iter_free (iter);
202
203     pango_renderer_deactivate (renderer);
204}