diff --git a/tests/python_tests/load_map_test.py b/tests/python_tests/load_map_test.py
index 1772eb093..69f34e9b5 100644
--- a/tests/python_tests/load_map_test.py
+++ b/tests/python_tests/load_map_test.py
@@ -37,7 +37,7 @@ def test_good_files():
for filename in good_files:
try:
m = mapnik.Map(512, 512)
- strict = True
+ strict = False
mapnik.load_map(m, filename, strict)
base_path = os.path.dirname(filename)
mapnik.load_map_from_string(m,open(filename,'rb').read(),strict,base_path)
diff --git a/tests/visual_tests/data/bug1532.osm b/tests/visual_tests/data/bug1532.osm
new file mode 100644
index 000000000..434c746ff
--- /dev/null
+++ b/tests/visual_tests/data/bug1532.osm
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/visual_tests/data/bug1533.osm b/tests/visual_tests/data/bug1533.osm
new file mode 100644
index 000000000..84ce9f8c6
--- /dev/null
+++ b/tests/visual_tests/data/bug1533.osm
@@ -0,0 +1,75 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/visual_tests/data/lines2.csv b/tests/visual_tests/data/lines2.csv
new file mode 100644
index 000000000..4d9b59551
--- /dev/null
+++ b/tests/visual_tests/data/lines2.csv
@@ -0,0 +1,17 @@
+WKT
+"LINESTRING (0.764185269 -0.313888573,0.751190328 -0.314123131,0.737134133 -0.314376844,0.725222103 -0.314591855,0.702047791 -0.315010149,0.688792951 -0.315249398,0.67553811 -0.315488647,0.661092067 -0.315749397,0.641426389 -0.31610436,0.627370194 -0.316358073,0.597525145 -0.316896774,0.584140356 -0.317138368,0.570885515 -0.317377617,0.549747077 -0.317759164,0.533546717 -0.318051579,0.511866823 -0.318442899)"
+"LINESTRING (0.289403766 -0.004374853,0.278998818 -0.012163343,0.267744132 -0.020587892,0.258206263 -0.027727341,0.239650772 -0.041616812,0.229037724 -0.049561069,0.218424677 -0.057505325,0.206857843 -0.066163524,0.191111688 -0.077950096,0.179857002 -0.086374637,0.155960304 -0.104262178,0.145243208 -0.112284308,0.134630161 -0.120228551,0.117704778 -0.132897797,0.104733276 -0.14260742,0.087374354 -0.155601173)"
+"LINESTRING (0.374895934 -0.188749064,0.362443535 -0.270566448,0.295784263 -0.319614717,0.213966216 -0.307162504,0.164917295 -0.240503998,0.177369693 -0.158686453,0.244028965 -0.109637668,0.325847013 -0.122090041,0.374895934 -0.188749064)"
+"LINESTRING (0.892955147 -0.270397048,0.894000762 0.309916722)"
+"LINESTRING (0.055417591 0.248226176,0.059600051 -0.260986614)"
+"LINESTRING (0.777676102 0.026948692,0.765128722 0.016492544,0.747353269 0.008127625,0.731669045 0.012310084,0.719121666 0.021720618,0.708665516 0.03740484,0.697163752 0.05099783,0.685661988 0.06040836,0.666840919 0.061453974,0.646974236 0.054134673,0.627107552 0.041587299,0.608286483 0.024857463,0.59260226 0.013878507,0.574826806 0.005513587,0.559142582 0.009696047,0.546595203 0.019106581,0.536139054 0.034790803,0.524637289 0.048383794,0.513135525 0.057794324,0.494314456 0.058839938,0.474447773 0.051520637,0.454581089 0.038973262,0.434191598 0.021459215,0.421644219 0.011003066,0.403868765 0.002638146,0.388184541 0.006820606,0.375637162 0.01623114,0.365181013 0.031915363,0.353679249 0.045508354,0.342177485 0.054918884,0.323356416 0.055964499,0.303489732 0.048645197,0.283623049 0.036097822,0.26480198 0.019367985,0.249117756 0.008389028,0.231342302 0.000024109,0.215658079 0.004206569,0.203110699 0.013617103,0.19265455 0.029301326,0.181152786 0.042894317,0.169651022 0.052304848,0.150829953 0.053350463,0.13096327 0.046031161,0.111096586 0.033483785,0.092275517 0.016753948)"
+"LINESTRING (0.093560033 0.138666471,0.112381102 0.155396254,0.132247785 0.167943584,0.152114469 0.175262855,0.170935538 0.174217245,0.182437302 0.164806752,0.193939066 0.15121381,0.204395215 0.135529635,0.216942594 0.126119125,0.232626818 0.121936675,0.250402272 0.130301574,0.266086496 0.1412805,0.284907564 0.158010282,0.304774248 0.170557609,0.324640932 0.17787688,0.343462 0.17683127,0.354963765 0.167420778,0.366465529 0.153827838,0.376921678 0.138143665,0.389469057 0.128733156,0.405153281 0.124550707,0.422928735 0.132915605,0.435476114 0.143371724,0.455865605 0.160885712,0.475732289 0.173433038,0.495598972 0.180752307,0.514420041 0.179706697,0.525921805 0.170296207,0.537423569 0.156703268,0.547879718 0.141019097,0.560427098 0.13160859,0.576111322 0.127426141,0.593886775 0.135791038,0.609570999 0.146769961,0.628392068 0.163499739,0.648258751 0.176047063,0.668125435 0.183366331,0.686946504 0.182320722,0.698448268 0.172910232,0.709950032 0.159317296,0.720406181 0.143633127,0.73295356 0.13422262,0.748637784 0.130040171,0.766413238 0.138405068,0.778960617 0.148861184)"
+"LINESTRING (0.848982597 0.288736581,0.754751857 0.220905399,0.657509669 0.293052099,0.548765717 0.208358108,0.429565615 0.301416905,0.295726905 0.205221284,0.170253114 0.303508106,0.083467075 0.248091159)"
+"LINESTRING (0.090332128 0.348151688,0.187574317 0.410887204,0.309911263 0.313646971,0.436430669 0.403568084,0.548311466 0.316783769,0.660192263 0.398340138,0.759525681 0.319920565,0.85656627 0.390823271)"
+"LINESTRING (0.613502456 -0.015963875,0.790148448 -0.024699116,0.812471843 -0.037316685,0.828971743 -0.062551817,0.830912908 -0.097492748,0.828001161 -0.133404222,0.821207084 -0.172227378,0.807618931 -0.188727197,0.760060395 -0.191638928,0.603796632 -0.185815465)"
+"LINESTRING (0.680933124 -0.244990843,0.50407624 -0.24631506,0.481071446 -0.234987473,0.463163199 -0.210731652,0.459238186 -0.175957816,0.460103038 -0.139938937,0.464678354 -0.100792195,0.477306218 -0.0835463,0.52462221 -0.077934757,0.680964265 -0.074862572)"
+"LINESTRING (0.345138881 -0.004954418,0.367100653 -0.140842741)"
+"LINESTRING (0.41651464 -0.017307915,0.393180257 -0.171040066)"
+"LINESTRING (0.45220252 -0.037897074,0.59769926 -0.042014905)"
+"LINESTRING (0.72397945 -0.139470135,0.577110099 -0.140842741)"
+"LINESTRING (0.820051288 0.095328839,0.850629325 0.095086193,0.850629325 0.072034887,0.735372668 0.072034887)"
diff --git a/tests/visual_tests/data/points.csv b/tests/visual_tests/data/points.csv
index f895b612f..16b469d2f 100644
--- a/tests/visual_tests/data/points.csv
+++ b/tests/visual_tests/data/points.csv
@@ -1,11 +1,11 @@
-lat,long,name,nr
-0,0,Test one,1
-0,0.1,Test two,2
-0,0.2,Test three,3
-0,0.3,Test four,4
-0,0.4,Test five,5
-0,0.5,Test six,6
-0,0.6,Test seven,7
-0,0.7,Test eight,8
-0,0.8,Test nine,9
-0,0.9,Test ten,10
\ No newline at end of file
+lat,long,name,nr,color
+0,0,Test one,1,#ff0000
+0,0.1,Test two,2,red
+0,0.2,Test three,3,#00ff00
+0,0.3,Test four,4,green
+0,0.4,Test five,5,#0000ff
+0,0.5,Test six,6,blue
+0,0.6,Test seven,7,#000000
+0,0.7,Test eight,8,black
+0,0.8,Test nine,9,#ffffff
+0,0.9,Test ten,10,white
\ No newline at end of file
diff --git a/tests/visual_tests/fonts/KhmerOS.ttf b/tests/visual_tests/fonts/KhmerOS.ttf
new file mode 100644
index 000000000..2449c547d
Binary files /dev/null and b/tests/visual_tests/fonts/KhmerOS.ttf differ
diff --git a/tests/visual_tests/fonts/copyright b/tests/visual_tests/fonts/copyright
new file mode 100644
index 000000000..67ffde0d8
--- /dev/null
+++ b/tests/visual_tests/fonts/copyright
@@ -0,0 +1,28 @@
+This package was adopted by Soputtra San on
+Mon, 23 Jul 2007 11:04:29 +1000
+
+This package was debianized by Paul Wise on
+Wed, 14 Sep 2005 15:45:30 +0800.
+
+It was downloaded from http://www.khmeros.info/drupal/?q=en/download/fonts
+
+Copyright:
+
+Copyright 2005, 2006 Danh Hong
+Copyright 2005, 2006 Open Forum of Cambodia
+
+License:
+
+This font 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.
+
+On Debian systems, the complete text of the GNU Lesser General Public
+License can be found in the file /usr/share/common-licenses/LGPL.
+
diff --git a/tests/visual_tests/grids/charspacing-200-400-1.0-grid-reference.json b/tests/visual_tests/grids/charspacing-200-400-1.0-grid-reference.json
new file mode 100644
index 000000000..ba7abbc9f
--- /dev/null
+++ b/tests/visual_tests/grids/charspacing-200-400-1.0-grid-reference.json
@@ -0,0 +1,109 @@
+{
+ "keys": [
+ "",
+ "6"
+ ],
+ "data": {},
+ "grid": [
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " !!!! !! !! !!!! !!!! ",
+ " !! ! !!!! !! ! !! ",
+ " !! ! ! ",
+ " !!!! ! ! !! !! ! ",
+ " ! ! ! !! ! ",
+ " !!!! ! !! !!!! !! ",
+ " !! ! !! !!! !! ",
+ " !! ! ! ! ",
+ " ! !!!! !!!! !! !! ! ",
+ " ! !!!! ! ! ",
+ " ! ! !! !!!! ! !!! ! ",
+ " ! !!! !! !! !!!! ",
+ " ! ! ! ! !! ",
+ " ! !! !!!! ! !! !! ",
+ " !! ! ! !! ! ! ",
+ " !!!! ! !!!! !!! ! ! ",
+ " !! !! !! ! !! ! !! ",
+ " !! ! ! ! ! ",
+ " !!! !!!! ! !! !! ! ",
+ " ! ! !! ! ! ! ",
+ " !!! ! !!!! !!! ! !! ",
+ " !! !! ! !! !! ",
+ " !! ! ! ! ",
+ " ! !!! !!!! ! ! !! ! ",
+ " ! ! !! ! ! ! ! ",
+ " ! ! !!! !! ! !!! ! !! ",
+ " !! !! !!! ! ! !!! ",
+ " !! ! ! ! ! ! ",
+ " ! !!! ! ! ! !!!!! !! ",
+ " ! ! ! ! ! !! ! ",
+ " ! !!! ! ! ! ! ! ! ! !! ",
+ " ! !!!!! ! ! ! ",
+ " ! ! ! ",
+ " ! ! ! ! ! ! ! ",
+ " ! ! ! ! ! ! ",
+ " ! ! ! ! ! ! ! ! ! ! ! ",
+ " !! ! ! !! ! ! ! !! ! ",
+ " ! ! ! ! ",
+ " ! !! ! ! ! ! ! ! ",
+ " ! ! ! ! ! ",
+ " ! ! ! ! ! ! ! ! !! ! !!",
+ " !! !! !! !! !! ! !!",
+ " ! ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/charspacing-lines-300-300-1.0-grid-reference.json b/tests/visual_tests/grids/charspacing-lines-300-300-1.0-grid-reference.json
new file mode 100644
index 000000000..9501ec8b0
--- /dev/null
+++ b/tests/visual_tests/grids/charspacing-lines-300-300-1.0-grid-reference.json
@@ -0,0 +1,84 @@
+{
+ "keys": [
+ "",
+ "6"
+ ],
+ "data": {},
+ "grid": [
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ! ! !! ! ! ! !! ! ! ! !! !! ",
+ " ! !! ! !! ! !! !! ",
+ " ! ! ",
+ " ! ! !! ! ! !! ",
+ " ! ! ! ! ! ",
+ " !!!! ! ! ! !! ! ! ! ! ! ",
+ " !!!! ! !! ! !! ! ! ",
+ " ! ! ! ! ",
+ " ! ! ! ! ! !! ! !! ",
+ " ! ! ! ! ! ! ! ! ! ! ",
+ " ! ! ! ! ! ! ! ! ! ! !! ",
+ " !!! ! ! ! !!! ",
+ " !! ! !! ",
+ " ! !!!!! !!! !!!! !! ",
+ " !!!!!! ! ! ! !! ! !!!! ",
+ " ! ! ! ! !!!! !!! ! ! !! ",
+ " ! !! !!! !!! !!!! ",
+ " !! ! ! ! ! ! ",
+ " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ",
+ " !!!! !!!! !!! ! !! ",
+ " !!! ! !!!! !!! ! !! ! ",
+ " !!! !!! ! ! !!!! ",
+ " ! ! ! ! ! ",
+ " !!! ! !!! ! ! !! ! ",
+ " ! !! ! !! !! ! ! ",
+ " !!!!!! ! !! !!! ! !! ",
+ " !! !!! !!! ! !! ! ",
+ " ! ! ! !! ",
+ " ! !! ! !! ! !! !! ",
+ " ! !! ! !!!!! ! ! ",
+ " ! ! !! ! !! !!! ! ",
+ " !!!! !!! ! !! !!! ",
+ " !! ! ! ! ",
+ " !!!! ! !! ! !! ! ",
+ " !!!!! ! !!!!! ! !!! ",
+ " !!!! !!!!! !!!!! ! ",
+ " !!! !! !! ! !! !!! ",
+ " !! ! ! ! ! ",
+ " ! ! ! !! !!! !! ! ",
+ " ! !!!!! ! ",
+ " ! !! ! !!! ! !! !!!! ",
+ " !! !! !! !! !! !! ! ",
+ " ! ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/harfbuzz-800-200-1.0-grid-reference.json b/tests/visual_tests/grids/harfbuzz-800-200-1.0-grid-reference.json
new file mode 100644
index 000000000..3cb981221
--- /dev/null
+++ b/tests/visual_tests/grids/harfbuzz-800-200-1.0-grid-reference.json
@@ -0,0 +1,68 @@
+{
+ "keys": [
+ "",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "7",
+ "8",
+ "9",
+ "10"
+ ],
+ "data": {},
+ "grid": [
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ! # $ % & ' ( ) * + ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/hb-fontsets-800-200-1.0-grid-reference.json b/tests/visual_tests/grids/hb-fontsets-800-200-1.0-grid-reference.json
new file mode 100644
index 000000000..2caf3037b
--- /dev/null
+++ b/tests/visual_tests/grids/hb-fontsets-800-200-1.0-grid-reference.json
@@ -0,0 +1,62 @@
+{
+ "keys": [
+ "",
+ "6",
+ "8",
+ "2",
+ "4"
+ ],
+ "data": {},
+ "grid": [
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ! ! # # ",
+ " $$$ ! !! # ## ",
+ " ",
+ " $$ $ $ $$$$ $ %%%% %%%%% %%%% %%%%%%%%%%%%%%% %%%% !!!!! !! ! ! ! ! #### # # #### # ",
+ " $$ $ $ $$ $ $ $$ % %% % % % %% %% % !! !!! ! ! ! ! ! # # # # ## # ## ## ",
+ " $$ $ $ $$$$ $ $$$$ $ %%%% % % % % %% %% % ! ! !!!!! ! !!!!! ! # # # #### # #### # ",
+ " $ $ $ $ $ $ $ $ % %% % % % %% %% % ! ! ! ! ! ! ! # # # # # # # # ",
+ " $$$$ $$ $ $ $$ $ $$ % % % % % %% %% % !! !! ! ! !! ! !! # # ## # # ## # ## ",
+ " $$ $ $ $$ $ $ $$ $ $$ % %% % % % % %% %% % !! !! ! !! ! ! !! ! !! # ## # ## # # ## # ## ",
+ " % % % %% %% % !!! ",
+ " $ $ %%%%% %%%% %%%%%%%%%%%%%%% %%%% # ",
+ " $ $ # ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " $$ $$ $ $ %% % % %% % ! ! ! !! ! # ## # # ### # ",
+ " $ $ $$$$$ $$$$ $$ %%%%%%%% %%%%%% % !!! !!! !!!!!!! !! ## ## ###### ###### ",
+ " $ ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/khmer-800-200-1.0-grid-reference.json b/tests/visual_tests/grids/khmer-800-200-1.0-grid-reference.json
new file mode 100644
index 000000000..3cb981221
--- /dev/null
+++ b/tests/visual_tests/grids/khmer-800-200-1.0-grid-reference.json
@@ -0,0 +1,68 @@
+{
+ "keys": [
+ "",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "7",
+ "8",
+ "9",
+ "10"
+ ],
+ "data": {},
+ "grid": [
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ! # $ % & ' ( ) * + ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/line_break-800-800-1.0-grid-reference.json b/tests/visual_tests/grids/line_break-800-800-1.0-grid-reference.json
new file mode 100644
index 000000000..509c19d84
--- /dev/null
+++ b/tests/visual_tests/grids/line_break-800-800-1.0-grid-reference.json
@@ -0,0 +1,218 @@
+{
+ "keys": [
+ "",
+ "7",
+ "3",
+ "1",
+ "2",
+ "4",
+ "5",
+ "6",
+ "8",
+ "9",
+ "10"
+ ],
+ "data": {},
+ "grid": [
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ! ",
+ " !! ! !!!!! !! ",
+ " ! ! ! ! ! ",
+ " ! !! ! ! ",
+ " ! ! !! !! !!!! ",
+ " !! ! !!! !! !!!!! !!!!!!!!! ",
+ " ",
+ " ! ",
+ " ### #### # !! ! ! !! !! ",
+ " # # # # ! !! ! ",
+ " ## # # # #### ###### # ### ## ## # # #### #### ",
+ " # ## # ## # # ## # # # ## # ## # # # # # # ! !! ! ! ! ",
+ " ## ## # # #### # # # # # # #### # # # # # !! !!!!!!! !!!!! ! ",
+ " # # # # # # # # # ## ## ## # # # # # ",
+ " #### # #### # # # ### # # # # # ### ! ",
+ " # !! ! !! !! !! ! !! !! ",
+ " #### ! !!! ! ",
+ " ! ! ! ! ",
+ " # # !!! !!!! ! !!! ",
+ " # # !!!!!!!! !!!! !!!!!! ",
+ " # # ### ### ### ",
+ " # # # # ## ## # ! ! ! ! ",
+ " # # # # ##### ## ! !!!!! ! !!!!! !!!! ",
+ " # # # # # # ! !! ! !! ",
+ " # # # # ## ## # ",
+ " ## ## ",
+ " ",
+ " ",
+ " ",
+ " $ % # & ' ( ! ) * + ",
+ " ",
+ " ",
+ " ",
+ " # # # # # # ## ) ) )) ) ) ) )) ) ",
+ " ## # # ## ##### # # # ## # # #### ### # #### ## #### # ##### ## ) ) ))) ) ) )) )))) )) ) ))) )) ) )) ))))))) ))))))) ))) ) ",
+ " ## # ###### ### ## # # ## ### ######### ###### # ####### #### #### ))) ))) ))))) ))) ))) ))) ) )))) ))) ))))))))))) ))))) )))))))) ",
+ " ",
+ " ### # #### ### # # #### ##### ## ### ##### ### ### ##### ####### ### ######### )) ) ))))))) )))) ) ) ) ))))) ) ))))))) )) ) ))) ) )))) ) )))))))))) ",
+ " #### # # # # ## ## ## ## # ## ## ## # # # ## ## ### #### ## # ) ) ))) ) )) ) ) )) ) )))) ))) )) )) )))))) ) )) ) ))) ",
+ " # ",
+ " # # # # # # # ) )) ) ) ) ) ) ) ) ) ",
+ " # # ### #### # # ## ### # ### ##### #### ##### #### #### #### # # ))) )))) ))) ) ) ))) )))) ) ) )) ))) ) ))) ))))) )))) ))))) )))) ) ",
+ " ######## #### ## # # #### # ######## # ### ## ######### ### #### # #### ))) )))))))))) )))))))) )))) )) ) ) )))) ) )))))))) ) ))) )) ))))))))) ",
+ " ",
+ " ### ## # ##### ####### ## ####### ### ########### # ####### ## # ### ### #### # ) )))) ))) ))))) ))) )) ) ))))) ))))))) )) ))))))) ))) ))))))))))) ) ",
+ " # ## # ### ###### #### ## # # ## # # # # ###### ### ## ## ### ## ## ))) )) )) ) ) )) ) ))) )))))) )))) )) ) ) )) ) ) ) ) ",
+ " # # ) ",
+ " # ## # #### # # ## # # ) ) ) ) ) ) ) ",
+ " ## ### # ### #### ##### # ## #### # # ## ## ##### #### # ) )))) ))))))) )))) ))) ) )) )) )) ))))) )) ))))))) ) )))) ",
+ " # # #### ## ##### # ####### ### ###### # ### # #### #### ##### ## ))))))) )))) ))))) ))) ))))))) ))) ))) )))))))) ) ) )))))) ) ) )))))) ) ",
+ " ",
+ " ####### # ##### # ### ### # ###### ### # # #### # #### ##### #### ### ## ######## )) )) )) ))) )) ))))))) )) ))))))) ) ) ))) ) )) ) ))))) )) ",
+ " ###### ## # # # # ### # ### # # # # # ### # ## ## ## ## # # # ##### ))) ) ) ) ) ) ) )))) ) )) ) ) ))) ) ",
+ " # ) ) ",
+ " # # # # ## # # ## ) )) )) ) ) ) )) ) ",
+ " ### # # ### ## # ### ###### ### # ### # # # ##### ## ## # #### ))))) ))) )) )))) )) )) ) )))) )))) ))) )) ))))) )))) ) ) ) )))) ",
+ " #### ### ##### ### ### ####### #### ### #### # # #### ######## # ### ###### )))))) ))) ))) ))) ) )))) )))) ))))) )))) ))) ))) )))))))))))))) ) ",
+ " ",
+ " # # # ### #### # # ## #### #### #### # # # ## ###### #### # ## ### ## ## ))))))))) ) )))) )) )) )) )) )) )) ) )) ) )))))))) ))) )) ))) ) )))) ",
+ " # ## # ### # ## ## # ####### #### # # ### #### # ## # # ## # # )))) )))) )) ))) ) ) ) ) ) ) ))) )))) ) )) ) )) ) ) ",
+ " # # # # ) ) ",
+ " # # ## ## # # # ) ) ) ))) ) ) ) ",
+ " ##### # # ## ##### ### # #### ### # #### ## # ## # # ## ### ## #### ))) ) )))) ) ))))) )))) ))))) ) ) ) ))))) )))) ) )) )) ) )) ",
+ " # ####### ## ####### ########### ##### #### # #### ## # # ###### # ##### ) ))))))))))) )))) )))))))))) )))))) )))) ))))))))) ))) ) )) ))) )) ))) ",
+ " ",
+ " ## # # # # ############ # ### #### ###### ### #### # # ###### ####### #### ## )) )) )))) ))))) )))))) )))) )) )))) ))))) )) )) ))) ))) ) ))) ",
+ " ### # # # ########## ### # ### #### # ### ## ## # # # ###### # ## ## ))) ) ) ) ) ))) )))) )))) ))) ) )) ) ) ) ) )) ) ) ) ",
+ " # # ) ",
+ " )) ) ) ) ) ",
+ " # # #### )) ) ) ) )))) )) ) ) ) )) ))) ) ) ))) ) ))) )) )) ) ",
+ " # ### ##### ))) ))) )) )))))) )))))) ))) ))) ))) )) )))) ) ))))))))) ))) ) ",
+ " ",
+ " ) ))) )))) ) ))) ))))))))))) ",
+ " ) ) ) )) )) )))) )))) ",
+ " ) ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/lines-4-200-200-1.0-grid-reference.json b/tests/visual_tests/grids/lines-4-200-200-1.0-grid-reference.json
new file mode 100644
index 000000000..44f4d8b4c
--- /dev/null
+++ b/tests/visual_tests/grids/lines-4-200-200-1.0-grid-reference.json
@@ -0,0 +1,74 @@
+{
+ "keys": [
+ "",
+ "9",
+ "8",
+ "4",
+ "5",
+ "7",
+ "16",
+ "6",
+ "12",
+ "10",
+ "2",
+ "13",
+ "14",
+ "11",
+ "3",
+ "15",
+ "1"
+ ],
+ "data": {},
+ "grid": [
+ " ",
+ " ",
+ " ",
+ " !! ! ",
+ " !!!!! !!!! !!! ",
+ " !!!!!!!! !!!!!!! !!!!!! !!! ",
+ " !!!!!!!!!! !!!!!!!!! !!!!!!!! !!!! ",
+ " !!!! !!!!! !!!!! !!!!!!!!!!!!!!!!!!!!! ",
+ " !! # !!!!!!!!! # !!!!!!!!! !!!!!!!! ",
+ " #### !!!!!!! ### !!!!! ## !!!!!! ",
+ " ###### !!! ###### !!! ##### !! ## $$$ ",
+ " ########## ! ######### ######## ####$$$ ",
+ " #### ##### ############ ###############$$$ ",
+ " %%%## ########## ######### ######## $$$ ",
+ " %%% ####### ####### ##### $$$ ",
+ " %%% &&&& #####& &&### &&&&## $$$ ",
+ " %%%&&&&&&& #&&& &&&&& &&&&&&& $$$ ",
+ " %%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& $$$ ",
+ " %%%&&& &&&&&&&&&&&&&&&& &&&&&&& &&&&&& $$$ ",
+ " %%% & &&&&& &&&&&& &&&&& &&&&& '''$$ ",
+ " %%% &&& && & '''''''$$ ",
+ " %%% ((( (((( (((( ((((( '''''''$$ ",
+ " %%%((((((( (((((( ((((((( ((((((('''''''$$ ",
+ " %%(((((((((((((((((((((((((((((((((((( $$$ ",
+ " %%%((( (((((((((((((((( ((((((( ((((( $$$ ",
+ " %%% ( ((((( ))(((( ((((*********** $$$ ",
+ " %%% (((++ ))),,,--------************ $$$ ",
+ " %%% ++++++ ))),,,--------***.*********$$$ ",
+ " %%% +++++ ))),,,--------.... ****$$$ ",
+ " %%% +++++/// ))),,,............ ***$$$ ",
+ " %%% +++++//////)),,,,............ ***$$$ ",
+ " %%%++++////////)),,,,... 0000000 ***$$$ ",
+ " %%%+++//////////),,,.... 0000000 ***$$$ ",
+ " %%%+++//// //,,,... 0000000*******$$$ ",
+ " %%% /// /// .... *************$$$ ",
+ " %%% /// /// .... ************ $$$ ",
+ " %%% /// /// ............. *** $$$ ",
+ " %%% //// /// ............ $$$ ",
+ " %%% //// //// ........... $$$ ",
+ " ///// ////// 111 ",
+ " /////////// 1111111111111 ",
+ " //////// 1111111111111 ",
+ " ///// 1111111111111 ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/lines-4-400-400-1.0-grid-reference.json b/tests/visual_tests/grids/lines-4-400-400-1.0-grid-reference.json
new file mode 100644
index 000000000..dda12faf4
--- /dev/null
+++ b/tests/visual_tests/grids/lines-4-400-400-1.0-grid-reference.json
@@ -0,0 +1,124 @@
+{
+ "keys": [
+ "",
+ "9",
+ "8",
+ "4",
+ "5",
+ "7",
+ "16",
+ "6",
+ "2",
+ "10",
+ "12",
+ "13",
+ "14",
+ "11",
+ "3",
+ "15",
+ "1"
+ ],
+ "data": {},
+ "grid": [
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ! ",
+ " !!!! !! ",
+ " !!!!!! !!!! !!! ",
+ " !!!!!!!!! !!!!!!! !!!!! !! ",
+ " !!!!!!!!!!!! !!!!!!!!!! !!!!!!!! !!! ",
+ " !!!!!! !!!!!! !!!!! !!!!!! !!!!!!!!!!! !!!!! ",
+ " !!!!!! !!!!! !!!!!! !!!!! !!!!!! !!!!!! !!!!!! ",
+ " !!!!! !!!!! !!!!!! !!!!!! !!!!!! !!!!! !!!!! ",
+ " !!!! !!!!!! !!!!!! !!!!!! !!!!! !!!!! !!!!!! ",
+ " ! !!!!!!!!!!!! !!!!!!!!!!! !!!!!!!!!!! ",
+ " !!!!!!!!! !!!!!!!!! !!!!!!! ",
+ " # !!!!!!! # !!!!!! !!!!! ",
+ " #### !!!!! #### !!! ## !!! $$$ ",
+ " ####### ! ###### ! #### # $$$ ",
+ " ########## ######### ####### ### $$$ ",
+ " ####### ##### ###### ##### ######### ##### $$$ ",
+ " ###### ###### ###### ##### ###### ##### ##### $$$ ",
+ " ##### ###### ##### ###### ##### ###### ###### $$$ ",
+ " %%%%#### ##### ###### ###### ##### ###### ###### $$$ ",
+ " %%%% # ##### ##### ##### ###### ########## $$$ ",
+ " %%%% ############ ########### ######## $$$ ",
+ " %%%% ######### ######## ##### $$$ ",
+ " %%%% ###### ###### ## $$$ ",
+ " %%%% #### ### && $$$ ",
+ " %%%% &&&& ##&&&&& &&&&&& &&&&&&& $$$ ",
+ " %%%% &&&&&&&& &&&&&&&& &&&&&&&& &&&&&&&&&& $$$ ",
+ " %%%% &&&&&&&&& &&&&&&&&&& &&&&&&&&&&& &&&&&&&&&&&& $$$ ",
+ " %%%% &&&&&&&&&&&& &&&&&& &&&&& &&&&&& &&&& &&&&&& &&&& & $$$ ",
+ " %%%% &&&&& &&&& &&&&&& &&&& &&&&& &&&& &&&&& &&&&&&&&& $$$ ",
+ " %%%% &&& &&&&&&&&&& &&&&&&&&&& &&&&&&&&&& &&&&&&&& $$$ ",
+ " %%%% & &&&&&&&&& &&&&&&&& &&&&&&&& &&&&&& $$$ ",
+ " %%%% &&&&&&& &&&&&& &&&&& &&&& $$$ ",
+ " %%%% &&& & ''''' $$$ ",
+ " %%%% ''''' $$$ ",
+ " %%%% ''''' $$$ ",
+ " %%%% ''''''''''''' $$$ ",
+ " %%%% (( ((((( ((((( ((((((( ''''''''''''' $$$ ",
+ " %%%% ((((((( (((((((( (((((((( ((((((((( ''''''''''''' $$$ ",
+ " %%%% ((((((((( (((((((((( ((((((((((( ((((((((((( $$$ ",
+ " %%%% ((((((((((( (((((( (((( (((((( ((((( (((((( (((( $$$ ",
+ " %%%%(((((( ((((( (((((( (((( ((((( ((((( ((((( (((( (( $$$ ",
+ " %%%% ((( ((((((((((( (((((((((( (((((((((( ((((((((( $$$ ",
+ " %%%% ( ((((((((() ((((((((( (((((((( (((((((( $$$ ",
+ " %%%% ((((((()) ((((((( ((((( *** (((( $$$ ",
+ " %%% (((( )))) ++++ (( ****************** $$$ ",
+ " %%% )))))) ++++ ,,,, ******************** $$$ ",
+ " %%% )))))) +++ ,,, --------------- ********************* $$$ ",
+ " %%% ))))) +++ ,,, --------------- ****** $$$ ",
+ " %%% )))))) +++ ,,, --------------- ***** $$$ ",
+ " %%% )))))) +++ ,,, .............. **** $$$ ",
+ " %%% ))))) ++++ ,,, ...................... *** $$$ ",
+ " %%% )))))) ++++ ,,,, ....................... *** $$$ ",
+ " %%% )))))) +++ ,,,, ....................... *** $$$ ",
+ " %%% ))))) /////// +++ ,,, .... *** $$$ ",
+ " %%% )))))) //////////// +++ ,,, .... *** $$$ ",
+ " %%% ))))) ///////////////+++ ,,, ... *** $$$ ",
+ " %%% ))))) ////// ///////++++,,, ... 000000000000000 *** $$$ ",
+ " %%%)))))) ///// ///+++,,,, ... 000000000000000 **** $$$ ",
+ " %%% ))) ///// //// ,,,, ... 000000000000000 **** $$$ ",
+ " %%% )) ///// ////,,,, ... *** $$$ ",
+ " %%% //// /////,, ... **** **** $$$ ",
+ " %%% /// //// ... *********************** $$$ ",
+ " %%% /// /// ... ********************** $$$ ",
+ " %%% /// /// ... ********************* $$$ ",
+ " %%% /// /// .... $$$ ",
+ " %%% //// /// ..... $$$ ",
+ " %%% //// /// ....................... $$$ ",
+ " %%% //// //// ...................... $$$ ",
+ " %%% //// //// ..................... $$$ ",
+ " %%% //// /// .................. $$$ ",
+ " //// //// $$$ ",
+ " //// ////// ",
+ " //// ////// ",
+ " ////////// ///// 11111111111111111111 ",
+ " ////////////// 11111111111111111111111111 ",
+ " //////////// 11111111111111111111111111 ",
+ " //// 11111111111111111111 ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/lines-4-600-600-1.0-grid-reference.json b/tests/visual_tests/grids/lines-4-600-600-1.0-grid-reference.json
new file mode 100644
index 000000000..988d132ae
--- /dev/null
+++ b/tests/visual_tests/grids/lines-4-600-600-1.0-grid-reference.json
@@ -0,0 +1,174 @@
+{
+ "keys": [
+ "",
+ "9",
+ "8",
+ "4",
+ "5",
+ "7",
+ "16",
+ "6",
+ "2",
+ "12",
+ "10",
+ "13",
+ "14",
+ "11",
+ "3",
+ "15",
+ "1"
+ ],
+ "data": {},
+ "grid": [
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " !! ",
+ " !!!!! !! ",
+ " !!!!!!!! !!!!! !! ",
+ " !!!!!!!!!!! !!!!!!! !!!!! ! ",
+ " !!!!!! !!!!! !!!!!!!!!! !!!!!!!! !! ",
+ " !!!!!! !!!!! !!!!! !!!!!! !!!!!!!!!!! !!!!! ",
+ " !!!!!! !!!!!! !!!!!! !!!!!! !!!!!! !!!!! !!!!!! ",
+ " !!!!!! !!!!! !!!!!! !!!!! !!!!! !!!!!! !!!!! ",
+ " !!!!!!! !!!!! !!!!!! !!!!! !!!!!! !!!!!! !!!!!! ",
+ " !!!!!! !!!!! !!!!!! !!!!!! !!!!!! !!!!! !!!!!! ",
+ " !!!!! !!!!!! !!!!!! !!!!!! !!!!! !!!!! !!!!! ",
+ " !!! !!!!! !!!!!! !!!!! !!!!!! !!!!!! !!!!!! ",
+ " !!!!! !!!!!! !!!!!! !!!!!! !!!!!! !!!!!! ",
+ " !!!!! !!!!!! !!!!!! !!!!! !!!!!!!!!! ",
+ " !!!!!!!!!!! !!!!!!!!! !!!!!!!! ",
+ " !!!!!!! !!!!!! !!!!! ",
+ " ## !!!!! # !!!! !! ",
+ " ##### !!! #### ! # $$$$ ",
+ " ######## ###### ### $$$$ ",
+ " ########## ######### ##### ## $$$$ ",
+ " ###### ###### ############ ######### #### $$$$ ",
+ " ###### ###### ###### ##### ########### ###### $$$$ ",
+ " ###### ##### ###### ###### ##### ##### ###### $$$$ ",
+ " ####### ##### ###### ###### ##### ###### ##### $$$$ ",
+ " ###### ###### ##### ##### ###### ##### ###### $$$$ ",
+ " ##### ###### ###### ##### ##### ###### ###### $$$$ ",
+ " %%% ### ##### ###### ###### ##### ###### ###### $$$$ ",
+ " %%% ##### ###### ##### ###### ##### ###### $$$$ ",
+ " %%% ###### ###### ##### ###### ########## $$$$ ",
+ " %%% ##### ##### ###### ##### ######## $$$$ ",
+ " %%% ########### ########## ##### $$$$ ",
+ " %%% ######### ####### ## $$$$ ",
+ " %%% ###### #### $$$$ ",
+ " %%% ### ## $$$$ ",
+ " %%% &&&&& $$$$ ",
+ " %%% && &&&&& &&&&&&&& &&&&&&&&& $$$$ ",
+ " %%% &&&&&&&& &&&&&&&&& &&&&&&&&&&& &&&&&&&&&&& $$$$ ",
+ " %%% &&&&&&&&&& &&&&&&&&&&&& &&&&&&&&&&&&& &&&&&&&&&&&&&& $$$$ ",
+ " %%% &&&&&&&&&&&&& &&&&&&& &&&&&& &&&&&& &&&&& &&&&&& &&&&& $$$$ ",
+ " %%% &&&&&& &&&& &&&&&& &&&& &&&&&& &&&& &&&&& &&&& $$$$ ",
+ " %%% &&&&& &&&& &&&&& &&&& &&&&& &&&& &&&&& &&&& & $$$$ ",
+ " %%% &&&&& &&&&& &&&&& &&&& &&&&& &&&& &&&&&& &&&& &&&& $$$$ ",
+ " %%% &&& &&&&& &&&&&& &&&&& &&&&&& &&&&&&&&&&&&& &&&&&&&&&&&& $$$$ ",
+ " %%% & &&&&&&&&&&&& &&&&&&&&&&& &&&&&&&&&& &&&&&&&&& $$$$ ",
+ " %%% &&&&&&&&& &&&&&&&&& &&&&&&&& &&&&&& $$$$ ",
+ " %%% &&&&&&& &&&&&& &&& & $$$$ ",
+ " %%% && $$$$ ",
+ " %%% '''''' $$$$ ",
+ " %%% '''''' $$$$ ",
+ " %%% '''''' $$$$ ",
+ " %%% '''''' $$$$ ",
+ " %%% ''''''''''''''''''' $$$$ ",
+ " %%% ''''''''''''''''''' $$$$ ",
+ " %%% ((( (((((( ((((((( ''''''''''''''''''' $$$$ ",
+ " %%% ((((((( (((((((( ((((((((( ((((((((((( $$$$ ",
+ " %%% (((((((((( ((((((((((( (((((((((((( ((((((((((((( $$$$ ",
+ " %%% ((((((((((((( ((((((((((((( ((((((( ((((( (((((( (((( $$$$ ",
+ " %%% ((((((( ((((( (((((( ((((( ((((( ((((( ((((( (((( $$$$ ",
+ " %%% (((((( (((( (((((( ((((( (((((( ((((( ((((( (((( ( $$$$ ",
+ " %%% ((((( (((( ((((( (((( ((((( (((( (((((( ((((( ((( $$$$ ",
+ " %%% (((( (((( ((((( (((( ((((( ((((( (((((( (((((((((((( $$$$ ",
+ " %%% (( (((((( (((((( ((((((((((( (((((((((( (((((((((( $$$$ ",
+ " %%% ((((((((((( ((((((((( (((((((( ((((((( $$$$ ",
+ " %%% (((((((( )) (((((( ((((( (( $$$$ ",
+ " %%% (((( )))) *** ( +++++++ $$$$ ",
+ " %%% ))))) **** +++++++++++++++++++++++++++ $$$$ ",
+ " %%% )))))) **** ,,, +++++++++++++++++++++++++++++ $$$$ ",
+ " %%% ))))) *** ,,,, -- +++++++++++++++++++++++++++++ $$$$ ",
+ " %%% ))))) *** ,,,, ---------------------- +++++++++ $$$$ ",
+ " %%% )))))) *** ,,, ---------------------- +++++ $$$$ ",
+ " %%% ))))) *** ,,, ---------------------- ++++ $$$$ ",
+ " %%% ))))) **** ,,, ++++ $$$$ ",
+ " %%% )))))) **** ,,, ++++ $$$ ",
+ " %%% ))))) **** ,,, ........................ +++ $$$ ",
+ " %%% ))))) *** ,,,, ................................ +++ $$$ ",
+ " %%% )))))) *** ,,,, ................................ +++ $$$ ",
+ " %%% ))))) *** ,,, ................... +++ $$$ ",
+ " %%% )))))) *** ,,, .... +++ $$$ ",
+ " %%% )))))) //// **** ,,, .... +++ $$$ ",
+ " %%% ))))) /////////// **** ,,, ... +++ $$$ ",
+ " %%% )))))) ///////////////// *** ,,,, ... +++ $$$ ",
+ " %%% )))))) //////////////////// *** ,,,, ... +++ $$$ ",
+ " %%% ))))) ////// //////// *** ,,,, .... +++ $$$ ",
+ " %%% )))))) ///// //// *** ,,, .... 00000000000000000000000 ++++ $$$ ",
+ " %%% )))))) ////// ////*** ,,, .... 00000000000000000000000 ++++ $$$ ",
+ " %%% ))))) ////// ///// ,,, ... 00000000000000000000000 +++ $$$ ",
+ " %%% ))) ///// //// ,,, ... +++ $$$ ",
+ " %%% )) //// //// ,,,, ... +++ $$$ ",
+ " %%% /// //// ,,,, ... ++++ $$$ ",
+ " %%% //// ///// ... ++++ $$$$ ",
+ " %%% //// //// .... ++++++++++++++++++++++++++++++++++ $$$ ",
+ " %%% /// /// .... +++++++++++++++++++++++++++++++++ $$$ ",
+ " %%% /// //// .... +++++++++++++++++++++++++++++++++ $$$ ",
+ " %%% /// /// ... +++++++++++ $$$ ",
+ " %%% /// /// ... $$$ ",
+ " %%% /// /// .... $$$ ",
+ " %%% //// /// ..... $$$ ",
+ " %%% //// /// ..... $$$ ",
+ " %%% /// //// ...... $$$ ",
+ " %%% //// //// ............................... $$$ ",
+ " %%% //// /// .............................. $$$ ",
+ " %%% //// /// ............................ $$$ ",
+ " %%% //// /// $$$ ",
+ " //// //// $$$ ",
+ " //// ///// ",
+ " //// ////// ",
+ " //// ////// ",
+ " ///// ///// ",
+ " //////// ////// ",
+ " ///////////// ////// 11111111111111111111111111111111111111 ",
+ " ///////////////// 11111111111111111111111111111111111111 ",
+ " //////////// 11111111111111111111111111111111111111 ",
+ " //// 11111111111111 ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/lines-4-800-800-1.0-grid-reference.json b/tests/visual_tests/grids/lines-4-800-800-1.0-grid-reference.json
new file mode 100644
index 000000000..8dbb18736
--- /dev/null
+++ b/tests/visual_tests/grids/lines-4-800-800-1.0-grid-reference.json
@@ -0,0 +1,224 @@
+{
+ "keys": [
+ "",
+ "9",
+ "8",
+ "4",
+ "5",
+ "7",
+ "16",
+ "6",
+ "2",
+ "12",
+ "10",
+ "13",
+ "14",
+ "11",
+ "3",
+ "15",
+ "1"
+ ],
+ "data": {},
+ "grid": [
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ! ",
+ " !!!! ",
+ " !!!!!!! !!! ",
+ " !!!!!!!!! !!!!! !!! ",
+ " !!!!!! !!!!! !!!!!!! !!!!! ",
+ " !!!!!! !!!!!! !!!!!!!!!!! !!!!!!!! ! ",
+ " !!!!!! !!!!! !!!!!! !!!!! !!!!!!!!!! !!!! ",
+ " !!!!!! !!!!! !!!!!! !!!!! !!!!! !!!!!! !!!!!! ",
+ " !!!!!! !!!!!! !!!!!! !!!!!! !!!!!! !!!!! !!!!! ",
+ " !!!!!!! !!!!!! !!!!! !!!!!! !!!!!! !!!!! !!!!!! ",
+ " !!!!!! !!!!! !!!!!! !!!!! !!!!! !!!!! !!!!!! ",
+ " !!!!!!! !!!!! !!!!!! !!!!! !!!!!! !!!!!! !!!!! ",
+ " !!!!!! !!!!!! !!!!!! !!!!!! !!!!!! !!!!! !!!!!! ",
+ " !!!!! !!!!!! !!!!!! !!!!! !!!!! !!!!! !!!!!! ",
+ " !!!! !!!!! !!!!! !!!!! !!!!!! !!!!!! !!!!! ",
+ " ! !!!!! !!!!!! !!!!!! !!!!! !!!!!! !!!!!! ",
+ " !!!!!! !!!!! !!!!!! !!!!!! !!!!! !!!!! ",
+ " !!!!!! !!!!!! !!!!! !!!!!! !!!!! !!!!!! ",
+ " !!!!! !!!!!! !!!!!! !!!!! !!!!!!!!!!! ",
+ " !!!!!!!!!!! !!!!!!!!!! !!!!!!!! ",
+ " !!!!!!!!! !!!!!!! !!!!! ",
+ " !!!!!! !!!! !!! ",
+ " ### !!! # !! $$$ ",
+ " ##### ! #### $$$ ",
+ " ######## ####### ## $$$ ",
+ " ########### ########## ##### # $$$ ",
+ " ###### ###### ###### ##### ######## ### $$$ ",
+ " ####### ##### ##### ##### ########## ##### $$$ ",
+ " ###### ##### ###### ###### ##### ##### ##### $$$ ",
+ " ###### ###### ###### ###### ###### ###### ###### $$$ ",
+ " ###### ###### ##### ##### ###### ###### ###### $$$ ",
+ " ###### ##### ###### ##### ##### ##### ##### $$$ ",
+ " ####### ##### ##### ###### ##### ###### ###### $$$ ",
+ " ###### ###### ###### ##### ###### ###### ##### $$$ ",
+ " #### ##### ###### ##### ##### ##### ###### $$$ ",
+ " %%% ## ##### ##### ###### ##### ###### ###### $$$ ",
+ " %%% ###### ###### ###### ###### ##### ##### $$$ ",
+ " %%% ###### ###### ##### ###### ###### ###### $$$ ",
+ " %%% ##### ###### ##### ##### ########### $$$ ",
+ " %%% ##### ###### ###### ##### ####### $$$ ",
+ " %%% ###### ##### ########### ##### $$$ ",
+ " %%% ########### ######## ## $$$ ",
+ " %%% ######## ###### $$$ ",
+ " %%% ##### #### $$$ ",
+ " %%% ### # $$$ ",
+ " %%% $$$ ",
+ " %%% &&&&&&& $$$ ",
+ " %%% &&&&&& &&&&&&&& &&&&&&&&&& $$$ ",
+ " %%% &&&&&&&& &&&&&&&&&& &&&&&&&&&&&& &&&&&&&&&&&&& $$$ ",
+ " %%% &&&&&&&&&&& &&&&&&&&&&&&& &&&&&&&&&&&&&& &&&&&&&& &&&&& $$$ ",
+ " %%% &&&&&&&&&&&&&& &&&&&&& &&&&&& &&&&&&& &&&&& &&&&&& &&&&& $$$$ ",
+ " %%% &&&&&&& &&&&& &&&&&&& &&&&& &&&&&& &&&&& &&&&& &&&&& $$$$ ",
+ " %%% &&&&&& &&&& &&&&&& &&&&& &&&&& &&&&& &&&&& &&&& $$$$ ",
+ " %%% &&&&&& &&&&& &&&&& &&&&& &&&&&& &&&& &&&&&& &&&& $$$$ ",
+ " %%% &&&&& &&&& &&&&& &&&& &&&&& &&&& &&&&& &&&& && $$$$ ",
+ " %%% &&&&& &&&& &&&&& &&&& &&&&& &&&&& &&&&& &&&&& &&&&& $$$$ ",
+ " %%% &&& &&&& &&&&&& &&&& &&&&& &&&&& &&&&&& &&&&&&&&&&&&&& $$$$ ",
+ " %%% & &&&&& &&&&&&& &&&&&& &&&&&& &&&&&&&&&&&&& &&&&&&&&&&& $$$$ ",
+ " %%% &&&&&&&&&&&&& &&&&&&&&&&&& &&&&&&&&&& &&&&&&&&& $$$$ ",
+ " %%% &&&&&&&&&&& &&&&&&&& &&&&&& &&&& $$$$ ",
+ " %%% &&&&&&& &&&& & $$$$ ",
+ " %%% && $$$$ ",
+ " %%% $$$$ ",
+ " %%% $$$$ ",
+ " %%% '''''''' $$$$ ",
+ " %%% '''''''' $$$$ ",
+ " %%% '''''''' $$$$ ",
+ " %%% ''' $$$$ ",
+ " %%% ''''''''''''''''''''''''' $$$$ ",
+ " %%% ''''''''''''''''''''''''' $$$$ ",
+ " %%% (( ''''''''''''''''''''''''' $$$$ ",
+ " %%% ((((((( (((((((( ''''''''''''''''''''''''' $$$$ ",
+ " %%% (((((( (((((((( (((((((((( (((((((((((( $$$$ ",
+ " %%% (((((((((( (((((((((((( ((((((((((((( (((((((((((((( $$$$ ",
+ " %%% (((((((((((((( ((((((((((((((( (((((((( ((((( ((((((( (((( $$$$ ",
+ " %%% ((((((( (((((( ((((((( (((( (((((( (((( (((((( (((( $$$$ ",
+ " %%% ((((((( (((( (((((( (((( (((((( (((( ((((( (((( $$$$ ",
+ " %%% (((((( (((( (((((( (((( ((((( ((((( ((((( ((((( $$$$ ",
+ " %%% ((((( (((( ((((( (((( (((((( (((( (((((( (((( (( $$$$ ",
+ " %%% ((((( (((( ((((( (((( ((((( (((( ((((( (((( (((( $$$$ ",
+ " %%% (((( (((( (((((( (((( ((((( (((( (((((( ((((( (((((( $$$$ ",
+ " %%% (( ((((( (((((( ((((( (((((( (((((((((((((( ((((((((((((( $$$$ ",
+ " %%% (((((( (((((( (((((((((((( (((((((((((( ((((((((( $$$$ ",
+ " %%% ((((((((((( (((((((((( (((((((( (((((( $$$$ ",
+ " %%% (((((((( )) ((((((( ((( $$$$ ",
+ " %%%% (((( )))) *** ( $$$$ ",
+ " %%%% ))))) *** ++++++++++++ $$$$ ",
+ " %%%% )))))) *** ++++++++++++++++++++++++++++++++ $$$$ ",
+ " %%%% )))))) **** ,,, +++++++++++++++++++++++++++++++++++++ $$$$ ",
+ " %%%% ))))) **** ,,, ++++++++++++++++++++++++++++++++++ $$$$ ",
+ " %%%% )))))) *** ,,, ------ +++++++++++++++ $$$$ ",
+ " %%%% )))))) *** ,,,, ----------------------------- ++++++ $$$$ ",
+ " %%%% ))))) *** ,,,, ----------------------------- ++++ $$$$ ",
+ " %%%% )))))) *** ,,, ----------------------------- ++++ $$$$ ",
+ " %%%% )))))) **** ,,, ++++ $$$$ ",
+ " %%%% ))))) **** ,,, ++++ $$$$ ",
+ " %%%% )))))) *** ,,, ++++ $$$$ ",
+ " %%%% )))))) *** ,,, +++ $$$$ ",
+ " %%%% ))))) *** ,,,, ................................. +++ $$$$ ",
+ " %%%% )))))) *** ,,,, .......................................... +++ $$$$ ",
+ " %%%% )))))) **** ,,, ........................................... +++ $$$$ ",
+ " %%%% ))))) **** ,,, ................. +++ $$$$ ",
+ " %%%% )))))) *** ,,, ..... +++ $$$$ ",
+ " %%%% )))))) *** ,,, .... +++ $$$$ ",
+ " %%%% ))))) *** ,,,, ... +++ $$$$ ",
+ " %%%% )))))) //////// *** ,,,, ... +++ $$$$ ",
+ " %%%% )))))) /////////////// *** ,,,, .... +++ $$$$ ",
+ " %%%% ))))) ////////////////////// **** ,,, .... +++ $$$$ ",
+ " %%%% )))))) ////// ////////////// **** ,,, .... +++ $$$$ ",
+ " %%%% )))))) ////// ///////// *** ,,, ... ++++ $$$$ ",
+ " %%%% ))))) ///// ///// *** ,,, ... ++++ $$$$ ",
+ " %%%% )))))) ////// ///// *** ,,,, ... 00000000000000000000000000000 ++++ $$$$ ",
+ " %%%% )))))) ////// //// *** ,,,, ... 00000000000000000000000000000 +++ $$$$ ",
+ " %%%% ))))) ///// //// ,,, ... 00000000000000000000000000000 +++ $$$$ ",
+ " %%%% ))))) ////// //// ,,, ... +++ $$$$ ",
+ " %%%% ))) ////// ///// ,,, ... +++ $$$$ ",
+ " %%% ) //// //// ,,, ... ++++ $$$$ ",
+ " %%%% /// //// ,,, ... ++++ $$$$ ",
+ " %%% /// //// ,,, ... +++ $$$$ ",
+ " %%% /// ///// ... ++++ $$$$ ",
+ " %%% /// //// ... ++++++++++++++++ ++++ $$$$ ",
+ " %%% //// /// ... ++++++++++++++++++++++++++++++++++++++++++++ $$$$ ",
+ " %%% //// /// ... +++++++++++++++++++++++++++++++++++++++++++ $$$$ ",
+ " %%% /// //// ... +++++++++++++++++++++++++++++++++ $$$$ ",
+ " %%% /// //// ... $$$$ ",
+ " %%% /// //// .... $$$$ ",
+ " %%% /// /// .... $$$$ ",
+ " %%% //// /// .... $$$$ ",
+ " %%% //// /// ..... $$$$ ",
+ " %%% /// /// .... $$$$ ",
+ " %%% /// //// ..... $$$$ ",
+ " %%% /// //// ...... $$$$ ",
+ " %%% /// /// .......................................... $$$$ ",
+ " %%% //// /// ........................................ $$$$ ",
+ " %%% //// /// ...................................... $$$$ ",
+ " %%% //// /// $$$$ ",
+ " %%% //// /// $$$$ ",
+ " //// //// $$$$ ",
+ " //// ///// $$$$ ",
+ " ///// ///// ",
+ " //// ////// ",
+ " //// ////// ",
+ " //// ///// ",
+ " ///// ////// ",
+ " ///// ////// ",
+ " /////////// ///// ",
+ " /////////////////////// 11111111111111111111111111111111111111111111111111 ",
+ " //////////////////// 11111111111111111111111111111111111111111111111111 ",
+ " //////////// 11111111111111111111111111111111111111111111111111 ",
+ " //// 1111111111 ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/lines-5-200-200-1.0-grid-reference.json b/tests/visual_tests/grids/lines-5-200-200-1.0-grid-reference.json
new file mode 100644
index 000000000..716f4c251
--- /dev/null
+++ b/tests/visual_tests/grids/lines-5-200-200-1.0-grid-reference.json
@@ -0,0 +1,74 @@
+{
+ "keys": [
+ "",
+ "9",
+ "8",
+ "4",
+ "5",
+ "7",
+ "16",
+ "6",
+ "12",
+ "10",
+ "2",
+ "13",
+ "14",
+ "11",
+ "3",
+ "15",
+ "1"
+ ],
+ "data": {},
+ "grid": [
+ " ",
+ " ",
+ " ",
+ " !! ! ! ! ",
+ " !!!!! !!!!!!! !!!! ",
+ " !!!!!!!! !!!!!!!! !!!!!!! !!! ",
+ " !!!!!!!!!!! !!!!!!!!!! !!!!!!!!! !!!! ",
+ " !!!! !!!!! !!!!! !!!!!!!!!!!!!!!!!!!!! ",
+ " !! # !!!!!!!!! # !!!!!!!!! !!!!!!!! ",
+ " #### !!!!!!! ### !!!!! ## !!!!!! ",
+ " ###### !!! ###### !!! ##### !! ## $$$ ",
+ " ########## ! ######### ######## ####$$$ ",
+ " #### ##### ############ ###############$$$ ",
+ " %%%## ########## ######### ######## $$$ ",
+ " %%% #######& & ####### ##### $$$$$ ",
+ " %%% &&&& #####& &&&###& &&&&## $$$$ ",
+ " %%%&&&&&&&& #&&&& &&&&&&&&&&&&&& $$$$$ ",
+ " %%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& $$$$ ",
+ " %%%&&& &&&&&&&& &&&&&&& &&&&&&& &&&&&& $$$$ ",
+ " %%% & &&&&& &&&&&& &&&&& &&&&& '''$$ ",
+ " %%% &&& && & '''''''$$ ",
+ " %%% ((( (((( (((( ((((( '''''''$$ ",
+ " %%%((((((( (((((( ((((((( ((((((('''''''$$ ",
+ " %%(((((((((((((((((((((((((((((((((((( $$$ ",
+ " %%%((( (((((((((((((((((((((((( ((((( $$$$ ",
+ " %%% ( (((((((())(((((((((((*********** $$$ ",
+ " %%% ((((+ ))),,,--------************$$$$ ",
+ " %%% ++(+++ ))),,,--------***.*********$$$ ",
+ " %%% +++++ ))),,,--------.... ****$$$ ",
+ " %%% +++++/// ))),,,............ ***$$$ ",
+ " %%% +++++//////)),,,,............ ***$$$ ",
+ " %%%++++////////)),,,,... 0000000 ***$$$ ",
+ " %%%+++//////////),,,.... 0000000 ***$$$ ",
+ " %%%+++///// / //,,,... 0000000*******$$$ ",
+ " %%% /// /// .... *************$$$ ",
+ " %%% //// /// .... ************ $$$ ",
+ " %%% //// /// ............. *** $$$ ",
+ " %%% ///// /// ............ $$$ ",
+ " %%% / //// //// ........... $$$ ",
+ " ///// ////// 111 ",
+ " //////////// 1111111111111 ",
+ " //////// 1111111111111 ",
+ " / /////// 1111111111111 ",
+ " // / ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/lines-5-400-400-1.0-grid-reference.json b/tests/visual_tests/grids/lines-5-400-400-1.0-grid-reference.json
new file mode 100644
index 000000000..d30495adb
--- /dev/null
+++ b/tests/visual_tests/grids/lines-5-400-400-1.0-grid-reference.json
@@ -0,0 +1,124 @@
+{
+ "keys": [
+ "",
+ "9",
+ "8",
+ "4",
+ "5",
+ "7",
+ "16",
+ "6",
+ "2",
+ "10",
+ "12",
+ "13",
+ "14",
+ "11",
+ "3",
+ "15",
+ "1"
+ ],
+ "data": {},
+ "grid": [
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ! ! ",
+ " !!!!!! !!! ",
+ " !!!!!!! ! !!!!! ! ! !!! ! ",
+ " ! !!!!!!!!!! !!!!!!!! ! !!!!! !! ",
+ " !!!!!!!!!!!! ! !!!!!!!!!!! ! !!!!!!!!! !!!! ",
+ " !!!!!! !!!!!! !!!!! !!!!!! ! !!!!!!!!!!!! !!!!!! ",
+ " !!!!!! !!!!!! !!!!!! !!!!! !!!!!! !!!!!!!! !!!!!!! ",
+ " !!!!! !!!!!!! !!!!!! !!!!!! !!!!!! !!!!! ! !!!!!! ",
+ " !!!! !!!!!! !!!!!! !!!!!!!!!!!!!! !!!!!!!!!!!!! ",
+ " ! !!!!!!!!!!!! !!!!!!!!!!! !!!!!!!!!!! ",
+ " !!!!!!!!! !!!!!!!!! !!!!!!! ",
+ " # !!!!!!! # !!!!!! !!!!! ",
+ " #### !!!!! #### !!! ## !!! $$$ ",
+ " ####### ! ###### ! #### # $$$ ",
+ " ########## ######### ####### ### $$$ ",
+ " ####### ##### ###### ##### ######### ##### $$$ ",
+ " ###### ###### ###### ##### ############ ##### $$$ ",
+ " ##### ###### ##### ###### ############### ###### $$$ ",
+ " %%%%#### ##### ###### ###### ##### # # ###### ###### $$$ ",
+ " %%%% # ##### ##### ##### ###### # ############# $$$ ",
+ " %%%% ############ ############ # ######## $$$ ",
+ " %%%% ######### ######## ##### # $$$ ",
+ " %%%% ###### ###### & ###### $$$ ",
+ " %%%% #### ## &&&& # $$$ ",
+ " %%%% &&&&& ##&&&&&& &&&&&& & &&&&&&&& $$$ ",
+ " %%%% &&&&&&&&& &&&&&&&&& &&&&&&&& &&&&&&&&&& $$$ ",
+ " %%%% &&&&&&&&& & &&&&&&&&&& &&&&&&&&&&&& &&&&&&&&&&&&& $$$ ",
+ " %%%% &&&&&&&&&&&&&& &&&&&&& &&&&& &&&&&& &&&&&& &&&&&& &&&& & $$$ ",
+ " %%%% &&&&& &&&&& &&&&&&& &&&& &&&&& &&&&& &&&&& &&&&&&&&& $$$ ",
+ " %%%% &&& &&&&&&&&&& &&&&&&&&&& &&&&&&&&&& &&&&&&&& $$$ ",
+ " %%%% & &&&&&&&&& &&&&&&&& &&&&&&&& &&&&&& $$$ ",
+ " %%%% &&&&&&& &&&&&& &&&&& &&&& $$$$ ",
+ " %%%%% &&& & '''''$$$$ ",
+ " %%%% '''''$$$$ ",
+ " %%%%% '''''$$$$ ",
+ " %%%% '''''''''''''$$$$ ",
+ " %%%% (( ((((( ((((( ((((((( '''''''''''''$$$$ ",
+ " %%%%% ((((((( (((((((( (((((((( ((((((((( ''''''''''''' $$$ ",
+ " %%%%% ((((((((( (((((((((( ((((((((((( ((((((((((( $$$$ ",
+ " %%%% ((((((((((( (((((( (((( (((((( ((((( (((((( ( (((( $$$$ ",
+ " %%%%((((((( ((((( (((((( (((( ((((( ( ((((( ((((( (( ( (((( (( $$$ ",
+ " %%%%%(((( ( (((((( (((((( ( (((((((((( (((((((((((( (((((((((( $$$$ ",
+ " %%%% ( (((((((((()( ((((((((( ( (((((((( (((((((( $$$ ",
+ " %%%%% ((((((((( ((((((( (((((((( *** (((( $$$$ ",
+ " %%% ((((((())) ++++ (( (( ( ******************* $$$$ ",
+ " %%%% ( ())))) ++++ ,,,, ( ( ********************* $$$$ ",
+ " %%% )))))) +++ ,,, --------------- ********************* * $$$$ ",
+ " %%% ))))) ) +++ ,,, --------------- ***** $$$$ ",
+ " %%%% ))))))) +++ ,,, --------------- **** $$$ ",
+ " %%% ))))))) +++ ,,, .. .............. ***** $$$$ ",
+ " %%% )))))) ++++ ,,, ...................... *** $$$ ",
+ " %%%% ))))))) ++++ ,,,, ....................... *** $$$ ",
+ " %%% ))))))) +++ ,,,, ....................... **** $$$ ",
+ " %%%% ))))) ) /////// +++ ,,, .... *** $$$ ",
+ " %%% ))))))) //////////// +++ ,,, ... **** $$$ ",
+ " %%%% )))))) ))///////////////+++ ,,, .... ***** $$$ ",
+ " %%% ))))))) ////// ///////++++,,, ..... 000000000000000 *** $$$ ",
+ " %%%)))))))) ///// ///+++,,,, ... 000000000000000 ****** $$$ ",
+ " %%% )))))) ///// //// ,,,, . ... 000000000000000 ***** $$$ ",
+ " %%% )) ) ///// ////,,,, . ... ***** $$$ ",
+ " %%% ) //// /////,, ..... **** ****** $$$ ",
+ " %%% /// //// .... ************************ $$$ ",
+ " %%% /// /// .... *********************** $$$ ",
+ " %%% /// /// .... ********************* $$$ ",
+ " %%% /// /// .... $$$ ",
+ " %%% //// /// ...... $$$ ",
+ " %%% //// /// ....................... $$$ ",
+ " %%% //// //// ...................... $$$ ",
+ " %%% //// //// ..................... $$$ ",
+ " %%% //// /// .................. $$$ ",
+ " //// ///// $$$ ",
+ " //// /////// ",
+ " //// ////// ",
+ " ////////// ////// / 11111111111111111111 ",
+ " ////////////// 11111111111111111111111111 ",
+ " //////////// / 11111111111111111111111111 ",
+ " ///// ////// 11111111111111111111 1 11 ",
+ " / // / / 1 11 1 1 11 1 111 111 ",
+ " /// 11 ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/lines-5-600-600-1.0-grid-reference.json b/tests/visual_tests/grids/lines-5-600-600-1.0-grid-reference.json
new file mode 100644
index 000000000..db855582b
--- /dev/null
+++ b/tests/visual_tests/grids/lines-5-600-600-1.0-grid-reference.json
@@ -0,0 +1,174 @@
+{
+ "keys": [
+ "",
+ "9",
+ "8",
+ "4",
+ "5",
+ "7",
+ "16",
+ "6",
+ "2",
+ "12",
+ "10",
+ "13",
+ "14",
+ "11",
+ "3",
+ "15",
+ "1"
+ ],
+ "data": {},
+ "grid": [
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ! ! ",
+ " !!!!! ",
+ " ! !!!!!! !!! ",
+ " !!!!!!!!!! !!!!! !! ",
+ " !!!!!!!!!!!! !!!!!!! !!!!! ! ",
+ " !!!!!! !!!!!!! !!!!!!!!!!! !!!!!!!!! !! ",
+ " !!!!!!! !!!!! ! !!!!!! !!!!!! !!!!!!!!!!! ! !!!!! ",
+ " !!!!!! !!!!!! ! ! !!!!!! !!!!!! !!!!!!! !!!!!! ! !!!!!! ",
+ " !!!!!! !!!!! !!!!!!!! !!!!! !!!!!! !!!!!! !!!!!! ",
+ " !!!!!!! !!!!! !!!!!! !!!!! !!!!!!!! !!!!!! !!!!!!! ",
+ " !!!!!! !!!!! !!!!!!! !!!!!! !!!!!!! !!!!!!! !!!!!!! ",
+ " !!!!! !!!!!! !!!!!!! !!!!!! !!!!!! !!!!! !!!!!! ",
+ " !!! !!!!! !!!!!!! !!!!!! !!!!!!!! !!!!!! ! !!!!!! ",
+ " !!!!! ! !!!!!! !!!!!!! !!!!!!! !!!!!!! !!!!!! ",
+ " !!!!! !!!!!!! !!!!!! !!!!! !!!!!!!!!! ",
+ " !!!!!!!!!!! !!!!!!!!! !!!!!!!! ",
+ " !!!!!!! !!!!!! !!!!! ",
+ " ## !!!!! # !!!! !! ",
+ " ##### !!! #### ! # $$$$ ",
+ " ######## ###### ### $$$$ ",
+ " ########## ######### ##### ## $$$$ ",
+ " ####### ###### ############ ######### #### $$$$ ",
+ " ###### # ###### ###### ####### ########### ###### $$$$ ",
+ " ###### # # ###### ######## ###### ###### ###### ###### $$$$ ",
+ " ######### ####### ######## ###### ##### # ###### ##### $$$$ ",
+ " ###### # # ###### ##### # ##### ######## ###### ###### $$$$ ",
+ " ##### ####### ###### # ##### ##### ## ###### ###### $$$$ ",
+ " %%% ### ####### ###### # ###### ####### ######## ######## $$$$ ",
+ " %%% ####### ###### # # ##### ######## ######## ###### # $$$$$ ",
+ " %%% ####### ###### # ##### ###### ########### # $$$$$ ",
+ " %%% ##### ######## ###### ####### # ########## $$$$ ",
+ " %%% ############ ############ # # ####### $$$$ ",
+ " %%% ########## ######### # ### $$$$ ",
+ " %%% ###### # ##### # # $$$$ ",
+ " %%%% ### ## ## && & $$$$ ",
+ " %%% && && & & &&&&& &&&&&& $$$$ ",
+ " %%%% &&& & & &&&&&& & & &&&&&&&& &&&&&&&&&&& $$$$$ ",
+ " %%% &&&&&&&&&&& &&&&&&&&&&& &&&&&&&&&&& &&&&&&&&&&&& $$$$ ",
+ " %%%% & &&&&&&&&&& & &&&&&&&&&&&&&& &&&&&&&&&&&&& &&&&&&&&&&&&&&& $$$$$ ",
+ " %%% &&&&&&&&&&&&&& &&&&&&& &&&&&& &&&&&& &&&&& &&&&&& &&&&& $$$$$ ",
+ " %%% &&&&&& &&&&& &&&&&& &&&& &&&&&& &&&&& &&&&& &&&&& $$$$ ",
+ " %%% &&&&& &&&& &&&&& &&&& &&&&& &&&& &&&&& &&&&&& & & $$$$ ",
+ " %%%% &&&&& &&&&& & &&&&& &&&&& & &&&&& &&&&& &&&&&&&& &&&& &&&&&& $$$$ ",
+ " %%% &&& &&&&& &&&&&&&& &&&&&&&&&&&&& &&&&&&&&&&&&& &&&&&&&&&&&& $$$$ ",
+ " %%% & &&&&&&&&&&&& &&&&&&&&&&& &&&&&&&&&& &&&&&&&&& $$$$ ",
+ " %%%% &&&&&&&&& &&&&&&&&& &&&&&&&& &&&&&& $$$$ ",
+ " %%%% &&&&&&& &&&&&& &&& & $$$$ ",
+ " %%%% && $$$$ ",
+ " %%% '''''' $$$$ ",
+ " %%%% '''''' $$$$$ ",
+ " %%%% '''''' $$$$ ",
+ " %%%% '''''' $$$$$ ",
+ " %%%% ''''''''''''''''''' $$$$ ",
+ " %%%% ''''''''''''''''''' $$$$ ",
+ " %%% ((( (((((( ((((((( ''''''''''''''''''' $$$$ ",
+ " %%%% ((((((( (((((((( ((((((((( ((((((((((( $$$$ ",
+ " %%%%% (((((((((( ((((((((((( (((((((((((( ((((((((((((( $$$$ ",
+ " %%%% ((((((((((((( ((((((((((((( (((((((( ((((( (((((((( ( (((( $$$$ ",
+ " %%% (((((((( (((((( ((((((( ( (((((( (((((( (( ((((( (((((( ( ( ((((( $$$$ ",
+ " %%% (((((( ((( (((( (((((( ( ( (((((( (((((( ( ( ((((( (((((( ((((((( ( $$$$ ",
+ " %%% (((((( ((((((( ((((( ( ((((( (((((( (((( ((((((( (((((( ((( $$$$ ",
+ " %%% (((( ((((( ((((( ((((( ((((( (((((( (((((( ((((((((((((( $$$$ ",
+ " %%% (( ((((((( (((((( (((((((((((( (((((((((( ( (((((((((( $$$$ ",
+ " %%% (((((((((((( ((((((((((( ( (((((((( (((((((( $$$$ ",
+ " %%% ((((((((( )) (((((( ( ((((( ( (( $$$$ ",
+ " %%% ((((( )))) *** (( (( ( (( ( +++++++ (( ( $$$$ ",
+ " %%% (( ( ( ))))) **** (( +++++++++++++++++++++++++++ ++ $$$$ ",
+ " %%% )))))) **** ,,, ++++++++++++++++++++++++++++++ $$$$ ",
+ " %%% ))))) *** ,,,, -- +++++++++++++++++++++++++++++ $$$$ ",
+ " %%% ))))) *** ,,,, ---------------------- +++++++++++ $$$$ ",
+ " %%% )))))) *** ,,, ---------------------- +++++ + $$$$ ",
+ " %%% )))))) *** ,,, ---------------------- +++++ $$$$$ ",
+ " %%% ))))) ) **** ,,, +++++ $$$$ ",
+ " %%% )))))))) **** ,,, ... .. . . ++++ $$$ ",
+ " %%%%% ))))))) **** ,,, . ............................ ++++ $$$ ",
+ " %%% )))))) *** ,,,, ................................ +++ $$$$ ",
+ " %%%% ))))))) *** ,,,, ................................. +++ $$$ ",
+ " %%% ))))))) *** ,,, ................... ++++ $$$ ",
+ " %%% )))))) ) // *** ,,, .... ++++ $$$ ",
+ " %%% ))))))) ) //// / // / **** ,,, .... ++++ $$$ ",
+ " %%%% )))))) )) //////////////// **** ,,, ... +++ $$$ ",
+ " %%%% )))))))) ///////////////// *** ,,,, ... ++++ $$$$ ",
+ " %%% % )))))))) //////////////////// *** ,,,, ... +++ $$$ ",
+ " %%% % )))))))) ////// //////////*** ,,,, .... +++ $$$$ ",
+ " %%%%% )))))) ///// //// *** ,,, .... 00000000000000000000000 ++++ $$$ ",
+ " %%%% )))))) ) ////// ////*** ,,, .... 00000000000000000000000 ++++ $$$$ ",
+ " %%%% ))))) ////// ////// ,,, ... 00000000000000000000000 +++ $$$ ",
+ " %%%%% ))) ///// //// ,,, ... +++ $$$ ",
+ " %%%% )) //// //// ,,,, ... +++ $$$$ ",
+ " %%%% /// //// ,,,, ... ++++ $$$$ ",
+ " %%%% //// ///// ... ++++ $$$ ",
+ " %%%% //// //// ... ++++++++++++++++++++++++++++++++++ $$$ ",
+ " %%% /// /// .... +++++++++++++++++++++++++++++++++ $$$ ",
+ " %%%% /// //// .... ++++++++++++++++++++++++++++++++++ $$$ ",
+ " %%%%% /// /// ... +++++++++++++++ ++ + $$$$ ",
+ " %%% //// /// ... +++++++ + ++ + $$$ ",
+ " %%% //// /// .... ++ $$$ ",
+ " %%% ///// /// ..... $$$ ",
+ " %%% ///// /// ..... $$$ ",
+ " %%% ///// //// ....... $$$ ",
+ " %%% / //// ///// ............................... $$$ ",
+ " %%% //// ///// . .............................. $$$ ",
+ " %%% ///// ///// . ............................. $$$ ",
+ " %%% ///// /// . . .. ... . $$$ ",
+ " / //// //// $$$ ",
+ " ///// ////// ",
+ " ////// /////// ",
+ " / //// /////// ",
+ " ////// ////// / ",
+ " //////// ////// ",
+ " / ///////////// /////// / 11111111111111111111111111111111111111 ",
+ " ////////////////// / 11111111111111111111111111111111111111 ",
+ " //////////// / 11111111111111111111111111111111111111 ",
+ " //// / 11111111111111111 1111 1 1 1 ",
+ " / 1111111 1 1111 111 ",
+ " 11 ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/lines-5-800-800-1.0-grid-reference.json b/tests/visual_tests/grids/lines-5-800-800-1.0-grid-reference.json
new file mode 100644
index 000000000..86dd9210b
--- /dev/null
+++ b/tests/visual_tests/grids/lines-5-800-800-1.0-grid-reference.json
@@ -0,0 +1,224 @@
+{
+ "keys": [
+ "",
+ "9",
+ "8",
+ "4",
+ "5",
+ "7",
+ "16",
+ "6",
+ "2",
+ "12",
+ "10",
+ "13",
+ "14",
+ "11",
+ "3",
+ "15",
+ "1"
+ ],
+ "data": {},
+ "grid": [
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " !!! ",
+ " !!!!!! ",
+ " !!!!!!!!! !!!!!! ! ",
+ " ! !!!!!!!!!! !!!!!!! ! !!! ",
+ " !!!!!!!! !!!!! ! !!!!!!!!!! !!!!! ! ",
+ " !!!!!! !!!!!! !!!!!!!!!!!!! !!!!!!!! ! ! ",
+ " !!!!!!!! !!!!! !!!!!!! !!!!! !!!!!!!!!!! !!!!! ",
+ " !!!!!!!! !!!!! ! !!!!!! !!!!! !!!!!! !!!!!! !!!!!!! ",
+ " !!!!!!! !!!!!! ! !!!!!! !!!!!! !!!!!! !!!!!! !!!!!! ",
+ " !!!!!!! !!!!!!! !!!!!! !!!!!! !!!!!! !!!!!! !!!!!!! ",
+ " !!!!!!! !!!!!! !!!!!! !!!!!! !!!!! !!!!!! !!!!!!! ",
+ " !!!!!!! !!!!! !! ! !!!!!! !!!!! !!!!!! !!!!!! !!!!!!! ",
+ " !!!!!! !!!!!! !!!!!! !!!!!!! ! !!!!!! !!!!! !!!!!!! ",
+ " !!!!! !!!!!!!! !!!!!! !!!!!! ! !!!!! !!!!! !!!!!!!! ",
+ " !!!! !!!!! ! !!!!! !!!!!! !!!!!! !!!!!! !!!!! ",
+ " ! !!!!!!! !!!!!! !!!!!! !!!!!! !!!!!! !!!!!!! ",
+ " !!!!!!! !!!!!! !!!!!! ! !!!!!! !!!!! !! !!!!! ",
+ " !!!!!!! !!!!!! !!!!!!!!!!!!!!! !!!!!!!!!!!!! ",
+ " !!!!!! !!!!!!! !!!!!!!!!!!! !!!!!!!!!!! ",
+ " !!!!!!!!!!! !!!!!!!!!! !!!!!!!! ",
+ " !!!!!!!!! !!!!!!! !!!!! ",
+ " !!!!!! !!!! !!! ",
+ " ### !!! # !! $$$ ",
+ " ##### ! #### $$$ ",
+ " ######## ####### ## $$$ ",
+ " ########### ########## ##### # $$$ ",
+ " ####### ###### ############ ######## ### $$$ ",
+ " ######## # ###### ###### ####### ########## ##### $$$ ",
+ " ###### # ##### ######## ####### ############ ##### $$$ ",
+ " ####### # ####### ####### ###### ###### # ####### ###### $$$ ",
+ " ###### # # ###### ##### # ##### ######### ######## ###### $$$$$ ",
+ " ###### ## ##### ######### ##### ####### ###### ####### $$$$$ ",
+ " ####### # ##### ######## ###### ###### ####### ###### # $$$ ",
+ " ######### ###### ####### ##### ###### # ####### ##### # $$$ ",
+ " #### ##### ###### # ###### ##### ###### ######## $$$ ",
+ " %%% ## # ##### ##### ###### ###### ###### ######## $$$$ ",
+ " %%% # ###### ####### ######## ###### ##### ##### # $$$$ ",
+ " %%% # ###### ###### ####### ###### ###### ######## $$$$ ",
+ " %%% ####### ###### ###### ##### ########### $$$$$ ",
+ " %%% ##### ###### ###### ##### ######## # # $$$$ ",
+ " %%% ######## ##### # ########### ####### $$$$$ ",
+ " %%% # ########### ######### ## ## $$$$$ ",
+ " %%% ## ########## # ######## # $$$$$ ",
+ " %%%% ###### # ##### $ $$$ ",
+ " %%%% ### ## $$$$ ",
+ " %%%%% # & $$$ ",
+ " %%%%% & &&&&&&&&& $$$ ",
+ " %%%% && && && & &&&&&&& &&&&&&&&& &&&&&&&&&& $$$ ",
+ " %%%% &&&&&&&&& & &&&&&&&&&&& & &&&&&&&&&&&& &&&&&&&&&&&&&& $$$ ",
+ " %%%%% & &&&&&&&&&&& & &&&&&&&&&&&&& &&&&&&&&&&&&&&&& &&&&&&&& &&&&&& $$$ ",
+ " %%% % & &&&&&&&&&&&&&&& &&&&&&&& &&&&&& &&&&&&&& &&&&&& & &&&&&& &&&&& $$$$ ",
+ " %%% % &&&&&&& &&&&&& & &&&&&&& &&&&& &&&&&& &&&&& & &&&&& &&&&& $$$$$ ",
+ " %%% &&&&&& &&&&& & &&&&&& &&&& &&&&&&& &&&&& &&&&&& &&&&&& $$$$ ",
+ " %%%%% &&&&&& &&&&& &&&&&& &&&&& &&&&&&& &&&&& &&&&&& &&&&&& $$$$$ ",
+ " %%%% &&&&& &&&&& &&&&&&& &&&& & &&&&& &&&& &&&&& &&&&& && $$$$ ",
+ " %%%% &&&&& &&&&& & &&&&&& &&&&& &&&&&& &&&&& && &&&&&&&& &&&&&&&& &&&&&& $$$$ ",
+ " %%%% &&& &&&& &&&&&& &&&& &&&&&&&& &&&&& & &&&&&&& &&&&&&&&&&&&&& $$$$ ",
+ " %%% & &&&&& &&&&&&& &&&&&& &&&&&& &&&&&&&&&&&&& &&&&&&&&&&& $$$$ ",
+ " %%%% &&&&&&&&&&&&& &&&&&&&&&&&& &&&&&&&&&& &&&&&&&&& $$$$ ",
+ " %%%%% &&&&&&&&&&& &&&&&&&& &&&&&& &&&& $$$$ ",
+ " %%%% &&&&&&& &&&& & $$$$ ",
+ " %%%%% && $$$$ ",
+ " %%% $$$$ ",
+ " %%% $$$$ ",
+ " %%% '''''''' $$$$ ",
+ " %%% '''''''' $$$$ ",
+ " %%% '''''''' $$$$ ",
+ " %%% ''' $$$$ ",
+ " %%% '''''''''''''''''''''''''' $$$$ ",
+ " %%% ''''''''''''''''''''''''' $$$$ ",
+ " %%% (( '''''''''''''''''''''''''' $$$$$ ",
+ " %%% ((((((( (((((((( ''''''''''''''''''''''''' $$$$ ",
+ " %%% (((((( (((((((( (((((((((( (((((((((((( ' ''' ' '' ' ''' $$$$$ ",
+ " %%% (((((((((( (((((((((((( ((((((((((((( (((((((((((((( '' $$$$ ",
+ " %%%% (((((((((((((( ((((((((((((((( (((((((( ((((( (((((((( (( (((( $$$$ ",
+ " %%%% (((((((( ((((((( ((((((( ( ( (((( (((((((( (((( (((((( ( (((((( $$$$ ",
+ " %%% (((((((( ( (((((( (((((( ( ( (((((( (((((( ( (((( ((((( (((((( $$$$ ",
+ " %%%% (((((( (( (((((( (((((((( (((( ((((( ( (((((( ((((( (((((( $$$$$ ",
+ " %%%% ((((( ( ( (((( (((((( ( (((( (((((((( (((( (((((( (((( (( $$$$$ ",
+ " %%%%% ((((( ( ((((( ((((( ( ( (((( (((((((( ((((( ((((( ( ((((( (((( $$$$ ",
+ " %%%%% (((( (((( (((((((( (((( ((((( ( ( (((( ((((((( (((((( (((((( $$$$$ ",
+ " %%%% (( (((((( ((((((( ((((( (((((((( (((((((((((((((( (((((((((((((( $$$$$ ",
+ " %%%% (((((((( ((((((( ( (((((((((((( ( (((((((((((((( ( ((((((((( $$$$$ ",
+ " %%%%% ((((((((((((( ((((((((((( ( ( (((((((((( (((((((( $$$$ ",
+ " %%% % (((((((( ( )) (((((((( ( ( (((( ( (( ( $$$$ ",
+ " %%%%% (((( )))) *** ( (( ( ( ( + + $$$$$ ",
+ " %%%% ))))) *** ( ++++++++++++ ++ +++ ++ ++ $$$$$ ",
+ " %%%%% )))))) **** ++++++++++++++++++++++++++++++++ $$$$ ",
+ " %%%%% )))))) **** ,,, +++++++++++++++++++++++++++++++++++++ $$$$ ",
+ " %%%% ))))) **** ,,, - --- - - +++++++++++++++++++++++++++++++++ $$$$ ",
+ " %%%% )))))) **** ,,, ------ - -- -------- -- +++++++++++++++ $$$$ ",
+ " %%%% )))))) **** ,,,, ----------------------------- ++++++ $$$$ ",
+ " %%%% ))))) ***** ,,,,, ----------------------------- ++++ $$$$ ",
+ " %%%%% )))))) ***** ,,,,, ----------------------------- ++++ $$$$ ",
+ " %%%% )))))) **** ,,, , ++++ $$$$ ",
+ " %%%%% ))))) ) **** ,,, +++++ $$$$ ",
+ " %%%% )))))) ) **** ,,, . . ++++ $$$$ ",
+ " %%%% )))))))) *** ,,,, ... . ......... +++ $$$$ ",
+ " %%%% ))))))) ***** ,,,,, ................................. ++++ $$$$ ",
+ " %%%% )))))))) *** ,,,,, .......................................... ++++ $$$$ ",
+ " %%%% ))))))) ***** ,,,, ........................................... +++ $$$$ ",
+ " %%%% )))))))) ***** ,,,,, ................. +++ $$$$ ",
+ " %%%% )))))) *** ,,,, ..... +++ + $$$$ ",
+ " %%%% ))))))) ) **** ,,, .... ++++ $$$$ ",
+ " %%%% )))))) ) **** ,,,, ..... +++++ $$$$ ",
+ " %%%% )))))) ) ////////// / // **** ,,,, , ... +++ $$$$ ",
+ " %%%% )))))) ) /////////////// // **** ,,,,, .... ++++ $$$$ ",
+ " %%%% )))))))) / ////////////////////// **** ,,, , .... +++ $$$$$ ",
+ " %%%% )))))) /////// /////////////// ***** ,,,, .... +++ $$$$ ",
+ " %%%% )))))) ) /////// /////////// *** ,,,, .... ++++++ $$$$ ",
+ " %%%% ))))) ////// ///// *** ,,, ... +++++ $$$$ ",
+ " %%%% )))))) ////// ///// *** ,,,, .... 00000000000000000000000000000 +++++ $$$$$ ",
+ " %%%% )))))) //////// ///// *** ,,,, ... 00000000000000000000000000000 +++++ $$$$ ",
+ " %%%%% ))))) / ///// ///// ,,,,, ... 00000000000000000000000000000 +++++ $$$$ ",
+ " %%%%% ))))) /////// ///// ,,, ..... 0000 0 0000 0 0 ++++ $$$$ ",
+ " %%%% ))) /////// ///// ,,, ... 0 00 0 0 0 +++ $$$$ ",
+ " %%% ) //// ///// ,,, ..... ++++ $$$$ ",
+ " %%%% //// //// ,,, . ... ++++ $$$$$ ",
+ " %%% //// //// ,,, ..... ++++ $$$$ ",
+ " %%%% //// ///// .... ++++ $$$$$ ",
+ " %%% ///// //// .... ++++++++++++++++ ++++ $$$$$ ",
+ " %%%% ///// /// ..... ++++++++++++++++++++++++++++++++++++++++++++ $$$$$ ",
+ " %%%% //// /// ..... +++++++++++++++++++++++++++++++++++++++++++ $$$$ ",
+ " %%% /// //// .... +++++++++++++++++++++++++++++++++++ $$$$ ",
+ " %%%% /// //// .... + ++ +++ + ++ ++ + ++ + $$$$$ ",
+ " %%%% /// //// .... + + + + + + $$$$$ ",
+ " %%%% ///// /// ..... $$$$ ",
+ " %%%% //// /// ..... $$$$ ",
+ " %%%% //// /// ..... $$$$$ ",
+ " %%%% /// //// .... $$$$ ",
+ " %%% /// ///// ..... $$$$$ ",
+ " %%% /// //// ...... $$$$ ",
+ " %%% /// /// .......................................... $$$$ ",
+ " %%% //// ///// ........................................ $$$$ ",
+ " %%% //// /// ...................................... $$$$ ",
+ " %%% //// //// .... .. .... . . . $$$$ ",
+ " %%% //// /// ....... . .. ... $$$$ ",
+ " //// ///// $$$$ ",
+ " / //// ////// $$$$ ",
+ " ////// ///// ",
+ " ///// ////// / ",
+ " ////// /////// / ",
+ " / //// /////// / ",
+ " ////// //////// ",
+ " ///// ////// ",
+ " ///////////// //////// ",
+ " / /////////////////////// 11111111111111111111111111111111111111111111111111 ",
+ " / ///////////////////// / 11111111111111111111111111111111111111111111111111 ",
+ " / // //////////// 11111111111111111111111111111111111111111111111111 ",
+ " /// / //// 1111111111 11111111 1 11 11 1 11 1 ",
+ " 1 11111111 11 1 1 11 1 1 ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/lines-6-200-200-1.0-grid-reference.json b/tests/visual_tests/grids/lines-6-200-200-1.0-grid-reference.json
new file mode 100644
index 000000000..aedfdc785
--- /dev/null
+++ b/tests/visual_tests/grids/lines-6-200-200-1.0-grid-reference.json
@@ -0,0 +1,74 @@
+{
+ "keys": [
+ "",
+ "9",
+ "8",
+ "4",
+ "5",
+ "7",
+ "16",
+ "6",
+ "12",
+ "10",
+ "2",
+ "13",
+ "14",
+ "11",
+ "3",
+ "15",
+ "1"
+ ],
+ "data": {},
+ "grid": [
+ " ",
+ " ",
+ " ",
+ " !! ! ",
+ " !!!!! !!!! !!! ",
+ " !!!!!!!! !!!!!!! !!!!!! !!! ",
+ " !!!!!!!!!! !!!!!!!!! !!!!!!!! !!!! ",
+ " !!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ",
+ " !! # !!!!!!!!! # !!!!!!!!! !!!!!!!! ",
+ " #### !!!!!!! ### !!!!! ## !!!!!! ",
+ " ###### !!! ###### !!! ##### !! ## $$$ ",
+ " ########## ! ######### ######## ####$$$ ",
+ " #### ##### ############ ###############$$$ ",
+ " %%%## ########## ######### ######## $$$ ",
+ " %%% ####### ####### ##### $$$ ",
+ " %%% &&&& #####& &&### &&&&## $$$ ",
+ " %%%&&&&&&& #&&& &&&&& &&&&&&& $$$ ",
+ " %%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& $$$ ",
+ " %%%&&& &&&&&&&& &&&&&&&&&&&&&&& &&&&&& $$$ ",
+ " %%% & &&&&& &&&&&& &&&&& &&&&& '''$$ ",
+ " %%% &&& ( && & '''''''$$ ",
+ " %%% ((( (((( (((( ((((( '''''''$$ ",
+ " %%%((((((( ((((((( ((((((( ((((((('''''''$$ ",
+ " %%(((((((((((((((((((((((((((((((((((( $$$ ",
+ " %%%((( (((((((((((((((( ((((((( ((((( $$$ ",
+ " %%% ( ((((( ))(((( ((((*********** $$$ ",
+ " %%% (((++ ))),,,--------************ $$$ ",
+ " %%% ++++++ ))),,,--------***.*********$$$ ",
+ " %%% +++++ ))),,,--------.... ****$$$ ",
+ " %%% +++++/// ))),,,............ ***$$$ ",
+ " %%% +++++//////)),,,,............ ***$$$ ",
+ " %%%++++////////)),,,,... 0000000 ***$$$ ",
+ " %%%+++//////////),,,.... 0000000 ***$$$ ",
+ " %%%+++//// ///,,,... 0000000*******$$$ ",
+ " %%% /// /// .... *************$$$ ",
+ " %%% /// /// .... ************ $$$ ",
+ " %%% /// /// ............. *** $$$ ",
+ " %%% //// /// ............ $$$ ",
+ " %%% //// //// ........... $$$ ",
+ " //////////// 111 ",
+ " /////////// 1111111111111 ",
+ " //////// 1111111111111 ",
+ " ///// 1111111111111 ",
+ " / ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/lines-6-400-400-1.0-grid-reference.json b/tests/visual_tests/grids/lines-6-400-400-1.0-grid-reference.json
new file mode 100644
index 000000000..f3e6538e5
--- /dev/null
+++ b/tests/visual_tests/grids/lines-6-400-400-1.0-grid-reference.json
@@ -0,0 +1,124 @@
+{
+ "keys": [
+ "",
+ "9",
+ "8",
+ "4",
+ "5",
+ "7",
+ "16",
+ "6",
+ "2",
+ "10",
+ "12",
+ "13",
+ "14",
+ "11",
+ "3",
+ "15",
+ "1"
+ ],
+ "data": {},
+ "grid": [
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ! ",
+ " !!!! !! ",
+ " !!!!!! !!!! !!! ",
+ " !!!!!!!!! !!!!!!! !!!!! !! ",
+ " !!!!!!!!!!!! !!!!!!!!!! !!!!!!!! !!! ",
+ " !!!!!! ! !!!!!! !!!!! !!!!!! !!!!!!!!!!! !!!!! ",
+ " !!!!!! !!!!! !!!!!! !!!!! !!!!!! !!!!!! !!!!!! ",
+ " !!!!! !!!!!! !!!!!! !!!!!! !!!!!! !!!!! !!!!! ",
+ " !!!! ! !!!!!! !!!!!! !!!!!! !!!!! !!!!! !!!!!! ",
+ " ! !!!!! !!!!!! !!!!!!!!!!! !!!!!!!!!!! ",
+ " !!!!!!!!! !!!!!!!!! !!!!!!! ",
+ " # # !!!!!!! # !!!!!! !!!!! ",
+ " #### !!!!! #### !!! ## !!! $$$ ",
+ " ####### # ! ###### ! #### # $$$ ",
+ " ########### ######### ####### ### $$$ ",
+ " ####### ##### ###### ##### ######### ##### $$$ ",
+ " ###### ###### ###### ##### ###### ##### ##### $$$ ",
+ " ##### ###### ##### ###### ##### ###### ###### $$$ ",
+ " %%%%#### ##### ###### ###### ##### ###### ###### $$$ ",
+ " %%%% # ##### ##### ##### ###### ########## $$$ ",
+ " %%%% ############ ########### ######## $$$ ",
+ " %%%% ######### ######## ##### $$$ ",
+ " %%%% ###### ###### ## $$$ ",
+ " %%%% #### ### && $$$ ",
+ " %%%% &&&& ##&&&&& &&&&&& &&&&&&& $$$ ",
+ " %%%% &&&&&&&& &&&&&&&& &&&&&&&& &&&&&&&&&& $$$ ",
+ " %%%% &&&&&&&&& &&&&&&&&&& &&&&&&&&&&& &&&&&&&&&&&& $$$ ",
+ " %%%% &&&&&&&&&&&& &&&&&&& &&&&& &&&&&& &&&& &&&&&& &&&& & $$$ ",
+ " %%%% &&&&& & &&&& &&&&&&& &&&& &&&&& &&&& &&&&& &&&&&&&&& $$$ ",
+ " %%%% &&& &&&&&&&&&&& &&&&&&&&&& &&&&&&&&&& &&&&&&&& $$$ ",
+ " %%%% & &&&&&&&&& &&&&&&&& &&&&&&&& &&&&&& $$$ ",
+ " %%%% &&&&&&& &&&&&& &&&&&&& &&&& $$$ ",
+ " %%%% & &&& & ''''' $$$ ",
+ " %%%% ''''' $$$ ",
+ " %%%% ''''' $$$ ",
+ " %%%% ( ( ''''''''''''' $$$ ",
+ " %%%% (( ((((( ((((( ((((((( ''''''''''''' $$$ ",
+ " %%%% ((((((( (((((((( (((((((( ((((((((( ''''''''''''' $$$ ",
+ " %%%% ((((((((( (((((((((( ((((((((((((( ((((((((((( $$$ ",
+ " %%%% (((((((((((( ((((((((((( (((((( ((((( (((((( (((( $$$ ",
+ " %%%%(((((( ((((( (((((( (((( ((((( ((((( (((((( (((( (( $$$ ",
+ " %%%% ((( ((((( ((((( (((((((((( (((((((((( ((((((((( $$$ ",
+ " %%%% ( ((((((((() ((((((((( (((((((( (((((((( $$$ ",
+ " %%%% ((((((()) ((((((( ((((( *** (((( $$$ ",
+ " %%% (((( )))) ++++ (( ****************** $$$ ",
+ " %%% )))))) ++++ ,,,, ******************** $$$ ",
+ " %%% )))))) +++ ,,, --------------- ********************* $$$ ",
+ " %%% ))))) +++ ,,, --------------- * ***** $$$ ",
+ " %%% )))))) +++ ,,, --------------- **** $$$ ",
+ " %%% )))))) +++ ,,, ............... ***** $$$ ",
+ " %%% ))))) ++++ ,,, ...................... **** $$$ ",
+ " %%% )))))) ++++ ,,,, ....................... *** $$$ ",
+ " %%% )))))) +++ ,,,, ....................... *** $$$ ",
+ " %%% ))))) /////// +++ ,,, .... *** $$$ ",
+ " %%% )))))) //////////// +++ ,,, ... *** $$$ ",
+ " %%% ))))) ///////////////+++ ,,, ... *** $$$ ",
+ " %%% ))))) ////// ///////++++,,, ... 000000000000000 *** $$$ ",
+ " %%%)))))) ///// ///+++,,,, ... 000000000000000 **** $$$ ",
+ " %%% ))) ///// //// ,,,, ... 000000000000000 **** $$$ ",
+ " %%% )) ///// ////,,,, ... *** $$$ ",
+ " %%% //// /////,, ... **** **** $$$ ",
+ " %%% /// //// ... *********************** $$$ ",
+ " %%% /// /// ... ********************** $$$ ",
+ " %%% /// /// ... ********************* $$$ ",
+ " %%% /// /// .... $$$ ",
+ " %%% //// /// ..... $$$ ",
+ " %%% //// /// ....................... $$$ ",
+ " %%% //// //// ...................... $$$ ",
+ " %%% //// //// . ..................... $$$ ",
+ " %%% //// /// .................. $$$ ",
+ " //// //// . $$$ ",
+ " //// ////// ",
+ " ///// ////// ",
+ " ////////// ///// 11111111111111111111 ",
+ " ////////////// 11111111111111111111111111 ",
+ " / //////////// 11111111111111111111111111 ",
+ " //// 11111111111111111111 ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/lines-6-600-600-1.0-grid-reference.json b/tests/visual_tests/grids/lines-6-600-600-1.0-grid-reference.json
new file mode 100644
index 000000000..cf4f829a7
--- /dev/null
+++ b/tests/visual_tests/grids/lines-6-600-600-1.0-grid-reference.json
@@ -0,0 +1,174 @@
+{
+ "keys": [
+ "",
+ "9",
+ "8",
+ "4",
+ "5",
+ "7",
+ "16",
+ "6",
+ "2",
+ "12",
+ "10",
+ "13",
+ "14",
+ "11",
+ "3",
+ "15",
+ "1"
+ ],
+ "data": {},
+ "grid": [
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " !! ",
+ " !!!!! !! ",
+ " !!!!!!!! !!!!! !! ",
+ " !!!!!!!!!!! !!!!!!! !!!!! ! ",
+ " !!!!!! !!!!! !!!!!!!!!! !!!!!!!! !! ",
+ " !!!!!! !!!!! !!!!!! !!!!!! !!!!!!!!!!! !!!!! ",
+ " !!!!!! !!!!!! !!!!!! !!!!!! !!!!!! !!!!! !!!!!! ",
+ " !!!!!! !!!!! !!!!!! !!!!! !!!!! !!!!!! !!!!! ",
+ " !!!!!!! !!!!! !!!!!! !!!!! !!!!!! !!!!!! !!!!!! ",
+ " !!!!!! !!!!! !!!!!! !!!!!! !!!!!! !!!!! !!!!!! ",
+ " !!!!! !!!!!! !!!!! !!!!!! !!!!! ! !!!!! !!!!! ",
+ " !!! !!!!! !!!!!! !!!!! !!!!!! !!!!!! !!!!!! ",
+ " !!!!! !!!!!! !!!!!! !!!!!! !!!!!! !!!!!! ",
+ " !!!!! !!!!!! ! !!!!!!!!!!!! !! !!!!!!!!!! ",
+ " !!!!!!!!!!! !!!!!!!!! !!!!!!!! ",
+ " !!!!!!! !!!!!! !!!!! ",
+ " ## !!!!! # ! !!!! !! ",
+ " ##### !!! #### ! # $$$$ ",
+ " ######## ###### ### $$$$ ",
+ " ########## ######### ##### ## $$$$ ",
+ " ###### ###### ############ ######### # #### $$$$ ",
+ " ###### ###### ###### ##### ########### ###### $$$$ ",
+ " ###### ##### ###### ###### ##### ##### ###### $$$$ ",
+ " ####### ##### ###### ###### ##### ######## ##### $$$$ ",
+ " ###### ###### ##### ##### # ###### ##### ###### $$$$ ",
+ " ##### ###### ###### ##### ##### ###### ###### $$$$ ",
+ " %%% ### ##### ###### ###### # ##### ###### ###### $$$$ ",
+ " %%% ##### ###### ###### ###### ##### ###### $$$$ ",
+ " %%% ###### ###### ##### ###### ########## $$$$ ",
+ " %%% ##### ##### ###### ##### ######## $$$$ ",
+ " %%% ########### ########## ##### $$$$ ",
+ " %%% ######### ####### ## $$$$ ",
+ " %%% ###### #### $$$$ ",
+ " %%% ### ## $$$$ ",
+ " %%% &&&&& $$$$ ",
+ " %%% && &&&&& &&&&&&&& &&&&&&&&& $$$$ ",
+ " %%% &&&&&&&& &&&&&&&&& &&&&&&&&&&& &&&&&&&&&&& $$$$ ",
+ " %%% &&&&&&&&&& &&&&&&&&&&&& &&&&&&&&&&&&& &&&&&&&&&&&&&& $$$$ ",
+ " %%% &&&&&&&&&&&&& &&&&&&& &&&&& &&&&&& &&&&& &&&&&& &&&&& $$$$ ",
+ " %%% &&&&&& &&&&& &&&&&& &&&& &&&&&& &&&& &&&&& &&&& $$$$ ",
+ " %%%% &&&&& & &&&& &&&&& &&&& &&&&& &&&& &&&&& &&&& & $$$$ ",
+ " %%% &&&&& &&&&& &&&&& &&&& &&&&& &&&& &&&&&& &&&& &&&& $$$$ ",
+ " %%% &&& &&&&& &&&&&& &&&&& &&&&&& &&&&&&&&&&&&& &&&&&&&&&&&& $$$$ ",
+ " %%% & &&&&&&&&&&&& &&&&&&&&&&&& &&&&&&&&&& &&&&&&&&& $$$$ ",
+ " %%% &&&&&&&&& &&&&&&&&& &&&&&&&& &&&&&& $$$$ ",
+ " %%% &&&&&&& &&&&&& &&& & $$$$ ",
+ " %%% && && $$$$ ",
+ " %%% '''''' $$$$ ",
+ " %%% '''''' $$$$ ",
+ " %%% '''''' $$$$ ",
+ " %%% '''''' $$$$ ",
+ " %%% ''''''''''''''''''' $$$$ ",
+ " %%% ''''''''''''''''''' $$$$ ",
+ " %%% ( (( ((( (((((( ((((((( ''''''''''''''''''' $$$$ ",
+ " %%% ((((((( (((((((( ((((((((( ((((((((((( $$$$ ",
+ " %%% (((((((((( ((((((((((( (((((((((((( ((((((((((((( $$$$ ",
+ " %%% ((((((((((((( ((((((((((((( ((((((( ((((( (((((( (((( $$$$ ",
+ " %%% ((((((( ((((( (((((( (((((( ((((( (((( ((((( (((( $$$$ ",
+ " %%% ((((( ((((( (((((( ((((( (((((( ((((( ((((( (((( ( $$$$ ",
+ " %%% ((((( (((( ((((( (((( ((((( (((( (((((( ((((( ((( $$$$ ",
+ " %%% (((( (((( ((((( (((( ( ((((( ((((( (((((( (((((((((((( $$$$ ",
+ " %%% (( (((((( (((((( ((((((((((( (((((((((( (((((((((( $$$$ ",
+ " %%% ((((((((((( ((((((((( (((((((( ((((((( $$$$ ",
+ " %%% (((((((( )) (((((( ((((( (( $$$$ ",
+ " %%% (((( )))) *** ( +++++++ $$$$ ",
+ " %%% )))))) **** +++++++++++++++++++++++++++ $$$$ ",
+ " %%% )))))) **** ,,, +++++++++++++++++++++++++++++ $$$$ ",
+ " %%% ))))) *** ,,,, -- +++++++++++++++++++++++++++++ $$$$ ",
+ " %%% ))))) *** ,,,, ---------------------- + ++ +++++++++ $$$$ ",
+ " %%% )))))) *** ,,, ---------------------- +++++ $$$$ ",
+ " %%% ))))) *** ,,, ---------------------- +++++ $$$$ ",
+ " %%% ))))) **** ,,, ++++ $$$$ ",
+ " %%% )))))) **** ,,, ++++ $$$ ",
+ " %%% ))))) **** ,,, ........................ ++++ $$$$ ",
+ " %%% ))))) *** ,,,, ................................ +++ $$$ ",
+ " %%% )))))) *** ,,,, ................................ +++ $$$$ ",
+ " %%% ))))) *** ,,, ................... . +++ $$$ ",
+ " %%% )))))) *** ,,, ...... +++ $$$ ",
+ " %%% )))))) //// **** ,,, ..... +++ $$$ ",
+ " %%% ))))) /////////// **** ,,, ... +++ $$$ ",
+ " %%% )))))) ///////////////// *** ,,,, ... +++ $$$ ",
+ " %%%% )))))) //////////////////// *** ,,,, ... +++ $$$ ",
+ " %%% ))))) ////// //////// *** ,,,, .... +++ $$$ ",
+ " %%% )))))) ///// //// *** ,,, .... 00000000000000000000000 ++++ $$$ ",
+ " %%% )))))) ////// ////*** ,,, .... 00000000000000000000000 ++++ $$$ ",
+ " %%% ))))) ////// ///// ,,, ... 00000000000000000000000 +++ $$$ ",
+ " %%% ))) ///// //// ,,, ... +++ $$$ ",
+ " %%% )) //// //// ,,,, ... +++ $$$ ",
+ " %%% /// //// ,,,, ... ++++ $$$ ",
+ " %%% //// ///// ... + + ++++ $$$ ",
+ " %%% //// //// ... ++++++++++++++++++++++++++++++++++ $$$ ",
+ " %%% /// /// .... +++++++++++++++++++++++++++++++++ $$$ ",
+ " %%% /// //// .... +++++++++++++++++++++++++++++++++ $$$ ",
+ " %%% /// /// ... +++++++++++ $$$ ",
+ " %%% /// /// .... $$$ ",
+ " %%% /// /// .... $$$ ",
+ " %%% //// /// ..... . $$$ ",
+ " %%% //// /// ...... $$$ ",
+ " %%% /// //// ...... . $$$ ",
+ " %%% //// //// ............................... $$$ ",
+ " %%% //// /// .............................. $$$ ",
+ " %%% //// /// ............................ $$$ ",
+ " %%% //// /// $$$ ",
+ " //// //// $$$ ",
+ " //// ///// ",
+ " //// ////// ",
+ " //// ////// ",
+ " ///// / ///// ",
+ " //////// / ////// 11 ",
+ " ///////////// ////// 11111111111111111111111111111111111111 ",
+ " ///////////////// 11111111111111111111111111111111111111 ",
+ " //////////// 11111111111111111111111111111111111111 ",
+ " //// 11111111111111 ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/lines-6-800-800-1.0-grid-reference.json b/tests/visual_tests/grids/lines-6-800-800-1.0-grid-reference.json
new file mode 100644
index 000000000..195a0006b
--- /dev/null
+++ b/tests/visual_tests/grids/lines-6-800-800-1.0-grid-reference.json
@@ -0,0 +1,224 @@
+{
+ "keys": [
+ "",
+ "9",
+ "8",
+ "4",
+ "5",
+ "7",
+ "16",
+ "6",
+ "2",
+ "12",
+ "10",
+ "13",
+ "14",
+ "11",
+ "3",
+ "15",
+ "1"
+ ],
+ "data": {},
+ "grid": [
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ! ",
+ " !!!! ",
+ " !!!!!!! !!! ",
+ " !!!!!!!!! !!!!! !!! ",
+ " !!!!!! !!!!! !!!!!!! !!!!! ",
+ " !!!!!! !!!!!! !!!!!!!!!!! !!!!!!!! ! ",
+ " !!!!!! !!!!! !!!!!! !!!!!! !!!!!!!!!! !!!! ",
+ " !!!!!! !!!!! !!!!!! !!!!!! !!!!! !!!!!! !!!!!! ",
+ " !!!!!! !!!!!! !!!!!! ! !!!!!! !!!!!! !!!!!! !!!!! ",
+ " !!!!!!! !!!!!! !!!!! !!!!!! !!!!!! !!!!! !!!!!! ",
+ " !!!!!! !!!!! !!!!!! !!!!! !!!!! !!!!! !!!!!! ",
+ " !!!!!!! !!!!! !!!!!! !!!!! !!!!!! !!!!!! !!!!! ",
+ " !!!!!! !!!!!! !!!!!! !!!!!! !!!!!! !!!!! !!!!!! ",
+ " !!!!!! !!!!!! !!!!!! !!!!! !!!!! !!!!! !!!!!! ",
+ " !!!! !!!!! !!!!! !!!!! !!!!!! !!!!!! !!!!! ",
+ " ! !!!!! !!!!!! !!!!!! !!!!! !!!!!! !!!!!! ",
+ " !!!!!! !!!!! !!!!!! !!!!!! !!!!! !!!!! ",
+ " !!!!!! !!!!!! !!!!! !!!!!! !!!!! !!!!!! ",
+ " ! !!!!! !!!!!! !!!!!! !!!!! ! !!!!!!!!!!! ",
+ " !!!!!!!!!!! !!!!!!!!!! !!!!!!!! ",
+ " !!!!!!!!! !!!!!!! !!!!! ",
+ " ! !!!!!! !!!! ! !!! ",
+ " ### !!! # !! $$$ ",
+ " ##### ! #### ## $$$ ",
+ " ######## ####### ## $$$ ",
+ " ########### ########## ##### # $$$ ",
+ " ###### ####### ############ ######## ### $$$ ",
+ " ####### ##### ##### ###### ########## ##### $$$ ",
+ " ###### ##### ###### ###### ##### ##### ##### $$$ ",
+ " ###### ###### ###### ###### ###### ###### ###### $$$ ",
+ " ###### ###### ##### ##### ###### ###### ###### $$$ ",
+ " ###### ##### ###### ##### ##### ##### ##### $$$ ",
+ " ####### ##### ##### ###### ##### ###### ###### $$$ ",
+ " ###### ###### ###### ##### ###### ###### ##### $$$$ ",
+ " #### ##### ###### ##### ##### ##### ###### $$$ ",
+ " %%% ## ##### ##### ###### ##### ###### # ###### $$$ ",
+ " %%% ####### ###### ###### ###### ##### ##### $$$ ",
+ " %%% ###### ###### ##### ###### ###### ###### $$$ ",
+ " %%% ##### # ###### ##### ##### ########### $$$ ",
+ " %%% ##### # ###### ###### ##### ####### $$$ ",
+ " %%% ###### ###### ########### ##### $$$ ",
+ " %%% ########### ######## ## $$$ ",
+ " %%% ######## ###### $$$ ",
+ " %%% ##### #### $$$$ ",
+ " %%% ### # $$$ ",
+ " %%% $$$ ",
+ " %%% &&&&&&& $$$ ",
+ " %%% &&&&&& &&&&&&&& &&&&&&&&&& $$$ ",
+ " %%% &&&&&&&& &&&&&&&&&& &&&&&&&&&&&& &&&&&&&&&&&&& $$$ ",
+ " %%% &&&&&&&&&&& &&&&&&&&&&&&& &&&&&&&&&&&&&& &&&&&&&& &&&&&& $$$ ",
+ " %%% &&&&&&&&&&&&&& &&&&&&& &&&&&& &&&&&&&& &&&&& &&&&&& & &&&&& $$$$ ",
+ " %%% &&&&&&& &&&&& &&&&&&&& &&&&& &&&&&& &&&&& &&&&& &&&&& $$$$ ",
+ " %%% &&&&&& &&&&& &&&&&& &&&& &&&&& &&&&& &&&&& &&&& $$$$ ",
+ " %%% &&&&&& &&&&& &&&&& &&&&& &&&&&& &&&& &&&&&& &&&& $$$$ ",
+ " %%% &&&&& &&&& &&&&& &&&& &&&&& &&&& &&&&& &&&& && $$$$ ",
+ " %%% &&&&& &&&& &&&&& &&&& &&&&& &&&&& &&&&& &&&&& &&&&& $$$$ ",
+ " %%% &&& &&&& &&&&&& &&&& &&&&& &&&&& &&&&&& &&&&&&&&&&&&&& $$$$ ",
+ " %%% & &&&&& &&&&&&& &&&&&& &&&&&& &&&&&&&&&&&&& &&&&&&&&&&& $$$$ ",
+ " %%%% &&&&&&&&&&&&& &&&&&&&&&&&& &&&&&&&&&& &&&&&&&&& $$$$ ",
+ " %%% &&&&&&&&&&& &&&&&&&& &&&&&& &&&& $$$$ ",
+ " %%% &&&&&&& &&&& & $$$$ ",
+ " %%% && $$$$ ",
+ " %%% $$$$ ",
+ " %%% $$$$ ",
+ " %%% '''''''' $$$$ ",
+ " %%% '''''''' $$$$ ",
+ " %%% '''''''' $$$$ ",
+ " %%% ' ' ''' $$$$ ",
+ " %%% ''''''''''''''''''''''''' $$$$ ",
+ " %%% ( ''''''''''''''''''''''''' $$$$ ",
+ " %%% (( (( ''''''''''''''''''''''''' $$$$ ",
+ " %%% ( ( ((((((( (((((((( ''''''''''''''''''''''''' $$$$ ",
+ " %%% (((((( (((((((((( (((((((((( (((((((((((( $$$$ ",
+ " %%% ((((((((((( (((((((((((( ((((((((((((( (((((((((((((( $$$$ ",
+ " %%% (((((((((((((( ((((((((((((((( (((((((( ((((( ((((((( (((( $$$$ ",
+ " %%% ((((((( ((((((( ((((((( (((( (((((( (((( (((((( (((( $$$$ ",
+ " %%% ((((((( (((( (((((( (((( (((((( (((( ((((( (((( $$$$ ",
+ " %%% (((((( (((( (((((( (((( ((((( ((((( ((((( ((((( $$$$ ",
+ " %%% ((((( (((( ((((( (((( (((((( (((( (((((( (((( (( $$$$ ",
+ " %%% ((((( ((((( ((((( (((( ((((( (((( ((((( (((( (((( $$$$ ",
+ " %%% (((( (((( (((((( (((( ((((( (((( (((((( ((((( (((((( $$$$ ",
+ " %%% (( ((((( (((((( ((((( (((((( (((((((((((((( ((((((((((((( $$$$ ",
+ " %%% (((((( (((((( (((((((((((( (((((((((((( ((((((((( $$$$ ",
+ " %%% ((((((((((( (((((((((( (((((((( (((((( $$$$ ",
+ " %%% (((((((( )) ((((((( ((( $$$$ ",
+ " %%%% (((( )))) *** ( $$$$ ",
+ " %%%% ))))) *** ++++++++++++ $$$$ ",
+ " %%%% )))))) *** ++++++++++++++++++++++++++++++++ $$$$ ",
+ " %%%% )))))) **** ,,, +++++++++++++++++++++++++++++++++++++ $$$$ ",
+ " %%%% ))))) **** ,,, +++++++++++++++++++++++++++++++++ $$$$ ",
+ " %%%% )))))) *** ,,, ------ + +++++++++++++++ $$$$ ",
+ " %%%% )))))) *** ,,,, ----------------------------- ++++++ $$$$ ",
+ " %%%% ))))) *** ,,,, ----------------------------- ++++ $$$$ ",
+ " %%%% )))))) *** ,,, ----------------------------- ++++ $$$$ ",
+ " %%%% )))))) **** ,,, ++++ $$$$ ",
+ " %%%% ))))) **** ,,, ++++ $$$$ ",
+ " %%%% )))))) *** ,,, ++++ $$$$ ",
+ " %%%% )))))) *** ,,, ++++ $$$$ ",
+ " %%%% ))))) *** ,,,, ................................. +++ $$$$ ",
+ " %%%% )))))) *** ,,,, .......................................... +++ $$$$ ",
+ " %%%% )))))) **** ,,, ........................................... ++++ $$$$ ",
+ " %%%% ))))) **** ,,, ................. +++ $$$$ ",
+ " %%%% )))))) *** ,,, ..... .. +++ $$$$ ",
+ " %%%% )))))) *** ,,, .... +++ $$$$ ",
+ " %%%% ))))) *** ,,,, ... +++ $$$$ ",
+ " %%%% )))))) //////// *** ,,,, ... +++ $$$$ ",
+ " %%%% )))))) /////////////// *** ,,,, .... +++ $$$$ ",
+ " %%%% ))))) ////////////////////// **** ,,, .... +++ $$$$ ",
+ " %%%% )))))) ////// ////////////// **** ,,, ... +++ $$$$ ",
+ " %%%% )))))) ////// / ///////// *** ,,, ... ++++ $$$$ ",
+ " %%%% ))))) ///// //// *** ,,, ... 0 ++++ $$$$ ",
+ " %%%% )))))) ////// ///// *** ,,,, ... 00000000000000000000000000000 ++++ $$$$ ",
+ " %%%% )))))) ////// //// *** ,,,, ... 00000000000000000000000000000 +++ $$$$ ",
+ " %%%% ))))) ///// //// ,,, ... 00000000000000000000000000000 +++ $$$$ ",
+ " %%%% ))))) ////// //// ,,, ... +++ $$$$ ",
+ " %%%% ))) ////// ///// ,,, ... ++++ $$$$ ",
+ " %%% ) //// //// ,,, ... ++++ $$$$ ",
+ " %%%% /// //// ,,, ... ++++ $$$$ ",
+ " %%% /// //// ,,, ... +++ $$$$ ",
+ " %%% /// ///// ... + + ++++ $$$$ ",
+ " %%% /// //// ... ++++++++++++++++ + ++++ $$$$ ",
+ " %%% //// /// ... ++++++++++++++++++++++++++++++++++++++++++++ $$$$ ",
+ " %%% //// /// ... +++++++++++++++++++++++++++++++++++++++++++ $$$$ ",
+ " %%% /// //// ... +++++++++++++++++++++++++++++++++ $$$$ ",
+ " %%% /// //// .... $$$$ ",
+ " %%% /// //// .... $$$$ ",
+ " %%% /// /// .... $$$$ ",
+ " %%% //// /// .... $$$$ ",
+ " %%% //// /// ..... $$$$ ",
+ " %%% /// /// ..... $$$$ ",
+ " %%% /// //// ..... $$$$ ",
+ " %%% /// //// ...... . . $$$$ ",
+ " %%% //// /// .......................................... $$$$ ",
+ " %%% //// /// ........................................ $$$$ ",
+ " %%% //// /// ...................................... $$$$ ",
+ " %%% //// /// $$$$ ",
+ " %%% //// /// $$$$ ",
+ " //// //// $$$$ ",
+ " //// ///// $$$$ ",
+ " ///// ///// ",
+ " ///// ////// ",
+ " //// /////// ",
+ " //// ///// ",
+ " ///// ////// ",
+ " ///// ////// ",
+ " /////////// ///// 1 11 ",
+ " /////////////////////// 11111111111111111111111111111111111111111111111111 ",
+ " //////////////////// 11111111111111111111111111111111111111111111111111 ",
+ " //////////// 11111111111111111111111111111111111111111111111111 ",
+ " //// 1111111111 ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/orientation-800-200-1.0-grid-reference.json b/tests/visual_tests/grids/orientation-800-200-1.0-grid-reference.json
new file mode 100644
index 000000000..ff629944d
--- /dev/null
+++ b/tests/visual_tests/grids/orientation-800-200-1.0-grid-reference.json
@@ -0,0 +1,68 @@
+{
+ "keys": [
+ "",
+ "9",
+ "1",
+ "2",
+ "8",
+ "10",
+ "3",
+ "4",
+ "5",
+ "6",
+ "7"
+ ],
+ "data": {},
+ "grid": [
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ! ! ",
+ " ! !! ",
+ " # $ $ %% %%% ! ! &&& & & ",
+ " # $ % %% % !!! & & ",
+ " # ## $ ' ' ' %% !! &&&& ",
+ " # # # $$ ' ' ' ( ) * + % ! !!! & ",
+ " ## # $ ''' ' ' ) * * !! ",
+ " # $ (( ) * ",
+ " $ $ ( ) )) * + + + ",
+ " (( ( ) ) ) ** + + + ",
+ " (( ( ( )) ) * +++ + + ",
+ " ( (( ((( ) * ",
+ " ( ( (( * * ",
+ " ( (( ",
+ " ((( ",
+ " (( ",
+ " ( ( ",
+ " ( ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/shieldsymbolizer-2-490-100-1.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-2-490-100-1.0-grid-reference.json
new file mode 100644
index 000000000..10c9eddcc
--- /dev/null
+++ b/tests/visual_tests/grids/shieldsymbolizer-2-490-100-1.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+ "",
+ "8",
+ "5",
+ "1",
+ "2",
+ "6",
+ "7",
+ "9",
+ "10",
+ "3",
+ "4"
+ ],
+ "data": {},
+ "grid": [
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ! ",
+ " ! ",
+ " ! ! ",
+ " # ",
+ " $$$ % # & & ' ' ! ! ( (((( ) ",
+ " $ % % * + ### && '' ! ( ( ( )) ",
+ " $ %% ** + # & ' ! (( ( (( )) ",
+ " $ ** + # ( ",
+ " * + + ",
+ " ! ! ",
+ " ! ",
+ " ! ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/shieldsymbolizer-2-495-100-1.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-2-495-100-1.0-grid-reference.json
new file mode 100644
index 000000000..77bc902a5
--- /dev/null
+++ b/tests/visual_tests/grids/shieldsymbolizer-2-495-100-1.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+ "",
+ "8",
+ "5",
+ "1",
+ "2",
+ "3",
+ "4",
+ "6",
+ "7",
+ "9",
+ "10"
+ ],
+ "data": {},
+ "grid": [
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ! ",
+ " ! ",
+ " ! ! ",
+ " ## ",
+ " $$$ % % & ' # ( ( ) ! ! * **** + ",
+ " $ % % & ' ## (( ) ) ! * * * ++ ",
+ " $$ %% & '' ((( )) !! ** **** ++ ",
+ " $ & ' ( * ",
+ " & & ' ",
+ " ! ",
+ " ! ",
+ " ! ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/shieldsymbolizer-2-497-100-1.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-2-497-100-1.0-grid-reference.json
new file mode 100644
index 000000000..5a7db2b37
--- /dev/null
+++ b/tests/visual_tests/grids/shieldsymbolizer-2-497-100-1.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+ "",
+ "8",
+ "5",
+ "1",
+ "2",
+ "3",
+ "6",
+ "7",
+ "9",
+ "10",
+ "4"
+ ],
+ "data": {},
+ "grid": [
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " !! ",
+ " ! ",
+ " ! ! ",
+ " # ",
+ " $$$ % % & # ' ' ( ( !!! ) )) ) ) *** ",
+ " $ %% & + ### '' (( ! ) )) ) * ",
+ " $$ % & ++ # '' !! ) )) ) * ",
+ " $ & ++ # ' ! * ",
+ " & & ++ ",
+ " ! ",
+ " ! ",
+ " ! ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/shieldsymbolizer-2-498-100-1.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-2-498-100-1.0-grid-reference.json
new file mode 100644
index 000000000..a3b975540
--- /dev/null
+++ b/tests/visual_tests/grids/shieldsymbolizer-2-498-100-1.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+ "",
+ "8",
+ "5",
+ "1",
+ "2",
+ "3",
+ "6",
+ "7",
+ "9",
+ "10",
+ "4"
+ ],
+ "data": {},
+ "grid": [
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " !! ",
+ " !! ",
+ " ! ",
+ " # ",
+ " $$$ % % & # ' ' ( ( ! )) ) ) ** ",
+ " $ %% & + ### '' (( !! ) ) ) * ",
+ " $$ % & ++ # '' ((( !! )))) )) ** ",
+ " $ & + # ( * ",
+ " & & ++ ",
+ " !! ",
+ " ! ",
+ " !! ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/shieldsymbolizer-2-499-100-1.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-2-499-100-1.0-grid-reference.json
new file mode 100644
index 000000000..f08a8841f
--- /dev/null
+++ b/tests/visual_tests/grids/shieldsymbolizer-2-499-100-1.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+ "",
+ "8",
+ "5",
+ "1",
+ "2",
+ "3",
+ "6",
+ "7",
+ "9",
+ "10",
+ "4"
+ ],
+ "data": {},
+ "grid": [
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " !! ",
+ " !! ",
+ " ! ",
+ " # ",
+ " $$ % % & # ' ( ( ! ) )))) * ",
+ " $ %% & + ### '' ((( !! )) ) )) ** ",
+ " $$ && ++ # '' ((( !! )) ) )) ** ",
+ " $ & + # ( ) ",
+ " & & + ",
+ " !! ",
+ " ! ",
+ " !! ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/shieldsymbolizer-2-500-100-1.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-2-500-100-1.0-grid-reference.json
new file mode 100644
index 000000000..b89a4d60b
--- /dev/null
+++ b/tests/visual_tests/grids/shieldsymbolizer-2-500-100-1.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+ "",
+ "8",
+ "5",
+ "1",
+ "2",
+ "3",
+ "6",
+ "7",
+ "9",
+ "10",
+ "4"
+ ],
+ "data": {},
+ "grid": [
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " !! ",
+ " ! ",
+ " ! ! ",
+ " ## ",
+ " $$ % % & # ' (( ! ! ) )))) ) * * ",
+ " $ %% & + ## ''' ((( ! ) ) ) * ",
+ " $$ && ++ # '' ((( !! )) )))) ** ",
+ " $ & + # ( ) ",
+ " & & + ",
+ " ! ",
+ " ! ",
+ " !! ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/shieldsymbolizer-2-501-100-1.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-2-501-100-1.0-grid-reference.json
new file mode 100644
index 000000000..eb383d368
--- /dev/null
+++ b/tests/visual_tests/grids/shieldsymbolizer-2-501-100-1.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+ "",
+ "8",
+ "5",
+ "1",
+ "2",
+ "3",
+ "6",
+ "7",
+ "9",
+ "10",
+ "4"
+ ],
+ "data": {},
+ "grid": [
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ! ",
+ " ! ",
+ " ! ! ",
+ " ## ",
+ " $$ % % & # ' ' ( !!! ) ) )) ) *** ",
+ " $ %% & + ## '' ( ( ! ) )) ) * ",
+ " $$ && + # ''' (( ! )) * ",
+ " $ && + # ' ! * ",
+ " & & + + ",
+ " ! ! ",
+ " ! ",
+ " ! ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/shieldsymbolizer-2-502-100-1.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-2-502-100-1.0-grid-reference.json
new file mode 100644
index 000000000..d76cdd32a
--- /dev/null
+++ b/tests/visual_tests/grids/shieldsymbolizer-2-502-100-1.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+ "",
+ "8",
+ "5",
+ "1",
+ "2",
+ "4",
+ "6",
+ "7",
+ "9",
+ "10",
+ "3"
+ ],
+ "data": {},
+ "grid": [
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ! ",
+ " ! ",
+ " ! ! ",
+ " ## ",
+ " $$ % % & # ' ' ( ( !!! ) )) ) ) *** ",
+ " $ %% + & ## '' ( ( ! ) ) ) * ",
+ " $$ % ++ && ''' (( ! )))) )) ** ",
+ " $ ++ & ' ! * ",
+ " + & & ",
+ " ! ",
+ " ! ",
+ " ! ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/shieldsymbolizer-2-505-100-1.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-2-505-100-1.0-grid-reference.json
new file mode 100644
index 000000000..666f11502
--- /dev/null
+++ b/tests/visual_tests/grids/shieldsymbolizer-2-505-100-1.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+ "",
+ "8",
+ "5",
+ "1",
+ "2",
+ "4",
+ "6",
+ "7",
+ "9",
+ "10",
+ "3"
+ ],
+ "data": {},
+ "grid": [
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " !! ",
+ " !! ",
+ " ! ! ",
+ " # ",
+ " $$ % % & # ' ' ( ( ! ) )))) ) *** ",
+ " $ %% + & ## '' (( ! ) ) ) * ",
+ " $$ %%% ++ && '' ((( !! )) )))) * ",
+ " $ % ++ & ( ) * ",
+ " + & & ",
+ " ! ",
+ " ! ",
+ " !! ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/shieldsymbolizer-2-510-100-1.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-2-510-100-1.0-grid-reference.json
new file mode 100644
index 000000000..9a77a4ada
--- /dev/null
+++ b/tests/visual_tests/grids/shieldsymbolizer-2-510-100-1.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+ "",
+ "8",
+ "5",
+ "1",
+ "2",
+ "6",
+ "7",
+ "9",
+ "10",
+ "3",
+ "4"
+ ],
+ "data": {},
+ "grid": [
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " !! ",
+ " !! ",
+ " ! ",
+ " ## ",
+ " $ % % # & & ' ' ! ( ( (( ( ))) ",
+ " $$ %%% * + ## && '' ! ( (( ( ) ",
+ " $$ %%% * ++ && ' !! ( (( ( ) ",
+ " % * + & ) ",
+ " * * + ",
+ " !! ",
+ " ! ",
+ " !! ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/shieldsymbolizer-3-490-100-1.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-3-490-100-1.0-grid-reference.json
new file mode 100644
index 000000000..4066d9720
--- /dev/null
+++ b/tests/visual_tests/grids/shieldsymbolizer-3-490-100-1.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+ "",
+ "8",
+ "5",
+ "1",
+ "2",
+ "6",
+ "7",
+ "9",
+ "3",
+ "4",
+ "10"
+ ],
+ "data": {},
+ "grid": [
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " !! ",
+ " !! ",
+ " ! ",
+ " # ",
+ " $ $ % % #### & & ' ! (( ( ( ",
+ " $ $ % %%% ) * # # # & & ' ' ! ! ((( ( (( + + ",
+ " $ %%% )) ** & '' !! (( ( (( + ",
+ " % )) **** ++++",
+ " ) * + ",
+ " !! ",
+ " ! ",
+ " !! + ",
+ " + ",
+ " + + ",
+ " ",
+ " ",
+ " ",
+ " "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/shieldsymbolizer-3-495-100-1.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-3-495-100-1.0-grid-reference.json
new file mode 100644
index 000000000..a6dbaaddf
--- /dev/null
+++ b/tests/visual_tests/grids/shieldsymbolizer-3-495-100-1.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+ "",
+ "8",
+ "5",
+ "1",
+ "2",
+ "6",
+ "7",
+ "9",
+ "3",
+ "4",
+ "10"
+ ],
+ "data": {},
+ "grid": [
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " !! ",
+ " !! ",
+ " ! ",
+ " ## ",
+ " $$$ %% #### & ' ! (((( ( ",
+ " $ $ % %%% ) * * # ## & && ' '' ! !! ((( ( (( + + ",
+ " $ %%% )) ** && '' !! (( ( (( + ",
+ " $ % )) ***** ( ++++",
+ " ) ) *** + ",
+ " !! ",
+ " ! ",
+ " !! ++ ",
+ " + ",
+ " + ",
+ " ",
+ " ",
+ " ",
+ " "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/shieldsymbolizer-3-497-100-1.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-3-497-100-1.0-grid-reference.json
new file mode 100644
index 000000000..8be5d102f
--- /dev/null
+++ b/tests/visual_tests/grids/shieldsymbolizer-3-497-100-1.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+ "",
+ "8",
+ "5",
+ "1",
+ "2",
+ "6",
+ "7",
+ "9",
+ "3",
+ "4",
+ "10"
+ ],
+ "data": {},
+ "grid": [
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ! ",
+ " ! ",
+ " ! ! ",
+ " ## ",
+ " $$$ % #### & & ' ' !!! ( (((( ( ",
+ " $ $ % % ) * * # # & & ' ' ! ! ( ( (( ( + ",
+ " $ %% ) ** && '' ! (( (((( ",
+ " $ ) ***** ! ( ++++ ",
+ " ) ) ** ",
+ " ! ! ",
+ " ! ",
+ " ! ++ ",
+ " + ",
+ " + ",
+ " ",
+ " ",
+ " ",
+ " "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/shieldsymbolizer-3-498-100-1.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-3-498-100-1.0-grid-reference.json
new file mode 100644
index 000000000..eb84ea687
--- /dev/null
+++ b/tests/visual_tests/grids/shieldsymbolizer-3-498-100-1.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+ "",
+ "8",
+ "5",
+ "1",
+ "2",
+ "6",
+ "7",
+ "9",
+ "3",
+ "4",
+ "10"
+ ],
+ "data": {},
+ "grid": [
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ! ",
+ " ! ",
+ " ! ! ",
+ " ## ",
+ " $$$ % #### &&& ''' !!! ( (( ( ( ",
+ " $ $ % % ) * * # # & & ' ' ! ! (( (( ( + + ",
+ " $ %% ) ** & ' ! ( (( ( + ",
+ " $ ) **** & ' ! ++++ ",
+ " ) ) ** + ",
+ " ! ",
+ " ! ",
+ " ! + ",
+ " + ",
+ " + + ",
+ " ",
+ " ",
+ " ",
+ " "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/shieldsymbolizer-3-499-100-1.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-3-499-100-1.0-grid-reference.json
new file mode 100644
index 000000000..22e4809d3
--- /dev/null
+++ b/tests/visual_tests/grids/shieldsymbolizer-3-499-100-1.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+ "",
+ "8",
+ "5",
+ "1",
+ "2",
+ "3",
+ "6",
+ "7",
+ "9",
+ "4",
+ "10"
+ ],
+ "data": {},
+ "grid": [
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " !! ",
+ " !! ",
+ " # ! ! ",
+ " ## ",
+ " $$$ % & #### ''' ((( !! )) ) ) ",
+ " $ $ % % & & * # ### ' ' ( ( ! ! )) ) ) + + ",
+ " $ %% & ** ' ( !! )))) )) + ",
+ " $ & **** ' ( ! ++++",
+ " & & ** + ",
+ " ! ",
+ " ! ",
+ " !! ++ ",
+ " + ",
+ " + ",
+ " ",
+ " ",
+ " ",
+ " "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/shieldsymbolizer-3-500-100-1.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-3-500-100-1.0-grid-reference.json
new file mode 100644
index 000000000..7b335c45f
--- /dev/null
+++ b/tests/visual_tests/grids/shieldsymbolizer-3-500-100-1.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+ "",
+ "8",
+ "5",
+ "1",
+ "2",
+ "3",
+ "6",
+ "7",
+ "9",
+ "4",
+ "10"
+ ],
+ "data": {},
+ "grid": [
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " !! ",
+ " !! ",
+ " # ",
+ " ## ",
+ " $$$ % % & #### '' (( ! ) )))) ",
+ " $ $ % % & & * # ### ' ' ( ( ! !! ))) ) )) + ",
+ " $ %% & ** '' (( !! )) ) )) ",
+ " $ & **** ' ( ) ++++",
+ " & & ** ",
+ " !! ",
+ " ! ",
+ " !! ++ ",
+ " ++ ",
+ " ++ ",
+ " ",
+ " ",
+ " ",
+ " "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/shieldsymbolizer-3-501-100-1.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-3-501-100-1.0-grid-reference.json
new file mode 100644
index 000000000..f31007658
--- /dev/null
+++ b/tests/visual_tests/grids/shieldsymbolizer-3-501-100-1.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+ "",
+ "8",
+ "5",
+ "1",
+ "2",
+ "3",
+ "6",
+ "7",
+ "9",
+ "4",
+ "10"
+ ],
+ "data": {},
+ "grid": [
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " !! ",
+ " !! ",
+ " # ! ! ",
+ " ## ",
+ " $$$ % % & ##### ' ( ! ) )))) ",
+ " $ $ % % & & * # ### ' '' ( (( ! ! ) ) ) ) + ",
+ " $ %% & ** '' (( !! )) )))) ",
+ " $ & **** ) ++++ ",
+ " & & ** ",
+ " ! ",
+ " ! ",
+ " !! ++ ",
+ " + ",
+ " + ",
+ " ",
+ " ",
+ " ",
+ " "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/shieldsymbolizer-3-502-100-1.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-3-502-100-1.0-grid-reference.json
new file mode 100644
index 000000000..1bff658a2
--- /dev/null
+++ b/tests/visual_tests/grids/shieldsymbolizer-3-502-100-1.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+ "",
+ "8",
+ "5",
+ "1",
+ "2",
+ "3",
+ "6",
+ "7",
+ "9",
+ "4",
+ "10"
+ ],
+ "data": {},
+ "grid": [
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ! ",
+ " ! ",
+ " # ! ! ",
+ " ## ",
+ " $$$ % % & ##### ' ( ! ! ) ) )) ) ",
+ " $ $ % % & & * # ## ' '' ( (( ! ! )) )) ) + + ",
+ " $ %% & ** '' (( ! ) )) ) + ",
+ " $ & **** ++++ ",
+ " & & * + ",
+ " ! ! ",
+ " ! ",
+ " ! ",
+ " + ",
+ " + + ",
+ " ",
+ " ",
+ " ",
+ " "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/shieldsymbolizer-3-505-100-1.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-3-505-100-1.0-grid-reference.json
new file mode 100644
index 000000000..29a07661d
--- /dev/null
+++ b/tests/visual_tests/grids/shieldsymbolizer-3-505-100-1.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+ "",
+ "8",
+ "5",
+ "1",
+ "2",
+ "3",
+ "6",
+ "7",
+ "9",
+ "4",
+ "10"
+ ],
+ "data": {},
+ "grid": [
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " !! ",
+ " !! ",
+ " ! ",
+ " ## ",
+ " $$$ % % & #### ''' ((( ! ) )))) ",
+ " $ $ % % & & * * # ## ' ' ( ( ! !! ))) ) )) + ",
+ " $ % && ** ' ( !! )) ) )) ",
+ " $ && **** ' ( ) ++++ ",
+ " & & *** ",
+ " !! ",
+ " ! ",
+ " !! ++ ",
+ " + ",
+ " + ",
+ " ",
+ " ",
+ " ",
+ " "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/shieldsymbolizer-3-510-100-1.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-3-510-100-1.0-grid-reference.json
new file mode 100644
index 000000000..88023d694
--- /dev/null
+++ b/tests/visual_tests/grids/shieldsymbolizer-3-510-100-1.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+ "",
+ "8",
+ "5",
+ "1",
+ "2",
+ "6",
+ "7",
+ "9",
+ "3",
+ "4",
+ "10"
+ ],
+ "data": {},
+ "grid": [
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " !! ",
+ " !! ",
+ " # ! ",
+ " ## ",
+ " $$$ % % ##### & ' ' ! ( (((( ",
+ " $ $ % % ) * # ### & & ' ' ! !! ( ( ( ( + + ",
+ " $ % )) ** && ' !! (( ( (( + ",
+ " $ )) **** ( ++++ ",
+ " ) * + ",
+ " !! ",
+ " ! ",
+ " !! + ",
+ " + ",
+ " + + ",
+ " ",
+ " ",
+ " ",
+ " "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/shieldsymbolizer-4-490-100-1.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-4-490-100-1.0-grid-reference.json
new file mode 100644
index 000000000..928f63174
--- /dev/null
+++ b/tests/visual_tests/grids/shieldsymbolizer-4-490-100-1.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+ "",
+ "8",
+ "5",
+ "1",
+ "2",
+ "6",
+ "7",
+ "9",
+ "10",
+ "3",
+ "4"
+ ],
+ "data": {},
+ "grid": [
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " !! ",
+ " !! ",
+ " ! ",
+ " # ",
+ " $ $ % % # & & ' ! (( ( ( ) ",
+ " $ $ % %%% * + # # # & && ' ' ! ! ((( ( (( ) ) ",
+ " $ %%% ** ++ && '' !! (( ( (( ) ",
+ " % ** + & ) ",
+ " * + ",
+ " !! ",
+ " ! ",
+ " !! ) ",
+ " ) ",
+ " ) ) ",
+ " ",
+ " ",
+ " ",
+ " "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/shieldsymbolizer-4-495-100-1.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-4-495-100-1.0-grid-reference.json
new file mode 100644
index 000000000..c2cc58643
--- /dev/null
+++ b/tests/visual_tests/grids/shieldsymbolizer-4-495-100-1.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+ "",
+ "8",
+ "5",
+ "1",
+ "2",
+ "4",
+ "6",
+ "7",
+ "9",
+ "10",
+ "3"
+ ],
+ "data": {},
+ "grid": [
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " !! ",
+ " !! ",
+ " ! ",
+ " ## ",
+ " $$$ %% & # ' ( ( ! )))) ) * ",
+ " $ $ % %%% + & & # ## ' '' ( ((( ! !! ))) ) )) * * ",
+ " $ %%% ++ && '' ((( !! )) ) )) * ",
+ " $ % ++ & ( ) * ",
+ " + + & & ",
+ " !! ",
+ " ! ",
+ " !! ** ",
+ " * ",
+ " * ",
+ " ",
+ " ",
+ " ",
+ " "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/shieldsymbolizer-4-497-100-1.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-4-497-100-1.0-grid-reference.json
new file mode 100644
index 000000000..d4fcc12d0
--- /dev/null
+++ b/tests/visual_tests/grids/shieldsymbolizer-4-497-100-1.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+ "",
+ "8",
+ "5",
+ "1",
+ "2",
+ "4",
+ "6",
+ "7",
+ "9",
+ "3",
+ "10"
+ ],
+ "data": {},
+ "grid": [
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ! ",
+ " ! ",
+ " ! ! ",
+ " ## ",
+ " $$$ % & # ' ' ( ( !!! ) )))) ) ",
+ " $ $ % % * & & # # ' '' ( ( ! ! ) ) )) ) + ",
+ " $ %% * && ''' (( ! )) )))) ",
+ " $ * & ' ! ) ",
+ " * * & ",
+ " ! ! ",
+ " ! ",
+ " ! ++ ",
+ " + ",
+ " + ",
+ " ",
+ " ",
+ " ",
+ " "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/shieldsymbolizer-4-498-100-1.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-4-498-100-1.0-grid-reference.json
new file mode 100644
index 000000000..cbae7e74d
--- /dev/null
+++ b/tests/visual_tests/grids/shieldsymbolizer-4-498-100-1.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+ "",
+ "8",
+ "5",
+ "1",
+ "2",
+ "4",
+ "6",
+ "7",
+ "9",
+ "10",
+ "3"
+ ],
+ "data": {},
+ "grid": [
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ! ",
+ " ! ",
+ " ! ! ",
+ " ## ",
+ " $$$ % & # ' ' ( ( !!! ) )) ) ) * ",
+ " $ $ % % + & & # # ' '' ( ( ! ! )) )) ) * * ",
+ " $ %% + && ' ( ! ) )) ) * ",
+ " $ + & ' ! * ",
+ " + + & ",
+ " ! ",
+ " ! ",
+ " ! * ",
+ " * ",
+ " * * ",
+ " ",
+ " ",
+ " ",
+ " "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/shieldsymbolizer-4-499-100-1.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-4-499-100-1.0-grid-reference.json
new file mode 100644
index 000000000..4ae292bce
--- /dev/null
+++ b/tests/visual_tests/grids/shieldsymbolizer-4-499-100-1.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+ "",
+ "8",
+ "5",
+ "1",
+ "2",
+ "3",
+ "6",
+ "7",
+ "9",
+ "10",
+ "4"
+ ],
+ "data": {},
+ "grid": [
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " !! ",
+ " !! ",
+ " ! ! ",
+ " # ",
+ " $$$ % & # ' ' ( ( !! )) ) ) * ",
+ " $ $ % % & & + # ### ' '' ( ( ! ! )) ) ) * * ",
+ " $ %% & ++ # '' ( !! )))) )) * ",
+ " $ & + # ' ! * ",
+ " & & ++ ",
+ " ! ",
+ " ! ",
+ " !! ** ",
+ " * ",
+ " * ",
+ " ",
+ " ",
+ " ",
+ " "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/shieldsymbolizer-4-500-100-1.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-4-500-100-1.0-grid-reference.json
new file mode 100644
index 000000000..4b94c7b08
--- /dev/null
+++ b/tests/visual_tests/grids/shieldsymbolizer-4-500-100-1.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+ "",
+ "8",
+ "5",
+ "1",
+ "2",
+ "3",
+ "6",
+ "7",
+ "9",
+ "4",
+ "10"
+ ],
+ "data": {},
+ "grid": [
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " !! ",
+ " !! ",
+ " ",
+ " # ",
+ " $$$ % % & # ' ( ( ! ) )))) ",
+ " $ $ % % & & * # ### ' ' ( (( ! !! ))) ) )) + ",
+ " $ %% & ** # '' ((( !! )) ) )) ",
+ " $ & ** # ( ) ",
+ " & & ** ",
+ " !! ",
+ " ! ",
+ " !! ++ ",
+ " ++ ",
+ " ++ ",
+ " ",
+ " ",
+ " ",
+ " "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/shieldsymbolizer-4-501-100-1.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-4-501-100-1.0-grid-reference.json
new file mode 100644
index 000000000..e6f0ea08d
--- /dev/null
+++ b/tests/visual_tests/grids/shieldsymbolizer-4-501-100-1.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+ "",
+ "8",
+ "5",
+ "1",
+ "2",
+ "3",
+ "6",
+ "7",
+ "9",
+ "4",
+ "10"
+ ],
+ "data": {},
+ "grid": [
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " !! ",
+ " !! ",
+ " ! ! ",
+ " # ",
+ " $$$ % % & # ' ( ( ! ) )))) ",
+ " $ $ % % & & * # ### ' '' ( ((( ! ! ) ) ) ) + ",
+ " $ %% & ** # '' ((( !! )) )))) ",
+ " $ & * # ( ) ",
+ " & & ** ",
+ " ! ",
+ " ! ",
+ " !! ++ ",
+ " + ",
+ " + ",
+ " ",
+ " ",
+ " ",
+ " "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/shieldsymbolizer-4-502-100-1.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-4-502-100-1.0-grid-reference.json
new file mode 100644
index 000000000..f9161241f
--- /dev/null
+++ b/tests/visual_tests/grids/shieldsymbolizer-4-502-100-1.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+ "",
+ "8",
+ "5",
+ "1",
+ "2",
+ "3",
+ "6",
+ "7",
+ "9",
+ "10",
+ "4"
+ ],
+ "data": {},
+ "grid": [
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ! ",
+ " ! ",
+ " ! ! ",
+ " ## ",
+ " $$$ % % & # ' (( ! ! ) ) )) ) * ",
+ " $ $ % % & & + # ## ' '' ( ((( ! ! )) )) ) * * ",
+ " $ %% & ++ # '' ((( ! ) )) ) * ",
+ " $ & + # ( * ",
+ " & & + ",
+ " ! ! ",
+ " ! ",
+ " ! ",
+ " * ",
+ " * * ",
+ " ",
+ " ",
+ " ",
+ " "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/shieldsymbolizer-4-505-100-1.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-4-505-100-1.0-grid-reference.json
new file mode 100644
index 000000000..c92737514
--- /dev/null
+++ b/tests/visual_tests/grids/shieldsymbolizer-4-505-100-1.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+ "",
+ "8",
+ "5",
+ "1",
+ "2",
+ "3",
+ "4",
+ "6",
+ "7",
+ "9",
+ "10"
+ ],
+ "data": {},
+ "grid": [
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " !! ",
+ " !! ",
+ " ! ",
+ " ## ",
+ " $$$ % % & ' # ( ( ) ) ! * **** ",
+ " $ $ % % & & ' ' # ## ( (( ) ) ! !! *** * ** + ",
+ " $ % && '' (( ) !! ** * ** ",
+ " $ && ' ( * ",
+ " & & ' ' ",
+ " !! ",
+ " ! ",
+ " !! ++ ",
+ " + ",
+ " + ",
+ " ",
+ " ",
+ " ",
+ " "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/shieldsymbolizer-4-510-100-1.0-grid-reference.json b/tests/visual_tests/grids/shieldsymbolizer-4-510-100-1.0-grid-reference.json
new file mode 100644
index 000000000..931a1c616
--- /dev/null
+++ b/tests/visual_tests/grids/shieldsymbolizer-4-510-100-1.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+ "",
+ "8",
+ "5",
+ "1",
+ "2",
+ "6",
+ "7",
+ "9",
+ "10",
+ "3",
+ "4"
+ ],
+ "data": {},
+ "grid": [
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " !! ",
+ " !! ",
+ " ! ",
+ " # ",
+ " $$$ % % # & ' ' ! ( (((( ) ",
+ " $ $ % % * + # ### & & ' ' ! !! ( ( ( ( ) ) ",
+ " $ % ** ++ # && ' !! (( ( (( ) ",
+ " $ ** + # ( ) ",
+ " * + ",
+ " !! ",
+ " ! ",
+ " !! ) ",
+ " ) ",
+ " ) ) ",
+ " ",
+ " ",
+ " ",
+ " "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/text-bug1532-600-165-1.0-grid-reference.json b/tests/visual_tests/grids/text-bug1532-600-165-1.0-grid-reference.json
new file mode 100644
index 000000000..e821b276d
--- /dev/null
+++ b/tests/visual_tests/grids/text-bug1532-600-165-1.0-grid-reference.json
@@ -0,0 +1,54 @@
+{
+ "keys": [
+ "",
+ "-68",
+ "-63",
+ "-106",
+ "-75"
+ ],
+ "data": {},
+ "grid": [
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ! ! ",
+ " !!!! !!!! ! ! !!!! ",
+ " !!! !! !!!!!!! !!! ",
+ " !!!! !!!! ! ! !!!! ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " # ## # $ $ $ $ $$ ",
+ " ## ############### $$$ $$ $$$$$$$ $$$ ",
+ " ## ### ## ### ### $$$$$$$$$ $$$ $$$$ ",
+ " ## $ ",
+ " ",
+ " ",
+ " % % %% % ",
+ " %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ",
+ " %%%%%%%%%%%%%%%%%% ",
+ " % ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/text-bug1533-600-600-1.0-grid-reference.json b/tests/visual_tests/grids/text-bug1533-600-600-1.0-grid-reference.json
new file mode 100644
index 000000000..4d22f37d5
--- /dev/null
+++ b/tests/visual_tests/grids/text-bug1533-600-600-1.0-grid-reference.json
@@ -0,0 +1,168 @@
+{
+ "keys": [
+ "",
+ "-58",
+ "-56",
+ "-52",
+ "-67",
+ "-91",
+ "-54",
+ "-48",
+ "-50",
+ "-44",
+ "-46"
+ ],
+ "data": {},
+ "grid": [
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " !!!!!! ! #### # ",
+ " !! !! ! ## # # ",
+ " ! ! !! ! # # # ",
+ " ! !!! !! ! ! !! !!! !!!! #### # ############################## ",
+ " ! # ",
+ " !!!! ! # #### # ",
+ " !!!! ## # # ",
+ " ",
+ " ",
+ " $ ",
+ " $ ",
+ " % $ ",
+ " % $ ",
+ " % $ ",
+ " % $ ",
+ " % $$ ",
+ " $ ",
+ " % $ ",
+ " % $ $$ ",
+ " %% $ $ $ ",
+ " %% & $$$$$ $ ",
+ " % & $ $ ",
+ " % & $$$ $ ",
+ " % & $$$$$$$ $$ ",
+ " % ' ( & $ $ $$ ",
+ " %% % ' ( & $ $$ ",
+ " % ' ) ( & $ $ ",
+ " %%% %% % ' ) ( & $ ",
+ " %%% %% % ' ) ( & $ ",
+ " %% %% ' ) ( & & $$$ ",
+ " %% %% ' ) ( & & $$ ",
+ " % %%% ' ) ( &&&&&&& $$ ",
+ " %% %%% ' ) ( &&& $ ",
+ " % %% ' ) & && $ ",
+ " % ' ) && &&& $ ",
+ " % ' ) &&& && $ ",
+ " % '' ' ) (( &&& & && $ ",
+ " %% ' ' )) & && ",
+ " % '' '' ) && ",
+ " % ''' ' ) & & ",
+ " % ' '' ' & ",
+ " % '' '' '' && ",
+ " % ''' & ",
+ " % '' '' )) (( **** & ",
+ " % '''' '' ++++++ ) ( ( * & ",
+ " '' '' + )) ) (((( ( & ",
+ " ' ) )) ) ( ( ( & ",
+ " ' )) )) (((( ( & ",
+ " '' ) ) ( (( & ",
+ " ' )) )) ) (( ",
+ " ' ) )) ( ( ",
+ " ' ) )) ) ( ( ( ",
+ " ) ) ( ( ( ",
+ " ' ) ( ( ",
+ " ' )) ) ( ",
+ " ' ) ( ",
+ " ' ) ( ",
+ " ' ) ( ",
+ " ) ( ",
+ " ) ( ",
+ " ) ( ",
+ " ) (( ",
+ " ) ",
+ " ) ",
+ " ) ",
+ " ) ",
+ " ) ",
+ " ) ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ( ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/text-bug1820+0-600-300-1.0-grid-reference.json b/tests/visual_tests/grids/text-bug1820+0-600-300-1.0-grid-reference.json
new file mode 100644
index 000000000..a0dfaa29b
--- /dev/null
+++ b/tests/visual_tests/grids/text-bug1820+0-600-300-1.0-grid-reference.json
@@ -0,0 +1,93 @@
+{
+ "keys": [
+ "",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "7",
+ "8",
+ "9",
+ "10"
+ ],
+ "data": {},
+ "grid": [
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " !! ## $$ %% && '' (( )) ** ++ ",
+ " ! ! # # $ $ % % & & ' ' ( ( ) ) * * + + ",
+ " ! ! # # $ $ % % & & ' ' ( ( ) ) * * + + ",
+ " ! # $ % & ' ( ) * + ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ! !!!! ",
+ " ! ! !!! ",
+ " ! ! ! ",
+ " #### ",
+ " # ## ",
+ " $ $$$$$$$$ ",
+ " $ $$$$$$$ ",
+ " $ $$ $$$$ % ",
+ " % % %% ",
+ " % %%%% && ",
+ " &&& &&& ",
+ " &&&&& ",
+ " & & ",
+ " ' ' ",
+ " ' ' ",
+ " (( ( ((((( ",
+ " ((((( ((( ",
+ " (( ((( ((( ) ) ",
+ " ) ) )))) ",
+ " ) ) ))) ",
+ " ) ** ** ** ",
+ " ** * *** ",
+ " ** * *** + ",
+ " ++ + + ",
+ " ++ + + ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/text-bug1820+1-600-300-1.0-grid-reference.json b/tests/visual_tests/grids/text-bug1820+1-600-300-1.0-grid-reference.json
new file mode 100644
index 000000000..2af93c118
--- /dev/null
+++ b/tests/visual_tests/grids/text-bug1820+1-600-300-1.0-grid-reference.json
@@ -0,0 +1,93 @@
+{
+ "keys": [
+ "",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "7",
+ "8",
+ "9",
+ "10"
+ ],
+ "data": {},
+ "grid": [
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ! # $ % & ' ( ) * + ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " !! ! ",
+ " !!!! ! ## ",
+ " ## ### ",
+ " # # ",
+ " # # ",
+ " $$ $ ",
+ " $$$$ $ %% ",
+ " !!!!!! %% %%% ",
+ " ! ! !! % % ",
+ " ! ! % % ",
+ " && & ",
+ " &&&& & '' ",
+ " ####### '' ''' ",
+ " # ## ' ' ",
+ " # ' ' ",
+ " ",
+ " $ ",
+ " $ $$$$$$$$ ",
+ " $ $$$ ",
+ " $ $$ ",
+ " ",
+ " % ",
+ " %%%% %%% ",
+ " %% % %% ",
+ " % % ",
+ " ",
+ " && ",
+ " &&&&&&& ",
+ " &&&& ",
+ " & ",
+ " ",
+ " ",
+ " '' ' "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/text-bug1820-1-600-300-1.0-grid-reference.json b/tests/visual_tests/grids/text-bug1820-1-600-300-1.0-grid-reference.json
new file mode 100644
index 000000000..8ffa967ed
--- /dev/null
+++ b/tests/visual_tests/grids/text-bug1820-1-600-300-1.0-grid-reference.json
@@ -0,0 +1,93 @@
+{
+ "keys": [
+ "",
+ "10",
+ "9",
+ "8",
+ "7",
+ "6",
+ "5",
+ "4",
+ "3",
+ "2",
+ "1"
+ ],
+ "data": {},
+ "grid": [
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ! !!! ",
+ " !! ! ",
+ " ## !!! ! ",
+ " # # ",
+ " # ",
+ " $ $$$ ",
+ " $$ $ ",
+ " %% $$$ $ ",
+ " % % ",
+ " % ",
+ " & &&& ",
+ " && & ",
+ " '' &&& & ",
+ " ' ' ",
+ " ' ",
+ " ( ((( ",
+ " (( ( ",
+ " )) ((( ( ",
+ " ) ) ",
+ " ) ",
+ " * *** ",
+ " ** * ",
+ " ++ *** * ",
+ " + + ",
+ " + ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ( '' $ ",
+ " + ++ + ***** * ) ) ))) )) ((( ((( ''' ''' & & & % % %%%%% $$ $$$$$$ ## ## ## ! ! !! ",
+ " + + +++ * ** ) ))))))) (( ( (( ''''' && & %%%%%%%%%% $$ $ $$$$ ## # ### !!!! ! ",
+ " + ++ + **** * ) )) )))) ( ((((( '' '' &&&& & %% %%% %%% $$ $$$$ $ ## # ### ! !! ! ",
+ " $ ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/text-bug2037-800-300-1.0-grid-reference.json b/tests/visual_tests/grids/text-bug2037-800-300-1.0-grid-reference.json
new file mode 100644
index 000000000..433e387b8
--- /dev/null
+++ b/tests/visual_tests/grids/text-bug2037-800-300-1.0-grid-reference.json
@@ -0,0 +1,87 @@
+{
+ "keys": [
+ "",
+ "7",
+ "3",
+ "4",
+ "8"
+ ],
+ "data": {},
+ "grid": [
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ! ",
+ " ! ! ! ",
+ " ",
+ " ## #### $$ $$$$ !! ! ",
+ " ####### $$$$$$$ !!! %% ",
+ " ### $$$ % % %%% ",
+ " ### $$$ !!! ",
+ " # $ %%%% %%%% ",
+ " ####### $$$$$$$ ! !! %%%% %%% ",
+ " #### $$$$ !!!!! % % ",
+ " ! % % %%% ",
+ " #### $$$$ ! !!!!! ",
+ " %%%%%%%%%%% ",
+ " ### # $$$ $ !!! %%%%%%%%%%% ",
+ " # ### $ $$$ ! ! ",
+ " ! ",
+ " !!!!! ! ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/text-expressionformat-color-800-100-1.0-grid-reference.json b/tests/visual_tests/grids/text-expressionformat-color-800-100-1.0-grid-reference.json
new file mode 100644
index 000000000..a3742b468
--- /dev/null
+++ b/tests/visual_tests/grids/text-expressionformat-color-800-100-1.0-grid-reference.json
@@ -0,0 +1,43 @@
+{
+ "keys": [
+ "",
+ "1",
+ "2",
+ "3",
+ "4",
+ "5",
+ "6",
+ "7",
+ "8",
+ "9",
+ "10"
+ ],
+ "data": {},
+ "grid": [
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ! # $ % & ' ( ) * + ",
+ " ",
+ " ! # $ % & ' ( ) * + ",
+ " ! !!! !! ! # ### ## # $ $$$ $$ $ % %%% %% % & &&& && & ' ''' '' ' ( ((( (( ( ) ))) )) ) * *** ** * + +++ ++ + ",
+ " ! ! ! ! # # # # $ $ $ $ % % % % & & & & ' ' ' ' ( ( ( ( ) ) ) ) * * * * + + + + ",
+ " ",
+ " ",
+ " ! # $ % & ' ( ) * + ",
+ " !!!!! ##### $$$$$ %%%%% &&&&& ''''' ((((( ))))) ***** +++++ ",
+ " !!!!! ! ##### # $$$$$ $ %%%%% % &&&&& & ''''' ' ((((( ( ))))) ) ***** * +++++ + ",
+ " ",
+ " ",
+ " "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/text-halign-800-800-1.0-grid-reference.json b/tests/visual_tests/grids/text-halign-800-800-1.0-grid-reference.json
new file mode 100644
index 000000000..6e779c355
--- /dev/null
+++ b/tests/visual_tests/grids/text-halign-800-800-1.0-grid-reference.json
@@ -0,0 +1,224 @@
+{
+ "keys": [
+ "",
+ "9",
+ "8",
+ "4",
+ "5",
+ "7",
+ "16",
+ "6",
+ "2",
+ "12",
+ "10",
+ "13",
+ "14",
+ "11",
+ "3",
+ "15",
+ "1"
+ ],
+ "data": {},
+ "grid": [
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ! ",
+ " !!!! ",
+ " !!!!!!! !!! ",
+ " !!!!!!!!! !!!!! !!! ",
+ " !!!!!! !!!!! !!!!!!! !!!!! ",
+ " !!!!!! !!!!!! !!!!!!!!!!! !!!!!!!! ! ",
+ " !!!!!! !!!!! !!!!!! !!!!! !!!!!!!!!! !!!! ",
+ " !!!!!! !!!!! !!!!!! !!!!! !!!!! !!!!!! !!!!!! ",
+ " !!!!!! !!!!!! !!!!!! !!!!!! !!!!!! !!!!! !!!!! ",
+ " !!!!!!! !!!!!! !!!!! !!!!!! !!!!!! !!!!! !!!!!! ",
+ " !!!!!! !!!!! !!!!!! !!!!! !!!!! !!!!! !!!!!! ",
+ " !!!!!!! !!!!! !!!!!! !!!!! !!!!!! !!!!!! !!!!! ",
+ " !!!!!! !!!!!! !!!!!! !!!!!!! !!!!!! !!!!! !!!!!! ",
+ " !!!!! !!!!!! !!!!!! !!!!! !!!!! !!!!! !!!!!! ",
+ " !!!! !!!!! !!!!! !!!!! !!!!!! !!!!!! !!!!! ",
+ " ! !!!!! !!!!!! !!!!!! !!!!! !!!!!! !!!!!! ",
+ " !!!!!! !!!!! !!!!!! !!!!!! !!!!! !!!!! ",
+ " !!!!!! !!!!!! !!!!! !!!!!! !!!!! !!!!!! ",
+ " !!!!! !!!!!! !!!!!! !!!!! !!!!!!!!!!! ",
+ " !!!!!!!!!!! !!!!!!!!!! !!!!!!!! ",
+ " !!!!!!!!! !!!!!!! !!!!! ",
+ " !!!!!! !!!! !!! ",
+ " ### !!! # !! $$$ ",
+ " ##### ! #### $$$ ",
+ " ######## ####### ## $$$ ",
+ " ########### ########## ##### # $$$ ",
+ " ###### ###### ###### ##### ######## ### $$$ ",
+ " ####### ##### ##### ##### ########## ##### $$$ ",
+ " ###### ##### ###### ###### ##### ##### ##### $$$ ",
+ " ###### ###### ###### ###### ###### ###### ###### $$$ ",
+ " ###### ###### ##### ##### ###### ###### ###### $$$ ",
+ " ###### ##### ###### ##### ##### ##### ##### $$$ ",
+ " ####### ##### ##### ####### ##### ###### ###### $$$ ",
+ " ###### ###### ###### ##### ###### ###### ##### $$$ ",
+ " #### ##### ###### ##### ##### ##### ###### $$$ ",
+ " %%% ## ##### ##### ###### ##### ###### ###### $$$ ",
+ " %%% ###### ###### ###### ###### ##### ##### $$$ ",
+ " %%% ###### ###### ##### ###### ###### ###### $$$ ",
+ " %%% ##### ###### ##### ##### ########### $$$ ",
+ " %%% ##### ###### ###### ##### ####### $$$ ",
+ " %%% ###### ##### ########### ##### $$$ ",
+ " %%% ########### ######## ## $$$ ",
+ " %%% ######## ###### $$$ ",
+ " %%% ##### #### $$$ ",
+ " %%% ### # $$$ ",
+ " %%% $$$ ",
+ " %%% &&&&&&& $$$ ",
+ " %%% &&&&&& &&&&&&&& &&&&&&&&&& $$$ ",
+ " %%% &&&&&&&& &&&&&&&&&& &&&&&&&&&&&& &&&&&&&&&&&&& $$$ ",
+ " %%% &&&&&&&&&&& &&&&&&&&&&&&& &&&&&&&&&&&&&& &&&&&&&& &&&&& $$$ ",
+ " %%% &&&&&&&&&&&&&& &&&&&&& &&&&&& &&&&&&& &&&&& &&&&&& &&&&& $$$$ ",
+ " %%% &&&&&&& &&&&& &&&&&&& &&&&& &&&&&& &&&&& &&&&& &&&&& $$$$ ",
+ " %%% &&&&&& &&&& &&&&&& &&&&& &&&&& &&&&& &&&&& &&&& $$$$ ",
+ " %%% &&&&&& &&&&& &&&&& &&&&& &&&&&& &&&& &&&&&& &&&& $$$$ ",
+ " %%% &&&&& &&&& &&&&& &&&& &&&&& &&&& &&&&& &&&& && $$$$ ",
+ " %%% &&&&& &&&& &&&&& &&&& &&&&&& &&&&& &&&&& &&&&& &&&&& $$$$ ",
+ " %%% &&& &&&& &&&&&& &&&& &&&&&& &&&&& &&&&&& &&&&&&&&&&&&&& $$$$ ",
+ " %%% & &&&&& &&&&&&& &&&&&& &&&&&& &&&&&&&&&&&&& &&&&&&&&&&& $$$$ ",
+ " %%% &&&&&&&&&&&&& &&&&&&&&&&&& &&&&&&&&&& &&&&&&&&& $$$$ ",
+ " %%% &&&&&&&&&&& &&&&&&&& &&&&&& &&&& $$$$ ",
+ " %%% &&&&&&& &&&& & $$$$ ",
+ " %%% && $$$$ ",
+ " %%% $$$$ ",
+ " %%% $$$$ ",
+ " %%% '''''''' $$$$ ",
+ " %%% '''''''' $$$$ ",
+ " %%% '''''''' $$$$ ",
+ " %%% ''' $$$$ ",
+ " %%% ''''''''''''''''''''''''' $$$$ ",
+ " %%% ''''''''''''''''''''''''' $$$$ ",
+ " %%% (( ''''''''''''''''''''''''' $$$$ ",
+ " %%% ((((((( (((((((( ''''''''''''''''''''''''' $$$$ ",
+ " %%% (((((( (((((((( (((((((((( (((((((((((( $$$$ ",
+ " %%% (((((((((( (((((((((((( ((((((((((((( (((((((((((((( $$$$ ",
+ " %%% (((((((((((((( ((((((((((((((( (((((((( ((((( ((((((( (((( $$$$ ",
+ " %%% ((((((( (((((( ((((((( (((( (((((( (((( (((((( (((( $$$$ ",
+ " %%% ((((((( (((( (((((( (((( (((((( (((( ((((( (((( $$$$ ",
+ " %%% (((((( (((( (((((( (((( ((((( ((((( ((((( ((((( $$$$ ",
+ " %%% ((((( (((( ((((( (((( (((((( (((( (((((( (((( (( $$$$ ",
+ " %%% ((((( (((( ((((( (((( ((((( (((( ((((( (((( (((( $$$$$ ",
+ " %%% (((( (((( (((((( (((( ((((( (((( (((((( ((((( (((((( $$$$ ",
+ " %%% (( ((((( (((((( ((((( (((((( (((((((((((((( ((((((((((((( $$$$ ",
+ " %%% (((((( (((((( (((((((((((( (((((((((((( ((((((((( $$$$ ",
+ " %%% ((((((((((( (((((((((( (((((((( (((((( $$$$ ",
+ " %%% (((((((( )) ((((((( ((( $$$$ ",
+ " %%%% (((( )))) *** ( $$$$ ",
+ " %%%%% ))))) *** ++++++++++++ $$$$ ",
+ " %%%% )))))) *** ++++++++++++++++++++++++++++++++ $$$$ ",
+ " %%%% )))))) **** ,,, +++++++++++++++++++++++++++++++++++++ $$$$ ",
+ " %%%% ))))) **** ,,, +++++++++++++++++++++++++++++++++ $$$$ ",
+ " %%%% )))))) *** ,,, ------ +++++++++++++++ $$$$ ",
+ " %%%% )))))) *** ,,,, ----------------------------- ++++++ $$$$ ",
+ " %%%% ))))) *** ,,,, ----------------------------- ++++ $$$$ ",
+ " %%%% )))))) *** ,,, ----------------------------- ++++ $$$$ ",
+ " %%%% )))))) **** ,,, ++++ $$$$ ",
+ " %%%% ))))) **** ,,, ++++ $$$$ ",
+ " %%%% )))))) *** ,,, ++++ $$$$ ",
+ " %%%% )))))) *** ,,, +++ $$$$ ",
+ " %%%% ))))) *** ,,,, ................................. +++ $$$$ ",
+ " %%%% )))))) *** ,,,, .......................................... +++ $$$$ ",
+ " %%%% )))))) **** ,,, ........................................... +++ $$$$ ",
+ " %%%% ))))))) **** ,,, ................. +++ $$$$ ",
+ " %%%% )))))) *** ,,, ..... +++ $$$$ ",
+ " %%%% )))))) *** ,,, .... +++ $$$$ ",
+ " %%%% ))))) *** ,,,, ... +++ $$$$ ",
+ " %%%% )))))) //////// *** ,,,, ... ++++ $$$$ ",
+ " %%%% )))))) /////////////// *** ,,,, .... ++++ $$$$ ",
+ " %%%% ))))) ////////////////////// **** ,,, .... +++ $$$$ ",
+ " %%%% )))))) ////// ////////////// **** ,,, ... +++ $$$$ ",
+ " %%%% )))))) ////// ///////// *** ,,, ... ++++ $$$$ ",
+ " %%%% ))))) ///// //// *** ,,, ... ++++ $$$$ ",
+ " %%%% )))))) ////// ///// *** ,,,, ... 00000000000000000000000000000 ++++ $$$$ ",
+ " %%%% )))))) ////// //// *** ,,,, ... 00000000000000000000000000000 +++ $$$$ ",
+ " %%%% ))))) ///// //// ,,, ... 00000000000000000000000000000 +++ $$$$ ",
+ " %%%% ))))) ////// //// ,,, .... +++ $$$$ ",
+ " %%%% ))) ////// ///// ,,, .... +++ $$$$ ",
+ " %%% ) //// //// ,,, ... ++++ $$$$ ",
+ " %%% /// //// ,,, ... ++++ $$$$ ",
+ " %%% /// //// ,,, ... +++ $$$$ ",
+ " %%% /// ///// ... ++++ $$$$ ",
+ " %%% /// //// ... ++++++++++++++++ ++++ $$$$ ",
+ " %%% //// /// ... ++++++++++++++++++++++++++++++++++++++++++++ $$$$ ",
+ " %%% //// /// ... +++++++++++++++++++++++++++++++++++++++++++ $$$$ ",
+ " %%% /// //// ... +++++++++++++++++++++++++++++++++ $$$$ ",
+ " %%% /// //// ... $$$$ ",
+ " %%% /// //// .... $$$$ ",
+ " %%% /// /// .... $$$$ ",
+ " %%% //// /// .... $$$$ ",
+ " %%% //// /// ..... $$$$ ",
+ " %%% /// /// .... $$$$ ",
+ " %%% /// //// ..... $$$$ ",
+ " %%% /// //// ...... $$$$ ",
+ " %%% /// /// .......................................... $$$$ ",
+ " %%% //// /// ........................................ $$$$ ",
+ " %%% //// /// ...................................... $$$$ ",
+ " %%% //// /// $$$$ ",
+ " %%% //// /// $$$$ ",
+ " //// //// $$$$ ",
+ " //// ///// $$$$ ",
+ " ///// ///// ",
+ " //// ////// ",
+ " //// ////// ",
+ " //// ///// ",
+ " ///// ////// ",
+ " ///// ////// ",
+ " /////////// ///// ",
+ " /////////////////////// 11111111111111111111111111111111111111111111111111 ",
+ " //////////////////// 11111111111111111111111111111111111111111111111111 ",
+ " //////////// 11111111111111111111111111111111111111111111111111 ",
+ " //// 1111111111 1 11 ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/images/building-symbolizer-opacity-512-512-1.0-cairo-reference.png b/tests/visual_tests/images/building-symbolizer-opacity-512-512-1.0-cairo-reference.png
new file mode 100644
index 000000000..80429554a
Binary files /dev/null and b/tests/visual_tests/images/building-symbolizer-opacity-512-512-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/building-symbolizer-opacity-512-512-2.0-cairo-reference.png b/tests/visual_tests/images/building-symbolizer-opacity-512-512-2.0-cairo-reference.png
new file mode 100644
index 000000000..6b3504584
Binary files /dev/null and b/tests/visual_tests/images/building-symbolizer-opacity-512-512-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/charspacing-200-400-1.0-agg-reference.png b/tests/visual_tests/images/charspacing-200-400-1.0-agg-reference.png
new file mode 100644
index 000000000..e8b67daba
Binary files /dev/null and b/tests/visual_tests/images/charspacing-200-400-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/charspacing-200-400-1.0-cairo-reference.png b/tests/visual_tests/images/charspacing-200-400-1.0-cairo-reference.png
new file mode 100644
index 000000000..f2ae31fd7
Binary files /dev/null and b/tests/visual_tests/images/charspacing-200-400-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/charspacing-200-400-2.0-agg-reference.png b/tests/visual_tests/images/charspacing-200-400-2.0-agg-reference.png
new file mode 100644
index 000000000..722fe4aa8
Binary files /dev/null and b/tests/visual_tests/images/charspacing-200-400-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/charspacing-200-400-2.0-cairo-reference.png b/tests/visual_tests/images/charspacing-200-400-2.0-cairo-reference.png
new file mode 100644
index 000000000..bdda636f3
Binary files /dev/null and b/tests/visual_tests/images/charspacing-200-400-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/charspacing-lines-300-300-1.0-agg-reference.png b/tests/visual_tests/images/charspacing-lines-300-300-1.0-agg-reference.png
new file mode 100644
index 000000000..1dcf92ca5
Binary files /dev/null and b/tests/visual_tests/images/charspacing-lines-300-300-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/charspacing-lines-300-300-1.0-cairo-reference.png b/tests/visual_tests/images/charspacing-lines-300-300-1.0-cairo-reference.png
new file mode 100644
index 000000000..e7a808663
Binary files /dev/null and b/tests/visual_tests/images/charspacing-lines-300-300-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/charspacing-lines-300-300-2.0-agg-reference.png b/tests/visual_tests/images/charspacing-lines-300-300-2.0-agg-reference.png
new file mode 100644
index 000000000..a76b61acd
Binary files /dev/null and b/tests/visual_tests/images/charspacing-lines-300-300-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/charspacing-lines-300-300-2.0-cairo-reference.png b/tests/visual_tests/images/charspacing-lines-300-300-2.0-cairo-reference.png
new file mode 100644
index 000000000..e5bab8be3
Binary files /dev/null and b/tests/visual_tests/images/charspacing-lines-300-300-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/colorize-alpha1-512-512-1.0-cairo-reference.png b/tests/visual_tests/images/colorize-alpha1-512-512-1.0-cairo-reference.png
new file mode 100644
index 000000000..34aeeea46
Binary files /dev/null and b/tests/visual_tests/images/colorize-alpha1-512-512-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/colorize-alpha1-512-512-2.0-cairo-reference.png b/tests/visual_tests/images/colorize-alpha1-512-512-2.0-cairo-reference.png
new file mode 100644
index 000000000..283c5f2d6
Binary files /dev/null and b/tests/visual_tests/images/colorize-alpha1-512-512-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/colorize-alpha2-512-512-1.0-cairo-reference.png b/tests/visual_tests/images/colorize-alpha2-512-512-1.0-cairo-reference.png
new file mode 100644
index 000000000..34aeeea46
Binary files /dev/null and b/tests/visual_tests/images/colorize-alpha2-512-512-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/colorize-alpha2-512-512-2.0-cairo-reference.png b/tests/visual_tests/images/colorize-alpha2-512-512-2.0-cairo-reference.png
new file mode 100644
index 000000000..283c5f2d6
Binary files /dev/null and b/tests/visual_tests/images/colorize-alpha2-512-512-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/colorize-alpha3-512-512-1.0-cairo-reference.png b/tests/visual_tests/images/colorize-alpha3-512-512-1.0-cairo-reference.png
new file mode 100644
index 000000000..34aeeea46
Binary files /dev/null and b/tests/visual_tests/images/colorize-alpha3-512-512-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/colorize-alpha3-512-512-2.0-cairo-reference.png b/tests/visual_tests/images/colorize-alpha3-512-512-2.0-cairo-reference.png
new file mode 100644
index 000000000..283c5f2d6
Binary files /dev/null and b/tests/visual_tests/images/colorize-alpha3-512-512-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/dst-over-compositing-512-512-1.0-cairo-reference.png b/tests/visual_tests/images/dst-over-compositing-512-512-1.0-cairo-reference.png
new file mode 100644
index 000000000..aa51da4ef
Binary files /dev/null and b/tests/visual_tests/images/dst-over-compositing-512-512-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/dst-over-compositing-512-512-2.0-cairo-reference.png b/tests/visual_tests/images/dst-over-compositing-512-512-2.0-cairo-reference.png
new file mode 100644
index 000000000..aa51da4ef
Binary files /dev/null and b/tests/visual_tests/images/dst-over-compositing-512-512-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/harfbuzz-800-200-1.0-agg-reference.png b/tests/visual_tests/images/harfbuzz-800-200-1.0-agg-reference.png
new file mode 100644
index 000000000..440a23a8b
Binary files /dev/null and b/tests/visual_tests/images/harfbuzz-800-200-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/harfbuzz-800-200-1.0-cairo-reference.png b/tests/visual_tests/images/harfbuzz-800-200-1.0-cairo-reference.png
new file mode 100644
index 000000000..036ee0817
Binary files /dev/null and b/tests/visual_tests/images/harfbuzz-800-200-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/harfbuzz-800-200-2.0-agg-reference.png b/tests/visual_tests/images/harfbuzz-800-200-2.0-agg-reference.png
new file mode 100644
index 000000000..a71269f58
Binary files /dev/null and b/tests/visual_tests/images/harfbuzz-800-200-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/harfbuzz-800-200-2.0-cairo-reference.png b/tests/visual_tests/images/harfbuzz-800-200-2.0-cairo-reference.png
new file mode 100644
index 000000000..84a6ca438
Binary files /dev/null and b/tests/visual_tests/images/harfbuzz-800-200-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/hb-fontsets-800-200-1.0-agg-reference.png b/tests/visual_tests/images/hb-fontsets-800-200-1.0-agg-reference.png
new file mode 100644
index 000000000..20e78b610
Binary files /dev/null and b/tests/visual_tests/images/hb-fontsets-800-200-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/hb-fontsets-800-200-1.0-cairo-reference.png b/tests/visual_tests/images/hb-fontsets-800-200-1.0-cairo-reference.png
new file mode 100644
index 000000000..bc318e386
Binary files /dev/null and b/tests/visual_tests/images/hb-fontsets-800-200-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/hb-fontsets-800-200-2.0-agg-reference.png b/tests/visual_tests/images/hb-fontsets-800-200-2.0-agg-reference.png
new file mode 100644
index 000000000..89d0956d6
Binary files /dev/null and b/tests/visual_tests/images/hb-fontsets-800-200-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/hb-fontsets-800-200-2.0-cairo-reference.png b/tests/visual_tests/images/hb-fontsets-800-200-2.0-cairo-reference.png
new file mode 100644
index 000000000..10ccb9344
Binary files /dev/null and b/tests/visual_tests/images/hb-fontsets-800-200-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/image-filters-galore-512-512-1.0-cairo-reference.png b/tests/visual_tests/images/image-filters-galore-512-512-1.0-cairo-reference.png
new file mode 100644
index 000000000..f6c9d11c4
Binary files /dev/null and b/tests/visual_tests/images/image-filters-galore-512-512-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/image-filters-galore-512-512-2.0-cairo-reference.png b/tests/visual_tests/images/image-filters-galore-512-512-2.0-cairo-reference.png
new file mode 100644
index 000000000..f6c9d11c4
Binary files /dev/null and b/tests/visual_tests/images/image-filters-galore-512-512-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/image-filters-multi-blur-512-512-1.0-cairo-reference.png b/tests/visual_tests/images/image-filters-multi-blur-512-512-1.0-cairo-reference.png
new file mode 100644
index 000000000..f061d840a
Binary files /dev/null and b/tests/visual_tests/images/image-filters-multi-blur-512-512-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/image-filters-multi-blur-512-512-2.0-cairo-reference.png b/tests/visual_tests/images/image-filters-multi-blur-512-512-2.0-cairo-reference.png
new file mode 100644
index 000000000..c55e16b0a
Binary files /dev/null and b/tests/visual_tests/images/image-filters-multi-blur-512-512-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/khmer-800-200-1.0-agg-reference.png b/tests/visual_tests/images/khmer-800-200-1.0-agg-reference.png
new file mode 100644
index 000000000..036ee0817
Binary files /dev/null and b/tests/visual_tests/images/khmer-800-200-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/khmer-800-200-1.0-cairo-reference.png b/tests/visual_tests/images/khmer-800-200-1.0-cairo-reference.png
new file mode 100644
index 000000000..036ee0817
Binary files /dev/null and b/tests/visual_tests/images/khmer-800-200-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/khmer-800-200-2.0-agg-reference.png b/tests/visual_tests/images/khmer-800-200-2.0-agg-reference.png
new file mode 100644
index 000000000..a7b2ef6c1
Binary files /dev/null and b/tests/visual_tests/images/khmer-800-200-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/khmer-800-200-2.0-cairo-reference.png b/tests/visual_tests/images/khmer-800-200-2.0-cairo-reference.png
new file mode 100644
index 000000000..84a6ca438
Binary files /dev/null and b/tests/visual_tests/images/khmer-800-200-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/line-pattern-symbolizer-opacity-512-512-1.0-cairo-reference.png b/tests/visual_tests/images/line-pattern-symbolizer-opacity-512-512-1.0-cairo-reference.png
new file mode 100644
index 000000000..f9b4d3de3
Binary files /dev/null and b/tests/visual_tests/images/line-pattern-symbolizer-opacity-512-512-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/line-pattern-symbolizer-opacity-512-512-2.0-cairo-reference.png b/tests/visual_tests/images/line-pattern-symbolizer-opacity-512-512-2.0-cairo-reference.png
new file mode 100644
index 000000000..f9b4d3de3
Binary files /dev/null and b/tests/visual_tests/images/line-pattern-symbolizer-opacity-512-512-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/line_break-800-800-1.0-agg-reference.png b/tests/visual_tests/images/line_break-800-800-1.0-agg-reference.png
new file mode 100644
index 000000000..d017b296c
Binary files /dev/null and b/tests/visual_tests/images/line_break-800-800-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/line_break-800-800-1.0-cairo-reference.png b/tests/visual_tests/images/line_break-800-800-1.0-cairo-reference.png
new file mode 100644
index 000000000..b4bab7059
Binary files /dev/null and b/tests/visual_tests/images/line_break-800-800-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/line_break-800-800-2.0-agg-reference.png b/tests/visual_tests/images/line_break-800-800-2.0-agg-reference.png
new file mode 100644
index 000000000..ef7352a6b
Binary files /dev/null and b/tests/visual_tests/images/line_break-800-800-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/line_break-800-800-2.0-cairo-reference.png b/tests/visual_tests/images/line_break-800-800-2.0-cairo-reference.png
new file mode 100644
index 000000000..d1f69b0c4
Binary files /dev/null and b/tests/visual_tests/images/line_break-800-800-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/lines-4-200-200-1.0-agg-reference.png b/tests/visual_tests/images/lines-4-200-200-1.0-agg-reference.png
new file mode 100644
index 000000000..94e6cb951
Binary files /dev/null and b/tests/visual_tests/images/lines-4-200-200-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/lines-4-200-200-1.0-cairo-reference.png b/tests/visual_tests/images/lines-4-200-200-1.0-cairo-reference.png
new file mode 100644
index 000000000..78e58d4fe
Binary files /dev/null and b/tests/visual_tests/images/lines-4-200-200-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/lines-4-200-200-2.0-agg-reference.png b/tests/visual_tests/images/lines-4-200-200-2.0-agg-reference.png
new file mode 100644
index 000000000..eac991017
Binary files /dev/null and b/tests/visual_tests/images/lines-4-200-200-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/lines-4-200-200-2.0-cairo-reference.png b/tests/visual_tests/images/lines-4-200-200-2.0-cairo-reference.png
new file mode 100644
index 000000000..761f92356
Binary files /dev/null and b/tests/visual_tests/images/lines-4-200-200-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/lines-4-400-400-1.0-agg-reference.png b/tests/visual_tests/images/lines-4-400-400-1.0-agg-reference.png
new file mode 100644
index 000000000..a0bac0b02
Binary files /dev/null and b/tests/visual_tests/images/lines-4-400-400-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/lines-4-400-400-1.0-cairo-reference.png b/tests/visual_tests/images/lines-4-400-400-1.0-cairo-reference.png
new file mode 100644
index 000000000..8d6f771c7
Binary files /dev/null and b/tests/visual_tests/images/lines-4-400-400-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/lines-4-400-400-2.0-agg-reference.png b/tests/visual_tests/images/lines-4-400-400-2.0-agg-reference.png
new file mode 100644
index 000000000..528a03c32
Binary files /dev/null and b/tests/visual_tests/images/lines-4-400-400-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/lines-4-400-400-2.0-cairo-reference.png b/tests/visual_tests/images/lines-4-400-400-2.0-cairo-reference.png
new file mode 100644
index 000000000..7a660e98d
Binary files /dev/null and b/tests/visual_tests/images/lines-4-400-400-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/lines-4-600-600-1.0-agg-reference.png b/tests/visual_tests/images/lines-4-600-600-1.0-agg-reference.png
new file mode 100644
index 000000000..9cb5cfd1f
Binary files /dev/null and b/tests/visual_tests/images/lines-4-600-600-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/lines-4-600-600-1.0-cairo-reference.png b/tests/visual_tests/images/lines-4-600-600-1.0-cairo-reference.png
new file mode 100644
index 000000000..18b2ba798
Binary files /dev/null and b/tests/visual_tests/images/lines-4-600-600-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/lines-4-600-600-2.0-agg-reference.png b/tests/visual_tests/images/lines-4-600-600-2.0-agg-reference.png
new file mode 100644
index 000000000..40f1bfe24
Binary files /dev/null and b/tests/visual_tests/images/lines-4-600-600-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/lines-4-600-600-2.0-cairo-reference.png b/tests/visual_tests/images/lines-4-600-600-2.0-cairo-reference.png
new file mode 100644
index 000000000..6dfcdba7c
Binary files /dev/null and b/tests/visual_tests/images/lines-4-600-600-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/lines-4-800-800-1.0-agg-reference.png b/tests/visual_tests/images/lines-4-800-800-1.0-agg-reference.png
new file mode 100644
index 000000000..0eeaf267d
Binary files /dev/null and b/tests/visual_tests/images/lines-4-800-800-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/lines-4-800-800-1.0-cairo-reference.png b/tests/visual_tests/images/lines-4-800-800-1.0-cairo-reference.png
new file mode 100644
index 000000000..dad9be13a
Binary files /dev/null and b/tests/visual_tests/images/lines-4-800-800-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/lines-4-800-800-2.0-agg-reference.png b/tests/visual_tests/images/lines-4-800-800-2.0-agg-reference.png
new file mode 100644
index 000000000..cdc9ab399
Binary files /dev/null and b/tests/visual_tests/images/lines-4-800-800-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/lines-4-800-800-2.0-cairo-reference.png b/tests/visual_tests/images/lines-4-800-800-2.0-cairo-reference.png
new file mode 100644
index 000000000..f00fa677c
Binary files /dev/null and b/tests/visual_tests/images/lines-4-800-800-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/lines-5-200-200-1.0-agg-reference.png b/tests/visual_tests/images/lines-5-200-200-1.0-agg-reference.png
new file mode 100644
index 000000000..f6a312f63
Binary files /dev/null and b/tests/visual_tests/images/lines-5-200-200-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/lines-5-200-200-1.0-cairo-reference.png b/tests/visual_tests/images/lines-5-200-200-1.0-cairo-reference.png
new file mode 100644
index 000000000..3bcea8cbb
Binary files /dev/null and b/tests/visual_tests/images/lines-5-200-200-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/lines-5-200-200-2.0-agg-reference.png b/tests/visual_tests/images/lines-5-200-200-2.0-agg-reference.png
new file mode 100644
index 000000000..bb2f5631a
Binary files /dev/null and b/tests/visual_tests/images/lines-5-200-200-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/lines-5-200-200-2.0-cairo-reference.png b/tests/visual_tests/images/lines-5-200-200-2.0-cairo-reference.png
new file mode 100644
index 000000000..54a7b2cbe
Binary files /dev/null and b/tests/visual_tests/images/lines-5-200-200-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/lines-5-400-400-1.0-agg-reference.png b/tests/visual_tests/images/lines-5-400-400-1.0-agg-reference.png
new file mode 100644
index 000000000..e637244c6
Binary files /dev/null and b/tests/visual_tests/images/lines-5-400-400-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/lines-5-400-400-1.0-cairo-reference.png b/tests/visual_tests/images/lines-5-400-400-1.0-cairo-reference.png
new file mode 100644
index 000000000..d79d9f8db
Binary files /dev/null and b/tests/visual_tests/images/lines-5-400-400-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/lines-5-400-400-2.0-agg-reference.png b/tests/visual_tests/images/lines-5-400-400-2.0-agg-reference.png
new file mode 100644
index 000000000..03a17f75e
Binary files /dev/null and b/tests/visual_tests/images/lines-5-400-400-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/lines-5-400-400-2.0-cairo-reference.png b/tests/visual_tests/images/lines-5-400-400-2.0-cairo-reference.png
new file mode 100644
index 000000000..c78271529
Binary files /dev/null and b/tests/visual_tests/images/lines-5-400-400-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/lines-5-600-600-1.0-agg-reference.png b/tests/visual_tests/images/lines-5-600-600-1.0-agg-reference.png
new file mode 100644
index 000000000..3690c5752
Binary files /dev/null and b/tests/visual_tests/images/lines-5-600-600-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/lines-5-600-600-1.0-cairo-reference.png b/tests/visual_tests/images/lines-5-600-600-1.0-cairo-reference.png
new file mode 100644
index 000000000..202c3a6f3
Binary files /dev/null and b/tests/visual_tests/images/lines-5-600-600-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/lines-5-600-600-2.0-agg-reference.png b/tests/visual_tests/images/lines-5-600-600-2.0-agg-reference.png
new file mode 100644
index 000000000..8ddd2fd76
Binary files /dev/null and b/tests/visual_tests/images/lines-5-600-600-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/lines-5-600-600-2.0-cairo-reference.png b/tests/visual_tests/images/lines-5-600-600-2.0-cairo-reference.png
new file mode 100644
index 000000000..ee1cffea8
Binary files /dev/null and b/tests/visual_tests/images/lines-5-600-600-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/lines-5-800-800-1.0-agg-reference.png b/tests/visual_tests/images/lines-5-800-800-1.0-agg-reference.png
new file mode 100644
index 000000000..03e79430b
Binary files /dev/null and b/tests/visual_tests/images/lines-5-800-800-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/lines-5-800-800-1.0-cairo-reference.png b/tests/visual_tests/images/lines-5-800-800-1.0-cairo-reference.png
new file mode 100644
index 000000000..a84302a8f
Binary files /dev/null and b/tests/visual_tests/images/lines-5-800-800-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/lines-5-800-800-2.0-agg-reference.png b/tests/visual_tests/images/lines-5-800-800-2.0-agg-reference.png
new file mode 100644
index 000000000..a20dff208
Binary files /dev/null and b/tests/visual_tests/images/lines-5-800-800-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/lines-5-800-800-2.0-cairo-reference.png b/tests/visual_tests/images/lines-5-800-800-2.0-cairo-reference.png
new file mode 100644
index 000000000..aeb959082
Binary files /dev/null and b/tests/visual_tests/images/lines-5-800-800-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/lines-6-200-200-1.0-agg-reference.png b/tests/visual_tests/images/lines-6-200-200-1.0-agg-reference.png
new file mode 100644
index 000000000..be4a1991a
Binary files /dev/null and b/tests/visual_tests/images/lines-6-200-200-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/lines-6-200-200-1.0-cairo-reference.png b/tests/visual_tests/images/lines-6-200-200-1.0-cairo-reference.png
new file mode 100644
index 000000000..9c856d2d0
Binary files /dev/null and b/tests/visual_tests/images/lines-6-200-200-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/lines-6-200-200-2.0-agg-reference.png b/tests/visual_tests/images/lines-6-200-200-2.0-agg-reference.png
new file mode 100644
index 000000000..bb2f5631a
Binary files /dev/null and b/tests/visual_tests/images/lines-6-200-200-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/lines-6-200-200-2.0-cairo-reference.png b/tests/visual_tests/images/lines-6-200-200-2.0-cairo-reference.png
new file mode 100644
index 000000000..54a7b2cbe
Binary files /dev/null and b/tests/visual_tests/images/lines-6-200-200-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/lines-6-400-400-1.0-agg-reference.png b/tests/visual_tests/images/lines-6-400-400-1.0-agg-reference.png
new file mode 100644
index 000000000..dd857baa7
Binary files /dev/null and b/tests/visual_tests/images/lines-6-400-400-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/lines-6-400-400-1.0-cairo-reference.png b/tests/visual_tests/images/lines-6-400-400-1.0-cairo-reference.png
new file mode 100644
index 000000000..ad145b625
Binary files /dev/null and b/tests/visual_tests/images/lines-6-400-400-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/lines-6-400-400-2.0-agg-reference.png b/tests/visual_tests/images/lines-6-400-400-2.0-agg-reference.png
new file mode 100644
index 000000000..4eceb5f4a
Binary files /dev/null and b/tests/visual_tests/images/lines-6-400-400-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/lines-6-400-400-2.0-cairo-reference.png b/tests/visual_tests/images/lines-6-400-400-2.0-cairo-reference.png
new file mode 100644
index 000000000..bf3b3c8b6
Binary files /dev/null and b/tests/visual_tests/images/lines-6-400-400-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/lines-6-600-600-1.0-agg-reference.png b/tests/visual_tests/images/lines-6-600-600-1.0-agg-reference.png
new file mode 100644
index 000000000..0a0c71f68
Binary files /dev/null and b/tests/visual_tests/images/lines-6-600-600-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/lines-6-600-600-1.0-cairo-reference.png b/tests/visual_tests/images/lines-6-600-600-1.0-cairo-reference.png
new file mode 100644
index 000000000..452b0099f
Binary files /dev/null and b/tests/visual_tests/images/lines-6-600-600-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/lines-6-600-600-2.0-agg-reference.png b/tests/visual_tests/images/lines-6-600-600-2.0-agg-reference.png
new file mode 100644
index 000000000..03e39b985
Binary files /dev/null and b/tests/visual_tests/images/lines-6-600-600-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/lines-6-600-600-2.0-cairo-reference.png b/tests/visual_tests/images/lines-6-600-600-2.0-cairo-reference.png
new file mode 100644
index 000000000..56745b0a8
Binary files /dev/null and b/tests/visual_tests/images/lines-6-600-600-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/lines-6-800-800-1.0-agg-reference.png b/tests/visual_tests/images/lines-6-800-800-1.0-agg-reference.png
new file mode 100644
index 000000000..47faf2f9d
Binary files /dev/null and b/tests/visual_tests/images/lines-6-800-800-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/lines-6-800-800-1.0-cairo-reference.png b/tests/visual_tests/images/lines-6-800-800-1.0-cairo-reference.png
new file mode 100644
index 000000000..9b745e558
Binary files /dev/null and b/tests/visual_tests/images/lines-6-800-800-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/lines-6-800-800-2.0-agg-reference.png b/tests/visual_tests/images/lines-6-800-800-2.0-agg-reference.png
new file mode 100644
index 000000000..bcf25c8c0
Binary files /dev/null and b/tests/visual_tests/images/lines-6-800-800-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/lines-6-800-800-2.0-cairo-reference.png b/tests/visual_tests/images/lines-6-800-800-2.0-cairo-reference.png
new file mode 100644
index 000000000..1ad9e9710
Binary files /dev/null and b/tests/visual_tests/images/lines-6-800-800-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/orientation-800-200-1.0-agg-reference.png b/tests/visual_tests/images/orientation-800-200-1.0-agg-reference.png
new file mode 100644
index 000000000..8c12ce946
Binary files /dev/null and b/tests/visual_tests/images/orientation-800-200-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/orientation-800-200-1.0-cairo-reference.png b/tests/visual_tests/images/orientation-800-200-1.0-cairo-reference.png
new file mode 100644
index 000000000..5ecfe4063
Binary files /dev/null and b/tests/visual_tests/images/orientation-800-200-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/orientation-800-200-2.0-agg-reference.png b/tests/visual_tests/images/orientation-800-200-2.0-agg-reference.png
new file mode 100644
index 000000000..f5ee79b72
Binary files /dev/null and b/tests/visual_tests/images/orientation-800-200-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/orientation-800-200-2.0-cairo-reference.png b/tests/visual_tests/images/orientation-800-200-2.0-cairo-reference.png
new file mode 100644
index 000000000..f9deba88b
Binary files /dev/null and b/tests/visual_tests/images/orientation-800-200-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/raster-color-to-alpha1-512-512-1.0-cairo-reference.png b/tests/visual_tests/images/raster-color-to-alpha1-512-512-1.0-cairo-reference.png
new file mode 100644
index 000000000..e727a0fbf
Binary files /dev/null and b/tests/visual_tests/images/raster-color-to-alpha1-512-512-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/raster-color-to-alpha1-512-512-2.0-cairo-reference.png b/tests/visual_tests/images/raster-color-to-alpha1-512-512-2.0-cairo-reference.png
new file mode 100644
index 000000000..e727a0fbf
Binary files /dev/null and b/tests/visual_tests/images/raster-color-to-alpha1-512-512-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/raster-color-to-alpha2-512-512-1.0-cairo-reference.png b/tests/visual_tests/images/raster-color-to-alpha2-512-512-1.0-cairo-reference.png
new file mode 100644
index 000000000..2850cd059
Binary files /dev/null and b/tests/visual_tests/images/raster-color-to-alpha2-512-512-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/raster-color-to-alpha2-512-512-2.0-cairo-reference.png b/tests/visual_tests/images/raster-color-to-alpha2-512-512-2.0-cairo-reference.png
new file mode 100644
index 000000000..2850cd059
Binary files /dev/null and b/tests/visual_tests/images/raster-color-to-alpha2-512-512-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/raster-color-to-alpha3-512-512-1.0-cairo-reference.png b/tests/visual_tests/images/raster-color-to-alpha3-512-512-1.0-cairo-reference.png
new file mode 100644
index 000000000..eccd8242c
Binary files /dev/null and b/tests/visual_tests/images/raster-color-to-alpha3-512-512-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/raster-color-to-alpha3-512-512-2.0-cairo-reference.png b/tests/visual_tests/images/raster-color-to-alpha3-512-512-2.0-cairo-reference.png
new file mode 100644
index 000000000..eccd8242c
Binary files /dev/null and b/tests/visual_tests/images/raster-color-to-alpha3-512-512-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/raster-color-to-alpha4-512-512-1.0-cairo-reference.png b/tests/visual_tests/images/raster-color-to-alpha4-512-512-1.0-cairo-reference.png
new file mode 100644
index 000000000..dec77cf5d
Binary files /dev/null and b/tests/visual_tests/images/raster-color-to-alpha4-512-512-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/raster-color-to-alpha4-512-512-2.0-cairo-reference.png b/tests/visual_tests/images/raster-color-to-alpha4-512-512-2.0-cairo-reference.png
new file mode 100644
index 000000000..dec77cf5d
Binary files /dev/null and b/tests/visual_tests/images/raster-color-to-alpha4-512-512-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/raster-color-to-alpha5-512-512-1.0-cairo-reference.png b/tests/visual_tests/images/raster-color-to-alpha5-512-512-1.0-cairo-reference.png
new file mode 100644
index 000000000..dec77cf5d
Binary files /dev/null and b/tests/visual_tests/images/raster-color-to-alpha5-512-512-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/raster-color-to-alpha5-512-512-2.0-cairo-reference.png b/tests/visual_tests/images/raster-color-to-alpha5-512-512-2.0-cairo-reference.png
new file mode 100644
index 000000000..dec77cf5d
Binary files /dev/null and b/tests/visual_tests/images/raster-color-to-alpha5-512-512-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/raster_colorizer-512-512-1.0-cairo-reference.png b/tests/visual_tests/images/raster_colorizer-512-512-1.0-cairo-reference.png
new file mode 100644
index 000000000..dec77cf5d
Binary files /dev/null and b/tests/visual_tests/images/raster_colorizer-512-512-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/raster_colorizer-512-512-2.0-cairo-reference.png b/tests/visual_tests/images/raster_colorizer-512-512-2.0-cairo-reference.png
new file mode 100644
index 000000000..dec77cf5d
Binary files /dev/null and b/tests/visual_tests/images/raster_colorizer-512-512-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/raster_symbolizer-512-512-1.0-cairo-reference.png b/tests/visual_tests/images/raster_symbolizer-512-512-1.0-cairo-reference.png
new file mode 100644
index 000000000..a7c34dc22
Binary files /dev/null and b/tests/visual_tests/images/raster_symbolizer-512-512-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/raster_symbolizer-512-512-2.0-cairo-reference.png b/tests/visual_tests/images/raster_symbolizer-512-512-2.0-cairo-reference.png
new file mode 100644
index 000000000..a7c34dc22
Binary files /dev/null and b/tests/visual_tests/images/raster_symbolizer-512-512-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-2-490-100-1.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-2-490-100-1.0-agg-reference.png
new file mode 100644
index 000000000..3c9843eb9
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-2-490-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-2-490-100-1.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-2-490-100-1.0-cairo-reference.png
new file mode 100644
index 000000000..ccd8db84f
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-2-490-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-2-490-100-2.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-2-490-100-2.0-agg-reference.png
new file mode 100644
index 000000000..fc12fec9c
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-2-490-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-2-490-100-2.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-2-490-100-2.0-cairo-reference.png
new file mode 100644
index 000000000..d977adf55
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-2-490-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-2-495-100-1.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-2-495-100-1.0-agg-reference.png
new file mode 100644
index 000000000..68a4dc6fc
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-2-495-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-2-495-100-1.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-2-495-100-1.0-cairo-reference.png
new file mode 100644
index 000000000..ce82454d6
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-2-495-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-2-495-100-2.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-2-495-100-2.0-agg-reference.png
new file mode 100644
index 000000000..adb3c6ec4
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-2-495-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-2-495-100-2.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-2-495-100-2.0-cairo-reference.png
new file mode 100644
index 000000000..b73273f61
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-2-495-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-2-497-100-1.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-2-497-100-1.0-agg-reference.png
new file mode 100644
index 000000000..91293cfb0
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-2-497-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-2-497-100-1.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-2-497-100-1.0-cairo-reference.png
new file mode 100644
index 000000000..92ac27b1d
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-2-497-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-2-497-100-2.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-2-497-100-2.0-agg-reference.png
new file mode 100644
index 000000000..31ae28f44
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-2-497-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-2-497-100-2.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-2-497-100-2.0-cairo-reference.png
new file mode 100644
index 000000000..90ce72e9c
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-2-497-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-2-498-100-1.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-2-498-100-1.0-agg-reference.png
new file mode 100644
index 000000000..382129fb7
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-2-498-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-2-498-100-1.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-2-498-100-1.0-cairo-reference.png
new file mode 100644
index 000000000..b01ba8d9a
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-2-498-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-2-498-100-2.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-2-498-100-2.0-agg-reference.png
new file mode 100644
index 000000000..7444522a6
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-2-498-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-2-498-100-2.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-2-498-100-2.0-cairo-reference.png
new file mode 100644
index 000000000..aecdb91c9
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-2-498-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-2-499-100-1.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-2-499-100-1.0-agg-reference.png
new file mode 100644
index 000000000..3cf2e2bb0
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-2-499-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-2-499-100-1.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-2-499-100-1.0-cairo-reference.png
new file mode 100644
index 000000000..1856e0254
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-2-499-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-2-499-100-2.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-2-499-100-2.0-agg-reference.png
new file mode 100644
index 000000000..fe0cc79a5
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-2-499-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-2-499-100-2.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-2-499-100-2.0-cairo-reference.png
new file mode 100644
index 000000000..987ba0d3d
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-2-499-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-2-500-100-1.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-2-500-100-1.0-agg-reference.png
new file mode 100644
index 000000000..fb9be01f6
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-2-500-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-2-500-100-1.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-2-500-100-1.0-cairo-reference.png
new file mode 100644
index 000000000..2041efe85
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-2-500-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-2-500-100-2.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-2-500-100-2.0-agg-reference.png
new file mode 100644
index 000000000..881dad0e2
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-2-500-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-2-500-100-2.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-2-500-100-2.0-cairo-reference.png
new file mode 100644
index 000000000..c81a185ef
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-2-500-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-2-501-100-1.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-2-501-100-1.0-agg-reference.png
new file mode 100644
index 000000000..01572611f
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-2-501-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-2-501-100-1.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-2-501-100-1.0-cairo-reference.png
new file mode 100644
index 000000000..b29c1f366
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-2-501-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-2-501-100-2.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-2-501-100-2.0-agg-reference.png
new file mode 100644
index 000000000..302ab7637
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-2-501-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-2-501-100-2.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-2-501-100-2.0-cairo-reference.png
new file mode 100644
index 000000000..9fcccb3a5
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-2-501-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-2-502-100-1.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-2-502-100-1.0-agg-reference.png
new file mode 100644
index 000000000..1de7a7e0f
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-2-502-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-2-502-100-1.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-2-502-100-1.0-cairo-reference.png
new file mode 100644
index 000000000..52b31f0d6
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-2-502-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-2-502-100-2.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-2-502-100-2.0-agg-reference.png
new file mode 100644
index 000000000..9fbc31e0c
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-2-502-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-2-502-100-2.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-2-502-100-2.0-cairo-reference.png
new file mode 100644
index 000000000..9df560d3b
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-2-502-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-2-505-100-1.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-2-505-100-1.0-agg-reference.png
new file mode 100644
index 000000000..a7de2b410
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-2-505-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-2-505-100-1.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-2-505-100-1.0-cairo-reference.png
new file mode 100644
index 000000000..d7bf1d606
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-2-505-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-2-505-100-2.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-2-505-100-2.0-agg-reference.png
new file mode 100644
index 000000000..631f2e815
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-2-505-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-2-505-100-2.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-2-505-100-2.0-cairo-reference.png
new file mode 100644
index 000000000..bacea32d2
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-2-505-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-2-510-100-1.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-2-510-100-1.0-agg-reference.png
new file mode 100644
index 000000000..b51a9013e
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-2-510-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-2-510-100-1.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-2-510-100-1.0-cairo-reference.png
new file mode 100644
index 000000000..d17eda3df
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-2-510-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-2-510-100-2.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-2-510-100-2.0-agg-reference.png
new file mode 100644
index 000000000..ae758a265
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-2-510-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-2-510-100-2.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-2-510-100-2.0-cairo-reference.png
new file mode 100644
index 000000000..25f47ca6f
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-2-510-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-3-490-100-1.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-3-490-100-1.0-agg-reference.png
new file mode 100644
index 000000000..cb0a17776
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-3-490-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-3-490-100-1.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-3-490-100-1.0-cairo-reference.png
new file mode 100644
index 000000000..ac38b017d
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-3-490-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-3-490-100-2.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-3-490-100-2.0-agg-reference.png
new file mode 100644
index 000000000..b01387012
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-3-490-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-3-490-100-2.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-3-490-100-2.0-cairo-reference.png
new file mode 100644
index 000000000..ea077ad9b
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-3-490-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-3-495-100-1.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-3-495-100-1.0-agg-reference.png
new file mode 100644
index 000000000..1b00129bb
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-3-495-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-3-495-100-1.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-3-495-100-1.0-cairo-reference.png
new file mode 100644
index 000000000..250a360fb
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-3-495-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-3-495-100-2.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-3-495-100-2.0-agg-reference.png
new file mode 100644
index 000000000..fe3171c33
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-3-495-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-3-495-100-2.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-3-495-100-2.0-cairo-reference.png
new file mode 100644
index 000000000..b767d97ee
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-3-495-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-3-497-100-1.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-3-497-100-1.0-agg-reference.png
new file mode 100644
index 000000000..5a4b7251b
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-3-497-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-3-497-100-1.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-3-497-100-1.0-cairo-reference.png
new file mode 100644
index 000000000..64d685e53
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-3-497-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-3-497-100-2.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-3-497-100-2.0-agg-reference.png
new file mode 100644
index 000000000..05756c268
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-3-497-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-3-497-100-2.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-3-497-100-2.0-cairo-reference.png
new file mode 100644
index 000000000..212e4f317
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-3-497-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-3-498-100-1.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-3-498-100-1.0-agg-reference.png
new file mode 100644
index 000000000..29d061166
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-3-498-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-3-498-100-1.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-3-498-100-1.0-cairo-reference.png
new file mode 100644
index 000000000..6d6970b5b
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-3-498-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-3-498-100-2.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-3-498-100-2.0-agg-reference.png
new file mode 100644
index 000000000..57dcb53a5
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-3-498-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-3-498-100-2.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-3-498-100-2.0-cairo-reference.png
new file mode 100644
index 000000000..23f82405c
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-3-498-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-3-499-100-1.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-3-499-100-1.0-agg-reference.png
new file mode 100644
index 000000000..0f9e39c0f
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-3-499-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-3-499-100-1.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-3-499-100-1.0-cairo-reference.png
new file mode 100644
index 000000000..3e6bf67ac
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-3-499-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-3-499-100-2.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-3-499-100-2.0-agg-reference.png
new file mode 100644
index 000000000..aa91d3210
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-3-499-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-3-499-100-2.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-3-499-100-2.0-cairo-reference.png
new file mode 100644
index 000000000..0984199a3
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-3-499-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-3-500-100-1.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-3-500-100-1.0-agg-reference.png
new file mode 100644
index 000000000..ac1c154c6
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-3-500-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-3-500-100-1.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-3-500-100-1.0-cairo-reference.png
new file mode 100644
index 000000000..bc09ba373
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-3-500-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-3-500-100-2.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-3-500-100-2.0-agg-reference.png
new file mode 100644
index 000000000..6bc1edae3
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-3-500-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-3-500-100-2.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-3-500-100-2.0-cairo-reference.png
new file mode 100644
index 000000000..08463478b
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-3-500-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-3-501-100-1.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-3-501-100-1.0-agg-reference.png
new file mode 100644
index 000000000..759850b20
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-3-501-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-3-501-100-1.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-3-501-100-1.0-cairo-reference.png
new file mode 100644
index 000000000..2c8c843b2
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-3-501-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-3-501-100-2.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-3-501-100-2.0-agg-reference.png
new file mode 100644
index 000000000..2eecf4615
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-3-501-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-3-501-100-2.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-3-501-100-2.0-cairo-reference.png
new file mode 100644
index 000000000..17be8b94e
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-3-501-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-3-502-100-1.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-3-502-100-1.0-agg-reference.png
new file mode 100644
index 000000000..f1d0869cc
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-3-502-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-3-502-100-1.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-3-502-100-1.0-cairo-reference.png
new file mode 100644
index 000000000..f8a10f35b
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-3-502-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-3-502-100-2.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-3-502-100-2.0-agg-reference.png
new file mode 100644
index 000000000..f1e95d555
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-3-502-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-3-502-100-2.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-3-502-100-2.0-cairo-reference.png
new file mode 100644
index 000000000..b32b6ff2e
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-3-502-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-3-505-100-1.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-3-505-100-1.0-agg-reference.png
new file mode 100644
index 000000000..4b049b90c
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-3-505-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-3-505-100-1.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-3-505-100-1.0-cairo-reference.png
new file mode 100644
index 000000000..1a57f78ce
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-3-505-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-3-505-100-2.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-3-505-100-2.0-agg-reference.png
new file mode 100644
index 000000000..2ad6d4558
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-3-505-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-3-505-100-2.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-3-505-100-2.0-cairo-reference.png
new file mode 100644
index 000000000..579ea8639
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-3-505-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-3-510-100-1.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-3-510-100-1.0-agg-reference.png
new file mode 100644
index 000000000..3d66919b4
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-3-510-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-3-510-100-1.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-3-510-100-1.0-cairo-reference.png
new file mode 100644
index 000000000..1b8d83aec
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-3-510-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-3-510-100-2.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-3-510-100-2.0-agg-reference.png
new file mode 100644
index 000000000..a88243906
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-3-510-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-3-510-100-2.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-3-510-100-2.0-cairo-reference.png
new file mode 100644
index 000000000..47b0af7dd
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-3-510-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-4-490-100-1.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-4-490-100-1.0-agg-reference.png
new file mode 100644
index 000000000..b98fa4fad
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-4-490-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-4-490-100-1.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-4-490-100-1.0-cairo-reference.png
new file mode 100644
index 000000000..0e46722c0
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-4-490-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-4-490-100-2.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-4-490-100-2.0-agg-reference.png
new file mode 100644
index 000000000..55bdbf31e
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-4-490-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-4-490-100-2.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-4-490-100-2.0-cairo-reference.png
new file mode 100644
index 000000000..c61683124
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-4-490-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-4-495-100-1.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-4-495-100-1.0-agg-reference.png
new file mode 100644
index 000000000..da09fe22e
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-4-495-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-4-495-100-1.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-4-495-100-1.0-cairo-reference.png
new file mode 100644
index 000000000..ecc429d8a
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-4-495-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-4-495-100-2.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-4-495-100-2.0-agg-reference.png
new file mode 100644
index 000000000..99033a1cd
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-4-495-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-4-495-100-2.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-4-495-100-2.0-cairo-reference.png
new file mode 100644
index 000000000..61f421e8f
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-4-495-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-4-497-100-1.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-4-497-100-1.0-agg-reference.png
new file mode 100644
index 000000000..b22ca1663
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-4-497-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-4-497-100-1.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-4-497-100-1.0-cairo-reference.png
new file mode 100644
index 000000000..b09316160
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-4-497-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-4-497-100-2.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-4-497-100-2.0-agg-reference.png
new file mode 100644
index 000000000..3b5064447
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-4-497-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-4-497-100-2.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-4-497-100-2.0-cairo-reference.png
new file mode 100644
index 000000000..15fa99889
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-4-497-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-4-498-100-1.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-4-498-100-1.0-agg-reference.png
new file mode 100644
index 000000000..878bd1bc2
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-4-498-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-4-498-100-1.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-4-498-100-1.0-cairo-reference.png
new file mode 100644
index 000000000..d968418fc
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-4-498-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-4-498-100-2.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-4-498-100-2.0-agg-reference.png
new file mode 100644
index 000000000..72e415068
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-4-498-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-4-498-100-2.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-4-498-100-2.0-cairo-reference.png
new file mode 100644
index 000000000..16ae69f2f
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-4-498-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-4-499-100-1.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-4-499-100-1.0-agg-reference.png
new file mode 100644
index 000000000..2fb7b9516
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-4-499-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-4-499-100-1.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-4-499-100-1.0-cairo-reference.png
new file mode 100644
index 000000000..663a5c664
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-4-499-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-4-499-100-2.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-4-499-100-2.0-agg-reference.png
new file mode 100644
index 000000000..316390f2d
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-4-499-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-4-499-100-2.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-4-499-100-2.0-cairo-reference.png
new file mode 100644
index 000000000..dc87542c5
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-4-499-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-4-500-100-1.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-4-500-100-1.0-agg-reference.png
new file mode 100644
index 000000000..038c29757
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-4-500-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-4-500-100-1.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-4-500-100-1.0-cairo-reference.png
new file mode 100644
index 000000000..50953735b
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-4-500-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-4-500-100-2.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-4-500-100-2.0-agg-reference.png
new file mode 100644
index 000000000..51c7938ed
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-4-500-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-4-500-100-2.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-4-500-100-2.0-cairo-reference.png
new file mode 100644
index 000000000..7d54a98a8
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-4-500-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-4-501-100-1.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-4-501-100-1.0-agg-reference.png
new file mode 100644
index 000000000..ed42ec8d0
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-4-501-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-4-501-100-1.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-4-501-100-1.0-cairo-reference.png
new file mode 100644
index 000000000..3892df4c9
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-4-501-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-4-501-100-2.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-4-501-100-2.0-agg-reference.png
new file mode 100644
index 000000000..84bb72d01
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-4-501-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-4-501-100-2.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-4-501-100-2.0-cairo-reference.png
new file mode 100644
index 000000000..fe05ffdcc
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-4-501-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-4-502-100-1.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-4-502-100-1.0-agg-reference.png
new file mode 100644
index 000000000..472af5626
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-4-502-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-4-502-100-1.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-4-502-100-1.0-cairo-reference.png
new file mode 100644
index 000000000..6835531a0
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-4-502-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-4-502-100-2.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-4-502-100-2.0-agg-reference.png
new file mode 100644
index 000000000..43de3f11e
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-4-502-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-4-502-100-2.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-4-502-100-2.0-cairo-reference.png
new file mode 100644
index 000000000..af01a8b0a
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-4-502-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-4-505-100-1.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-4-505-100-1.0-agg-reference.png
new file mode 100644
index 000000000..ff3388935
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-4-505-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-4-505-100-1.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-4-505-100-1.0-cairo-reference.png
new file mode 100644
index 000000000..f85fefe93
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-4-505-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-4-505-100-2.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-4-505-100-2.0-agg-reference.png
new file mode 100644
index 000000000..765ca1ed7
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-4-505-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-4-505-100-2.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-4-505-100-2.0-cairo-reference.png
new file mode 100644
index 000000000..0734438b8
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-4-505-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-4-510-100-1.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-4-510-100-1.0-agg-reference.png
new file mode 100644
index 000000000..96832788d
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-4-510-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-4-510-100-1.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-4-510-100-1.0-cairo-reference.png
new file mode 100644
index 000000000..94816641f
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-4-510-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-4-510-100-2.0-agg-reference.png b/tests/visual_tests/images/shieldsymbolizer-4-510-100-2.0-agg-reference.png
new file mode 100644
index 000000000..940b2f64b
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-4-510-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/shieldsymbolizer-4-510-100-2.0-cairo-reference.png b/tests/visual_tests/images/shieldsymbolizer-4-510-100-2.0-cairo-reference.png
new file mode 100644
index 000000000..2d0ba66ca
Binary files /dev/null and b/tests/visual_tests/images/shieldsymbolizer-4-510-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/text-bug1532-600-165-1.0-agg-reference.png b/tests/visual_tests/images/text-bug1532-600-165-1.0-agg-reference.png
new file mode 100644
index 000000000..09a8e313c
Binary files /dev/null and b/tests/visual_tests/images/text-bug1532-600-165-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/text-bug1532-600-165-1.0-cairo-reference.png b/tests/visual_tests/images/text-bug1532-600-165-1.0-cairo-reference.png
new file mode 100644
index 000000000..f4cc81dd1
Binary files /dev/null and b/tests/visual_tests/images/text-bug1532-600-165-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/text-bug1532-600-165-2.0-agg-reference.png b/tests/visual_tests/images/text-bug1532-600-165-2.0-agg-reference.png
new file mode 100644
index 000000000..3b2a5867e
Binary files /dev/null and b/tests/visual_tests/images/text-bug1532-600-165-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/text-bug1532-600-165-2.0-cairo-reference.png b/tests/visual_tests/images/text-bug1532-600-165-2.0-cairo-reference.png
new file mode 100644
index 000000000..aa1f2bd44
Binary files /dev/null and b/tests/visual_tests/images/text-bug1532-600-165-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/text-bug1533-600-600-1.0-agg-reference.png b/tests/visual_tests/images/text-bug1533-600-600-1.0-agg-reference.png
new file mode 100644
index 000000000..3a470e82a
Binary files /dev/null and b/tests/visual_tests/images/text-bug1533-600-600-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/text-bug1533-600-600-1.0-cairo-reference.png b/tests/visual_tests/images/text-bug1533-600-600-1.0-cairo-reference.png
new file mode 100644
index 000000000..23ddb8113
Binary files /dev/null and b/tests/visual_tests/images/text-bug1533-600-600-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/text-bug1533-600-600-2.0-agg-reference.png b/tests/visual_tests/images/text-bug1533-600-600-2.0-agg-reference.png
new file mode 100644
index 000000000..8e9b33e80
Binary files /dev/null and b/tests/visual_tests/images/text-bug1533-600-600-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/text-bug1533-600-600-2.0-cairo-reference.png b/tests/visual_tests/images/text-bug1533-600-600-2.0-cairo-reference.png
new file mode 100644
index 000000000..53949101d
Binary files /dev/null and b/tests/visual_tests/images/text-bug1533-600-600-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/text-bug1820+0-600-300-1.0-agg-reference.png b/tests/visual_tests/images/text-bug1820+0-600-300-1.0-agg-reference.png
new file mode 100644
index 000000000..c0afa8b50
Binary files /dev/null and b/tests/visual_tests/images/text-bug1820+0-600-300-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/text-bug1820+0-600-300-1.0-cairo-reference.png b/tests/visual_tests/images/text-bug1820+0-600-300-1.0-cairo-reference.png
new file mode 100644
index 000000000..daf27e84b
Binary files /dev/null and b/tests/visual_tests/images/text-bug1820+0-600-300-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/text-bug1820+0-600-300-2.0-agg-reference.png b/tests/visual_tests/images/text-bug1820+0-600-300-2.0-agg-reference.png
new file mode 100644
index 000000000..585f0ee9a
Binary files /dev/null and b/tests/visual_tests/images/text-bug1820+0-600-300-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/text-bug1820+0-600-300-2.0-cairo-reference.png b/tests/visual_tests/images/text-bug1820+0-600-300-2.0-cairo-reference.png
new file mode 100644
index 000000000..898e272be
Binary files /dev/null and b/tests/visual_tests/images/text-bug1820+0-600-300-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/text-bug1820+1-600-300-1.0-agg-reference.png b/tests/visual_tests/images/text-bug1820+1-600-300-1.0-agg-reference.png
new file mode 100644
index 000000000..a1eaa17f7
Binary files /dev/null and b/tests/visual_tests/images/text-bug1820+1-600-300-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/text-bug1820+1-600-300-1.0-cairo-reference.png b/tests/visual_tests/images/text-bug1820+1-600-300-1.0-cairo-reference.png
new file mode 100644
index 000000000..42b7c7396
Binary files /dev/null and b/tests/visual_tests/images/text-bug1820+1-600-300-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/text-bug1820+1-600-300-2.0-agg-reference.png b/tests/visual_tests/images/text-bug1820+1-600-300-2.0-agg-reference.png
new file mode 100644
index 000000000..2dd565d7b
Binary files /dev/null and b/tests/visual_tests/images/text-bug1820+1-600-300-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/text-bug1820+1-600-300-2.0-cairo-reference.png b/tests/visual_tests/images/text-bug1820+1-600-300-2.0-cairo-reference.png
new file mode 100644
index 000000000..fef1d8e5b
Binary files /dev/null and b/tests/visual_tests/images/text-bug1820+1-600-300-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/text-bug1820-1-600-300-1.0-agg-reference.png b/tests/visual_tests/images/text-bug1820-1-600-300-1.0-agg-reference.png
new file mode 100644
index 000000000..c1bf57814
Binary files /dev/null and b/tests/visual_tests/images/text-bug1820-1-600-300-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/text-bug1820-1-600-300-1.0-cairo-reference.png b/tests/visual_tests/images/text-bug1820-1-600-300-1.0-cairo-reference.png
new file mode 100644
index 000000000..56e6a9c0f
Binary files /dev/null and b/tests/visual_tests/images/text-bug1820-1-600-300-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/text-bug1820-1-600-300-2.0-agg-reference.png b/tests/visual_tests/images/text-bug1820-1-600-300-2.0-agg-reference.png
new file mode 100644
index 000000000..dd444f0bb
Binary files /dev/null and b/tests/visual_tests/images/text-bug1820-1-600-300-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/text-bug1820-1-600-300-2.0-cairo-reference.png b/tests/visual_tests/images/text-bug1820-1-600-300-2.0-cairo-reference.png
new file mode 100644
index 000000000..e8e72e65b
Binary files /dev/null and b/tests/visual_tests/images/text-bug1820-1-600-300-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/text-bug2037-800-300-1.0-agg-reference.png b/tests/visual_tests/images/text-bug2037-800-300-1.0-agg-reference.png
new file mode 100644
index 000000000..79db9a82e
Binary files /dev/null and b/tests/visual_tests/images/text-bug2037-800-300-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/text-bug2037-800-300-1.0-cairo-reference.png b/tests/visual_tests/images/text-bug2037-800-300-1.0-cairo-reference.png
new file mode 100644
index 000000000..3b7ad8555
Binary files /dev/null and b/tests/visual_tests/images/text-bug2037-800-300-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/text-bug2037-800-300-2.0-agg-reference.png b/tests/visual_tests/images/text-bug2037-800-300-2.0-agg-reference.png
new file mode 100644
index 000000000..815b816cd
Binary files /dev/null and b/tests/visual_tests/images/text-bug2037-800-300-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/text-bug2037-800-300-2.0-cairo-reference.png b/tests/visual_tests/images/text-bug2037-800-300-2.0-cairo-reference.png
new file mode 100644
index 000000000..ca28102d3
Binary files /dev/null and b/tests/visual_tests/images/text-bug2037-800-300-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/text-expressionformat-color-800-100-1.0-agg-reference.png b/tests/visual_tests/images/text-expressionformat-color-800-100-1.0-agg-reference.png
new file mode 100644
index 000000000..c91f2bc08
Binary files /dev/null and b/tests/visual_tests/images/text-expressionformat-color-800-100-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/text-expressionformat-color-800-100-1.0-cairo-reference.png b/tests/visual_tests/images/text-expressionformat-color-800-100-1.0-cairo-reference.png
new file mode 100644
index 000000000..997b923ce
Binary files /dev/null and b/tests/visual_tests/images/text-expressionformat-color-800-100-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/text-expressionformat-color-800-100-2.0-agg-reference.png b/tests/visual_tests/images/text-expressionformat-color-800-100-2.0-agg-reference.png
new file mode 100644
index 000000000..a46b96803
Binary files /dev/null and b/tests/visual_tests/images/text-expressionformat-color-800-100-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/text-expressionformat-color-800-100-2.0-cairo-reference.png b/tests/visual_tests/images/text-expressionformat-color-800-100-2.0-cairo-reference.png
new file mode 100644
index 000000000..a40d9b1ca
Binary files /dev/null and b/tests/visual_tests/images/text-expressionformat-color-800-100-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/text-halign-800-800-1.0-agg-reference.png b/tests/visual_tests/images/text-halign-800-800-1.0-agg-reference.png
new file mode 100644
index 000000000..e0923ba01
Binary files /dev/null and b/tests/visual_tests/images/text-halign-800-800-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/text-halign-800-800-1.0-cairo-reference.png b/tests/visual_tests/images/text-halign-800-800-1.0-cairo-reference.png
new file mode 100644
index 000000000..3a7834aa2
Binary files /dev/null and b/tests/visual_tests/images/text-halign-800-800-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/text-halign-800-800-2.0-agg-reference.png b/tests/visual_tests/images/text-halign-800-800-2.0-agg-reference.png
new file mode 100644
index 000000000..851503cd8
Binary files /dev/null and b/tests/visual_tests/images/text-halign-800-800-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/text-halign-800-800-2.0-cairo-reference.png b/tests/visual_tests/images/text-halign-800-800-2.0-cairo-reference.png
new file mode 100644
index 000000000..673392ddb
Binary files /dev/null and b/tests/visual_tests/images/text-halign-800-800-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/tiff_colortable-256-256-1.0-cairo-reference.png b/tests/visual_tests/images/tiff_colortable-256-256-1.0-cairo-reference.png
new file mode 100644
index 000000000..b9ed3400d
Binary files /dev/null and b/tests/visual_tests/images/tiff_colortable-256-256-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/tiff_colortable-256-256-2.0-cairo-reference.png b/tests/visual_tests/images/tiff_colortable-256-256-2.0-cairo-reference.png
new file mode 100644
index 000000000..b9ed3400d
Binary files /dev/null and b/tests/visual_tests/images/tiff_colortable-256-256-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/tiff_colortable_custom_nodata-256-256-1.0-cairo-reference.png b/tests/visual_tests/images/tiff_colortable_custom_nodata-256-256-1.0-cairo-reference.png
new file mode 100644
index 000000000..4d037012e
Binary files /dev/null and b/tests/visual_tests/images/tiff_colortable_custom_nodata-256-256-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/tiff_colortable_custom_nodata-256-256-2.0-cairo-reference.png b/tests/visual_tests/images/tiff_colortable_custom_nodata-256-256-2.0-cairo-reference.png
new file mode 100644
index 000000000..4d037012e
Binary files /dev/null and b/tests/visual_tests/images/tiff_colortable_custom_nodata-256-256-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/vrt_colortable-256-256-1.0-cairo-reference.png b/tests/visual_tests/images/vrt_colortable-256-256-1.0-cairo-reference.png
new file mode 100644
index 000000000..3fa463b51
Binary files /dev/null and b/tests/visual_tests/images/vrt_colortable-256-256-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/vrt_colortable-256-256-2.0-cairo-reference.png b/tests/visual_tests/images/vrt_colortable-256-256-2.0-cairo-reference.png
new file mode 100644
index 000000000..3fa463b51
Binary files /dev/null and b/tests/visual_tests/images/vrt_colortable-256-256-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/styles/charspacing-lines.xml b/tests/visual_tests/styles/charspacing-lines.xml
new file mode 100644
index 000000000..36ffe7312
--- /dev/null
+++ b/tests/visual_tests/styles/charspacing-lines.xml
@@ -0,0 +1,37 @@
+
+
+
diff --git a/tests/visual_tests/styles/charspacing.xml b/tests/visual_tests/styles/charspacing.xml
new file mode 100644
index 000000000..3afbdfd66
--- /dev/null
+++ b/tests/visual_tests/styles/charspacing.xml
@@ -0,0 +1,33 @@
+
+
+
diff --git a/tests/visual_tests/styles/formatting.xml b/tests/visual_tests/styles/formatting.xml
new file mode 100644
index 000000000..541d7c1e1
--- /dev/null
+++ b/tests/visual_tests/styles/formatting.xml
@@ -0,0 +1,21 @@
+
+
+
diff --git a/tests/visual_tests/styles/harfbuzz.xml b/tests/visual_tests/styles/harfbuzz.xml
new file mode 100644
index 000000000..66c7bafb0
--- /dev/null
+++ b/tests/visual_tests/styles/harfbuzz.xml
@@ -0,0 +1,43 @@
+
+
+
diff --git a/tests/visual_tests/styles/hb-fontsets.xml b/tests/visual_tests/styles/hb-fontsets.xml
new file mode 100644
index 000000000..b3f111947
--- /dev/null
+++ b/tests/visual_tests/styles/hb-fontsets.xml
@@ -0,0 +1,45 @@
+
+
+
diff --git a/tests/visual_tests/styles/khmer.xml b/tests/visual_tests/styles/khmer.xml
new file mode 100644
index 000000000..4bcf10e33
--- /dev/null
+++ b/tests/visual_tests/styles/khmer.xml
@@ -0,0 +1,36 @@
+
+
+
diff --git a/tests/visual_tests/styles/line_break.xml b/tests/visual_tests/styles/line_break.xml
new file mode 100644
index 000000000..c39fd6c9e
--- /dev/null
+++ b/tests/visual_tests/styles/line_break.xml
@@ -0,0 +1,36 @@
+
+
+
diff --git a/tests/visual_tests/styles/lines-4.xml b/tests/visual_tests/styles/lines-4.xml
new file mode 100644
index 000000000..61697bed1
--- /dev/null
+++ b/tests/visual_tests/styles/lines-4.xml
@@ -0,0 +1,21 @@
+
+
+
+
diff --git a/tests/visual_tests/styles/lines-5.xml b/tests/visual_tests/styles/lines-5.xml
new file mode 100644
index 000000000..de7bb8cbc
--- /dev/null
+++ b/tests/visual_tests/styles/lines-5.xml
@@ -0,0 +1,25 @@
+
+
+
+
diff --git a/tests/visual_tests/styles/lines-6.xml b/tests/visual_tests/styles/lines-6.xml
new file mode 100644
index 000000000..2e823d885
--- /dev/null
+++ b/tests/visual_tests/styles/lines-6.xml
@@ -0,0 +1,30 @@
+
+
+
+
diff --git a/tests/visual_tests/styles/orientation.xml b/tests/visual_tests/styles/orientation.xml
new file mode 100644
index 000000000..e0e283b78
--- /dev/null
+++ b/tests/visual_tests/styles/orientation.xml
@@ -0,0 +1,66 @@
+
+
+
diff --git a/tests/visual_tests/styles/shieldsymbolizer-2.xml b/tests/visual_tests/styles/shieldsymbolizer-2.xml
new file mode 100644
index 000000000..7acf4276d
--- /dev/null
+++ b/tests/visual_tests/styles/shieldsymbolizer-2.xml
@@ -0,0 +1,60 @@
+
+
+
+
diff --git a/tests/visual_tests/styles/shieldsymbolizer-3.xml b/tests/visual_tests/styles/shieldsymbolizer-3.xml
new file mode 100644
index 000000000..01e3dc151
--- /dev/null
+++ b/tests/visual_tests/styles/shieldsymbolizer-3.xml
@@ -0,0 +1,60 @@
+
+
+
+
diff --git a/tests/visual_tests/styles/shieldsymbolizer-4.xml b/tests/visual_tests/styles/shieldsymbolizer-4.xml
new file mode 100644
index 000000000..14fe55ebf
--- /dev/null
+++ b/tests/visual_tests/styles/shieldsymbolizer-4.xml
@@ -0,0 +1,63 @@
+
+
+
+
diff --git a/tests/visual_tests/styles/text-bengali.xml b/tests/visual_tests/styles/text-bengali.xml
new file mode 100644
index 000000000..1aa40b649
--- /dev/null
+++ b/tests/visual_tests/styles/text-bengali.xml
@@ -0,0 +1,25 @@
+
+
+
diff --git a/tests/visual_tests/styles/text-bug1532.xml b/tests/visual_tests/styles/text-bug1532.xml
new file mode 100644
index 000000000..f47a7cc7b
--- /dev/null
+++ b/tests/visual_tests/styles/text-bug1532.xml
@@ -0,0 +1,40 @@
+
+
+
+
diff --git a/tests/visual_tests/styles/text-bug1533.xml b/tests/visual_tests/styles/text-bug1533.xml
new file mode 100644
index 000000000..9ca8dcb98
--- /dev/null
+++ b/tests/visual_tests/styles/text-bug1533.xml
@@ -0,0 +1,29 @@
+
+
+
+
diff --git a/tests/visual_tests/styles/text-bug1820+0.xml b/tests/visual_tests/styles/text-bug1820+0.xml
new file mode 100644
index 000000000..97352041c
--- /dev/null
+++ b/tests/visual_tests/styles/text-bug1820+0.xml
@@ -0,0 +1,20 @@
+
+
+
+
diff --git a/tests/visual_tests/styles/text-bug1820+1.xml b/tests/visual_tests/styles/text-bug1820+1.xml
new file mode 100644
index 000000000..ce860fe25
--- /dev/null
+++ b/tests/visual_tests/styles/text-bug1820+1.xml
@@ -0,0 +1,20 @@
+
+
+
+
diff --git a/tests/visual_tests/styles/text-bug1820-1.xml b/tests/visual_tests/styles/text-bug1820-1.xml
new file mode 100644
index 000000000..bd7c7ac3b
--- /dev/null
+++ b/tests/visual_tests/styles/text-bug1820-1.xml
@@ -0,0 +1,20 @@
+
+
+
+
diff --git a/tests/visual_tests/styles/text-bug2037.xml b/tests/visual_tests/styles/text-bug2037.xml
new file mode 100644
index 000000000..5e95076a6
--- /dev/null
+++ b/tests/visual_tests/styles/text-bug2037.xml
@@ -0,0 +1,30 @@
+
+
+
\ No newline at end of file
diff --git a/tests/visual_tests/styles/text-expressionformat-color.xml b/tests/visual_tests/styles/text-expressionformat-color.xml
new file mode 100644
index 000000000..7ef679c0f
--- /dev/null
+++ b/tests/visual_tests/styles/text-expressionformat-color.xml
@@ -0,0 +1,23 @@
+
+
+
diff --git a/tests/visual_tests/styles/text-halign.xml b/tests/visual_tests/styles/text-halign.xml
new file mode 100644
index 000000000..d0e67dd20
--- /dev/null
+++ b/tests/visual_tests/styles/text-halign.xml
@@ -0,0 +1,21 @@
+
+
+
+
diff --git a/tests/visual_tests/styles/text-malayalam.xml b/tests/visual_tests/styles/text-malayalam.xml
new file mode 100644
index 000000000..b516cb300
--- /dev/null
+++ b/tests/visual_tests/styles/text-malayalam.xml
@@ -0,0 +1,17 @@
+
+
+
diff --git a/tests/visual_tests/test.py b/tests/visual_tests/test.py
index 7f43597da..dd5c0e8eb 100755
--- a/tests/visual_tests/test.py
+++ b/tests/visual_tests/test.py
@@ -92,6 +92,9 @@ files = {
'lines-1': {'sizes': sizes_few_square,'bbox':default_text_box},
'lines-2': {'sizes': sizes_few_square,'bbox':default_text_box},
'lines-3': {'sizes': sizes_few_square,'bbox':default_text_box},
+ 'lines-4': {'sizes': sizes_few_square,'bbox':default_text_box},
+ 'lines-5': {'sizes': sizes_few_square,'bbox':default_text_box},
+ 'lines-6': {'sizes': sizes_few_square,'bbox':default_text_box},
'lines-shield': {'sizes': sizes_few_square,'bbox':default_text_box},
'collision': {'sizes':[(600,400)]},
'shield-on-polygon': {'sizes':[(600,400)]},
@@ -128,9 +131,30 @@ files = {
'formatting-4': {'bbox':default_text_box},
'expressionformat': {'bbox':default_text_box},
'shieldsymbolizer-1': {'sizes': sizes_many_in_small_range,'bbox':default_text_box},
+ 'shieldsymbolizer-2': {'sizes': sizes_many_in_small_range,'bbox':default_text_box},
+ 'shieldsymbolizer-3': {'sizes': sizes_many_in_small_range,'bbox':default_text_box},
+ 'shieldsymbolizer-4': {'sizes': sizes_many_in_small_range,'bbox':default_text_box},
+ 'orientation': {'sizes': [(800, 200)], 'bbox': default_text_box},
+ 'harfbuzz': {'sizes': [(800, 200)], 'bbox': default_text_box},
+ 'hb-fontsets': {'sizes': [(800, 200)], 'bbox': default_text_box},
+ 'khmer': {'sizes': [(800, 200)], 'bbox': default_text_box},
+ 'charspacing': {'sizes': [(200, 400)], 'bbox': default_text_box},
+ 'charspacing-lines': {'sizes': [(300, 300)], 'bbox': default_text_box},
+ 'line_break': {'sizes': [(800, 800)], 'bbox': default_text_box},
'rtl-point': {'sizes': [(200, 200)],'bbox':default_text_box},
'jalign-auto': {'sizes': [(200, 200)],'bbox':default_text_box},
'line-offset': {'sizes':[(900, 250)],'bbox': mapnik.Box2d(-5.192, 50.189, -5.174, 50.195)},
+ 'text-bug1532': {'sizes': [(600, 165)]},
+ 'text-bug1533': {'sizes': [(600, 600)]},
+ 'text-bug1820-1': {'sizes': [(600, 300)], 'bbox': default_text_box},
+ 'text-bug1820+0': {'sizes': [(600, 300)], 'bbox': default_text_box},
+ 'text-bug1820+1': {'sizes': [(600, 300)], 'bbox': default_text_box},
+ 'text-bug2037': {'sizes': [(800, 300)], 'bbox': default_text_box},
+ 'text-expressionformat-color': {'sizes': [(800, 100)], 'bbox': default_text_box},
+ 'text-halign': {'sizes': [(800,800)], 'bbox': default_text_box},
+ # Disabled by default as the required font isn't shipped with mapnik
+ #'text-malayalam': {'sizes': [(800, 100)], 'bbox': default_text_box},
+ #'text-bengali': {'sizes': [(800, 100)], 'bbox': default_text_box},
'line-pattern-symbolizer': {'sizes':[(900, 250)],'bbox': mapnik.Box2d(-5.192, 50.189, -5.174, 50.195)},
'tiff-alpha-gdal': {'sizes':[(600,400)]},
'tiff-alpha-broken-assoc-alpha-gdal': {'sizes':[(600,400)]},