]> www.fi.muni.cz Git - evince.git/blobdiff - pdf/xpdf/PBMOutputDev.cc
Synched with Xpdf 0.92
[evince.git] / pdf / xpdf / PBMOutputDev.cc
index e21c0efef09ca6c5e6e35fa9e89f43a95ad09365..fadb366957b1f29c9166d33792c81cf5228af378 100644 (file)
@@ -34,6 +34,7 @@ PBMOutputDev *PBMOutputDev::makePBMOutputDev(char *displayName,
   int screen;
   int invert;
   unsigned long black, white;
+  PBMOutputDev *out;
 
   if (!(display = XOpenDisplay(displayName))) {
     fprintf(stderr, "Couldn't open display '%s'\n", displayName);
@@ -54,8 +55,29 @@ PBMOutputDev *PBMOutputDev::makePBMOutputDev(char *displayName,
                                 0, 0, 1, 1, 0,
                                 black, white);
   pixmap = XCreatePixmap(display, dummyWin, 1, 1, 1);
-  return new PBMOutputDev(display, screen, pixmap, dummyWin,
-                         invert, fileRoot1);
+  out = new PBMOutputDev(display, screen, pixmap, dummyWin,
+                        invert, fileRoot1);
+  out->startDoc();
+  return out;
+}
+
+void PBMOutputDev::killPBMOutputDev(PBMOutputDev *out) {
+  Display *display;
+  Pixmap pixmap;
+  Window dummyWin;
+
+  display = out->display;
+  pixmap = out->pixmap;
+  dummyWin = out->dummyWin;
+
+  delete out;
+
+  // these have to be done *after* the XOutputDev (parent of the
+  // PBMOutputDev) is deleted, since XOutputDev::~XOutputDev() needs
+  // them
+  XFreePixmap(display, pixmap);
+  XDestroyWindow(display, dummyWin);
+  XCloseDisplay(display);
 }
 
 PBMOutputDev::PBMOutputDev(Display *display1, int screen1,
@@ -75,9 +97,6 @@ PBMOutputDev::PBMOutputDev(Display *display1, int screen1,
 }
 
 PBMOutputDev::~PBMOutputDev() {
-  XFreePixmap(display, pixmap);
-  XDestroyWindow(display, dummyWin);
-  XCloseDisplay(display);
   gfree(fileName);
 }