X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;f=ps%2Fps-document.c;h=91acc9ac89e8333281f32fbe9a299b51ac24af14;hb=8469ab1bef22b59caa4c69293d8c42e2dd7ad6c6;hp=f9663e5ab1374946a013b08ca99232cb187aaded;hpb=9842eecb4b89468c36cf87a57a04eeb1918de671;p=evince.git diff --git a/ps/ps-document.c b/ps/ps-document.c index f9663e5a..91acc9ac 100644 --- a/ps/ps-document.c +++ b/ps/ps-document.c @@ -137,8 +137,6 @@ ps_document_init (PSDocument *gs) gs->ps_export_pagelist = NULL; gs->ps_export_filename = NULL; - - gs->orientation = GTK_GS_ORIENTATION_NONE; } static void @@ -215,9 +213,11 @@ push_pixbuf (PSDocument *gs) cmap = gdk_window_get_colormap (gs->pstarget); gdk_drawable_get_size (gs->bpixmap, &width, &height); + LOG ("Get from drawable\n"); pixbuf = gdk_pixbuf_get_from_drawable (NULL, gs->bpixmap, cmap, 0, 0, 0, 0, width, height); + LOG ("Get from drawable done\n"); g_signal_emit_by_name (gs, "render_finished", pixbuf); g_object_unref (pixbuf); } @@ -247,6 +247,7 @@ ps_document_widget_event (GtkWidget *widget, GdkEvent *event, gpointer data) gs->busy = FALSE; push_pixbuf (gs); + LOG ("Pixbuf pushed"); } return TRUE; @@ -303,7 +304,7 @@ get_ydpi (PSDocument *gs) } static void -setup_pixmap (PSDocument *gs, int page, double scale) +setup_pixmap (PSDocument *gs, int page, double scale, int rotation) { GdkGC *fill; GdkColor white = { 0, 0xFFFF, 0xFFFF, 0xFFFF }; /* pixel, r, g, b */ @@ -312,8 +313,14 @@ setup_pixmap (PSDocument *gs, int page, double scale) int pixmap_width, pixmap_height; ev_document_get_page_size (EV_DOCUMENT (gs), page, &width, &height); - pixmap_width = width * scale + 0.5; - pixmap_height = height * scale + 0.5; + + if (rotation == 90 || rotation == 270) { + pixmap_height = width * scale + 0.5; + pixmap_width = height * scale + 0.5; + } else { + pixmap_width = width * scale + 0.5; + pixmap_height = height * scale + 0.5; + } if(gs->bpixmap) { int w, h; @@ -430,49 +437,22 @@ get_page_box (PSDocument *gs, int page, int *urx, int *ury, int *llx, int *lly) *lly = new_lly; } -static int -get_page_orientation (PSDocument *gs, int page) -{ - int orientation; - - orientation = GTK_GS_ORIENTATION_NONE; - - if (gs->structured_doc) { - orientation = gs->doc->pages[page].orientation; - } - if (orientation == GTK_GS_ORIENTATION_NONE) { - orientation = gs->doc->default_page_orientation; - } - if (orientation == GTK_GS_ORIENTATION_NONE) { - orientation = gs->doc->orientation; - } - if (orientation == GTK_GS_ORIENTATION_NONE) { - orientation = GTK_GS_ORIENTATION_PORTRAIT; - } - if (gs->orientation != GTK_GS_ORIENTATION_NONE) { - orientation = gs->orientation; - } - - return orientation; -} - static void -setup_page (PSDocument *gs, int page, double scale) +setup_page (PSDocument *gs, int page, double scale, int rotation) { gchar *buf; - int urx, ury, llx, lly, orientation; char scaled_xdpi[G_ASCII_DTOSTR_BUF_SIZE]; char scaled_ydpi[G_ASCII_DTOSTR_BUF_SIZE]; + int urx, ury, llx, lly; LOG ("Setup the page"); get_page_box (gs, page, &urx, &ury, &llx, &lly); - orientation = get_page_orientation (gs, page); g_ascii_dtostr (scaled_xdpi, G_ASCII_DTOSTR_BUF_SIZE, get_xdpi (gs) * scale); g_ascii_dtostr (scaled_ydpi, G_ASCII_DTOSTR_BUF_SIZE, get_ydpi (gs) * scale); buf = g_strdup_printf ("%ld %d %d %d %d %d %s %s %d %d %d %d", - 0L, orientation * 90, llx, lly, urx, ury, + 0L, rotation, llx, lly, urx, ury, scaled_xdpi, scaled_ydpi, 0, 0, 0, 0); LOG ("GS property %s", buf); @@ -904,19 +884,13 @@ check_filecompressed (PSDocument * gs) /* sucessfully uncompressed file */ gs->gs_filename_unc = filename_unc; } else { - gchar *utf8 = NULL; + gchar *filename_dsp; gchar *msg; /* report error */ - utf8 = g_locale_to_utf8 (gs->gs_filename, -1, NULL, NULL, NULL); - - if (utf8) { - msg = g_strdup_printf (_("Error while decompressing file %s:\n"), utf8); - } else { - msg = g_strdup (_("Error while decompressing file\n")); - } - - g_free (utf8); + filename_dsp = g_filename_display_name (gs->gs_filename); + msg = g_strdup_printf (_("Error while decompressing file %s:\n"), filename_dsp); + g_free (filename_dsp); interpreter_failed (gs, msg); g_free (msg); @@ -971,18 +945,12 @@ document_load (PSDocument *gs, const gchar *fname) gchar *filename = NULL; if (!file_readable(fname)) { - gchar *utf8 = NULL; + gchar *filename_dsp; gchar *msg; - utf8 = g_locale_to_utf8 (fname, -1, NULL, NULL, NULL); - - if (utf8) { - msg = g_strdup_printf (_("Cannot open file %s.\n"), utf8); - } else { - msg = g_strdup (_("Cannot open file.\n")); - } - - g_free (utf8); + filename_dsp = g_filename_display_name (fname); + msg = g_strdup_printf (_("Cannot open file %s.\n"), filename_dsp); + g_free (filename_dsp); interpreter_failed (gs, msg); g_free (msg); @@ -1097,22 +1065,16 @@ ps_document_load (EvDocument *document, result = document_load (PS_DOCUMENT (document), filename); if (!result) { - gchar *utf8 = NULL; + gchar *filename_dsp; - utf8 = g_locale_to_utf8 (filename, -1, NULL, NULL, NULL); + filename_dsp = g_filename_display_name (filename); - if (utf8) { - g_set_error (error, G_FILE_ERROR, - G_FILE_ERROR_FAILED, - _("Failed to load document '%s'"), - utf8); - } else { - g_set_error (error, G_FILE_ERROR, - G_FILE_ERROR_FAILED, - _("Failed to load document")); - } + g_set_error (error, G_FILE_ERROR, + G_FILE_ERROR_FAILED, + _("Failed to load document '%s'"), + filename_dsp); - g_free (utf8); + g_free (filename_dsp); } g_free (filename); @@ -1197,35 +1159,16 @@ ps_document_get_page_size (EvDocument *document, double *height) { PSDocument *gs = PS_DOCUMENT (document); - int w, h; - int urx, ury, llx, lly, orientation; + int urx, ury, llx, lly; get_page_box (PS_DOCUMENT (document), page, &urx, &ury, &llx, &lly); - orientation = get_page_orientation (PS_DOCUMENT (document), page); - - switch (orientation) { - case GTK_GS_ORIENTATION_PORTRAIT: - case GTK_GS_ORIENTATION_UPSIDEDOWN: - w = (urx - llx) / 72.0 * get_xdpi (gs) + 0.5; - h = (ury - lly) / 72.0 * get_ydpi (gs) + 0.5; - break; - case GTK_GS_ORIENTATION_LANDSCAPE: - case GTK_GS_ORIENTATION_SEASCAPE: - w = (ury - lly) / 72.0 * get_xdpi (gs) + 0.5; - h = (urx - llx) / 72.0 * get_ydpi (gs) + 0.5; - break; - default: - w = h = 0; - g_assert_not_reached (); - break; - } if (width) { - *width = w; + *width = (urx - llx) / 72.0 * get_xdpi (gs) + 0.5; } if (height) { - *height = h; + *height = (ury - lly) / 72.0 * get_ydpi (gs) + 0.5; } } @@ -1236,7 +1179,7 @@ ps_document_can_get_text (EvDocument *document) } static void -ps_async_renderer_render_pixbuf (EvAsyncRenderer *renderer, int page, double scale) +ps_async_renderer_render_pixbuf (EvAsyncRenderer *renderer, int page, double scale, int rotation) { PSDocument *gs = PS_DOCUMENT (renderer); @@ -1252,8 +1195,8 @@ ps_async_renderer_render_pixbuf (EvAsyncRenderer *renderer, int page, double sca gs); } - setup_pixmap (gs, page, scale); - setup_page (gs, page, scale); + setup_pixmap (gs, page, scale, rotation); + setup_page (gs, page, scale, rotation); render_page (gs, page); }