// gcw - PLplot Gnome Canvas Widget device driver. // // Copyright (C) 2004, 2005 Thomas J. Duck // Copyright (C) 2004 Rafael Laboissiere // All rights reserved. // // NOTICE // // This library 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; either // version 2.1 of the License, or (at your option) any later version. // // This library 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 // Lesser General Public License for more details. // // You should have received a copy of the GNU Lesser General Public // License along with this library; if not, write to the Free Software // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 // USA // #ifndef __GCW_H__ #define __GCW_H__ #include "plDevs.h" #include "plplotP.h" #include "drivers.h" #include #include #include #include #include #include #include #include // #define DEBUG_GCW_1 // #define DEBUG_GCW_2 // #define ASSERT_GCW //-------------------------------------------------------------------------- // GcwPLdev - the PLplot device structure for the GCW driver typedef struct { GnomeCanvas * canvas; // The canvas to draw on GdkPixmap * background; // The background GdkGC * gc; // A graphics context for the pixmap GnomeCanvasGroup* group_visible; // Visible group, removed at next eop GnomeCanvasGroup* group_hidden; // Hidden group --> visible at eop GnomeCanvasGroup* group_persistent; // Persistent group, at from and never erased gboolean use_persistence; // Flags the persistent group should be used, // and that it and the background should not be // erased when the page is advanced. // GtkWidget * window; // A window used in standalone mode GtkWidget * notebook; // A notebook pager in the window GtkWidget * statusbar; // A statusbar for the window GtkWidget * filew; // A file widget chooser when Save is pressed guint32 color; // Current pen color GdkColor bgcolor; // Background color (shouldn't change) GdkColormap* colormap; // The gdk colormap for the canvas PLINT width; // Width of the canvas in device pixels PLINT height; // Height of the canvas in device pixels PLINT pen_color; // Current pen color PLINT pen_width; // Current pen width gboolean use_pixmap; // Flags pixmap use for lines and fills gboolean pixmap_has_data; // Flags that the pixmap has data gboolean plstate_width; // Flags indicating change of state before gboolean plstate_color0; // device is fully initialized gboolean plstate_color1; gboolean allow_resize; // Flags whether device resizing is allowed } GcwPLdev; //-------------------------------------------------------------------------- // Physical dimension constants used by the driver // Virtual coordinate scaling parameter, used to do calculations at // higher resolution. Chosen to be 32 for consistency with the PLplot // metafile (see plplotP.h). // // The trick here is to do everything in device coordinates on the driver // side, but report/receive everything in virtual coordinates to/from the // PLplot core. // #define VSCALE ( 32. ) // pixels per mm #define DEVICE_PIXELS_PER_MM ( 3.4 ) #define VIRTUAL_PIXELS_PER_MM ( DEVICE_PIXELS_PER_MM * VSCALE ) // mm per inch #define MM_PER_IN ( 25.4 ) // pixels per inch #define DEVICE_PIXELS_PER_IN ( DEVICE_PIXELS_PER_MM * MM_PER_IN ) #define VIRTUAL_PIXELS_PER_IN ( VIRTUAL_PIXELS_PER_MM * MM_PER_IN ) // Default dimensions of the canvas (in inches) #define CANVAS_WIDTH ( 10. ) #define CANVAS_HEIGHT ( 7.5 ) // The zoom factor for 100% zoom in #define ZOOM100 ( 1.0 ) #define ZOOMSTEP ( 1.25 ) //-------------------------------------------------------------------------- // GCW "Gnome Canvas Widget" Library prototypes (see gcw-lib.c) // Public_functions void gcw_use_text( PLINT use_text ); void gcw_use_pixmap( PLINT use_pixmap ); void gcw_use_hrshsym( PLINT use_hrshsym ); // Private functions void gcw_debug( char* msg ); PLDLLIMPEXP_GNOME2 void gcw_set_gdk_color(); PLDLLIMPEXP_GNOME2 void gcw_clear_background(); PLDLLIMPEXP_GNOME2 void gcw_init_canvas( GnomeCanvas* canvas ); PLDLLIMPEXP_GNOME2 void gcw_install_canvas( GnomeCanvas *canvas ); PLDLLIMPEXP_GNOME2 void gcw_set_device_size( PLINT width, PLINT height ); void gcw_set_canvas_size( GnomeCanvas* canvas, PLINT width, PLINT height ); void gcw_set_canvas_zoom( GnomeCanvas* canvas, PLFLT magnification ); void gcw_use_persistence( PLINT use_persistence ); #endif // __GCW_H__