From: Martin Kretzschmar Date: Sun, 2 Mar 2003 15:02:20 +0000 (+0000) Subject: new class, just what the name says, uses GnomeVFSStream for loading X-Git-Tag: XPDF_1_01~2 X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=commitdiff_plain;h=465028163ee3576380d79de4d1679eeaa833b8c4;p=evince.git 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. --- diff --git a/pdf/xpdf/GnomeVFSStream.cc b/pdf/xpdf/GnomeVFSStream.cc new file mode 100644 index 00000000..324e4088 --- /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 +#include "config.h" + +#include "GnomeVFSStream.h" +#include "gpdf-g-switch.h" +# include +#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 00000000..a02d2888 --- /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 +#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 1e4e466d..c50f62e5 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 \