gint img_cnt;
gdouble zoom;
gdouble ypos_line;
+ GtkImage *avatar;
};
typedef struct {
static void cb_preview_size_allocate(GtkWidget*, GtkAllocation*);
static void cb_preview_ready(GtkPrintOperationPreview*,
GtkPrintContext*, gpointer);
-#if !GTK_CHECK_VERSION(3, 0, 0)
static gboolean cb_preview_expose(GtkWidget*, GdkEventExpose*, gpointer);
-#else
-static gboolean cb_preview_expose(GtkWidget*, cairo_t*, gpointer);
-#endif
static void cb_preview_got_page_size(GtkPrintOperationPreview*,
GtkPrintContext*,
GtkPageSetup*, gpointer);
}
void printing_print_full(GtkWindow *parent, PrintRenderer *renderer, gpointer renderer_data,
- gint sel_start, gint sel_end)
+ gint sel_start, gint sel_end, GtkImage *avatar)
{
GtkPrintOperation *op;
GtkPrintOperationResult res;
print_data->renderer_data = renderer_data;
print_data->sel_start = sel_start;
print_data->sel_end = sel_end;
+ print_data->avatar = (avatar != NULL? GTK_IMAGE(g_object_ref(avatar)): NULL);
print_data->zoom = 1.;
/* Config for printing */
gtk_print_operation_set_print_settings(op, settings);
gtk_print_operation_set_default_page_setup(op, page_setup);
-#if GTK_CHECK_VERSION(2,18,0)
/* enable Page Size and Orientation in the print dialog */
gtk_print_operation_set_embed_page_setup(op, TRUE);
-#endif
/* signals */
g_signal_connect(op, "begin_print", G_CALLBACK(renderer->cb_begin_print), print_data);
g_signal_connect(op, "draw_page", G_CALLBACK(renderer->cb_draw_page), print_data);
g_list_free(print_data->page_breaks);
if (print_data->layout)
g_object_unref(print_data->layout);
+ if (print_data->avatar)
+ g_object_unref(print_data->avatar);
g_free(print_data);
return gtk_text_buffer_get_text(buffer, &start, &end, FALSE);
}
-void printing_print(GtkTextView *text_view, GtkWindow *parent, gint sel_start, gint sel_end)
+void printing_print(GtkTextView *text_view, GtkWindow *parent, gint sel_start, gint sel_end, GtkImage *avatar)
{
PrintRenderer *textview_renderer = g_new0(PrintRenderer, 1);
textview_renderer->cb_begin_print = printing_textview_cb_begin_print;
textview_renderer->cb_draw_page = printing_textview_cb_draw_page;
- printing_print_full(parent, textview_renderer, text_view, sel_start, sel_end);
+ printing_print_full(parent, textview_renderer, text_view, sel_start, sel_end, avatar);
g_free(textview_renderer);
}
/* toolbar */
toolbar = gtk_toolbar_new();
-#if (GTK_CHECK_VERSION(2,16,0))
gtk_orientable_set_orientation(GTK_ORIENTABLE(toolbar), GTK_ORIENTATION_HORIZONTAL);
-#else
- gtk_toolbar_set_orientation(GTK_TOOLBAR(toolbar), GTK_ORIENTATION_HORIZONTAL);
-#endif
+
switch (prefs_common.toolbar_style) {
case TOOLBAR_ICON:
gtk_toolbar_set_style(GTK_TOOLBAR(toolbar), GTK_TOOLBAR_ICONS);
gtk_box_pack_start(GTK_BOX(vbox), toolbar, FALSE, FALSE, 0);
-#if !(GTK_CHECK_VERSION(2,12,0))
-#define CLAWS_SET_TOOL_ITEM_TIP(widget,tip) { \
- gtk_tool_item_set_tooltip(GTK_TOOL_ITEM(widget), GTK_TOOLTIPS(tips), \
- tip, NULL); \
-}
-#else
#define CLAWS_SET_TOOL_ITEM_TIP(widget,tip) { \
gtk_tool_item_set_tooltip_text(GTK_TOOL_ITEM(widget), tip); \
}
-#endif
#define TOOLBAR_ITEM(item,text,tooltip,cb,cbdata) { \
item = GTK_WIDGET(gtk_tool_button_new_from_stock(text)); \
_("Previous page"), cb_preview_go_previous, preview_data);
page = gtk_label_new("");
- gtk_widget_set_size_request(page, 100, -1);
preview_data->page_nr_label = page;
TOOLBAR_ITEM(preview_data->next, GTK_STOCK_GO_FORWARD,
preview_data->current_page = preview_data->pages_to_print;
preview_data->context = context;
-#if !GTK_CHECK_VERSION(3, 0, 0)
g_signal_connect(preview_data->area, "expose_event",
G_CALLBACK(cb_preview_expose),
preview_data);
-#else
- g_signal_connect(preview_data->area, "draw",
- G_CALLBACK(cb_preview_expose),
- preview_data);
-#endif
gtk_widget_queue_draw(preview_data->area);
}
gpointer data)
{
PreviewData *preview_data;
- GtkPageOrientation orientation;
GtkPaperSize *paper_size;
gint paper_width;
gint paper_height;
preview_data = (PreviewData*) data;
debug_print("got_page_size\n");
- orientation = gtk_page_setup_get_orientation(page_setup);
paper_size = gtk_page_setup_get_paper_size(page_setup);
paper_width = (gint)(gtk_paper_size_get_width(paper_size, GTK_UNIT_INCH)
* PREVIEW_SCALE);
paper_width, paper_height);
}
-#if !GTK_CHECK_VERSION(3, 0, 0)
static gboolean cb_preview_expose(GtkWidget *widget, GdkEventExpose *event,
gpointer data)
-#else
-static gboolean cb_preview_expose(GtkWidget *widget, cairo_t *event,
- gpointer data)
-#endif
{
PreviewData *preview_data = data;
-#if !GTK_CHECK_VERSION(3, 0, 0)
cairo_t *cr;
-#endif
debug_print("preview_expose (current %p)\n", preview_data->current_page);
-#if !GTK_CHECK_VERSION(3, 0, 0)
cr = gdk_cairo_create(gtk_widget_get_window(preview_data->area));
-#endif
/* background */
cairo_set_source_rgb(cr, 0.5, 0.5, 0.5);
-#if !GTK_CHECK_VERSION(3, 0, 0)
cairo_rectangle(cr, event->area.x, event->area.y, event->area.width, event->area.height);
-#else
- cairo_rectangle(cr, 0, 0, event->area.width, event->area.height);
-#endif
cairo_fill(cr);
/* shadow */
cairo_fill(cr);
gtk_print_context_set_cairo_context(preview_data->context, cr, PREVIEW_SCALE, PREVIEW_SCALE);
-#if !GTK_CHECK_VERSION(3, 0, 0)
cairo_destroy(cr);
-#endif
if (preview_data->current_page) {
preview_data->rendering = TRUE;
PangoFontDescription *desc;
int start, ii;
PangoLayoutIter *iter;
- double start_pos;
gint header_end_pos;
gint num_header_lines;
gint dummy;
page_height = 0;
start = 0;
ii = 0;
- start_pos = 0.;
iter = pango_layout_get_iter(print_data->layout);
/* find the last character of the header */
do {
PangoRectangle logical_rect;
- PangoLayoutLine *line;
PangoAttrShape *attr = NULL;
- int baseline;
if (ii >= start) {
- line = pango_layout_iter_get_line(iter);
-
pango_layout_iter_get_line_extents(iter, NULL, &logical_rect);
- baseline = pango_layout_iter_get_baseline(iter);
if ((attr = g_hash_table_lookup(print_data->images,
GINT_TO_POINTER(pango_layout_iter_get_index(iter)))) != NULL) {
pango_layout_iter_get_line_extents(iter, NULL, &logical_rect);
baseline = pango_layout_iter_get_baseline(iter);
- if (ii == start)
+ if (ii == start) {
start_pos = ((double)logical_rect.y) / PANGO_SCALE;
-
+ }
/* Draw header separator line */
if (ii == 0 && print_data->ypos_line >= 0) {
cairo_surface_t *surface;
}
ii++;
} while(ii < end && (notlast = pango_layout_iter_next_line(iter)));
+
+ if (print_data->avatar && page_nr == 0) {
+ cairo_surface_t *surface;
+ GdkPixbuf *pixbuf = gtk_image_get_pixbuf(print_data->avatar);
+ gdouble startx, starty;
+
+ startx = gtk_print_context_get_width(context)/print_data->zoom;
+
+ startx -= ((double)gdk_pixbuf_get_width(pixbuf));
+
+ starty = start_pos;
+
+ surface = pixbuf_to_surface(pixbuf);
+ cairo_set_source_surface (cr, surface, startx, starty);
+ cairo_paint (cr);
+ cairo_surface_destroy (surface);
+ }
+
pango_layout_iter_free(iter);
debug_print("Sent page %d to printer\n", page_nr+1);
}
attr_color = (PangoAttrColor*) attr;
g_object_get(G_OBJECT(tag), "background-gdk",
&color, NULL);
- if (printing_is_pango_gdk_color_equal(&(attr_color->color),
+ if (color &&
+ printing_is_pango_gdk_color_equal(&(attr_color->color),
color)) {
attr->end_index = printing_text_iter_get_offset_bytes(print_data, &iter);
pango_attr_list_insert(attr_list, attr);
*/
static gint printing_text_iter_get_offset_bytes(PrintData *print_data, const GtkTextIter *iter)
{
- gint off_chars;
gint off_bytes;
gchar *text;
GtkTextIter start;
- off_chars = gtk_text_iter_get_offset(iter);
if (print_data->sel_start < 0 || print_data->sel_end <= print_data->sel_start) {
gtk_text_buffer_get_start_iter(gtk_text_iter_get_buffer(iter), &start);
} else {