diff options
author | Koop Mast <kwm@FreeBSD.org> | 2011-10-31 09:53:19 +0000 |
---|---|---|
committer | Koop Mast <kwm@FreeBSD.org> | 2011-10-31 09:53:19 +0000 |
commit | a829062c83aee6625059c5ad9fb89c6e27af9380 (patch) | |
tree | 7a15d028c353a432bd5f8afb975ff1e54173011b /graphics/apvlv | |
parent | ae14a86c45aa3a9888499befe14d67e9dec2c3b6 (diff) | |
download | ports-a829062c83aee6625059c5ad9fb89c6e27af9380.tar.gz ports-a829062c83aee6625059c5ad9fb89c6e27af9380.zip |
Notes
Diffstat (limited to 'graphics/apvlv')
-rw-r--r-- | graphics/apvlv/Makefile | 4 | ||||
-rw-r--r-- | graphics/apvlv/files/patch-poppler-0.18 | 151 |
2 files changed, 154 insertions, 1 deletions
diff --git a/graphics/apvlv/Makefile b/graphics/apvlv/Makefile index b77925da3798..efc785e75bee 100644 --- a/graphics/apvlv/Makefile +++ b/graphics/apvlv/Makefile @@ -7,6 +7,7 @@ PORTNAME= apvlv PORTVERSION= 0.1.2 +PORTREVISION= 1 CATEGORIES= graphics MASTER_SITES= http://cloud.github.com/downloads/naihe2010/apvlv/ DISTNAME= ${PORTNAME}-${PORTVERSION}-Source @@ -16,8 +17,9 @@ COMMENT= Apvlv is a PDF/DJVU Viewer and its behaviour like Vim LICENSE= GPLv2 -LIB_DEPENDS= poppler-glib.6:${PORTSDIR}/graphics/poppler-gtk +LIB_DEPENDS= poppler-glib.8:${PORTSDIR}/graphics/poppler-glib +USE_GNOME= gtk20 USE_CMAKE= yes MAKE_JOBS_SAFE= yes CMAKE_ARGS+= -DSYSCONFDIR=${PREFIX}/etc \ diff --git a/graphics/apvlv/files/patch-poppler-0.18 b/graphics/apvlv/files/patch-poppler-0.18 new file mode 100644 index 000000000000..44331aec7bb2 --- /dev/null +++ b/graphics/apvlv/files/patch-poppler-0.18 @@ -0,0 +1,151 @@ +http://bugs.gentoo.org/385057 +http://projects.archlinux.org/svntogit/community.git/tree/trunk/poppler-gdk.patch?h=packages/apvlv + +--- src/ApvlvFile.cpp ++++ src/ApvlvFile.cpp +@@ -29,6 +29,10 @@ + #include "ApvlvUtil.hpp" + #include "ApvlvView.hpp" + ++#ifndef POPPLER_WITH_GDK ++#include "poppler-gdk.h" ++#endif ++ + #ifdef HAVE_LIBUMD + #define LIBUMD_ENABLE_GTK + #include <umd.h> +--- src/poppler-gdk.h ++++ src/poppler-gdk.h +@@ -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); ++} |