/* * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program; if not, see . * * * Authors: * Chris Lahey * * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com) * */ #ifdef HAVE_CONFIG_H #include #endif #include #include "e-printable.h" #include "e-marshal.h" #define EP_CLASS(e) ((EPrintableClass *)((GObject *)e)->class) G_DEFINE_TYPE ( EPrintable, e_printable, G_TYPE_INITIALLY_UNOWNED) enum { PRINT_PAGE, DATA_LEFT, RESET, HEIGHT, WILL_FIT, LAST_SIGNAL }; static guint e_printable_signals[LAST_SIGNAL] = { 0, }; static void e_printable_class_init (EPrintableClass *class) { GObjectClass *object_class = G_OBJECT_CLASS (class); e_printable_signals[PRINT_PAGE] = g_signal_new ( "print_page", G_OBJECT_CLASS_TYPE (object_class), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (EPrintableClass, print_page), NULL, NULL, e_marshal_NONE__OBJECT_DOUBLE_DOUBLE_BOOLEAN, G_TYPE_NONE, 4, G_TYPE_OBJECT, G_TYPE_DOUBLE, G_TYPE_DOUBLE, G_TYPE_BOOLEAN); e_printable_signals[DATA_LEFT] = g_signal_new ( "data_left", G_OBJECT_CLASS_TYPE (object_class), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (EPrintableClass, data_left), NULL, NULL, e_marshal_BOOLEAN__NONE, G_TYPE_BOOLEAN, 0, G_TYPE_NONE); e_printable_signals[RESET] = g_signal_new ( "reset", G_OBJECT_CLASS_TYPE (object_class), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (EPrintableClass, reset), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0, G_TYPE_NONE); e_printable_signals[HEIGHT] = g_signal_new ( "height", G_OBJECT_CLASS_TYPE (object_class), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (EPrintableClass, height), NULL, NULL, e_marshal_DOUBLE__OBJECT_DOUBLE_DOUBLE_BOOLEAN, G_TYPE_DOUBLE, 4, G_TYPE_OBJECT, G_TYPE_DOUBLE, G_TYPE_DOUBLE, G_TYPE_BOOLEAN); e_printable_signals[WILL_FIT] = g_signal_new ( "will_fit", G_OBJECT_CLASS_TYPE (object_class), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (EPrintableClass, will_fit), NULL, NULL, e_marshal_BOOLEAN__OBJECT_DOUBLE_DOUBLE_BOOLEAN, G_TYPE_BOOLEAN, 4, G_TYPE_OBJECT, G_TYPE_DOUBLE, G_TYPE_DOUBLE, G_TYPE_BOOLEAN); class->print_page = NULL; class->data_left = NULL; class->reset = NULL; class->height = NULL; class->will_fit = NULL; } static void e_printable_init (EPrintable *e_printable) { /* nothing to do */ } EPrintable * e_printable_new (void) { return g_object_new (E_TYPE_PRINTABLE, NULL); } void e_printable_print_page (EPrintable *e_printable, GtkPrintContext *context, gdouble width, gdouble height, gboolean quantized) { g_return_if_fail (E_IS_PRINTABLE (e_printable)); g_signal_emit ( e_printable, e_printable_signals[PRINT_PAGE], 0, context, width, height, quantized); } gboolean e_printable_data_left (EPrintable *e_printable) { gboolean ret_val; g_return_val_if_fail (E_IS_PRINTABLE (e_printable), FALSE); g_signal_emit ( e_printable, e_printable_signals[DATA_LEFT], 0, &ret_val); return ret_val; } void e_printable_reset (EPrintable *e_printable) { g_return_if_fail (E_IS_PRINTABLE (e_printable)); g_signal_emit ( e_printable, e_printable_signals[RESET], 0); } gdouble e_printable_height (EPrintable *e_printable, GtkPrintContext *context, gdouble width, gdouble max_height, gboolean quantized) { gdouble ret_val; g_return_val_if_fail (E_IS_PRINTABLE (e_printable), -1); g_signal_emit ( e_printable, e_printable_signals[HEIGHT], 0, context, width, max_height, quantized, &ret_val); return ret_val; } gboolean e_printable_will_fit (EPrintable *e_printable, GtkPrintContext *context, gdouble width, gdouble max_height, gboolean quantized) { gboolean ret_val; g_return_val_if_fail (E_IS_PRINTABLE (e_printable), FALSE); g_signal_emit ( e_printable, e_printable_signals[WILL_FIT], 0, context, width, max_height, quantized, &ret_val); return ret_val; }