This unbreaks the build of apvlv after the update to poppler-0.18.

Please test if you're using apvlv.

Ciao,
        Kili

Index: patches/patch-src_ApvlvFile_cpp
===================================================================
RCS file: /cvs/ports/print/apvlv/patches/patch-src_ApvlvFile_cpp,v
retrieving revision 1.1
diff -u -p -r1.1 patch-src_ApvlvFile_cpp
--- patches/patch-src_ApvlvFile_cpp     4 Jun 2011 19:04:24 -0000       1.1
+++ patches/patch-src_ApvlvFile_cpp     17 Nov 2011 18:46:44 -0000
@@ -1,7 +1,21 @@
 $OpenBSD: patch-src_ApvlvFile_cpp,v 1.1 2011/06/04 19:04:24 kili Exp $
+
+Fixes for poppler-0.16 and poppler-0.18. The latter gyped from archlinux.
+
 --- src/ApvlvFile.cpp.orig     Tue Apr 20 03:01:33 2010
-+++ src/ApvlvFile.cpp  Sat May 14 15:21:07 2011
-@@ -267,9 +267,9 @@ ApvlvPDF::ApvlvPDF (const char *filename, bool check):
++++ src/ApvlvFile.cpp  Thu Nov 17 19:36:01 2011
+@@ -29,6 +29,10 @@
+ #include "ApvlvUtil.hpp"
+ #include "ApvlvView.hpp"
+ 
++#ifndef POPPLER_WITH_GDK
++#include "poppler-gdk.h"
++#endif
++
+ #include <iostream>
+ #include <fstream>
+ 
+@@ -267,9 +271,9 @@ ApvlvPDF::ApvlvPDF (const char *filename, bool check):
  
    bool ApvlvPDF::pagetext (int pn, int x1, int y1, int x2, int y2, char **out)
    {
Index: patches/patch-src_poppler-gdk_h
===================================================================
RCS file: patches/patch-src_poppler-gdk_h
diff -N patches/patch-src_poppler-gdk_h
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ patches/patch-src_poppler-gdk_h     17 Nov 2011 18:46:44 -0000
@@ -0,0 +1,139 @@
+$OpenBSD$
+
+Fix for poppler-0.18. Patch gyped from archlinux.
+
+--- src/poppler-gdk.h.orig     Thu Nov 17 19:35:27 2011
++++ src/poppler-gdk.h  Thu Nov 17 19:35:27 2011
+@@ -0,0 +1,132 @@
++#include <goo/gtypes.h>
++
++static void
++copy_cairo_surface_to_pixbuf (cairo_surface_t *surface,
++                            GdkPixbuf       *pixbuf)
++{
++  int cairo_width, cairo_height, cairo_rowstride;
++  unsigned char *pixbuf_data, *dst, *cairo_data;
++  int pixbuf_rowstride, pixbuf_n_channels;
++  unsigned int *src;
++  int x, y;
++
++  cairo_width = cairo_image_surface_get_width (surface);
++  cairo_height = cairo_image_surface_get_height (surface);
++  cairo_rowstride = cairo_image_surface_get_stride (surface);
++  cairo_data = cairo_image_surface_get_data (surface);
++
++  pixbuf_data = gdk_pixbuf_get_pixels (pixbuf);
++  pixbuf_rowstride = gdk_pixbuf_get_rowstride (pixbuf);
++  pixbuf_n_channels = gdk_pixbuf_get_n_channels (pixbuf);
++
++  if (cairo_width > gdk_pixbuf_get_width (pixbuf))
++    cairo_width = gdk_pixbuf_get_width (pixbuf);
++  if (cairo_height > gdk_pixbuf_get_height (pixbuf))
++    cairo_height = gdk_pixbuf_get_height (pixbuf);
++  for (y = 0; y < cairo_height; y++)
++    {
++      src = (unsigned int *) (cairo_data + y * cairo_rowstride);
++      dst = pixbuf_data + y * pixbuf_rowstride;
++      for (x = 0; x < cairo_width; x++)
++      {
++        dst[0] = (*src >> 16) & 0xff;
++        dst[1] = (*src >> 8) & 0xff;
++        dst[2] = (*src >> 0) & 0xff;
++        if (pixbuf_n_channels == 4)
++            dst[3] = (*src >> 24) & 0xff;
++        dst += pixbuf_n_channels;
++        src++;
++      }
++    }
++}
++
++static void
++_poppler_page_render_to_pixbuf (PopplerPage *page,
++                              int src_x, int src_y,
++                              int src_width, int src_height,
++                              double scale,
++                              int rotation,
++                              GBool printing,
++                              GdkPixbuf *pixbuf)
++{
++  cairo_t *cr;
++  cairo_surface_t *surface;
++
++  surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32,
++                                      src_width, src_height);
++  cr = cairo_create (surface);
++  cairo_save (cr);
++  switch (rotation) {
++  case 90:
++        cairo_translate (cr, src_x + src_width, -src_y);
++        break;
++  case 180:
++        cairo_translate (cr, src_x + src_width, src_y + src_height);
++        break;
++  case 270:
++        cairo_translate (cr, -src_x, src_y + src_height);
++        break;
++  default:
++        cairo_translate (cr, -src_x, -src_y);
++  }
++
++  if (scale != 1.0)
++        cairo_scale (cr, scale, scale);
++
++  if (rotation != 0)
++        cairo_rotate (cr, rotation * G_PI / 180.0);
++
++  if (printing)
++        poppler_page_render_for_printing (page, cr);
++  else
++        poppler_page_render (page, cr);
++  cairo_restore (cr);
++
++  cairo_set_operator (cr, CAIRO_OPERATOR_DEST_OVER);
++  cairo_set_source_rgb (cr, 1., 1., 1.);
++  cairo_paint (cr);
++
++  cairo_destroy (cr);
++
++  copy_cairo_surface_to_pixbuf (surface, pixbuf);
++  cairo_surface_destroy (surface);
++}
++
++/**
++ * poppler_page_render_to_pixbuf:
++ * @page: the page to render from
++ * @src_x: x coordinate of upper left corner
++ * @src_y: y coordinate of upper left corner
++ * @src_width: width of rectangle to render
++ * @src_height: height of rectangle to render
++ * @scale: scale specified as pixels per point
++ * @rotation: rotate the document by the specified degree
++ * @pixbuf: pixbuf to render into
++ *
++ * First scale the document to match the specified pixels per point,
++ * then render the rectangle given by the upper left corner at
++ * (src_x, src_y) and src_width and src_height.
++ * This function is for rendering a page that will be displayed.
++ * If you want to render a page that will be printed use
++ * poppler_page_render_to_pixbuf_for_printing() instead
++ *
++ * Deprecated: 0.16
++ **/
++void
++poppler_page_render_to_pixbuf (PopplerPage *page,
++                             int src_x, int src_y,
++                             int src_width, int src_height,
++                             double scale,
++                             int rotation,
++                             GdkPixbuf *pixbuf)
++{
++  g_return_if_fail (POPPLER_IS_PAGE (page));
++  g_return_if_fail (scale > 0.0);
++  g_return_if_fail (pixbuf != NULL);
++
++  _poppler_page_render_to_pixbuf (page, src_x, src_y,
++                                src_width, src_height,
++                                scale, rotation,
++                                gFalse,
++                                pixbuf);
++}

Reply via email to