Printing with gtk+, cairo and pango - need to iterate glyphs and problems with pango attributes
- From: joel weedlight ch
- To: <gtk-list gnome org>
- Subject: Printing with gtk+, cairo and pango - need to iterate glyphs and problems with pango attributes
- Date: Thu, 9 Jul 2009 14:07:13 +0200
Hi
I'm trying to print a form which I developed with gtk+. I developed it on m$
Vista with mingw and glade libraries from sourceforge.net. I didn't write it on
GNU/Linux because it should run on win32. That's why I installed ghostscript and
FreePDF to print to PDF to save toner and paper.
I don't understand why the following codes don't work and I have a need for both
for simple usage and iterating glyphs!
First I tried this whereby every letter seems to be painted at same position:
void
ar_print_draw_page(ArPrint *print, GtkPrintOperation *operation, GtkPrintContext
*context, gint page_nr)
{
cairo_t *cr;
PangoLayout *layout;
PangoFontDescription *desc;
PangoAttrList *attribute_list;
PangoAttribute *attribute;
PangoLayoutRun *run;
PangoRectangle logical_rect;
GList *list_line, *list_run;
guint x_offset, y_offset;
void ar_print_draw_page_header(){
gdouble info_width;
gdouble font_size, offset;
info_width = (print->content_width) * (5.35 / 18.5);
offset = 0.0;
cairo_set_source_rgb(cr, 0.0, 0.0, 1.0);
cairo_rectangle(cr, print->padding_left + info_width, print->padding_top,
print->content_width - info_width, print->header_height);
cairo_fill(cr);
cairo_rectangle(cr, print->padding_left, print->padding_top, info_width,
print->header_height);
cairo_stroke(cr);
layout = gtk_print_context_create_pango_layout(context);
// layout = pango_layout_new(pango_cairo_create_context(cr));
pango_layout_set_text(layout, "Title\nsecondary text\0", -1);
desc = pango_font_description_from_string("Arial 10\0");
pango_layout_set_font_description(layout, desc);
// pango_font_description_free(desc);
attribute_list = pango_attr_list_new();
attribute = pango_attr_size_new(9);
attribute->start_index = 0;
attribute->end_index = 6;
pango_attr_list_insert(attribute_list, attribute);
attribute = pango_attr_size_new(7);
attribute->start_index = 6;
attribute->end_index = 15;
pango_attr_list_insert(attribute_list, attribute);
pango_layout_set_attributes(layout, attribute_list);
pango_layout_set_alignment(layout, PANGO_ALIGN_LEFT);
pango_layout_context_changed(layout);
cairo_set_source_rgb(cr, 0.0, 0.0, 0.0);
cairo_move_to(cr, print->padding_left, print->padding_top);
pango_cairo_show_layout(cr, layout);
g_object_unref(layout);
}
void ar_print_draw_page_body(){
}
void ar_print_draw_page_footer(){
}
cr = gtk_print_context_get_cairo_context(context);
ar_print_draw_page_header();
ar_print_draw_page_body();
ar_print_draw_page_footer();
}
furthermore I tried something like following and got the same result as above:
void
ar_print_draw_page(ArPrint *print, GtkPrintOperation *operation, GtkPrintContext
*context, gint page_nr)
{
...
list0 = pango_layout_get_lines(layout);
y_off = 0;
for(i = 0; i < rows && list0 != NULL; i++){
list1 = ((PangoLayoutLine *) (list0->data))->runs;
x_off = 0;
while(list1 != NULL){
run = (PangoLayoutRun *) list1->data;
pango_glyph_string_extents(run->glyphs, run->item->analysis.font,
NULL, &logical_rect);
pango_cairo_show_glyph_string(cr, run->item->analysis.font, run->glyphs);
x_off += logical_rect.width;
list1 = list1->next;
}
y_off += height;
list0 = list0->next;
}
...
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]