]> www.fi.muni.cz Git - evince.git/blobdiff - pdf/xpdf/gpdf.cc
More bits.
[evince.git] / pdf / xpdf / gpdf.cc
index 02103cb2e0cc089eb63a900d91d8ae53c1a3dd3e..5eff140135117bc259a96d241574dffde11de882 100644 (file)
@@ -1,8 +1,9 @@
 //========================================================================
 //
-// xpdf.cc
+// gpdf.cc
 //
 // Copyright 1996 Derek B. Noonburg
+// Copyright 1999 Michael Meeks.
 // Copyright 1999 Miguel de Icaza
 //
 //========================================================================
@@ -12,7 +13,9 @@
 #include <stdlib.h>
 #include <stddef.h>
 #include <string.h>
+#define GString G_String
 #include <gnome.h>
+#undef  GString 
 #include "gtypes.h"
 #include "GString.h"
 #include "parseargs.h"
 #include "Page.h"
 #include "Link.h"
 #include "PDFDoc.h"
-#include "XOutputDev.h"
+#include "GOutputDev.h"
 #include "PSOutputDev.h"
 #include "TextOutputDev.h"
 #include "Params.h"
 #include "Error.h"
 #include "config.h"
 
+GBool printCommands = gFalse;
+gint  gpdf_debug;
+poptContext ctx;
+
+#define DOC_ROOT_MAGIC 0xad3f556d
+struct DOC_ROOT {
+  guint32        magic;
+  GString        *title;
+  PDFDoc         *pdf;
+  GtkWidget      *toplevel;
+  GtkWidget      *table;
+  GnomeAppBar    *appbar;
+  GtkDrawingArea *area;
+  GdkPixmap      *pixmap;
+  OutputDev      *out;
+  GdkColor        paper;
+};
+
+DOC_ROOT *hack_global = NULL;
+
+static void
+crummy_cmd (GtkWidget *widget, DOC_ROOT *tmp)
+{
+  printf ("Crummy\n");
+}
+
+
+const struct poptOption gpdf_popt_options [] = {
+  { "debug", '\0', POPT_ARG_INT, &gpdf_debug, 0,
+    N_("Enables some debugging functions"), N_("LEVEL") },
+  { NULL, '\0', 0, NULL, 0 }
+};
+
+
+static GnomeUIInfo dummy_menu [] = {
+       { GNOME_APP_UI_ITEM, N_("_dummy"),
+         N_("What a dummy!"), crummy_cmd },
+       GNOMEUIINFO_END
+};
+
+static GnomeUIInfo main_menu [] = {
+       { GNOME_APP_UI_SUBTREE, N_("_Dummy"), NULL, dummy_menu },
+       GNOMEUIINFO_END
+};
+
+//------------------------------------------------------------------------
+// loadFile / displayPage
+//------------------------------------------------------------------------
+
+static gint
+doc_config_event (GtkWidget *widget, void *ugly)
+{
+  DOC_ROOT *doc = hack_global;
+
+  g_return_val_if_fail (doc, FALSE);
+  g_return_val_if_fail (doc->magic == DOC_ROOT_MAGIC, FALSE);
+
+  if (doc->pixmap)
+    gdk_pixmap_unref(doc->pixmap);
+
+  doc->pixmap = gdk_pixmap_new(widget->window,
+                               widget->allocation.width,
+                               widget->allocation.height,
+                               -1);
+
+  printf ("Creating pixmap of size %d %d\n",
+         widget->allocation.width, widget->allocation.height);
+  gdk_color_white (gtk_widget_get_default_colormap(), &doc->paper);
+  doc->out    = new GOutputDev (doc->pixmap, doc->paper);
+
+  return TRUE;
+}
+
+static gint
+doc_redraw_event (GtkWidget *widget, void *ugly)
+{
+  DOC_ROOT *doc = hack_global;
+
+  g_return_val_if_fail (doc, FALSE);
+  g_return_val_if_fail (doc->magic == DOC_ROOT_MAGIC, FALSE);
+
+  if (doc->out && doc->pdf) {
+    printf ("There are %d pages\n", doc->pdf->getNumPages());
+
+    doc->pdf->displayPage(doc->out, 1, 72, 0, gTrue);
+    gdk_draw_pixmap (widget->window,
+                    widget->style->white_gc,
+                    doc->pixmap,
+                    0, 0,
+                    0, 0,
+                    widget->allocation.width,
+                    widget->allocation.height);
+    
+  } else
+    printf ("Null pointer error %p %p\n", doc->out, doc->pdf);
+  
+  return FALSE;
+}
+
+static GBool
+loadFile(GString *fileName)
+{
+  DOC_ROOT *doc = new DOC_ROOT();
+  char s[20];
+  char *p;
+
+  hack_global = doc;
+
+  doc->magic = DOC_ROOT_MAGIC;
+  // open PDF file
+  doc->pdf = new PDFDoc(fileName);
+  if (!doc->pdf->isOk()) {
+    delete doc->pdf;
+    delete doc;
+    return gFalse;
+  }
+
+  g_assert (doc->pdf->getCatalog());
+
+  doc->toplevel = gnome_app_new ("gpdf", "gpdf");
+  gtk_window_set_policy(GTK_WINDOW(doc->toplevel), 1, 1, 0);
+  gtk_window_set_default_size (GTK_WINDOW(doc->toplevel), 600, 400);
+  doc->table  = GTK_WIDGET (gtk_table_new (0, 0, 0));
+  doc->appbar = GNOME_APPBAR (gnome_appbar_new (FALSE, TRUE,
+                                               GNOME_PREFERENCES_USER));
+  gnome_app_set_statusbar (GNOME_APP (doc->toplevel),
+                          GTK_WIDGET (doc->appbar));
+  gnome_app_set_contents (GNOME_APP (doc->toplevel), doc->table);
+  gnome_app_create_menus_with_data (GNOME_APP (doc->toplevel), main_menu, doc);
+  gnome_app_install_menu_hints(GNOME_APP (doc->toplevel), main_menu);
+
+  doc->pixmap = NULL;
+  doc->area   = GTK_DRAWING_AREA (gtk_drawing_area_new ());
+  gtk_signal_connect (GTK_OBJECT(doc->area),"configure_event",
+                     (GtkSignalFunc) doc_config_event, doc);
+  gtk_signal_connect (GTK_OBJECT (doc->area), "expose_event",
+                     (GtkSignalFunc) doc_redraw_event, doc);
+
+  gtk_table_attach (GTK_TABLE (doc->table), GTK_WIDGET (doc->area),
+                   0, 1, 1, 2,
+                   GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND,
+                   0, 0);
+
+  gtk_widget_show_all (doc->toplevel);
+
+  return gTrue;
+}
+
+/*static void displayPage(int page1, int zoom1, int rotate1) {
+  char s[20];
+
+  // check for document
+  if (!doc)
+    return;
+
+  // busy cursor
+  if (win)
+    win->setBusyCursor(gTrue);
+
+  // new page/zoom/rotate values
+  page = page1;
+  zoom = zoom1;
+  rotate = rotate1;
+
+  // initialize mouse-related stuff
+  linkAction = NULL;
+  win->setDefaultCursor();
+  linkLabel->setText(NULL);
+  selectXMin = selectXMax = 0;
+  selectYMin = selectYMax = 0;
+  lastDragLeft = lastDragTop = gTrue;
+
+  // draw the page
+  doc->displayPage(out, page, zoomDPI[zoom - minZoom], rotate, gTrue);
+  layoutCbk(win);
+
+  // update page number display
+  sprintf(s, "%d", page);
+  pageNumText->setText(s);
+
+  // back to regular cursor
+  win->setBusyCursor(gFalse);
+  }*/
+
 int
 main (int argc, char *argv [])
 {
-       gnome_init ("GPDF", "1.0", argv, argv);
+  char **view_files = NULL;
+  int lp;
+
+  gnome_init_with_popt_table (
+    "gpdf", "0.1", argc, argv,
+    gpdf_popt_options, 0, &ctx);
+  
+  initParams (xpdfConfigFile); /* Init font path */
+
+  view_files = poptGetArgs (ctx);
+  /* Load files */
+  if (view_files) {
+    for (lp=0;view_files[lp];lp++) {
+      GString *name = new GString (view_files[lp]);
+      if (!name || !loadFile(name))
+       printf ("Error loading '%s'\n", view_files[lp]);
+    }
+  } else {
+    printf ("Need filenames...\n");
+    exit (0);
+  }
+
+  poptFreeContext (ctx);
+
+  gtk_main ();
+
+  freeParams();
 
-       gtk_main ();
+  /* Destroy files */
 }