]> www.fi.muni.cz Git - evince.git/commitdiff
new class, just what the name says, uses GnomeVFSStream for loading
authorMartin Kretzschmar <mkretzschmar@src.gnome.org>
Sun, 2 Mar 2003 15:02:20 +0000 (15:02 +0000)
committerMartin Kretzschmar <mkretzschmar@src.gnome.org>
Sun, 2 Mar 2003 15:02:20 +0000 (15:02 +0000)
* xpdf/nautilus-pdf-property-page.cc,
xpdf/nautilus-pdf-property-page.h: new class, just what the name
says, uses GnomeVFSStream for loading PDFDocs.

* xpdf/GnomeVFSStream.cc, xpdf/GnomeVFSStream.h: BaseStream
implementation based on (synchronous) gnome-vfs calls.

* xpdf/BonoboStream.cc, xpdf/BonoboStream.h: coding style fixage,
include only what's needed.

* xpdf/Makefile.am (gnome_pdf_viewer_SOURCES): also compile
GnomeVFSStream.{cc,h}, nautilus-pdf-property-page.{cc,h}

* xpdf/GNOME_PDF.server.in.in: add stanza for the Property Page.

* xpdf/bonobo-application-x-pdf.cc: clean up a bit
(gpdf_factory): now we produce the Property Page, too.

* xpdf/gpdf-control.cc: include time.h for strftime, mktime.

pdf/xpdf/GnomeVFSStream.cc [new file with mode: 0644]
pdf/xpdf/GnomeVFSStream.h [new file with mode: 0644]
pdf/xpdf/Makefile.am

