-gfloat
-gtk_gs_get_zoom(GtkGS * gs)
-{
- g_return_val_if_fail(gs != NULL, 0.0);
- g_return_val_if_fail(GTK_IS_GS(gs), 0.0);
-
- return gs->zoom_factor;
-}
-
-gfloat
-gtk_gs_zoom_to_fit(GtkGS * gs, gboolean fit_width)
-{
- gint new_y;
- gfloat new_zoom;
- guint avail_w, avail_h;
-
- g_return_val_if_fail(gs != NULL, 0.0);
- g_return_val_if_fail(GTK_IS_GS(gs), 0.0);
-
- avail_w = (gs->avail_w > 0) ? gs->avail_w : gs->width;
- avail_h = (gs->avail_h > 0) ? gs->avail_h : gs->height;
-
- new_zoom = ((gfloat) avail_w) / ((gfloat) gs->width) * gs->zoom_factor;
- if(!fit_width) {
- new_y = new_zoom * ((gfloat) gs->height) / gs->zoom_factor;
- if(new_y > avail_h)
- new_zoom = ((gfloat) avail_h) / ((gfloat) gs->height) * gs->zoom_factor;
- }
-
- return new_zoom;
-}
-
-gboolean
-gtk_gs_set_default_orientation(GtkGS * gs, gint orientation)
-{
- gint iOldOrientation;
-
- g_return_val_if_fail(gs != NULL, FALSE);
- g_return_val_if_fail(GTK_IS_GS(gs), FALSE);
- g_return_val_if_fail((orientation == GTK_GS_ORIENTATION_PORTRAIT) ||
- (orientation == GTK_GS_ORIENTATION_LANDSCAPE) ||
- (orientation == GTK_GS_ORIENTATION_UPSIDEDOWN) ||
- (orientation == GTK_GS_ORIENTATION_SEASCAPE), FALSE);
-
- iOldOrientation = gtk_gs_get_orientation(gs);
- gs->fallback_orientation = orientation;
-
- /* We are setting the fallback orientation */
- if(iOldOrientation != gtk_gs_get_orientation(gs)) {
- gs->changed = TRUE;
- set_up_page(gs);
- return TRUE;
- }
-
- return FALSE;
-}
-
-gint
-gtk_gs_get_default_orientation(GtkGS * gs)
-{
- g_return_val_if_fail(gs != NULL, -1);
- g_return_val_if_fail(GTK_IS_GS(gs), -1);
-
- return gs->fallback_orientation;
-}
-
-gint
-gtk_gs_get_orientation(GtkGS * gs)
-{
- g_return_val_if_fail(gs != NULL, -1);
- g_return_val_if_fail(GTK_IS_GS(gs), -1);
-
- if(gs->doc) {
- if(gs->structured_doc) {
- if(gs->doc->pages[MAX(gs->current_page, 0)].orientation !=
- GTK_GS_ORIENTATION_NONE)
- gs->real_orientation =
- gs->doc->pages[MAX(gs->current_page, 0)].orientation;
- else
- gs->real_orientation = gs->doc->default_page_orientation;
- }
-
- if(gs->real_orientation == GTK_GS_ORIENTATION_NONE)
- gs->real_orientation = gs->doc->orientation;
- }
-
- if(gs->override_orientation ||
- gs->real_orientation == GTK_GS_ORIENTATION_NONE)
- return gs->fallback_orientation;
- else
- return gs->real_orientation;
-}
-
-void
-gtk_gs_set_default_size(GtkGS * gs, gint size)
-{
- g_return_if_fail(gs != NULL);
- g_return_if_fail(GTK_IS_GS(gs));
-
- gs->default_size = size;
- gtk_gs_set_page_size(gs, -1, gs->current_page);
-}
-
-gint
-gtk_gs_get_default_size(GtkGS * gs)
-{
- g_return_val_if_fail(gs != NULL, -1);
- g_return_val_if_fail(GTK_IS_GS(gs), -1);
-
- return gs->default_size;
-}
-
-void
-gtk_gs_set_respect_eof(GtkGS * gs, gboolean f)
-{
- g_return_if_fail(gs != NULL);
- g_return_if_fail(GTK_IS_GS(gs));
-
- if(gs->respect_eof == f)
- return;
-
- gs->respect_eof = f;
- gtk_gs_set_page_size(gs, -1, gs->current_page);
-}
-
-gint
-gtk_gs_get_respect_eof(GtkGS * gs)
-{
- g_return_val_if_fail(gs != NULL, -1);
- g_return_val_if_fail(GTK_IS_GS(gs), -1);
-
- return gs->respect_eof;
-}
-
-void
-gtk_gs_set_antialiasing(GtkGS * gs, gboolean f)
-{
- g_return_if_fail(gs != NULL);
- g_return_if_fail(GTK_IS_GS(gs));
-
- if(gs->antialiased == f)
- return;
-
- gs->antialiased = f;
- gs->changed = TRUE;
- start_interpreter(gs);
- gtk_gs_goto_page(gs, gs->current_page);
-}
-
-gint
-gtk_gs_get_antialiasing(GtkGS * gs)
-{
- g_return_val_if_fail(gs != NULL, -1);
- g_return_val_if_fail(GTK_IS_GS(gs), -1);
-
- return gs->antialiased;
-}
-
-const gchar *
-gtk_gs_get_document_title(GtkGS * gs)
-{
- g_return_val_if_fail(gs != NULL, NULL);
- g_return_val_if_fail(GTK_IS_GS(gs), NULL);
-
- if(gs->doc && gs->doc->title)
- return gs->doc->title;
-
- return NULL;
-}
-
-guint
-gtk_gs_get_document_numpages(GtkGS * widget)
-{
- g_return_val_if_fail(widget != NULL, 0);
- g_return_val_if_fail(GTK_IS_GS(widget), 0);
-
- if(widget->doc)
- return widget->doc->numpages;
-
- return 0;
-}
-
-const gchar *
-gtk_gs_get_document_page_label(GtkGS * widget, int page)
-{
- g_return_val_if_fail(widget != NULL, NULL);
- g_return_val_if_fail(GTK_IS_GS(widget), NULL);
-
- if(widget->doc && widget->doc->pages && (widget->doc->numpages >= page))
- return widget->doc->pages[page - 1].label;
-
- return NULL;
-}
-
-gint
-gtk_gs_get_size_index(const gchar * string, GtkGSPaperSize * size)
-{
- guint idx = 0;
-
- while(size[idx].name != NULL) {
- if(strcmp(size[idx].name, string) == 0)
- return idx;
- idx++;
- }
-
- return -1;
-}
-
-gchar *
-gtk_gs_get_postscript(GtkGS * gs, gint * pages)
-{
- GtkGSDocSink *sink;
- gchar *doc;
- gboolean free_pages = FALSE;
-
- if(pages == NULL) {
- if(!gs->structured_doc) {
- FILE *f;
- struct stat sb;
-
- if(stat(GTK_GS_GET_PS_FILE(gs), &sb))
- return NULL;
- doc = g_new(gchar, sb.st_size);
- if(!doc)
- return NULL;
- f = fopen(GTK_GS_GET_PS_FILE(gs), "r");
- if(NULL != f && fread(doc, sb.st_size, 1, f) != 1) {
- g_free(doc);
- doc = NULL;
- }
- if(NULL != f)
- fclose(f);
- return doc;
- }
- else {
- int i, n = gtk_gs_get_page_count(gs);
- pages = g_new0(gint, n);
- for(i = 0; i < n; i++)
- pages[i] = TRUE;
- free_pages = TRUE;
- }
- }
-
- sink = gtk_gs_doc_sink_new();
-
- if(GTK_GS_IS_PDF(gs)) {
- gchar *tmpn = g_strconcat(g_get_tmp_dir(), "/ggvXXXXXX", NULL);
- gchar *cmd, *fname;
- int tmpfd;
-
- if((tmpfd = mkstemp(tmpn)) < 0) {
- g_free(tmpn);
- return NULL;
- }
- close(tmpfd);
- fname = g_shell_quote (gs->gs_filename_unc ?
- gs->gs_filename_unc : gs->gs_filename);
- cmd = g_strdup_printf(gtk_gs_defaults_get_convert_pdf_cmd(), tmpn, fname);
- g_free(fname);
- if((system(cmd) == 0) && file_readable(tmpn)) {
- GObject *tmp_gs;
- tmp_gs = gtk_gs_new_from_file(NULL, NULL, tmpn);
- if(NULL != tmp_gs) {
- if(GTK_GS(tmp_gs)->loaded)
- pscopydoc(sink, tmpn, GTK_GS(tmp_gs)->doc, pages);
- g_object_unref(tmp_gs);
- }
- }
- g_free(cmd);
- g_free(tmpn);
- }
- else {
- /* Use uncompressed file if necessary */
- pscopydoc(sink, GTK_GS_GET_PS_FILE(gs), gs->doc, pages);
- }
- if(free_pages)
- g_free(pages);
- doc = gtk_gs_doc_sink_get_buffer(sink);
- gtk_gs_doc_sink_free(sink);
- return doc;
-}
-
-void
-gtk_gs_set_zoom_mode(GtkGS * gs, GtkGSZoomMode zoom_mode)
-{
- if(zoom_mode != gs->zoom_mode) {
- gs->zoom_mode = zoom_mode;
- gtk_gs_set_zoom(gs, 1.0);
- }
- gtk_gs_goto_page(gs, gs->current_page);
-}
-
-GtkGSZoomMode
-gtk_gs_get_zoom_mode(GtkGS * gs)
-{
- return gs->zoom_mode;
-}
-
-void
-gtk_gs_set_available_size(GtkGS * gs, guint avail_w, guint avail_h)
-{
- gs->avail_w = avail_w;
- gs->avail_h = avail_h;
- if(gs->zoom_mode != GTK_GS_ZOOM_ABSOLUTE) {
- gtk_gs_set_zoom(gs, 0.0);
- }
-}
-