void
hello_object_print (GnomePrintContext         *ctx,
		    double                     width,
		    double                     height,
		    const Bonobo_PrintScissor *scissor,
		    gpointer                   user_data)
{
	HelloBonoboEmbeddable *embeddable = user_data;
	GnomeFont             *font;
	double                 w, w2, h;
	const char            *str, *descr;

	str = embeddable->text ? embeddable->text : "No text";
	descr = "Value:";

	gnome_print_setlinewidth (ctx, 2);
	font = gnome_font_new ("Helvetica", 12.0);
	g_return_if_fail (font != NULL);
	gnome_print_setrgbcolor (ctx, 0.0, 0.0, 0.0);
	gnome_print_setfont (ctx, font);

	w = gnome_font_get_width_string (font, descr);
	w2 = gnome_font_get_width_string (font, str);
	h =
	    gnome_font_get_ascender (font) +
	    gnome_font_get_descender (font);

	gnome_print_moveto (ctx, (width / 2) - (w / 2), (height / 2) + h * 2);
	gnome_print_show (ctx, descr);
	gnome_print_moveto (ctx, (width / 2) - (w2 / 2), height / 2 - h);
	gnome_print_show (ctx, str);

	g_object_unref (G_OBJECT (font));
}
static void
render_fn (GnomePrintContext         *ctx,
	   double                     width,
	   double                     height,
	   const Bonobo_PrintScissor *scissor,
	   gpointer                   user_data)
{
	GnomeFont         *font;
	double             w;
	const char         str [] = "Hello World";

	gnome_print_setlinewidth (ctx, 2);
	font = gnome_font_new ("Helvetica", 12.0);
	g_return_if_fail (font != NULL);
	gnome_print_setrgbcolor (ctx, 0.0, 0.0, 0.0);
	gnome_print_setfont (ctx, font);

	w = gnome_font_get_width_string (font, str);
	gnome_print_moveto (ctx, (width / 2) - (w / 2),
			    height / 2);
	gnome_print_show (ctx, str);
	g_object_unref (G_OBJECT (font));

	gnome_print_moveto (ctx, 0, 0);
	gnome_print_lineto (ctx, width, height);
	gnome_print_stroke (ctx);

/* We need a sensible internal representation in order to find the rowstride etc. */
/*	gnome_print_rgbimage (ctx, embeddable_data->
						  embeddable_data->width,
						  embeddable_data->height,
						  gdk_visual_get_best_depth ());*/
}
示例#3
0
static void move_pen_to_nextpage(void)
{
    gnome_print_showpage(gpx);
    gnome_print_context_close(gpx);
    g_object_unref(gpx);
    gpx = gnome_print_job_get_context(job);
    gnome_print_beginpage(gpx, NULL);
    gnome_print_setfont(gpx, font);
    page_y = page_height - margin_top - line_height;
    gnome_print_moveto(gpx, page_x, page_y);
}
示例#4
0
static GnomePrintJob *create_job(GnomePrintConfig *gpc)
{
    GnomeFontFace *font_face;
    PangoFontDescription *font_desc;
    GtkTextIter start, end;
    gchar *text, *p;

    /* Get contents of TextBuffer */
    GtkTextBuffer *buffer = pub->mw->buffer;
    gtk_text_buffer_get_bounds(buffer, &start, &end);
    text = g_strchomp(gtk_text_buffer_get_text(buffer, &start, &end, FALSE));

    /* Initialize job */
    job = gnome_print_job_new(gpc);
    gnome_print_job_get_page_size_from_config(gpc, &page_width, &page_height);
    gnome_print_config_get_length(gpc,
                                  (guchar *)GNOME_PRINT_KEY_PAGE_MARGIN_LEFT, &margin_left, NULL);
    gnome_print_config_get_length(gpc,
                                  (guchar *)GNOME_PRINT_KEY_PAGE_MARGIN_RIGHT, &margin_right, NULL);
    gnome_print_config_get_length(gpc,
                                  (guchar *)GNOME_PRINT_KEY_PAGE_MARGIN_TOP, &margin_top, NULL);
    gnome_print_config_get_length(gpc,
                                  (guchar *)GNOME_PRINT_KEY_PAGE_MARGIN_BOTTOM, &margin_bottom, NULL);
    /*
    g_print("margin_left   = %f\n", margin_left);
    g_print("margin_right  = %f\n", margin_right);
    g_print("margin_top    = %f\n", margin_top);
    g_print("margin_bottom = %f\n", margin_bottom);
    	margin_top = margin_left;
    	margin_bottom = margin_left;
    */
    /* Initialize font */
    font_desc = gtk_widget_get_style(pub->mw->view)->font_desc;
    font_face = gnome_font_face_find_closest_from_pango_description(font_desc);
    font = gnome_font_face_get_font_default(font_face, FONT_SIZE);
//		pango_font_description_get_size(font_desc) / PANGO_SCALE);
//	g_print("PANGO_SCALE = %d\n", PANGO_SCALE);
//	g_print("font_size = %d\n", pango_font_description_get_size(font_desc));
    line_height = gnome_font_get_size(font);
    tab_width = gnome_font_face_get_glyph_width(font_face,
                gnome_font_face_lookup_default(font_face, g_utf8_get_char(" ")))
                / 1000 * FONT_SIZE * get_current_tab_width();
    DV(	g_print("tab_width = %f\n", tab_width));

    /* Draw texts to canvas */
    gpx = gnome_print_job_get_context(job);
    gnome_print_beginpage(gpx, NULL);
    gnome_print_setfont(gpx, font);

    page_x = margin_left;	// TODO RTL
    page_y = page_height - margin_top - line_height;
    gnome_print_moveto(gpx, page_x, page_y);

    gl = gnome_glyphlist_from_text_dumb(font, 0x000000ff, 0, 0, (guchar *)"");
    gl_width = 0;

    p = text;

    while (*p != '\0') {
        gunichar ch = g_utf8_get_char(p);
        gint glyph = gnome_font_lookup_default(font, ch);
        if (!glyph) {
            if (ch == '\n') {
                print_glyph_list(page_x + gl_width > page_width - margin_right);
                move_pen_to_newline();
                DV(				g_print("LF\n"));
            } else if (ch == '\t') {
                print_glyph_list(page_x + gl_width > page_width - margin_right);
                /*				page_x = page_x + tab_width
                					- ((page_x - margin_left) % tab_width); */
                gdouble tmp_x = margin_left;
                do {
                    tmp_x += tab_width;
                } while (tmp_x < page_x + 0.000001); // FIXME
                DV(				g_print("HT "));
                DV(				g_print("%f -> %f\n", page_x, tmp_x));
                page_x = tmp_x;
                gnome_print_moveto(gpx, page_x, page_y);
                /*			} else if (ch == '\f') {
                DV(				g_print("FF\n"));
                				print_glyph_list(page_x + gl_width > page_width - margin_right);
                				move_pen_to_nextpage();
                */
            }
            else {
                GnomeFont *tmp_font = find_proper_font(ch);
                GnomeFontFace *tmp_face = gnome_font_get_face(tmp_font);
                gdouble g_width;

                glyph = gnome_font_lookup_default(tmp_font, ch);
                g_width = gnome_font_face_get_glyph_width(tmp_face, glyph)
                          / 1000 * FONT_SIZE;
                if (page_x + gl_width + g_width > page_width - margin_right) {
                    if (g_unichar_iswide(ch)) {
                        print_glyph_list(FALSE);
                        move_pen_to_newline();
                    } else
                        print_glyph_list(TRUE);
                }
                gnome_glyphlist_font(gl, tmp_font);
                gnome_glyphlist_glyph(gl, glyph);
                gnome_glyphlist_font(gl, font);
                gl_width += g_width;
                DV(				g_print("** "));
            }
        } else {
//			if (ch == ' ') {
            if (g_unichar_isspace(ch)) {
                DV(				g_print("SP "));
                DV(				g_print("\n"));
                print_glyph_list(page_x + gl_width > page_width - margin_right);
                page_x +=
                    gnome_font_face_get_glyph_width(font_face, glyph) / 1000 * FONT_SIZE;
                gnome_print_moveto(gpx, page_x, page_y);
            } else {
                gdouble g_width
                    = gnome_font_face_get_glyph_width(font_face, glyph)
                      / 1000 * FONT_SIZE;
                if (page_x + gl_width + g_width > page_width - margin_right) {
                    if (g_unichar_iswide(ch)) {
                        print_glyph_list(FALSE);
                        move_pen_to_newline();
                    } else
                        print_glyph_list(TRUE);
                }
                gnome_glyphlist_glyph(gl, glyph);
                gl_width += g_width;
                DV(				g_print("%02X ", glyph));
                DV(				g_print("%f (%f)\n", gl_width, gnome_font_get_glyph_width(font, glyph)));
            }
        }
        p = g_utf8_next_char(p);
    }
    print_glyph_list(page_x + gl_width > page_width - margin_right);
    DV(	g_print("\n[EOT]\n"));

    gnome_print_showpage(gpx);
    gnome_print_context_close(gpx);
    g_object_unref(gpx);

    gnome_glyphlist_unref(gl);
    gnome_font_unref(font);
    gnome_font_face_unref(font_face);
    gnome_print_job_close(job);

    return job;
}