Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/pdf/xpdf
diff options
context:
space:
mode:
authorMartin Kretzschmar <mkretzschmar@src.gnome.org>2003-03-02 15:02:20 (GMT)
committer Martin Kretzschmar <mkretzschmar@src.gnome.org>2003-03-02 15:02:20 (GMT)
commit465028163ee3576380d79de4d1679eeaa833b8c4 (patch)
tree7cfe3c91e927f2bbc5bf61d5a42b5daa4f311787 /pdf/xpdf
parent8f31a8727ebd8e58b2f31781d9de7760473665e0 (diff)
new class, just what the name says, uses GnomeVFSStream for loading
* 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.
Diffstat (limited to 'pdf/xpdf')
-rw-r--r--pdf/xpdf/GnomeVFSStream.cc125
-rw-r--r--pdf/xpdf/GnomeVFSStream.h58
-rw-r--r--pdf/xpdf/Makefile.am10
3 files changed, 188 insertions, 5 deletions
diff --git a/pdf/xpdf/GnomeVFSStream.cc b/pdf/xpdf/GnomeVFSStream.cc
new file mode 100644
index 0000000..324e408
--- /dev/null
+++ b/pdf/xpdf/GnomeVFSStream.cc
@@ -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
index 0000000..a02d288
--- /dev/null
+++ b/pdf/xpdf/GnomeVFSStream.h
@@ -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 */
diff --git a/pdf/xpdf/Makefile.am b/pdf/xpdf/Makefile.am
index 1e4e466..c50f62e 100644
--- a/pdf/xpdf/Makefile.am
+++ b/pdf/xpdf/Makefile.am
@@ -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 \