X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;ds=inline;f=ps%2Fps-document.c;h=fd6fc4a62d5785fcf250a806cda5b5e441f465d8;hb=8dbcee6be49013edc9821096288e2c078169e349;hp=7619f03fc3f55569b68dbd86b2c6d42450c7f3af;hpb=9e5430d1335c285c8a1150d6ba04773f77b4d715;p=evince.git diff --git a/ps/ps-document.c b/ps/ps-document.c index 7619f03f..fd6fc4a6 100644 --- a/ps/ps-document.c +++ b/ps/ps-document.c @@ -149,9 +149,7 @@ The DONE message indicates that ghostscript has finished processing. #include #include -#include "ev-document.h" #include "ps-document.h" -#include "ps.h" #include "gsdefaults.h" #ifdef HAVE_LOCALE_H @@ -175,6 +173,11 @@ The DONE message indicates that ghostscript has finished processing. enum { INTERPRETER_MESSAGE, INTERPRETER_ERROR, LAST_SIGNAL }; +enum { + PROP_0, + PROP_TITLE +}; + /* structure to describe section of file to send to ghostscript */ struct record_list { FILE *fp; @@ -269,6 +272,9 @@ ps_document_init(PSDocument * gs) gs->right_margin = 0; gs->bottom_margin = 0; + gs->page_x_offset = 0; + gs->page_y_offset = 0; + /* Set user defined defaults */ gs->override_orientation = gtk_gs_defaults_get_override_orientation(); gs->fallback_orientation = gtk_gs_defaults_get_orientation(); @@ -282,6 +288,41 @@ ps_document_init(PSDocument * gs) gs->gs_status = _("No document loaded."); } +static void +ps_document_set_property (GObject *object, + guint prop_id, + const GValue *value, + GParamSpec *pspec) +{ + switch (prop_id) + + { + case PROP_TITLE: + /* read only */ + break; + } +} + +static void +ps_document_get_property (GObject *object, + guint prop_id, + GValue *value, + GParamSpec *pspec) +{ + PSDocument *ps = PS_DOCUMENT (object); + + switch (prop_id) + { + case PROP_TITLE: + if (ps->doc) { + g_value_set_string (value, ps->doc->title); + } else { + g_value_set_string (value, NULL); + } + break; + } +} + static void ps_document_class_init(PSDocumentClass * klass) { @@ -292,6 +333,8 @@ ps_document_class_init(PSDocumentClass * klass) gs_class = klass; object_class->finalize = ps_document_finalize; + object_class->get_property = ps_document_get_property; + object_class->set_property = ps_document_set_property; /* Create atoms */ klass->gs_atom = gdk_atom_intern("GHOSTVIEW", FALSE); @@ -300,6 +343,8 @@ ps_document_class_init(PSDocumentClass * klass) klass->string_atom = gdk_atom_intern("STRING", FALSE); gtk_gs_defaults_load(); + + g_object_class_override_property (object_class, PROP_TITLE, "title"); } /* Clean all memory and temporal files */ @@ -1296,6 +1341,8 @@ document_load(PSDocument * gs, const gchar * fname) /* we grab the vital statistics!!! */ gs->doc = psscan(gs->gs_psfile, gs->respect_eof, filename); + g_object_notify (G_OBJECT (gs), "title"); + if(gs->doc == NULL) { /* File does not seem to be a Postscript one */ gchar buf[1024]; @@ -1454,6 +1501,8 @@ ps_document_goto_page(PSDocument * gs, gint page) if(page == gs->current_page && !gs->changed) return TRUE; + ps_document_set_page_size(gs, -1, page); + if(!is_interpreter_ready(gs)) ps_document_enable_interpreter(gs); @@ -1648,6 +1697,15 @@ ps_document_load (EvDocument *document, return result; } +static gboolean +ps_document_save (EvDocument *document, + const char *uri, + GError **error) +{ + g_warning ("ps_document_save not implemented"); /* FIXME */ + return TRUE; +} + static int ps_document_get_n_pages (EvDocument *document) { @@ -1718,13 +1776,20 @@ ps_document_set_page_offset (EvDocument *document, int x, int y) { + PSDocument *gs = PS_DOCUMENT (document); + + gs->page_x_offset = x; + gs->page_y_offset = y; } static void ps_document_get_page_size (EvDocument *document, - int *width, - int *height) + int page, + int *width, + int *height) { + /* Post script documents never vary in size */ + PSDocument *gs = PS_DOCUMENT (document); if (width) { @@ -1744,6 +1809,8 @@ ps_document_render (EvDocument *document, int clip_height) { PSDocument *gs = PS_DOCUMENT (document); + GdkRectangle page; + GdkRectangle draw; GdkGC *gc; if (gs->pstarget == NULL || @@ -1751,21 +1818,49 @@ ps_document_render (EvDocument *document, return; } + page.x = gs->page_x_offset; + page.y = gs->page_y_offset; + page.width = gs->width; + page.height = gs->height; + + draw.x = clip_x; + draw.y = clip_y; + draw.width = clip_width; + draw.height = clip_height; + gc = gdk_gc_new (gs->pstarget); gdk_draw_drawable (gs->pstarget, gc, gs->bpixmap, - clip_x, clip_y, - clip_x, clip_y, - clip_width, clip_height); + draw.x - page.x, draw.y - page.y, + draw.x, draw.y, + draw.width, draw.height); g_object_unref (gc); } +static char * +ps_document_get_text (EvDocument *document, GdkRectangle *rect) +{ + g_warning ("ps_document_get_text not implemented"); /* FIXME ? */ + return NULL; +} + +static EvLink * +ps_document_get_link (EvDocument *document, + int x, + int y) +{ + return NULL; +} + static void ps_document_document_iface_init (EvDocumentIface *iface) { iface->load = ps_document_load; + iface->save = ps_document_save; + iface->get_text = ps_document_get_text; + iface->get_link = ps_document_get_link; iface->get_n_pages = ps_document_get_n_pages; iface->set_page = ps_document_set_page; iface->get_page = ps_document_get_page;