diff -Nru mapnik-3.0.19+ds/CHANGELOG.md mapnik-3.0.22+ds/CHANGELOG.md --- mapnik-3.0.19+ds/CHANGELOG.md 2018-03-06 08:48:28.000000000 +0000 +++ mapnik-3.0.22+ds/CHANGELOG.md 2019-01-22 10:58:22.000000000 +0000 @@ -6,6 +6,45 @@ For a complete change history, see the git log. +## 3.0.22 + +Released: January 22, 2019 + +(Packaged from c338cacd7) + +- Improved padding calculation for clipping polygons and lines ([#4001](https://github.com/mapnik/mapnik/pull/4001)) +- New option `line-pattern="repeat"` of LinePatternSymbolizer to repeat the pattern in the area given by `stroke-` options ([#4004](https://github.com/mapnik/mapnik/pull/4004)) +- Fixed global and local pattern alignment ([#4005](https://github.com/mapnik/mapnik/pull/4005)) +- SVG patterns are rendered as vectors into PDF or SVG with Cairo backend ([#4012](https://github.com/mapnik/mapnik/pull/4012)) + +## 3.0.21 + +Released: October 8, 2018 + +(Packaged from 1dbb1d2c1) + +#### Core + +- Fixed compilation with ICU >= 61 (#3963) +- Fixed bbox reprojection (#3940) +- SVG: enabled unsupported attributes handling + +#### Plugins + +- GDAL: Fixed several issues with overviews (#3939) + + +## 3.0.20 + +Released: April 12, 2018 + +(Packaged from f02c7bcdb) + + - Make max_image_area a datasource parameter for GDAL. + - GDAL Driver Overview Fix and Memory Reduction (#3872) + - Raster colorizer: check image bounds (#3879) + - Removed usage of `typename` in template template declarations (available in c++17) (#3882) + ## 3.0.19 Released: March 06, 2018 diff -Nru mapnik-3.0.19+ds/debian/changelog mapnik-3.0.22+ds/debian/changelog --- mapnik-3.0.19+ds/debian/changelog 2018-03-10 08:07:21.000000000 +0000 +++ mapnik-3.0.22+ds/debian/changelog 2019-07-14 14:00:00.000000000 +0000 @@ -1,3 +1,78 @@ +mapnik (3.0.22+ds-1~bionic1) bionic; urgency=medium + + * No change rebuild for GDAL 2.4.2 transition. + + -- Angelos Tzotsos Sun, 14 Jul 2019 16:00:00 +0200 + +mapnik (3.0.22+ds-1~bionic0) bionic; urgency=medium + + * No change rebuild for Bionic. + + -- Angelos Tzotsos Wed, 27 Feb 2019 21:00:00 +0200 + +mapnik (3.0.22+ds-1) unstable; urgency=medium + + * Move from experimental to unstable. + + -- Bas Couwenberg Tue, 22 Jan 2019 19:38:20 +0100 + +mapnik (3.0.22+ds-1~exp1) experimental; urgency=medium + + * New upstream release. + * Bump Standards-Version to 4.3.0, no changes. + + -- Bas Couwenberg Tue, 22 Jan 2019 12:29:52 +0100 + +mapnik (3.0.21+ds-2) unstable; urgency=medium + + * Add upstream patch to use pkg-config for freetype2. + + -- Bas Couwenberg Thu, 25 Oct 2018 15:24:53 +0200 + +mapnik (3.0.21+ds-1) unstable; urgency=medium + + * Move from experimental to unstable. + + -- Bas Couwenberg Tue, 09 Oct 2018 18:23:50 +0200 + +mapnik (3.0.21+ds-1~exp1) experimental; urgency=medium + + * New upstream release. + + -- Bas Couwenberg Mon, 08 Oct 2018 16:54:28 +0200 + +mapnik (3.0.21~rc1+ds-1~exp1) experimental; urgency=medium + + * New upstream release candidate. + * Bump Standards-Version to 4.2.1, no changes. + * Update watch file to limit matches to archive path. + + -- Bas Couwenberg Tue, 02 Oct 2018 16:08:16 +0200 + +mapnik (3.0.20+ds-2) unstable; urgency=medium + + * Strip trailing whitespace from changelog & rules files. + * Bump Standards-Version to 4.1.5, no changes. + * Use filter instead of findstring to prevent partial matches. + * Drop autopkgtest to test installability. + * Add lintian override for testsuite-autopkgtest-missing. + + -- Bas Couwenberg Tue, 31 Jul 2018 21:18:48 +0200 + +mapnik (3.0.20+ds-1) unstable; urgency=medium + + * Move from experimental to unstable. + + -- Bas Couwenberg Sat, 14 Apr 2018 12:18:59 +0200 + +mapnik (3.0.20+ds-1~exp1) experimental; urgency=medium + + * New upstream release. + * Update Vcs-* URLs for Salsa. + * Bump Standards-Version to 4.1.4, no changes. + + -- Bas Couwenberg Thu, 12 Apr 2018 15:43:20 +0200 + mapnik (3.0.19+ds-1) unstable; urgency=medium * Add patch to use pkg-config when freetype-config is not available. @@ -780,4 +855,3 @@ * Initial release (Closes: #402792) -- Dominic Hargreaves Sun, 14 Jan 2007 15:53:35 +0000 - diff -Nru mapnik-3.0.19+ds/debian/control mapnik-3.0.22+ds/debian/control --- mapnik-3.0.19+ds/debian/control 2018-03-10 08:06:47.000000000 +0000 +++ mapnik-3.0.22+ds/debian/control 2018-12-25 21:35:34.000000000 +0000 @@ -31,9 +31,9 @@ pkg-config, scons, zlib1g-dev -Standards-Version: 4.1.3 -Vcs-Browser: https://anonscm.debian.org/cgit/pkg-grass/mapnik.git -Vcs-Git: https://anonscm.debian.org/git/pkg-grass/mapnik.git +Standards-Version: 4.3.0 +Vcs-Browser: https://salsa.debian.org/debian-gis-team/mapnik +Vcs-Git: https://salsa.debian.org/debian-gis-team/mapnik.git Homepage: http://www.mapnik.org/ Package: libmapnik3.0 diff -Nru mapnik-3.0.19+ds/debian/patches/0001-Use-pkg-config-to-find-FreeType2-if-available.patch mapnik-3.0.22+ds/debian/patches/0001-Use-pkg-config-to-find-FreeType2-if-available.patch --- mapnik-3.0.19+ds/debian/patches/0001-Use-pkg-config-to-find-FreeType2-if-available.patch 1970-01-01 00:00:00.000000000 +0000 +++ mapnik-3.0.22+ds/debian/patches/0001-Use-pkg-config-to-find-FreeType2-if-available.patch 2018-10-25 14:24:41.000000000 +0000 @@ -0,0 +1,48 @@ +Description: Use pkg-config to find FreeType2 if available +Author: Raul Marin +Origin: https://github.com/mapnik/mapnik/pull/3892/commits/23755a527a5e0f24a7591fcc41dece7ce5f080b7 +Bug: https://github.com/mapnik/mapnik/issues/3870 +Bug-Debian: https://bugs.debian.org/892451 + +--- a/SConstruct ++++ b/SConstruct +@@ -1393,6 +1393,7 @@ if not preconfigured: + ['harfbuzz', 'harfbuzz/hb.h',True,'C++'] + ] + ++ CHECK_PKG_CONFIG = conf.CheckPKGConfig('0.15.0') + if env.get('FREETYPE_LIBS') or env.get('FREETYPE_INCLUDES'): + REQUIRED_LIBSHEADERS.insert(0,['freetype','ft2build.h',True,'C']) + if env.get('FREETYPE_INCLUDES'): +@@ -1401,6 +1402,21 @@ if not preconfigured: + if env.get('FREETYPE_LIBS'): + lib_path = env['FREETYPE_LIBS'] + env.AppendUnique(LIBPATH = fix_path(lib_path)) ++ elif CHECK_PKG_CONFIG and conf.CheckPKG('freetype2'): ++ # Freetype 2.9+ doesn't use freetype-config and uses pkg-config instead ++ cmd = 'pkg-config freetype2 --libs --cflags' ++ if env['RUNTIME_LINK'] == 'static': ++ cmd += ' --static' ++ ++ temp_env = Environment(ENV=os.environ) ++ try: ++ temp_env.ParseConfig(cmd) ++ for lib in temp_env['LIBS']: ++ env.AppendUnique(LIBPATH = fix_path(lib)) ++ for inc in temp_env['CPPPATH']: ++ env.AppendUnique(CPPPATH = fix_path(inc)) ++ except OSError as e: ++ pass + elif conf.parse_config('FREETYPE_CONFIG'): + # check if freetype links to bz2 + if env['RUNTIME_LINK'] == 'static': +@@ -1634,9 +1650,6 @@ if not preconfigured: + color_print(1,'%s not detected on your system' % env['QUERIED_ICU_DATA'] ) + env['MISSING_DEPS'].append('ICU_DATA') + +- +- CHECK_PKG_CONFIG = conf.CheckPKGConfig('0.15.0') +- + if len(env['REQUESTED_PLUGINS']): + if env['HOST']: + for plugin in env['REQUESTED_PLUGINS']: diff -Nru mapnik-3.0.19+ds/debian/patches/freetype-pkgconfig.patch mapnik-3.0.22+ds/debian/patches/freetype-pkgconfig.patch --- mapnik-3.0.19+ds/debian/patches/freetype-pkgconfig.patch 2018-03-10 08:06:35.000000000 +0000 +++ mapnik-3.0.22+ds/debian/patches/freetype-pkgconfig.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,41 +0,0 @@ -Description: Use pkg-config when freetype-config is not available. -Author: Bas Couwenberg -Bug: https://github.com/mapnik/mapnik/issues/3870 -Bug-Debian: https://bugs.debian.org/892451 - ---- a/SConstruct -+++ b/SConstruct -@@ -1393,6 +1393,8 @@ if not preconfigured: - ['harfbuzz', 'harfbuzz/hb.h',True,'C++'] - ] - -+ CHECK_PKG_CONFIG = conf.CheckPKGConfig('0.15.0') -+ - if env.get('FREETYPE_LIBS') or env.get('FREETYPE_INCLUDES'): - REQUIRED_LIBSHEADERS.insert(0,['freetype','ft2build.h',True,'C']) - if env.get('FREETYPE_INCLUDES'): -@@ -1413,6 +1415,15 @@ if not preconfigured: - env['EXTRA_FREETYPE_LIBS'].append('bz2') - except OSError as e: - pass -+ elif env['RUNTIME_LINK'] == 'static': -+ temp_env = env.Clone() -+ temp_env['LIBS'] = [] -+ try: -+ temp_env.ParseConfig('pkg-config freetype2 --libs') -+ if 'bz2' in temp_env['LIBS']: -+ env['EXTRA_FREETYPE_LIBS'].append('bz2') -+ except OSError as e: -+ pass - - # libxml2 should be optional but is currently not - # https://github.com/mapnik/mapnik/issues/913 -@@ -1635,8 +1646,6 @@ if not preconfigured: - env['MISSING_DEPS'].append('ICU_DATA') - - -- CHECK_PKG_CONFIG = conf.CheckPKGConfig('0.15.0') -- - if len(env['REQUESTED_PLUGINS']): - if env['HOST']: - for plugin in env['REQUESTED_PLUGINS']: diff -Nru mapnik-3.0.19+ds/debian/patches/series mapnik-3.0.22+ds/debian/patches/series --- mapnik-3.0.19+ds/debian/patches/series 2018-03-10 08:06:35.000000000 +0000 +++ mapnik-3.0.22+ds/debian/patches/series 2018-10-25 14:24:41.000000000 +0000 @@ -1 +1 @@ -freetype-pkgconfig.patch +0001-Use-pkg-config-to-find-FreeType2-if-available.patch diff -Nru mapnik-3.0.19+ds/debian/rules mapnik-3.0.22+ds/debian/rules --- mapnik-3.0.19+ds/debian/rules 2018-03-10 07:25:40.000000000 +0000 +++ mapnik-3.0.22+ds/debian/rules 2018-10-02 14:04:45.000000000 +0000 @@ -12,19 +12,19 @@ NJOBS := -j$(subst parallel=,,$(filter parallel=%,$(subst $(COMMA), ,$(DEB_BUILD_OPTIONS)))) endif -DEB_HOST_ARCH ?= $(shell dpkg-architecture -qDEB_HOST_ARCH) +DEB_BUILD_ARCH ?= $(shell dpkg-architecture -qDEB_BUILD_ARCH) # Disable parallel builds for problematic architectures -NO_PARALLEL_ARCHS = "arm64 armel armhf alpha hurd-i386 kfreebsd-i386 kfreebsd-amd64" +NO_PARALLEL_ARCHS = arm64 armel armhf alpha hurd-i386 kfreebsd-i386 kfreebsd-amd64 ifeq ($(shell dpkg-vendor --derives-from Ubuntu && echo yes),yes) # From mapnik (3.0.8+ds-1ubuntu1): # The amd64 buildds are castrated to 4G RAM and 4G swap, # the ppc64el buildds to 12G RAM and 4G swap. - NO_PARALLEL_ARCHS += "amd64 ppc64el" + NO_PARALLEL_ARCHS += amd64 ppc64el endif -ifneq (,$(findstring $(DEB_HOST_ARCH),$(NO_PARALLEL_ARCHS))) +ifneq (,$(filter $(DEB_BUILD_ARCH),$(NO_PARALLEL_ARCHS))) NJOBS = -j1 endif @@ -87,4 +87,3 @@ override_dh_makeshlibs: dh_makeshlibs -V - diff -Nru mapnik-3.0.19+ds/debian/source/lintian-overrides mapnik-3.0.22+ds/debian/source/lintian-overrides --- mapnik-3.0.19+ds/debian/source/lintian-overrides 1970-01-01 00:00:00.000000000 +0000 +++ mapnik-3.0.22+ds/debian/source/lintian-overrides 2018-10-02 14:04:46.000000000 +0000 @@ -0,0 +1,3 @@ +# Not worth the effort +testsuite-autopkgtest-missing + diff -Nru mapnik-3.0.19+ds/debian/tests/control mapnik-3.0.22+ds/debian/tests/control --- mapnik-3.0.19+ds/debian/tests/control 2017-12-14 22:45:19.000000000 +0000 +++ mapnik-3.0.22+ds/debian/tests/control 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -# Test installability -Depends: @ -Test-Command: /bin/true diff -Nru mapnik-3.0.19+ds/debian/watch mapnik-3.0.22+ds/debian/watch --- mapnik-3.0.19+ds/debian/watch 2017-12-14 22:45:19.000000000 +0000 +++ mapnik-3.0.22+ds/debian/watch 2018-10-02 14:04:46.000000000 +0000 @@ -5,4 +5,4 @@ filenamemangle=s/(?:.*?\/)?(?:rel|v|mapnik)?[\-\_]?(\d\S+)\.(tgz|tbz|txz|(?:tar\.(?:gz|bz2|xz)))/mapnik-$1.$2/,\ repacksuffix=+ds \ https://github.com/mapnik/mapnik/releases \ -(?:.*?archive/)?(?:rel|v|mapnik)?[\-\_]?(\d\S+)\.(?:tgz|tbz|txz|(?:tar\.(?:gz|bz2|xz))) +(?:.*?/archive/)?(?:rel|v|mapnik)?[\-\_]?(\d\S+)\.(?:tgz|tbz|txz|(?:tar\.(?:gz|bz2|xz))) diff -Nru mapnik-3.0.19+ds/deps/agg/src/agg_pixfmt_rgba.cpp mapnik-3.0.22+ds/deps/agg/src/agg_pixfmt_rgba.cpp --- mapnik-3.0.19+ds/deps/agg/src/agg_pixfmt_rgba.cpp 2018-03-06 08:48:28.000000000 +0000 +++ mapnik-3.0.22+ds/deps/agg/src/agg_pixfmt_rgba.cpp 2019-01-22 10:58:22.000000000 +0000 @@ -1,9 +1,13 @@ - #include "agg_pixfmt_rgba.h" #pragma GCC diagnostic push #include +#include +#if BOOST_VERSION >= 106900 +#include +#else #include +#endif #include #include #pragma GCC diagnostic pop diff -Nru mapnik-3.0.19+ds/deps/boost/gil/extension/toolbox/hsl.hpp mapnik-3.0.22+ds/deps/boost/gil/extension/toolbox/hsl.hpp --- mapnik-3.0.19+ds/deps/boost/gil/extension/toolbox/hsl.hpp 2018-03-06 08:48:28.000000000 +0000 +++ mapnik-3.0.22+ds/deps/boost/gil/extension/toolbox/hsl.hpp 2019-01-22 10:58:22.000000000 +0000 @@ -16,7 +16,12 @@ #pragma GCC diagnostic push #include +#if BOOST_VERSION >= 106900 +#include +#else #include +#endif + #pragma GCC diagnostic pop namespace boost { namespace gil { @@ -26,11 +31,11 @@ namespace hsl_color_space { /// \brief Hue -struct hue_t {}; +struct hue_t {}; /// \brief Saturation struct saturation_t {}; /// \brief Lightness -struct lightness_t {}; +struct lightness_t {}; } /// \} @@ -43,8 +48,12 @@ /// \ingroup LayoutModel typedef layout hsl_layout_t; - +#if BOOST_VERSION >= 106800 +using bits32f = boost::gil::float32_t; +GIL_DEFINE_ALL_TYPEDEFS( 32f, float32_t, hsl ); +#else GIL_DEFINE_ALL_TYPEDEFS( 32f, hsl ); +#endif /// \ingroup ColorConvert /// \brief RGB to HSL @@ -98,12 +107,12 @@ if( lightness < 0.5f ) { - saturation = diff + saturation = diff / ( min_color + max_color ); } else { - saturation = ( max_color - min_color ) + saturation = ( max_color - min_color ) / ( 2.f - diff ); } @@ -112,7 +121,7 @@ if( std::abs( max_color - temp_red ) < 0.0001f ) { // max_color is red - hue = ( temp_green - temp_blue ) + hue = ( temp_green - temp_blue ) / diff; } @@ -120,8 +129,8 @@ { // max_color is green // 2.0 + (b - r) / (maxColor - minColor) - hue = 2.f - + ( temp_blue - temp_red ) + hue = 2.f + + ( temp_blue - temp_red ) / diff; } @@ -129,13 +138,13 @@ { // max_color is blue // 4.0 + (r - g) / (maxColor - minColor) - hue = 4.f - + ( temp_red - temp_green ) + hue = 4.f + + ( temp_red - temp_green ) / diff; } hue /= 6.f; - + if( hue < 0.f ) { hue += 1.f; @@ -173,29 +182,29 @@ float tempr, tempg, tempb; //Set the temporary values - if( get_color( src, lightness_t() ) < 0.5 ) + if( get_color( src, lightness_t() ) < 0.5 ) { temp2 = get_color( src, lightness_t() ) * ( 1.f + get_color( src, saturation_t() ) ); } else { - temp2 = ( get_color( src, lightness_t() ) + get_color( src, saturation_t() )) + temp2 = ( get_color( src, lightness_t() ) + get_color( src, saturation_t() )) - ( get_color( src, lightness_t() ) * get_color( src, saturation_t() )); } temp1 = 2.f - * get_color( src, lightness_t() ) + * get_color( src, lightness_t() ) - temp2; - tempr = get_color( src, hue_t() ) + 1.f / 3.f; + tempr = get_color( src, hue_t() ) + 1.f / 3.f; if( tempr > 1.f ) { tempr--; } - tempg = get_color( src, hue_t() ); + tempg = get_color( src, hue_t() ); tempb = get_color( src, hue_t() ) - 1.f / 3.f; if( tempb < 0.f ) @@ -203,7 +212,7 @@ tempb++; } - //Red + //Red if( tempr < 1.f / 6.f ) { red = temp1 + ( temp2 - temp1 ) * 6.f * tempr; @@ -214,7 +223,7 @@ } else if( tempr < 2.f / 3.f ) { - red = temp1 + (temp2 - temp1) + red = temp1 + (temp2 - temp1) * (( 2.f / 3.f ) - tempr) * 6.f; } else @@ -222,7 +231,7 @@ red = temp1; } - //Green + //Green if( tempg < 1.f / 6.f ) { green = temp1 + ( temp2 - temp1 ) * 6.f * tempg; @@ -241,7 +250,7 @@ green = temp1; } - //Blue + //Blue if( tempb < 1.f / 6.f ) { blue = temp1 + (temp2 - temp1) * 6.f * tempb; @@ -252,7 +261,7 @@ } else if( tempb < 2.f / 3.f ) { - blue = temp1 + (temp2 - temp1) + blue = temp1 + (temp2 - temp1) * (( 2.f / 3.f ) - tempb) * 6.f; } else diff -Nru mapnik-3.0.19+ds/deps/boost/gil/extension/toolbox/hsv.hpp mapnik-3.0.22+ds/deps/boost/gil/extension/toolbox/hsv.hpp --- mapnik-3.0.19+ds/deps/boost/gil/extension/toolbox/hsv.hpp 2018-03-06 08:48:28.000000000 +0000 +++ mapnik-3.0.22+ds/deps/boost/gil/extension/toolbox/hsv.hpp 2019-01-22 10:58:22.000000000 +0000 @@ -16,7 +16,12 @@ #pragma GCC diagnostic push #include +#if BOOST_VERSION >= 106900 +#include +#else #include +#endif + #pragma GCC diagnostic pop namespace boost { namespace gil { @@ -26,11 +31,11 @@ namespace hsv_color_space { /// \brief Hue -struct hue_t {}; +struct hue_t {}; /// \brief Saturation struct saturation_t{}; /// \brief Value -struct value_t {}; +struct value_t {}; } /// \} @@ -44,7 +49,13 @@ typedef layout hsv_layout_t; -GIL_DEFINE_ALL_TYPEDEFS( 32f, hsv ) +#if BOOST_VERSION >= 106800 +using bits32 = uint32_t; +using bits32f = float32_t; +GIL_DEFINE_ALL_TYPEDEFS( 32f, float32_t, hsv ) +#else +GIL_DEFINE_ALL_TYPEDEFS( 32f, hsv ); +#endif /// \ingroup ColorConvert /// \brief RGB to HSV @@ -80,11 +91,11 @@ bits32f diff = max_color - min_color; if( max_color < 0.0001f ) - { + { saturation = 0.f; } - else - { + else + { saturation = diff / max_color; } @@ -92,10 +103,10 @@ if( saturation < 0.0001f ) { //it doesn't matter what value it has - hue = 0.f; - } + hue = 0.f; + } else - { + { if( temp_red == max_color ) { hue = ( temp_green - temp_blue ) @@ -103,17 +114,17 @@ } else if( temp_green == max_color ) { - hue = 2.f + ( temp_blue - temp_red ) + hue = 2.f + ( temp_blue - temp_red ) / diff; } else { - hue = 4.f + ( temp_red - temp_green ) + hue = 4.f + ( temp_red - temp_green ) / diff; } //to bring it to a number between 0 and 1 - hue /= 6.f; + hue /= 6.f; if( hue < 0.f ) { @@ -161,7 +172,7 @@ frac = h - i; // p = value * (1 - saturation) - p = get_color( src, value_t() ) + p = get_color( src, value_t() ) * ( 1.f - get_color( src, saturation_t() )); // q = value * (1 - saturation * hue_frac) @@ -171,11 +182,11 @@ // t = value * (1 - (saturation * (1 - hue_frac)) // it grows with increasing distance from floor(hue) - t = get_color( src, value_t() ) + t = get_color( src, value_t() ) * ( 1.f - ( get_color( src, saturation_t() ) * ( 1.f - frac ))); switch( i % 6 ) - { + { case 0: // red to yellow { red = get_color( src, value_t() ); @@ -224,7 +235,7 @@ case 5: // magenta to red { red = get_color( src, value_t() ); - green = p; + green = p; blue = q; break; diff -Nru mapnik-3.0.19+ds/include/mapnik/agg/render_polygon_pattern.hpp mapnik-3.0.22+ds/include/mapnik/agg/render_polygon_pattern.hpp --- mapnik-3.0.19+ds/include/mapnik/agg/render_polygon_pattern.hpp 1970-01-01 00:00:00.000000000 +0000 +++ mapnik-3.0.22+ds/include/mapnik/agg/render_polygon_pattern.hpp 2019-01-22 10:58:22.000000000 +0000 @@ -0,0 +1,142 @@ +/***************************************************************************** + * + * This file is part of Mapnik (c++ mapping toolkit) + * + * Copyright (C) 2017 Artem Pavlenko + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + *****************************************************************************/ + +#ifndef MAPNIK_RENDER_POLYGON_PATTERN_HPP +#define MAPNIK_RENDER_POLYGON_PATTERN_HPP + +#include +#include +#include +#include +#include +#include +#include + +#pragma GCC diagnostic push +#include +#include "agg_basics.h" +#include "agg_rendering_buffer.h" +#include "agg_pixfmt_rgba.h" +#include "agg_color_rgba.h" +#include "agg_rasterizer_scanline_aa.h" +#include "agg_scanline_u.h" +#include "agg_renderer_scanline.h" +#include "agg_span_allocator.h" +#include "agg_span_pattern_rgba.h" +#include "agg_image_accessors.h" +#include "agg_conv_clip_polygon.h" +#pragma GCC diagnostic pop + +namespace mapnik { + +struct agg_pattern_base +{ + image_rgba8 const& pattern_img_; + renderer_common const& common_; + symbolizer_base const& sym_; + mapnik::feature_impl const& feature_; + proj_transform const& prj_trans_; + + agg::trans_affine geom_transform() const + { + agg::trans_affine tr; + auto transform = get_optional(sym_, keys::geometry_transform); + if (transform) + { + evaluate_transform(tr, feature_, common_.vars_, *transform, common_.scale_factor_); + } + return tr; + } +}; + +template +struct agg_polygon_pattern : agg_pattern_base +{ + using color_type = agg::rgba8; + using order_type = agg::order_rgba; + using blender_type = agg::comp_op_adaptor_rgba_pre; + using pixfmt_type = agg::pixfmt_custom_blend_rgba; + using wrap_x_type = agg::wrap_mode_repeat; + using wrap_y_type = agg::wrap_mode_repeat; + using img_source_type = agg::image_accessor_wrap; + using span_gen_type = agg::span_pattern_rgba; + using renderer_base = agg::renderer_base; + using renderer_type = agg::renderer_scanline_aa_alpha, + span_gen_type>; + + agg_polygon_pattern(image_rgba8 const& pattern_img, + renderer_common const& common, + symbolizer_base const& sym, + mapnik::feature_impl const& feature, + proj_transform const& prj_trans) + : agg_pattern_base{pattern_img, common, sym, feature, prj_trans}, + clip_(get(sym_, feature_, common_.vars_)), + clip_box_(clipping_extent(common)), + tr_(geom_transform()), + converter_(clip_box_, sym, common.t_, prj_trans, tr_, + feature, common.vars_, common.scale_factor_) + { + value_double simplify_tolerance = get(sym_, feature_, common_.vars_); + value_double smooth = get(sym_, feature_, common_.vars_); + + if (simplify_tolerance > 0.0) converter_.template set(); + converter_.template set(); + if (smooth > 0.0) converter_.template set(); + } + + void render(renderer_base & ren_base, rasterizer & ras) + { + coord offset(pattern_offset(sym_, feature_, prj_trans_, common_, + pattern_img_.width(), pattern_img_.height())); + agg::rendering_buffer pattern_rbuf((agg::int8u*)pattern_img_.bytes(), + pattern_img_.width(), pattern_img_.height(), + pattern_img_.width() * 4); + agg::pixfmt_rgba32_pre pixf_pattern(pattern_rbuf); + img_source_type img_src(pixf_pattern); + span_gen_type sg(img_src, safe_cast(offset.x), safe_cast(offset.y)); + + agg::span_allocator sa; + value_double opacity = get(sym_, feature_, common_.vars_); + renderer_type rp(ren_base, sa, sg, unsigned(opacity * 255)); + + using apply_vertex_converter_type = detail::apply_vertex_converter< + VertexConverter, rasterizer>; + using vertex_processor_type = geometry::vertex_processor; + apply_vertex_converter_type apply(converter_, ras); + mapnik::util::apply_visitor(vertex_processor_type(apply), feature_.get_geometry()); + agg::scanline_u8 sl; + agg::render_scanlines(ras, sl, rp); + } + + const bool clip_; + const box2d clip_box_; + const agg::trans_affine tr_; + VertexConverter converter_; +}; + +} // namespace mapnik + + +#endif // MAPNIK_RENDER_POLYGON_PATTERN_HPP diff -Nru mapnik-3.0.19+ds/include/mapnik/cairo/cairo_context.hpp mapnik-3.0.22+ds/include/mapnik/cairo/cairo_context.hpp --- mapnik-3.0.19+ds/include/mapnik/cairo/cairo_context.hpp 2018-03-06 08:48:28.000000000 +0000 +++ mapnik-3.0.22+ds/include/mapnik/cairo/cairo_context.hpp 2019-01-22 10:58:22.000000000 +0000 @@ -121,6 +121,30 @@ cairo_face_cache cache_; }; +struct cairo_closer +{ + void operator() (cairo_t * obj) + { + if (obj) cairo_destroy(obj); + } +}; + +struct cairo_surface_closer +{ + void operator() (cairo_surface_t * surface) + { + if (surface) cairo_surface_destroy(surface); + } +}; + +using cairo_ptr = std::shared_ptr; +using cairo_surface_ptr = std::shared_ptr; + +inline cairo_ptr create_context(cairo_surface_ptr const& surface) +{ + return cairo_ptr(cairo_create(&*surface),cairo_closer()); +} + class cairo_pattern : private util::noncopyable { public: @@ -131,9 +155,15 @@ const unsigned int *in_end = in_ptr + pixels; unsigned int *out_ptr; - surface_ = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, static_cast(data.width()), static_cast(data.height())); + surface_ = cairo_surface_ptr( + cairo_image_surface_create( + CAIRO_FORMAT_ARGB32, + static_cast(data.width()), + static_cast(data.height())), + cairo_surface_closer()); - out_ptr = reinterpret_cast(cairo_image_surface_get_data(surface_)); + out_ptr = reinterpret_cast( + cairo_image_surface_get_data(surface_.get())); while (in_ptr < in_end) { @@ -150,13 +180,18 @@ *out_ptr++ = (a << 24) | (r << 16) | (g << 8) | b; } // mark the surface as dirty as we've modified it behind cairo's back - cairo_surface_mark_dirty(surface_); - pattern_ = cairo_pattern_create_for_surface(surface_); + cairo_surface_mark_dirty(surface_.get()); + pattern_ = cairo_pattern_create_for_surface(surface_.get()); + } + + cairo_pattern(cairo_surface_ptr const& surface) : + surface_(surface), + pattern_(cairo_pattern_create_for_surface(surface_.get())) + { } ~cairo_pattern() { - if (surface_) cairo_surface_destroy(surface_); if (pattern_) cairo_pattern_destroy(pattern_); } @@ -190,7 +225,7 @@ } private: - cairo_surface_t * surface_; + cairo_surface_ptr surface_; cairo_pattern_t * pattern_; }; @@ -255,30 +290,6 @@ }; -struct cairo_closer -{ - void operator() (cairo_t * obj) - { - if (obj) cairo_destroy(obj); - } -}; - -struct cairo_surface_closer -{ - void operator() (cairo_surface_t * surface) - { - if (surface) cairo_surface_destroy(surface); - } -}; - -using cairo_ptr = std::shared_ptr; -using cairo_surface_ptr = std::shared_ptr; - -inline cairo_ptr create_context(cairo_surface_ptr const& surface) -{ - return cairo_ptr(cairo_create(&*surface),cairo_closer()); -} - class cairo_context : private util::noncopyable { public: diff -Nru mapnik-3.0.19+ds/include/mapnik/cairo/render_polygon_pattern.hpp mapnik-3.0.22+ds/include/mapnik/cairo/render_polygon_pattern.hpp --- mapnik-3.0.19+ds/include/mapnik/cairo/render_polygon_pattern.hpp 1970-01-01 00:00:00.000000000 +0000 +++ mapnik-3.0.22+ds/include/mapnik/cairo/render_polygon_pattern.hpp 2019-01-22 10:58:22.000000000 +0000 @@ -0,0 +1,211 @@ +/***************************************************************************** + * + * This file is part of Mapnik (c++ mapping toolkit) + * + * Copyright (C) 2017 Artem Pavlenko + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + *****************************************************************************/ + +#ifndef MAPNIK_CAIRO_RENDER_POLYGON_PATTERN_HPP +#define MAPNIK_CAIRO_RENDER_POLYGON_PATTERN_HPP + +#include +#include +#include +#include +#include +#include +#include +#include + +namespace mapnik { + +struct cairo_renderer_process_visitor_p +{ + cairo_renderer_process_visitor_p(agg::trans_affine const& image_tr, + double opacity) + : image_tr_(image_tr), + opacity_(opacity) + {} + + cairo_surface_ptr operator()(marker_svg const & marker) const + { + box2d bbox(marker.bounding_box()); + agg::trans_affine tr(transform(bbox)); + + double width = std::max(1.0, std::round(bbox.width())); + double height = std::max(1.0, std::round(bbox.height())); + cairo_rectangle_t extent { 0, 0, width, height }; + cairo_surface_ptr surface( + cairo_recording_surface_create( + CAIRO_CONTENT_COLOR_ALPHA, &extent), + cairo_surface_closer()); + + cairo_ptr cairo = create_context(surface); + cairo_context context(cairo); + + svg_storage_type & svg = *marker.get_data(); + svg_attribute_type const& svg_attributes = svg.attributes(); + svg::vertex_stl_adapter stl_storage( + svg.source()); + svg::svg_path_adapter svg_path(stl_storage); + + render_vector_marker(context, svg_path, svg_attributes, + bbox, tr, opacity_); + + return surface; + } + + cairo_surface_ptr operator()(marker_rgba8 const& marker) const + { + box2d bbox(marker.bounding_box()); + agg::trans_affine tr(transform(bbox)); + + cairo_rectangle_t extent { 0, 0, bbox.width(), bbox.height() }; + cairo_surface_ptr surface( + cairo_recording_surface_create( + CAIRO_CONTENT_COLOR_ALPHA, &extent), + cairo_surface_closer()); + + cairo_ptr cairo = create_context(surface); + cairo_context context(cairo); + + context.add_image(tr, marker.get_data(), opacity_); + + return surface; + } + + cairo_surface_ptr operator() (marker_null const&) const + { + cairo_surface_ptr surface( + cairo_recording_surface_create( + CAIRO_CONTENT_COLOR_ALPHA, nullptr), + cairo_surface_closer()); + cairo_ptr cairo = create_context(surface); + cairo_context context(cairo); + return surface; + } + +private: + agg::trans_affine transform(box2d & bbox) const + { + bbox *= image_tr_; + coord c = bbox.center(); + agg::trans_affine mtx = agg::trans_affine_translation( + 0.5 * bbox.width() - c.x, + 0.5 * bbox.height() - c.y); + return image_tr_ * mtx; + } + + agg::trans_affine const& image_tr_; + const double opacity_; +}; + +struct cairo_pattern_base +{ + mapnik::marker const& marker_; + renderer_common const& common_; + symbolizer_base const& sym_; + mapnik::feature_impl const& feature_; + proj_transform const& prj_trans_; + + agg::trans_affine geom_transform() const + { + agg::trans_affine tr; + auto transform = get_optional(sym_, keys::geometry_transform); + if (transform) + { + evaluate_transform(tr, feature_, common_.vars_, *transform, common_.scale_factor_); + } + return tr; + } +}; + +template +struct cairo_polygon_pattern : cairo_pattern_base +{ + cairo_polygon_pattern(mapnik::marker const& marker, + renderer_common const& common, + symbolizer_base const& sym, + mapnik::feature_impl const& feature, + proj_transform const& prj_trans) + : cairo_pattern_base{marker, common, sym, feature, prj_trans}, + clip_(get(sym_, feature_, common_.vars_)), + clip_box_(clipping_extent(common)), + tr_(geom_transform()), + converter_(clip_box_, sym, common.t_, prj_trans, tr_, + feature, common.vars_, common.scale_factor_) + { + value_double simplify_tolerance = get(sym, feature, common_.vars_); + value_double smooth = get(sym, feature, common_.vars_); + + converter_.template set(); + if (simplify_tolerance > 0.0) converter_.template set(); + if (smooth > 0.0) converter_.template set(); + } + + void render(cairo_fill_rule_t fill_rule, cairo_context & context) + { + value_double opacity = get(sym_, feature_, common_.vars_); + agg::trans_affine image_tr = agg::trans_affine_scaling(common_.scale_factor_); + auto image_transform = get_optional(sym_, keys::image_transform); + if (image_transform) + { + evaluate_transform(image_tr, feature_, common_.vars_, *image_transform, common_.scale_factor_); + } + + composite_mode_e comp_op = get(sym_, feature_, common_.vars_); + + cairo_save_restore guard(context); + context.set_operator(comp_op); + + cairo_renderer_process_visitor_p visitor(image_tr, opacity); + cairo_surface_ptr surface(util::apply_visitor(visitor, this->marker_)); + + coord offset(0, 0); + + cairo_rectangle_t pattern_surface_extent; + if (cairo_recording_surface_get_extents(surface.get(), &pattern_surface_extent)) + { + offset = pattern_offset(sym_, feature_, prj_trans_, common_, + pattern_surface_extent.width, pattern_surface_extent.height); + } + + cairo_pattern pattern(surface); + pattern.set_extend(CAIRO_EXTEND_REPEAT); + pattern.set_origin(-offset.x, -offset.y); + context.set_pattern(pattern); + + using apply_vertex_converter_type = detail::apply_vertex_converter; + using vertex_processor_type = geometry::vertex_processor; + apply_vertex_converter_type apply(converter_, context); + mapnik::util::apply_visitor(vertex_processor_type(apply),feature_.get_geometry()); + // fill polygon + context.set_fill_rule(fill_rule); + context.fill(); + } + + const bool clip_; + const box2d clip_box_; + const agg::trans_affine tr_; + VertexConverter converter_; +}; + +} // namespace mapnik + + +#endif // MAPNIK_CAIRO_RENDER_POLYGON_PATTERN_HPP diff -Nru mapnik-3.0.19+ds/include/mapnik/image_filter.hpp mapnik-3.0.22+ds/include/mapnik/image_filter.hpp --- mapnik-3.0.19+ds/include/mapnik/image_filter.hpp 2018-03-06 08:48:28.000000000 +0000 +++ mapnik-3.0.22+ds/include/mapnik/image_filter.hpp 2019-01-22 10:58:22.000000000 +0000 @@ -31,7 +31,11 @@ #pragma GCC diagnostic push #include +#if BOOST_VERSION >= 106900 +#include +#else #include +#endif #pragma GCC diagnostic pop #pragma GCC diagnostic push @@ -48,6 +52,14 @@ // stl #include +#if BOOST_VERSION >= 106800 +namespace boost { +namespace gil { + using bits32f = boost::gil::float32_t; +} +} +#endif + // 8-bit YUV //Y = ( ( 66 * R + 129 * G + 25 * B + 128) >> 8) + 16 //U = ( ( -38 * R - 74 * G + 112 * B + 128) >> 8) + 128 diff -Nru mapnik-3.0.19+ds/include/mapnik/image.hpp mapnik-3.0.22+ds/include/mapnik/image.hpp --- mapnik-3.0.19+ds/include/mapnik/image.hpp 2018-03-06 08:48:28.000000000 +0000 +++ mapnik-3.0.22+ds/include/mapnik/image.hpp 2019-01-22 10:58:22.000000000 +0000 @@ -74,7 +74,7 @@ static constexpr image_dtype dtype = T::id; static constexpr std::size_t pixel_size = sizeof(pixel_type); private: - detail::image_dimensions<65535> dimensions_; + detail::image_dimensions<4294836225> dimensions_; detail::buffer buffer_; double offset_; double scaling_; diff -Nru mapnik-3.0.19+ds/include/mapnik/image_impl.hpp mapnik-3.0.22+ds/include/mapnik/image_impl.hpp --- mapnik-3.0.19+ds/include/mapnik/image_impl.hpp 2018-03-06 08:48:28.000000000 +0000 +++ mapnik-3.0.22+ds/include/mapnik/image_impl.hpp 2019-01-22 10:58:22.000000000 +0000 @@ -39,8 +39,10 @@ : width_(width), height_(height) { - if (width < 0 || static_cast(width) > max_size) throw std::runtime_error("Invalid width for image dimensions requested"); - if (height < 0 || static_cast(height) > max_size) throw std::runtime_error("Invalid height for image dimensions requested"); + int64_t area = (int64_t)width * (int64_t)height; + if (width < 0) throw std::runtime_error("Invalid width for image dimensions requested"); + if (height < 0) throw std::runtime_error("Invalid height for image dimensions requested"); + if (area > max_size) throw std::runtime_error("Image area too large based on image dimensions"); } template diff -Nru mapnik-3.0.19+ds/include/mapnik/markers_placement.hpp mapnik-3.0.22+ds/include/mapnik/markers_placement.hpp --- mapnik-3.0.19+ds/include/mapnik/markers_placement.hpp 2018-03-06 08:48:28.000000000 +0000 +++ mapnik-3.0.22+ds/include/mapnik/markers_placement.hpp 2019-01-22 10:58:22.000000000 +0000 @@ -43,7 +43,7 @@ markers_placement_params const& params) : placement_type_(placement_type) { - switch (placement_type) + switch (marker_placement_enum(placement_type)) { default: case MARKER_POINT_PLACEMENT: @@ -66,7 +66,7 @@ ~markers_placement_finder() { - switch (placement_type_) + switch (marker_placement_enum(placement_type_)) { default: case MARKER_POINT_PLACEMENT: @@ -90,7 +90,7 @@ // Get next point where the marker should be placed. Returns true if a place is found, false if none is found. bool get_point(double &x, double &y, double &angle, bool ignore_placement) { - switch (placement_type_) + switch (marker_placement_enum(placement_type_)) { default: case MARKER_POINT_PLACEMENT: diff -Nru mapnik-3.0.19+ds/include/mapnik/offset_converter.hpp mapnik-3.0.22+ds/include/mapnik/offset_converter.hpp --- mapnik-3.0.19+ds/include/mapnik/offset_converter.hpp 2018-03-06 08:48:28.000000000 +0000 +++ mapnik-3.0.22+ds/include/mapnik/offset_converter.hpp 2019-01-22 10:58:22.000000000 +0000 @@ -40,6 +40,8 @@ namespace mapnik { +static constexpr double offset_converter_default_threshold = 5.0; + template struct offset_converter { @@ -48,7 +50,7 @@ offset_converter(Geometry & geom) : geom_(geom) , offset_(0.0) - , threshold_(5.0) + , threshold_(offset_converter_default_threshold) , half_turn_segments_(16) , status_(initial) , pre_first_(vertex2d::no_init) diff -Nru mapnik-3.0.19+ds/include/mapnik/renderer_common/pattern_alignment.hpp mapnik-3.0.22+ds/include/mapnik/renderer_common/pattern_alignment.hpp --- mapnik-3.0.19+ds/include/mapnik/renderer_common/pattern_alignment.hpp 2018-03-06 08:48:28.000000000 +0000 +++ mapnik-3.0.22+ds/include/mapnik/renderer_common/pattern_alignment.hpp 2019-01-22 10:58:22.000000000 +0000 @@ -20,49 +20,26 @@ * *****************************************************************************/ - #ifndef MAPNIK_PATTERN_ALIGNMENT_HPP #define MAPNIK_PATTERN_ALIGNMENT_HPP -#include +#include -namespace mapnik { namespace detail { +namespace mapnik { -struct apply_local_alignment -{ - apply_local_alignment(view_transform const& t, - proj_transform const& prj_trans, - box2d const& clip_box, - double & x, double & y) - : t_(t), - prj_trans_(prj_trans), - clip_box_(clip_box), - x_(x), - y_(y) {} - - void operator() (geometry::polygon_vertex_adapter & va) - { - using clipped_geometry_type = agg::conv_clip_polygon >; - using path_type = transform_path_adapter; - clipped_geometry_type clipped(va); - clipped.clip_box(clip_box_.minx(),clip_box_.miny(),clip_box_.maxx(),clip_box_.maxy()); - path_type path(t_, clipped, prj_trans_); - path.vertex(&x_,&y_); - } - - template - void operator() (Adapter &) - { - // no-op - } - - view_transform const& t_; - proj_transform const& prj_trans_; - box2d const& clip_box_; - double & x_; - double & y_; -}; +class symbolizer_base; +class feature_impl; +class proj_transform; +class renderer_common; + +coord pattern_offset( + symbolizer_base const & sym, + feature_impl const & feature, + proj_transform const & prj_trans, + renderer_common const & common, + unsigned pattern_width, + unsigned pattern_height); -}} +} #endif // MAPNIK_PATTERN_ALIGNMENT_HPP diff -Nru mapnik-3.0.19+ds/include/mapnik/renderer_common/render_pattern.hpp mapnik-3.0.22+ds/include/mapnik/renderer_common/render_pattern.hpp --- mapnik-3.0.19+ds/include/mapnik/renderer_common/render_pattern.hpp 2018-03-06 08:48:28.000000000 +0000 +++ mapnik-3.0.22+ds/include/mapnik/renderer_common/render_pattern.hpp 2019-01-22 10:58:22.000000000 +0000 @@ -38,8 +38,7 @@ struct marker_svg; template -void render_pattern(rasterizer & ras, - marker_svg const& marker, +void render_pattern(marker_svg const& marker, agg::trans_affine const& tr, double opacity, T & image); diff -Nru mapnik-3.0.19+ds/include/mapnik/svg/svg_parser.hpp mapnik-3.0.22+ds/include/mapnik/svg/svg_parser.hpp --- mapnik-3.0.19+ds/include/mapnik/svg/svg_parser.hpp 2018-03-06 08:48:28.000000000 +0000 +++ mapnik-3.0.22+ds/include/mapnik/svg/svg_parser.hpp 2019-01-22 10:58:22.000000000 +0000 @@ -74,6 +74,7 @@ svg_converter_type & path_; bool is_defs_; bool strict_; + bool ignore_; std::map gradient_map_; std::map const*> node_cache_; agg::trans_affine viewbox_tr_{}; diff -Nru mapnik-3.0.19+ds/include/mapnik/svg/svg_points_grammar_impl.hpp mapnik-3.0.22+ds/include/mapnik/svg/svg_points_grammar_impl.hpp --- mapnik-3.0.19+ds/include/mapnik/svg/svg_points_grammar_impl.hpp 2018-03-06 08:48:28.000000000 +0000 +++ mapnik-3.0.22+ds/include/mapnik/svg/svg_points_grammar_impl.hpp 2019-01-22 10:58:22.000000000 +0000 @@ -50,7 +50,6 @@ // commands function move_to_; function line_to_; - function close_; start = coord[move_to_(_r1, _1, false)] // move_to >> *(-lit(',') >> coord [ line_to_(_r1, _1,false) ] ); // *line_to diff -Nru mapnik-3.0.19+ds/include/mapnik/symbolizer_default_values.hpp mapnik-3.0.22+ds/include/mapnik/symbolizer_default_values.hpp --- mapnik-3.0.19+ds/include/mapnik/symbolizer_default_values.hpp 2018-03-06 08:48:28.000000000 +0000 +++ mapnik-3.0.22+ds/include/mapnik/symbolizer_default_values.hpp 2019-01-22 10:58:22.000000000 +0000 @@ -369,6 +369,13 @@ // font-feature-settings +// line-pattern +template <> +struct symbolizer_default +{ + static line_pattern_enum value() { return LINE_PATTERN_WARP; } +}; + } // namespace mapnik #endif // MAPNIK_SYMBOLIZER_DEFAULT_VALUES_HPP diff -Nru mapnik-3.0.19+ds/include/mapnik/symbolizer_enumerations.hpp mapnik-3.0.22+ds/include/mapnik/symbolizer_enumerations.hpp --- mapnik-3.0.19+ds/include/mapnik/symbolizer_enumerations.hpp 2018-03-06 08:48:28.000000000 +0000 +++ mapnik-3.0.22+ds/include/mapnik/symbolizer_enumerations.hpp 2019-01-22 10:58:22.000000000 +0000 @@ -219,6 +219,14 @@ DEFINE_ENUM (gamma_method_e, gamma_method_enum ); +enum line_pattern_enum : std::uint8_t +{ + LINE_PATTERN_WARP, + LINE_PATTERN_REPEAT, + line_pattern_enum_MAX +}; + +DEFINE_ENUM (line_pattern_e, line_pattern_enum ); } diff -Nru mapnik-3.0.19+ds/include/mapnik/symbolizer.hpp mapnik-3.0.22+ds/include/mapnik/symbolizer.hpp --- mapnik-3.0.19+ds/include/mapnik/symbolizer.hpp 2018-03-06 08:48:28.000000000 +0000 +++ mapnik-3.0.22+ds/include/mapnik/symbolizer.hpp 2019-01-22 10:58:22.000000000 +0000 @@ -94,7 +94,8 @@ target_vertical_alignment, target_upright, target_direction, - target_font_feature_settings + target_font_feature_settings, + target_line_pattern, }; template @@ -189,6 +190,7 @@ ENUM_FROM_STRING( text_upright_enum ) ENUM_FROM_STRING( direction_enum ) ENUM_FROM_STRING( gamma_method_enum ) +ENUM_FROM_STRING( line_pattern_enum ) // enum template diff -Nru mapnik-3.0.19+ds/include/mapnik/symbolizer_keys.hpp mapnik-3.0.22+ds/include/mapnik/symbolizer_keys.hpp --- mapnik-3.0.19+ds/include/mapnik/symbolizer_keys.hpp 2018-03-06 08:48:28.000000000 +0000 +++ mapnik-3.0.22+ds/include/mapnik/symbolizer_keys.hpp 2019-01-22 10:58:22.000000000 +0000 @@ -92,6 +92,7 @@ direction, avoid_edges, ff_settings, + line_pattern, MAX_SYMBOLIZER_KEY }; diff -Nru mapnik-3.0.19+ds/include/mapnik/text/scrptrun.hpp mapnik-3.0.22+ds/include/mapnik/text/scrptrun.hpp --- mapnik-3.0.19+ds/include/mapnik/text/scrptrun.hpp 2018-03-06 08:48:28.000000000 +0000 +++ mapnik-3.0.22+ds/include/mapnik/text/scrptrun.hpp 2019-01-22 10:58:22.000000000 +0000 @@ -37,7 +37,7 @@ UScriptCode scriptCode = USCRIPT_INVALID_CODE; }; -class ScriptRun : public UObject { +class ScriptRun : public icu::UObject { public: ScriptRun(); diff -Nru mapnik-3.0.19+ds/include/mapnik/text/symbolizer_helpers.hpp mapnik-3.0.22+ds/include/mapnik/text/symbolizer_helpers.hpp --- mapnik-3.0.19+ds/include/mapnik/text/symbolizer_helpers.hpp 2018-03-06 08:48:28.000000000 +0000 +++ mapnik-3.0.22+ds/include/mapnik/text/symbolizer_helpers.hpp 2019-01-22 10:58:22.000000000 +0000 @@ -155,7 +155,7 @@ protected: void init_converters(); void initialize_points() const; - template