diff --git a/pdf/xpdf/GnomeVFSStream.cc b/pdf/xpdf/GnomeVFSStream.cc
new file mode 100644 (file)
index 0000000..324e408
--- /dev/null
@@ -0,0 +1,125 @@
+//========================================================================
+//
+// GnomeVFSStream.cc
+//
+// Copyright 1996-2002 Glyph & Cog, LLC
+// Copyright 2003 Martin Kretzschmar
+//
+//========================================================================
+
+#ifdef __GNUC__
+#pragma implementation
+#endif
+
+#include <aconf.h>
+#include "config.h"
+
+#include "GnomeVFSStream.h"
+#include "gpdf-g-switch.h"
+#  include <libgnomevfs/gnome-vfs.h>
+#include "gpdf-g-switch.h"
+
+#ifndef NO_DECRYPTION
+#include "Decrypt.h"
+#endif
+
+GnomeVFSStream::GnomeVFSStream(GnomeVFSHandle *handleA, Guint startA,
+                               GBool limitedA, Guint lengthA, Object *dictA):
+  BaseStream(dictA) {
+  handle = handleA;
+  start = startA;
+  limited = limitedA;
+  length = lengthA;
+  bufPtr = bufEnd = buf;
+  bufPos = start;
+  savePos = 0;
+  saved = gFalse;
+}
+
+GnomeVFSStream::~GnomeVFSStream() {
+  close();
+}
+
+Stream *GnomeVFSStream::makeSubStream(Guint startA, GBool limitedA,
+                                      Guint lengthA, Object *dictA) {
+  return new GnomeVFSStream(handle, startA, limitedA, lengthA, dictA);
+}
+
+void GnomeVFSStream::reset() {
+  GnomeVFSFileSize offsetReturn;
+  gnome_vfs_tell(handle, &offsetReturn);
+  savePos = (Guint)offsetReturn;
+  saved = gTrue;
+  gnome_vfs_seek(handle, GNOME_VFS_SEEK_START, start);
+  bufPtr = bufEnd = buf;
+  bufPos = start;
+#ifndef NO_DECRYPTION
+  if (decrypt)
+    decrypt->reset();
+#endif
+}
+
+void GnomeVFSStream::close() {
+  if (saved) {
+    gnome_vfs_seek(handle, GNOME_VFS_SEEK_START, savePos);
+    saved = gFalse;
+  }
+}
+
+GBool GnomeVFSStream::fillBuf() {
+  int n;
+  GnomeVFSFileSize bytesRead;
+#ifndef NO_DECRYPTION
+  char *p;
+#endif
+
+  bufPos += bufEnd - buf;
+  bufPtr = bufEnd = buf;
+  if (limited && bufPos >= start + length) {
+    return gFalse;
+  }
+  if (limited && bufPos + gnomeVFSStreamBufSize > start + length) {
+    n = start + length - bufPos;
+  } else {
+    n = gnomeVFSStreamBufSize;
+  }
+  gnome_vfs_read(handle, buf, n, &bytesRead);
+  bufEnd = buf + bytesRead;
+  if (bufPtr >= bufEnd) {
+    return gFalse;
+  }
+#ifndef NO_DECRYPTION
+  if (decrypt) {
+    for (p = buf; p < bufEnd; ++p) {
+      *p = (char)decrypt->decryptByte((Guchar)*p);
+    }
+  }
+#endif
+  return gTrue;
+}
+
+void GnomeVFSStream::setPos(Guint pos, int dir) {
+  Guint size;
+
+  if (dir >= 0) {
+    gnome_vfs_seek(handle, GNOME_VFS_SEEK_START, pos);
+    bufPos = pos;
+  } else {
+    GnomeVFSFileSize offsetReturn;
+    gnome_vfs_seek(handle, GNOME_VFS_SEEK_END, 0);
+    gnome_vfs_tell(handle, &offsetReturn);
+    size = (Guint)offsetReturn;
+    if (pos > size)
+      pos = (Guint)size;
+    gnome_vfs_seek(handle, GNOME_VFS_SEEK_END, -(int)pos);
+    gnome_vfs_tell(handle, &offsetReturn);
+    bufPos = (Guint)offsetReturn;
+  }
+  bufPtr = bufEnd = buf;
+}
+
+void GnomeVFSStream::moveStart(int delta) {
+  start += delta;
+  bufPtr = bufEnd = buf;
+  bufPos = start;
+}
diff --git a/pdf/xpdf/GnomeVFSStream.h b/pdf/xpdf/GnomeVFSStream.h
new file mode 100644 (file)
index 0000000..a02d288
--- /dev/null
@@ -0,0 +1,58 @@
+//========================================================================
+//
+// GnomeVFSStream.cc
+//
+// Copyright 1996-2002 Glyph & Cog, LLC
+// Copyright 2003 Martin Kretzschmar
+//
+//========================================================================
+
+#ifndef GNOME_VFS_STREAM_H
+#define GNOME_VFS_STREAM_H
+
+#include "gpdf-g-switch.h"
+#  include <libgnomevfs/gnome-vfs-handle.h>
+#include "gpdf-g-switch.h"
+#include "Object.h"
+#include "Stream.h"
+
+#define gnomeVFSStreamBufSize fileStreamBufSize
+
+class GnomeVFSStream: public BaseStream {
+public:
+
+  GnomeVFSStream(GnomeVFSHandle *handleA, Guint startA, GBool limitedA,
+                 Guint lengthA, Object *dictA);
+  virtual ~GnomeVFSStream();
+  virtual Stream *makeSubStream(Guint startA, GBool limitedA,
+                               Guint lengthA, Object *dictA);
+  virtual StreamKind getKind() { return strFile; }
+  virtual void reset();
+  virtual void close();
+  virtual int getChar()
+    { return (bufPtr >= bufEnd && !fillBuf()) ? EOF : (*bufPtr++ & 0xff); }
+  virtual int lookChar()
+    { return (bufPtr >= bufEnd && !fillBuf()) ? EOF : (*bufPtr & 0xff); }
+  virtual int getPos() { return bufPos + (bufPtr - buf); }
+  virtual void setPos(Guint pos, int dir = 0);
+  virtual GBool isBinary(GBool last = gTrue) { return last; }
+  virtual Guint getStart() { return start; }
+  virtual void moveStart(int delta);
+
+private:
+
+  GBool fillBuf();
+
+  GnomeVFSHandle *handle;
+  Guint start;
+  GBool limited;
+  Guint length;
+  char buf[gnomeVFSStreamBufSize];
+  char *bufPtr;
+  char *bufEnd;
+  Guint bufPos;
+  int savePos;
+  GBool saved;
+};
+
+#endif /* GNOME_VFS_STREAM_H */
index 1e4e466d8f54df2b964f4f3e8fb7b35f75184aa4..c50f62e5475119172eaf504676cb112a20db053e 100644 (file)
@@ -106,8 +106,10 @@ common_sources =           \
 
 gnome_pdf_viewer_SOURCES =             \
        $(common_sources)               \
-       BonoboStream.h                  \
        BonoboStream.cc                 \
+       BonoboStream.h                  \
+       GnomeVFSStream.cc               \
+       GnomeVFSStream.h                \
        GPOutputDev.cc                  \
        GPOutputDev.h                   \
        bonobo-application-x-pdf.cc     \
@@ -123,16 +125,14 @@ gnome_pdf_viewer_SOURCES =                \
        gpdf-view.h                     \
        gtkgesture.c                    \
        gtkgesture.h                    \
+       nautilus-pdf-property-page.cc   \
+       nautilus-pdf-property-page.h    \
        page-control.c                  \
        page-control.h                  \
        pdf-properties-display.c        \
        pdf-properties-display.h        \
        $(BUILT_SOURCES)
 
-# Font embedding hack for Gnome Print < 2.1.?2?
-#      gpdf-gnome-font.c               \
-#      gpdf-gnome-font.h               \
-
 # Old files
 #      GOutputDev.cc                   \
 #      GOutputDev.h                    \