diff options
author | root <root@rshg054.dnsready.net> | 2011-10-06 23:14:37 +0000 |
---|---|---|
committer | root <root@rshg054.dnsready.net> | 2011-10-06 23:14:37 +0000 |
commit | 5442e9b8f357932ed5d6cb46e90fcbf6f453469f (patch) | |
tree | e2393e2f381e2e539810e51c34e56c8f687c153c /staging/xournal | |
parent | 068f1f30c0bba25b6b88cefbe982a72535fa1951 (diff) |
Thu Oct 6 23:14:37 UTC 2011
Diffstat (limited to 'staging/xournal')
-rw-r--r-- | staging/xournal/PKGBUILD | 35 | ||||
-rw-r--r-- | staging/xournal/install | 13 | ||||
-rw-r--r-- | staging/xournal/pdf-export-64.patch | 89 | ||||
-rw-r--r-- | staging/xournal/poppler-api.patch | 158 |
4 files changed, 295 insertions, 0 deletions
diff --git a/staging/xournal/PKGBUILD b/staging/xournal/PKGBUILD new file mode 100644 index 000000000..8622a5f9c --- /dev/null +++ b/staging/xournal/PKGBUILD @@ -0,0 +1,35 @@ +# $Id: PKGBUILD 139871 2011-10-05 16:16:06Z bisson $ +# Maintainer: Gaetan Bisson <bisson@archlinux.org> + +pkgname=xournal +pkgver=0.4.5 +pkgrel=5 +pkgdesc='Notetaking and sketching application' +arch=('i686' 'x86_64') +url='http://xournal.sourceforge.net/' +license=('GPL') +depends=('libgnomecanvas' 'poppler-glib' 'shared-mime-info' 'desktop-file-utils' 'hicolor-icon-theme') +optdepends=('ghostscript: import PS/PDF files as bitmap backgrounds') +source=("http://downloads.sourceforge.net/xournal/xournal-${pkgver}.tar.gz" + 'pdf-export-64.patch' + 'poppler-api.patch') +sha1sums=('390cb275774469ed1b04b7268dd625bd456c895e' + 'f23f53b9f69ba8a5773c53d7bca99abf9d8504f8' + '5aedd5610b42df96e964bb889d4bf0831c2080bc') + +install=install + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + + patch -p1 -i ../pdf-export-64.patch # from xournal CVS, see FS#21693 + patch -p1 -i ../poppler-api.patch + + ./configure --prefix=/usr + make +} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}" + make DESTDIR="${pkgdir}" install desktop-install +} diff --git a/staging/xournal/install b/staging/xournal/install new file mode 100644 index 000000000..dfcb68374 --- /dev/null +++ b/staging/xournal/install @@ -0,0 +1,13 @@ +post_install() { + update-desktop-database -q + gtk-update-icon-cache -q -t -f usr/share/icons/hicolor + update-mime-database usr/share/mime &>/dev/null +} + +post_upgrade() { + post_install +} + +post_remove() { + post_install +} diff --git a/staging/xournal/pdf-export-64.patch b/staging/xournal/pdf-export-64.patch new file mode 100644 index 000000000..9f7075c54 --- /dev/null +++ b/staging/xournal/pdf-export-64.patch @@ -0,0 +1,89 @@ +diff -aur old/src/xo-print.c new/src/xo-print.c +--- old/src/xo-print.c 2009-09-28 23:36:54.000000000 +0200 ++++ new/src/xo-print.c 2009-11-15 06:06:00.000000000 +0100 +@@ -761,7 +761,7 @@ + + make_xref(xref, xref->last+1, pdfbuf->len); + g_string_append_printf(pdfbuf, +- "%d 0 obj\n<< /Length %d /Filter /FlateDecode /Type /Xobject " ++ "%d 0 obj\n<< /Length %zu /Filter /FlateDecode /Type /Xobject " + "/Subtype /Image /Width %d /Height %d /ColorSpace /DeviceRGB " + "/BitsPerComponent 8 >> stream\n", + xref->last, zpix->len, width, height); +@@ -840,8 +840,10 @@ + gboolean fallback, is_binary; + guchar encoding[256]; + gushort glyphs[256]; +- int i, j, num, len1, len2; +- gsize len; ++ int i, j, num; ++ guint32 len1, len2; ++ guint32 tt_len; ++ gsize t1_len; + TrueTypeFont *ttfnt; + char *seg1, *seg2; + char *fontdata, *p; +@@ -862,14 +864,14 @@ + } + font->num_glyphs_used = num-1; + if (OpenTTFont(font->filename, 0, &ttfnt) == SF_OK) { +- if (CreateTTFromTTGlyphs_tomemory(ttfnt, (guint8**)&fontdata, &len, glyphs, encoding, num, ++ if (CreateTTFromTTGlyphs_tomemory(ttfnt, (guint8**)&fontdata, &tt_len, glyphs, encoding, num, + 0, NULL, TTCF_AutoName | TTCF_IncludeOS2) == SF_OK) { + make_xref(xref, xref->last+1, pdfbuf->len); + nobj_fontprog = xref->last; + g_string_append_printf(pdfbuf, +- "%d 0 obj\n<< /Length %d /Length1 %d >> stream\n", +- nobj_fontprog, (int)len, (int)len); +- g_string_append_len(pdfbuf, fontdata, len); ++ "%d 0 obj\n<< /Length %u /Length1 %u >> stream\n", ++ nobj_fontprog, tt_len, tt_len); ++ g_string_append_len(pdfbuf, fontdata, tt_len); + g_string_append(pdfbuf, "endstream\nendobj\n"); + g_free(fontdata); + } +@@ -879,7 +881,7 @@ + else fallback = TRUE; + } else { + // embed the font file: Type1 case +- if (g_file_get_contents(font->filename, &fontdata, &len, NULL) && len>=8) { ++ if (g_file_get_contents(font->filename, &fontdata, &t1_len, NULL) && t1_len>=8) { + if (fontdata[0]==(char)0x80 && fontdata[1]==(char)0x01) { + is_binary = TRUE; + len1 = pfb_get_length((unsigned char *)fontdata+2); +@@ -898,7 +900,7 @@ + if (*p=='\n' || *p=='\r') p++; + if (*p=='\n' || *p=='\r') p++; + len1 = p-fontdata; +- p = g_strrstr_len(fontdata, len, T1_SEGMENT_3_END); ++ p = g_strrstr_len(fontdata, t1_len, T1_SEGMENT_3_END); + if (p==NULL) fallback = TRUE; + else { + // rewind 512 zeros +@@ -936,7 +938,7 @@ + make_xref(xref, xref->last+1, pdfbuf->len); + nobj_fontprog = xref->last; + g_string_append_printf(pdfbuf, +- "%d 0 obj\n<< /Length %d /Length1 %d /Length2 %d /Length3 0 >> stream\n", ++ "%d 0 obj\n<< /Length %u /Length1 %u /Length2 %u /Length3 0 >> stream\n", + nobj_fontprog, len1+len2, len1, len2); + g_string_append_len(pdfbuf, seg1, len1); + g_string_append_len(pdfbuf, seg2, len2); +@@ -1258,7 +1260,7 @@ + tmpstr = make_pdfprefix(pdfinfo.pages+(pg->bg->file_page_seq-1), + pg->width, pg->height); + g_string_append_printf(pdfbuf, +- "%d 0 obj\n<< /Length %d >> stream\n%s\nendstream\nendobj\n", ++ "%d 0 obj\n<< /Length %zu >> stream\n%s\nendstream\nendobj\n", + n_obj_prefix, tmpstr->len, tmpstr->str); + g_string_free(tmpstr, TRUE); + g_string_prepend(pgstrm, "Q Q Q "); +@@ -1276,7 +1278,7 @@ + + make_xref(&xref, xref.last+1, pdfbuf->len); + g_string_append_printf(pdfbuf, +- "%d 0 obj\n<< /Length %d /Filter /FlateDecode>> stream\n", ++ "%d 0 obj\n<< /Length %zu /Filter /FlateDecode>> stream\n", + xref.last, zpgstrm->len); + g_string_append_len(pdfbuf, zpgstrm->str, zpgstrm->len); + g_string_free(zpgstrm, TRUE); diff --git a/staging/xournal/poppler-api.patch b/staging/xournal/poppler-api.patch new file mode 100644 index 000000000..9e33c7feb --- /dev/null +++ b/staging/xournal/poppler-api.patch @@ -0,0 +1,158 @@ +diff -aur old/src/xo-file.c new/src/xo-file.c +--- old/src/xo-file.c 2009-09-29 09:36:05.000000000 +1000 ++++ new/src/xo-file.c 2011-10-06 03:11:17.307822836 +1100 +@@ -975,6 +975,140 @@ + g_free(req); + } + ++/* ++ * Copied from http://cgit.freedesktop.org/poppler/poppler/tree/glib/poppler-page.cc?h=poppler-0.16#n617 ++ * as a temporary workaround to poppler removing depreciated functions while we wait for ++ * upstream to rewrite against cairo ++ */ ++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, ++ gboolean 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, ++ FALSE, ++ pixbuf); ++} + /* process a bg PDF request from the queue, and recurse */ + + gboolean bgpdf_scheduler_callback(gpointer data) +diff -aur old/src/xo-file.h new/src/xo-file.h +--- old/src/xo-file.h 2009-09-28 08:45:53.000000000 +1000 ++++ new/src/xo-file.h 2011-10-06 03:11:17.311156160 +1100 +@@ -36,3 +36,10 @@ + void init_config_default(void); + void load_config_from_file(void); + void save_config_to_file(void); ++ ++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); |