From 8cf870c27718e7fa8f3cbe57c839e7ae90635c0d Mon Sep 17 00:00:00 2001 From: JP Rosevear Date: Wed, 24 Apr 2002 21:39:24 +0000 Subject: implement printing (pixbuf_print_height): implement print height 2002-04-24 JP Rosevear * e-cell-pixbuf.c (pixbuf_print): implement printing (pixbuf_print_height): implement print height (e_cell_pixbuf_class_init): set printing virtual methods * e-cell-toggle.c (etog_print): remove clipping, default clipping is done by the table, scale based on toggle height * e-table-item.c (e_table_item_calculate_print_widths): make the scale 1:1 svn path=/trunk/; revision=16577 --- widgets/table/e-cell-pixbuf.c | 50 +++++++++++++++++++++++++++++++++++++++++++ widgets/table/e-cell-toggle.c | 19 ++-------------- widgets/table/e-table-item.c | 2 +- 3 files changed, 53 insertions(+), 18 deletions(-) diff --git a/widgets/table/e-cell-pixbuf.c b/widgets/table/e-cell-pixbuf.c index 9294e4a703..565eae8d8b 100644 --- a/widgets/table/e-cell-pixbuf.c +++ b/widgets/table/e-cell-pixbuf.c @@ -197,6 +197,54 @@ pixbuf_height (ECellView *ecell_view, int model_col, int view_col, int row) return gdk_pixbuf_get_height (pixbuf) + 6; } +/* + * ECell::print method + */ +static void +pixbuf_print (ECellView *ecell_view, GnomePrintContext *context, + int model_col, int view_col, int row, + double width, double height) +{ + GdkPixbuf *pixbuf; + int scale; + + pixbuf = (GdkPixbuf *) e_table_model_value_at (ecell_view->e_table_model, model_col, row); + if (pixbuf == NULL) + return; + scale = gdk_pixbuf_get_height (pixbuf); + + gnome_print_gsave(context); + + gnome_print_translate (context, 0, (height - scale) / 2); + gnome_print_scale (context, scale, scale); + gnome_print_pixbuf (context, pixbuf); + + gnome_print_grestore(context); +} + +static gdouble +pixbuf_print_height (ECellView *ecell_view, GnomePrintContext *context, + int model_col, int view_col, int row, + double width) +{ + GdkPixbuf *pixbuf; + + if (row == -1) { + if (e_table_model_row_count (ecell_view->e_table_model) > 0) { + row = 0; + } else { + return 6; + } + } + + pixbuf = (GdkPixbuf *) e_table_model_value_at (ecell_view->e_table_model, model_col, row); + if (!pixbuf) + return 0; + + /* We give ourselves 3 pixels of padding on either side */ + return gdk_pixbuf_get_height (pixbuf); +} + static gint pixbuf_max_width (ECellView *ecell_view, int model_col, int view_col) { @@ -308,6 +356,8 @@ e_cell_pixbuf_class_init (GtkObjectClass *object_class) ecc->draw = pixbuf_draw; ecc->event = pixbuf_event; ecc->height = pixbuf_height; + ecc->print = pixbuf_print; + ecc->print_height = pixbuf_print_height; ecc->max_width = pixbuf_max_width; parent_class = gtk_type_class (E_CELL_TYPE); diff --git a/widgets/table/e-cell-toggle.c b/widgets/table/e-cell-toggle.c index 269cddc0a4..4458605e6d 100644 --- a/widgets/table/e-cell-toggle.c +++ b/widgets/table/e-cell-toggle.c @@ -311,7 +311,6 @@ etog_print (ECellView *ecell_view, GnomePrintContext *context, { ECellToggle *toggle = E_CELL_TOGGLE(ecell_view->ecell); GdkPixbuf *image; - int scale; const int value = GPOINTER_TO_INT ( e_table_model_value_at (ecell_view->e_table_model, model_col, row)); @@ -323,24 +322,10 @@ etog_print (ECellView *ecell_view, GnomePrintContext *context, gnome_print_gsave(context); - if (gnome_print_moveto(context, 2, 2) == -1) - /* FIXME */; - if (gnome_print_lineto(context, width - 2, 2) == -1) - /* FIXME */; - if (gnome_print_lineto(context, width - 2, height - 2) == -1) - /* FIXME */; - if (gnome_print_lineto(context, 2, height - 2) == -1) - /* FIXME */; - if (gnome_print_lineto(context, 2, 2) == -1) - /* FIXME */; - if (gnome_print_clip(context) == -1) - /* FIXME */; - image = toggle->images[value]; - scale = MIN (width - 4, height - 4); - gnome_print_translate (context, 2, (height - scale) / 2); - gnome_print_scale (context, scale, scale); + gnome_print_translate (context, 0, (height - toggle->height) / 2); + gnome_print_scale (context, toggle->height, toggle->height); gnome_print_pixbuf (context, image); gnome_print_grestore(context); diff --git a/widgets/table/e-table-item.c b/widgets/table/e-table-item.c index 754234868e..10fc205625 100644 --- a/widgets/table/e-table-item.c +++ b/widgets/table/e-table-item.c @@ -3197,7 +3197,7 @@ e_table_item_calculate_print_widths (ETableHeader *eth, gdouble width) double extra; double expansion; int last_resizable = -1; - gdouble scale = 300.0L / 70.0L; + gdouble scale = 1.0L; gdouble *widths = g_new(gdouble, e_table_header_count(eth)); /* - 1 to account for the last pixel border. */ extra = width - 1; -- cgit v1.2.3