diff options
author | JP Rosevear <jpr@ximian.com> | 2002-04-25 05:39:24 +0800 |
---|---|---|
committer | JP Rosevear <jpr@src.gnome.org> | 2002-04-25 05:39:24 +0800 |
commit | 8cf870c27718e7fa8f3cbe57c839e7ae90635c0d (patch) | |
tree | 3397ba104b2c840aa8ca8e892567f450afee9d41 /widgets/table/e-cell-pixbuf.c | |
parent | 0448dc0fcc6eac15a283d0fee096a23cece61a6c (diff) | |
download | gsoc2013-evolution-8cf870c27718e7fa8f3cbe57c839e7ae90635c0d.tar.gz gsoc2013-evolution-8cf870c27718e7fa8f3cbe57c839e7ae90635c0d.tar.zst gsoc2013-evolution-8cf870c27718e7fa8f3cbe57c839e7ae90635c0d.zip |
implement printing (pixbuf_print_height): implement print height
2002-04-24 JP Rosevear <jpr@ximian.com>
* 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
Diffstat (limited to 'widgets/table/e-cell-pixbuf.c')
-rw-r--r-- | widgets/table/e-cell-pixbuf.c | 50 |
1 files changed, 50 insertions, 0 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); |