[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Beaver-devel] [beaver] pretty print patch
From: |
Tobias Heinzen |
Subject: |
[Beaver-devel] [beaver] pretty print patch |
Date: |
Fri, 23 Jan 2009 12:09:22 +0100 |
User-agent: |
Thunderbird 2.0.0.19 (X11/20090102) |
i'm proud to announce a pretty print patch ^^
Greets
Tobias
### Eclipse Workspace Patch 1.0
#P beaver0.4.0
Index: src/interface.c
===================================================================
RCS file: /sources/beaver/beaver0.4.0/src/interface.c,v
retrieving revision 1.46
diff -u -r1.46 interface.c
--- src/interface.c 12 Jan 2009 16:28:06 -0000 1.46
+++ src/interface.c 23 Jan 2009 11:07:34 -0000
@@ -249,32 +249,81 @@
/* get some contexes */
cr = gtk_print_context_get_cairo_context (context);
layout = gtk_print_context_create_pango_layout (context);
-
+
+ /* get width and height of the print plane */
+ gint width = gtk_print_context_get_width (context);
+ gint height = gtk_print_context_get_height (context);
+
+ /* draw a rectangle all around the text */
+ cairo_set_line_width (cr, 0.7);
+ cairo_new_sub_path (cr);
+ cairo_rectangle (cr, 0, 0, width, height);
+ cairo_close_path (cr);
+ cairo_stroke (cr);
+
+ /* draw a small rectangle on top of the page (header) */
+ cairo_new_sub_path (cr);
+ cairo_rectangle (cr, 0, 0, width, 17);
+ cairo_close_path (cr);
+ cairo_set_source_rgb (cr, 0.9, 0.9, 0.9);
+ cairo_fill_preserve (cr);
+ cairo_set_source_rgba (cr, 0, 0, 0, 1);
+ cairo_stroke (cr);
+
+ /* draw the header. the header contains of the filename and the page
+ * number. the filename is truncated to the basename and is centered
+ * in the header. it also get's printed bold and with a different
+ * font face. */
+ cairo_text_extents_t extents;
+ cairo_select_font_face (cr, "Sans", CAIRO_FONT_SLANT_NORMAL,
+ CAIRO_FONT_WEIGHT_BOLD);
+ cairo_set_font_size (cr, 12.0);
+ cairo_text_extents (cr, doc->name, &extents);
+
+ double x = (width/2)-(extents.width/2 + extents.x_bearing);
+
+ cairo_move_to (cr, x, 12.0);
+ cairo_show_text (cr, doc->name);
+ cairo_stroke (cr);
+
+ /* now draw the page number on the right handside */
+ gchar* page = g_strdup_printf ("Page %d/%d", page_nr+1, doc->n_pages);
+ cairo_select_font_face (cr, "Sans", CAIRO_FONT_SLANT_NORMAL,
+ CAIRO_FONT_WEIGHT_NORMAL);
+ cairo_set_font_size (cr, 12.0);
+ cairo_text_extents (cr, doc->name, &extents);
+
+ x = width-extents.width-3.0;
+
+ cairo_move_to (cr, x, 12.0);
+ cairo_show_text (cr, page);
+ cairo_stroke (cr);
+
+ g_free (page);
+
/* count the number of characters until 75 lines are full. */
- gint chars = 0; gint lines = 0;
+ gint chars = 0; gint lines = 0; gint length = 0;
gchar* text = doc->content+doc->chars_printed;
while (*text && lines < LINES_PER_PAGE) {
if (*text == '\n') {
+ cairo_select_font_face (cr, "Courier New",
CAIRO_FONT_SLANT_NORMAL,
+ CAIRO_FONT_WEIGHT_NORMAL);
+ cairo_set_font_size (cr, 12.0);
+ cairo_move_to (cr, 3.0, (lines+2)*15.0);
+ *text = '\0';
+ cairo_show_text (cr, text-length);
+ *text = '\n';
+ cairo_stroke (cr);
+
+ length=-1;
lines++;
}
+ length++;
text++;
chars++;
}
-
- /* create the header line and get the text to print */
- gchar* header_line = g_strdup_printf ("page %d/%d of
%s\n______________________"
-
"________________________________________________________________________\n\n",
- page_nr+1, doc->n_pages, doc->name);
- gchar* body = g_strconcat (header_line,
doc->content+doc->chars_printed, NULL);
-
- /* set the text to print */
- pango_layout_set_text (layout, body, chars+strlen((const
char*)header_line));
-
- /* free unused space */
- g_free (header_line);
- g_free (body);
-
+
/* increase the number of printed chars */
doc->chars_printed += chars;
@@ -284,6 +333,7 @@
/* free up space */
g_object_unref (layout);
+
}
/**
@@ -310,7 +360,7 @@
GtkWidget* textview = FPROPS(current_page, Text);
doc->textbuffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(textview));
doc->content = get_text(gtk_text_view_get_buffer
(GTK_TEXT_VIEW(textview)));
- doc->name = FPROPS(current_page, Name);
+ doc->name = FPROPS(current_page, BaseName);
/* create new GTKPrintOperation */
GtkPrintOperation *print;
- [Beaver-devel] [beaver] pretty print patch,
Tobias Heinzen <=