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}