]> www.fi.muni.cz Git - evince.git/blobdiff - pdf/xpdf/gpdf.cc
Still no output - how odd.
[evince.git] / pdf / xpdf / gpdf.cc
index 8a8860f4448e95442cfba4afa68ea15290a62b1a..4ff49ea18e96207dcfdb28cfbf0880dd5487036c 100644 (file)
 #include "config.h"
 
 GBool printCommands = gFalse;
-gint  gpdf_debug;
+gint  gpdf_debug=1;
 poptContext ctx;
 
+#define DOC_ROOT_MAGIC 0xad3f556d
 struct DOC_ROOT {
+  guint32        magic;
   GString        *title;
   PDFDoc         *pdf;
   GtkWidget      *toplevel;
   GtkWidget      *table;
   GnomeAppBar    *appbar;
   GtkDrawingArea *area;
-  GdkVisual      *visual;
   GdkPixmap      *pixmap;
   OutputDev      *out;
   GdkColor        paper;
 };
 
+DOC_ROOT *hack_global = NULL;
 
 static void
 crummy_cmd (GtkWidget *widget, DOC_ROOT *tmp)
@@ -85,10 +87,12 @@ static GnomeUIInfo main_menu [] = {
 //------------------------------------------------------------------------
 
 static gint
-doc_config_event (GtkWidget *widget, DOC_ROOT *doc)
+doc_config_event (GtkWidget *widget, void *ugly)
 {
-  if (!doc)
-    return TRUE;
+  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);
@@ -97,32 +101,60 @@ doc_config_event (GtkWidget *widget, DOC_ROOT *doc)
                                widget->allocation.width,
                                widget->allocation.height,
                                -1);
-  gdk_draw_rectangle (doc->pixmap,
-                     widget->style->white_gc,
-                     TRUE,
-                     0, 0,
-                     widget->allocation.width,
-                     widget->allocation.height);
+
+  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);
+
+
+  {
+    GdkGCValues gcValues;
+    GdkGC *strokeGC;
+    
+    gdk_color_white (gtk_widget_get_default_colormap (), &gcValues.foreground);
+    gdk_color_black (gtk_widget_get_default_colormap (), &gcValues.background);
+    gcValues.line_width = 1;
+    gcValues.line_style = GDK_LINE_SOLID;
+    strokeGC = gdk_gc_new_with_values (
+      doc->pixmap, &gcValues, 
+      (enum GdkGCValuesMask)(GDK_GC_FOREGROUND | GDK_GC_BACKGROUND | GDK_GC_LINE_WIDTH | GDK_GC_LINE_STYLE));
+
+    gdk_draw_rectangle (doc->pixmap,
+                       strokeGC,
+                       TRUE,
+                       0, 0,
+                       widget->allocation.width,
+                       widget->allocation.height);
+  }
   return TRUE;
 }
 
 static gint
-doc_redraw_event (GtkWidget *widget, DOC_ROOT *doc)
+doc_redraw_event (GtkWidget *widget, GdkEventExpose *event)
 {
-/* Redraw the screen from the backing pixmap */
-
-  gdk_color_white (gtk_widget_get_default_colormap(), &doc->paper);
-  doc->out    = new GOutputDev (doc->pixmap, doc->paper);
+  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, 86, 0, gTrue);
+    gdk_draw_line (doc->pixmap,
+                  widget->style->black_gc,
+                  event->area.x, event->area.y,
+                  event->area.width, event->area.height);
+    gdk_draw_pixmap(widget->window,
+                   widget->style->fg_gc[GTK_WIDGET_STATE (widget)],
+                   doc->pixmap,
+                   event->area.x, event->area.y,
+                   event->area.x, event->area.y,
+                   event->area.width, event->area.height);
+  } else
+    printf ("Null pointer error %p %p\n", doc->out, doc->pdf);
   
-  doc->pdf->displayPage(doc->out, 1, 1, 0, gTrue);
-  
-/*  gdk_draw_pixmap(widget->window,
-                 widget->style->fg_gc[GTK_WIDGET_STATE (widget)],
-                 doc->pixmap,
-                 event->area.x, event->area.y,
-                 event->area.x, event->area.y,
-                 event->area.width, event->area.height);*/
-
   return FALSE;
 }
 
@@ -133,6 +165,9 @@ loadFile(GString *fileName)
   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()) {
@@ -141,6 +176,8 @@ loadFile(GString *fileName)
     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);
@@ -155,10 +192,10 @@ loadFile(GString *fileName)
 
   doc->pixmap = NULL;
   doc->area   = GTK_DRAWING_AREA (gtk_drawing_area_new ());
-  gtk_signal_connect (GTK_OBJECT (doc->area), "expose_event",
-                     (GtkSignalFunc) doc_redraw_event, NULL);
   gtk_signal_connect (GTK_OBJECT(doc->area),"configure_event",
-                     (GtkSignalFunc) doc_config_event, NULL);
+                     (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,
@@ -215,6 +252,8 @@ main (int argc, char *argv [])
   gnome_init_with_popt_table (
     "gpdf", "0.1", argc, argv,
     gpdf_popt_options, 0, &ctx);
+
+  errorInit();
   
   initParams (xpdfConfigFile); /* Init font path */
 
@@ -233,9 +272,9 @@ main (int argc, char *argv [])
 
   poptFreeContext (ctx);
 
-  freeParams();
-
   gtk_main ();
 
+  freeParams();
+
   /* Destroy files */
 }