diff --git a/tests/visual_tests/grids/text-halign-adjust-800-800-1.0-grid-reference.json b/tests/visual_tests/grids/text-halign-adjust-800-800-1.0-grid-reference.json
new file mode 100644
index 000000000..86662ad17
--- /dev/null
+++ b/tests/visual_tests/grids/text-halign-adjust-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 +++ $$$$ ",
+ " %%%% ))))) ////// //// ,,, ... 0 +++ $$$$ ",
+ " %%%% ))) ////// ///// ,,, ... +++ $$$$ ",
+ " %%% ) //// //// ,,, ... ++++ $$$$ ",
+ " %%% /// //// ,,, ... ++++ $$$$ ",
+ " %%% /// //// ,,, ... +++ $$$$ ",
+ " %%% /// ///// ... ++++ $$$$ ",
+ " %%% //// //// ... ++++++++++++++++ ++++ $$$$ ",
+ " %%% //// /// ... ++++++++++++++++++++++++++++++++++++++++++++ $$$$ ",
+ " %%% //// /// ... +++++++++++++++++++++++++++++++++++++++++++ $$$$ ",
+ " %%% /// //// ... +++++++++++++++++++++++++++++++++ $$$$ ",
+ " %%% /// //// ... $$$$ ",
+ " %%% /// //// .... $$$$ ",
+ " %%% /// /// .... $$$$ ",
+ " %%% //// /// .... $$$$ ",
+ " %%% //// /// ..... $$$$ ",
+ " %%% /// /// .... $$$$ ",
+ " %%% /// //// ..... $$$$ ",
+ " %%% /// //// ...... $$$$ ",
+ " %%% /// /// .......................................... $$$$ ",
+ " %%% //// /// ........................................ $$$$ ",
+ " %%% //// /// ...................................... $$$$ ",
+ " %%% //// /// $$$$ ",
+ " %%% //// /// $$$$ ",
+ " //// //// $$$$ ",
+ " //// ///// $$$$ ",
+ " ///// ///// ",
+ " //// ////// ",
+ " //// ////// ",
+ " //// ///// ",
+ " ///// ////// ",
+ " ///// ////// ",
+ " /////////// ///// ",
+ " /////////////////////// 11111111111111111111111111111111111111111111111111 ",
+ " //////////////////// 11111111111111111111111111111111111111111111111111 ",
+ " //////////// 111111111111111111111111111111111111111111111111111 ",
+ " //// 1111111111 ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/text-halign-adjust-800-800-2.0-grid-reference.json b/tests/visual_tests/grids/text-halign-adjust-800-800-2.0-grid-reference.json
new file mode 100644
index 000000000..6e45720df
--- /dev/null
+++ b/tests/visual_tests/grids/text-halign-adjust-800-800-2.0-grid-reference.json
@@ -0,0 +1,224 @@
+{
+ "keys": [
+ "",
+ "9",
+ "8",
+ "4",
+ "5",
+ "7",
+ "16",
+ "6",
+ "2",
+ "10",
+ "12",
+ "13",
+ "14",
+ "11",
+ "3",
+ "15",
+ "1"
+ ],
+ "data": {},
+ "grid": [
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " !!!! ",
+ " !!!!!! !! ",
+ " !!!!!!!!! !!!!! !! ",
+ " !!!!!!!!!!! !!!!!!! !!!!! ",
+ " !!!!!!!!!!!!!!! !!!!!!!!!!! !!!!!!! ",
+ " !!!!!!!!!!!!!!!!!! !!!!!!!!!!!!! !!!!!!!!!! !! ",
+ " !!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!! !!!!!!!!!!!!! !!!! ",
+ " !!!!!!!!!!!! !!!!!!!!!! !!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!! !!!!!! ",
+ " !!!!!!!!!!!! !!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!! !!!!!!!! ",
+ " !!!!!!!!!!!! !!!!!!!!!! !!!!!!!!!!! !!!!!!!!!! !!!!!!!!!!!!!!!!!!!! !!!!!!!!!!! ",
+ " !!!!!!!!!!! !!!!!!!!!! !!!!!!!!!!! !!!!!!!!!! !!!!!!!!!!! !!!!!!!!!!! !!!!!!!!!!! ",
+ " !!!!!!!!!!!! !!!!!!!!!! !!!!!!!!!!! !!!!!!!!!!! !!!!!!!!!!! !!!!!!!!!! !!!!!!!!!!! ",
+ " !!!!!!!!!!! !!!!!!!!!!! !!!!!!!!!!! ! !!!!!!!!!! !!!!!!!!!! !!!!!!!!!! !!!!!!!!!!! ",
+ " !!!!!!!!!!! !!!!!!!!!! !!!!!!!!!!! !!!!!!!!!! !!!!!!!!!!! !!!!!!!!!! !!!!!!!!!! ",
+ " !!!!!!!!! !!!!!!!!!! !!!!!!!!!!! !!!!!!!!!!! !!!!!!!!!!! !!!!!!!!!!! !!!!!!!!!!! ",
+ " !!!!!!! !!!!!!!!!! !!!!!!!!!!! !!!!!!!!!!! !!!!!!!!!! !!!!!!!!!! !!!!!!!!!!! ",
+ " !!!! !!!!!!!!!! !!!!!!!!!! !!!!!!!!!! !!!!!!!!!!! !!!!!!!!!! !!!!!!!!!! ",
+ " !!! !!!!!!!!!! !!!!!!!!!!! !!!!!!!!!! !!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!! ",
+ " !!!!!!!!!! !!!!!!!!!!! !!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!! ",
+ " !!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!! ",
+ " !!!!!!!!!!!!!!!! !!!!!!!!!!!!!!! !!!!!!!!!!!!! ",
+ " ## !!!!!!!!!!!!! # !!!!!!!!!!!! !!!!!!!!!!! ",
+ " ##### !!!!!!!!!!! #### !!!!!!!!!! !!!!!!! ",
+ " ######## !!!!!!!!! ###### !!!!!! ## !!!!! $$$$$$ ",
+ " ########## !!!!! ######### !!!! #### !! $$$$$$ ",
+ " ############## !!! ############ !! ######## # $$$$$$ ",
+ " ################ ############## ########## #### $$$$$$ ",
+ " ################### ################## ############ ##### $$$$$$ ",
+ " ##################### #################### ################ ####### $$$$$$ ",
+ " ############ ########### ########### ########## ################## ########### $$$$$$ ",
+ " ############ ########## ########### ########## #################### ########### $$$$$$ ",
+ " ############ ########## ########### ########### ########## ########### ########### $$$$$$ ",
+ " ############ ########### ########## # ########## ########### ########### ########### $$$$$$ ",
+ " ########### ########## ########### # ########## ########## ########## ########## $$$$$$ ",
+ " ######### ########## ########### ########## ########## ########### ########### $$$$$$ ",
+ " ###### ########## ########### ########### ########### ########### ########### $$$$$$ ",
+ " %%%%%%% ##### ########### ########### ########## ########### ########## ########### $$$$$$ ",
+ " %%%%%%% ## ########## ########## ########## ########## ##################### $$$$$$ ",
+ " %%%%%%% ########## ########### ########### ########## ################## $$$$$$ ",
+ " %%%%%%% ########### ########### ##################### ############### $$$$$$ ",
+ " %%%%%%% ##################### ################## ############# $$$$$$ ",
+ " %%%%%%% ################## ################ ########## $$$$$$ ",
+ " %%%%%%% ################ ############## ####### $$$$$$ ",
+ " %%%%%%% ############# ########### ##### $$$$$$ ",
+ " %%%%%%% ########## ######## ## $$$$$$ ",
+ " %%%%%%% ####### ###### $$$$$$ ",
+ " %%%%%%% ##### &&&&&&& ### &&&&&&&&& $$$$$$ ",
+ " %%%%%%% &&&&&&& ### &&&&&&&&& &&&&&&&&&&& &&&&&&&&&&&&& $$$$$$ ",
+ " %%%%%%% &&&&&&&&&& &&&&&&&&&&&& &&&&&&&&&&&&&& &&&&&&&&&&&&&&& $$$$$$ ",
+ " %%%%%%% &&&&&&&&&&&&& &&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&& $$$$$$ ",
+ " %%%%%%% &&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&&& $$$$$$ ",
+ " %%%%%%% &&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&&&&& $$$$$$ ",
+ " %%%%%%% &&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&& &&&&&&&&&& &&&&&&&&&&&& &&&&&&&&& $$$$$$ ",
+ " %%%%%%% &&&&&&&&&&&& &&&&&&&&&& &&&&&&&&&&& &&&&&&&&& &&&&&&&&&&& &&&&&&&& &&&&&&&&&&& &&&&&&&& & $$$$$$ ",
+ " %%%%%%% &&&&&&&&&&& &&&&&&&&& &&&&&&&&&& &&&&&&&& &&&&&&&&&& &&&&&&&& &&&&&&&&&& &&&&&&&& &&& $$$$$$ ",
+ " %%%%%%% &&&&&&&&&& &&&&&&&& &&&&&&&&&&& &&&&&&&& &&&&&&&&&& &&&&&&&& &&&&&&&&&&& &&&&&&&& &&&&& $$$$$$ ",
+ " %%%%%% &&&&&&& &&&&&&&& &&&&&&&&&& &&&&&&&& &&&&&&&&&&& &&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&& $$$$$$ ",
+ " %%%%%% &&&&& &&&&&&&&& &&&&&&&&&&& &&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&& $$$$$$ ",
+ " %%%%%% &&& &&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&& $$$$$$ ",
+ " %%%%%% & &&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&& &&&&&&&&&&&&& $$$$$$ ",
+ " %%%%%% &&&&&&&&&&&&&&& &&&&&&&&&&&&&& &&&&&&&&&&&& &&&&&&&&&&& $$$$$$ ",
+ " %%%%%% &&&&&&&&&&&&& &&&&&&&&&&&& &&&&&&&&&& &&&&&&& $$$$$$ ",
+ " %%%%%% &&&&&&&&& &&&&&&&& &&&& & $$$$$$ ",
+ " %%%%%% &&&&& & '''''''''' $$$$$$ ",
+ " %%%%%% '''''''''' $$$$$$ ",
+ " %%%%%% '''''''''' $$$$$$ ",
+ " %%%%%% '''''''''' $$$$$$ ",
+ " %%%%%% '''''''''' $$$$$$ ",
+ " %%%%%% ''''''''''''''''''''''''''' $$$$$$ ",
+ " %%%%%% ''''''''''''''''''''''''''' $$$$$$ ",
+ " %%%%%% ( ((((((( ''''''''''''''''''''''''''' $$$$$$ ",
+ " %%%%%% ((((((( ((((((((( ((((((((((( ''''''''''''''''''''''''''' $$$$$$ ",
+ " %%%%%% ((((((((( (((((((((((( ((((((((((((( ((((((((((((((( ''''''''''''''''''''''''''' $$$$$$ ",
+ " %%%%%% ((((((((((((( (((((((((((((( (((((((((((((((( (((((((((((((((((( ''''''''''''''''''''''''''' $$$$$$ ",
+ " %%%%%% (((((((((((((((( ((((((((((((((((( (((((((((((((((((( ((((((((((((((((((( ' $$$$$$ ",
+ " %%%%%% (((((((((((((((((( (((((((((((((((((((( (((((((((((((((((((( ((((((((((((((((((((( '' $$$$$$ ",
+ " %%%%%% ((((((((((((((((((((( ((((((((((((((((((((( (((((((((((((((((((((( (((((((((((( ((((((((( $$$$$$ ",
+ " % %%%%%% (((((((((((((((((((((( (((((((((((( (((((((( ((((((((((( ((((((((( (((((((((( (((((((( $$$$$$ ",
+ " %%%%%% ((((((((((( (((((((( (((((((((( (((((((( ((((((((((( ((((((( (((((((((( (((((((( ((( $$$$$$ ",
+ " %%%%%% (((((((((( (((((((( (((((((((( (((((((( (((((((((( (((((((( (((((((((( (((((((( ((((( $$$$$$ ",
+ " %%%%%% ((((((((( ((((((( (((((((((( (((((((( (((((((((( ((((((((( ((((((((((( ((((((((((((((((( $$$$$$ ",
+ " %%%%%% (((((( ((((((((( ((((((((((( ((((((((((((((((((((( (((((((((((((((((((( ((((((((((((((((( $$$$$$ ",
+ " %%%%%% (((( (((((((((((((((((((( (((((((((((((((((( ((((((((((((((((( ((((((((((((((((( $$$$$$ ",
+ " %%%%%% (( (((((((((((((((((( (((((((((((((((((( (((((((((((((((( ((((((((((((((( $$$$$$ ",
+ " %%%%%% ((((((((((((((((()) ((((((((((((((( (((((((((((((( ((((((((((( $$$$$$ ",
+ " %%%%%% ((((((((((((( )))) (((((((((((( (((((((((( * ((((((((( $$$$$$ ",
+ " %%%%%% ((((((((((( )))))) +++++ ((((((((( ((((((( ********************** ((( $$$$$$ ",
+ " %%%%%% (((((((( )))))))) +++++++ (((( ( ************************************* $$$$$$ ",
+ " %%%%%% ( )))))))))) ++++++ , *************************************** $$$$$$ ",
+ " %%%%%% )))))))))) ++++++ ,,,,,,, **************************************** $$$$$$ ",
+ " %%%%%% ))))))))))) ++++++ ,,,,,,, ------------------------ ****************************************** $$$$$$$ ",
+ " %%%%%% ))))))))))) ++++++ ,,,,,, ----------------------------- ******************************************* $$$$$$ $ ",
+ " %%%%%% )))))))))) +++++++ ,,,,,, ----------------------------- *************************** $$$$$$ ",
+ " %%%%%% ))))))))))) +++++++ ,,,,,, ----------------------------- ********* $$$$$$ ",
+ " %%%%%% ))))))))))) ++++++ ,,,,,, ----------------------------- ********* $$$$$$ ",
+ " %%%%%% )))))))))) ++++++ ,,,,,,, ----------------------------- ******* $$$$$$ ",
+ " %%%%%% ))))))))))) ++++++ ,,,,,,, - -------------- ******** $$$$$$ ",
+ " %%%%%% ))))))))))) ++++++ ,,,,,,, -- ............... ******* $$$$$$ ",
+ " %%%%%% )))))))))) ++++++++ ,,,,,, ...................................... ****** $$$$$$ ",
+ " %%%%%% ))))))))))) ++++++++ ,,,,,, ........................................... ****** $$$$$$ ",
+ " %%%%%% ))))))))))) ++++++ ,,,,,, ............................................ ****** $$$$$$ ",
+ " %%%%%% )))))))))) ++++++ ,,,,,, ............................................. ******* $$$$$$ ",
+ " %%%%%% ))))))))))) ++++++ ,,,,,,, ............................................. ******* $$$$$$ ",
+ " %%%%%% ))))))))))) ++++++ ,,,,,,, ............................................ ******* $$$$$$ ",
+ " %%%%%% )))))))))) //// +++++++ ,,,,,, ............ ******* $$$$$$ ",
+ " %%%%%% ))))))))))) //////////// +++++++ ,,,,,, ....... ******* $$$$$$ ",
+ " %%%%%% )))))))))) ) //////////////////// +++++++ ,,,,,, ....... ******* $$$$$$ ",
+ " %%%%%% )))))))))) )) //////////////////////// ++++++ ,,,,,, ...... ****** $$$$$$ ",
+ " %%%%%% ))))))))))) /////////////////////////// ++++++ ,,,,,, ...... ****** $$$$$$ ",
+ " %%%%%% )))))))))) //////////////////////////// ++++++ ,,,,,,, ...... ****** $$$$$$ ",
+ " %%%%%% )))))))))) ///////////////////////////////++++++ ,,,,,,, ...... 00000000000000000000000000000 ****** $$$$$$ ",
+ " %%%%%% ))))))))))) /////////// //////////////+++++++,,,,,, ....... 00000000000000000000000000000 ****** $$$$$$ ",
+ " %%%%%% )))))))))) ////////// ////////+++++++,,,,,, ....... 00000000000000000000000000000 ****** $$$$$$ ",
+ " %%%%%% )))))))))) /////////// ///////++++ ,,,,,, ....... 00000000000000000000000000000 ****** $$$$$$ ",
+ " %%%%%% )))))))))) /////////// //////// ,,,,,, ...... 00000000000000000000000000000 ******* $$$$$$ ",
+ " %%%%%% ))))))) ////////// //////// ,,,,,,, ...... 00000000000000000000000000000 ******* $$$$$$ ",
+ " %%%%%% ))))) ///////// /////// ,,,,,,, ...... 000000000000000000 ****** $$$$$$ ",
+ " %%%%%% )))) //////// //////// ,,,,,,, ...... 00 ******* $$$$$$ ",
+ " %%%%%% ) /////// ////////,,,,,, ...... ******* $$$$$$ ",
+ " %%%%%% /////// //////// ,,,, ...... *** ******* $$$$$$ ",
+ " %%%%%% /////// //////// ...... ***************************** *************** $$$$$$ ",
+ " %%%%%% /////// //////// ...... ********************************************** $$$$$$ ",
+ " %%%%%% ////// ///// ....... ********************************************** $$$$$$ ",
+ " %%%%%% ////// ////// ....... ********************************************* $$$$$$ ",
+ " %%%%%% ////// ////// ...... ******************************************** $$$$$$ ",
+ " %%%%%% /////// ////// ...... ******************************************* $$$$$$ ",
+ " %%%%%% /////// ////// ........ *************** $$$$$$ ",
+ " %%%%%% ////// ////// ....... $$$$$$ ",
+ " %%%%%% ////// /////// ........ $$$$$$ ",
+ " %%%%%% ////// /////// ....... $$$$$$ ",
+ " %%%%%% ////// ////// ......... $$$$$$ ",
+ " %%%%%% /////// ////// .......... .................................. $$$$$$ ",
+ " %%%%%% /////// ////// ............................................ $$$$$$ ",
+ " %%%%%% /////// ////// ............................................ $$$$$$ ",
+ " %%%%%% //////// /////// ........................................... $$$$$$ ",
+ " %%%%%% //////// /////// ......................................... $$$$$$ ",
+ " %%%%%% //////// ////// ....................................... $$$$$$ ",
+ " %%%%%% //////// ////// .................................... $$$$$$ ",
+ " //////// /////// $$$$$$ ",
+ " //////// ///////// $$$$$$ ",
+ " /////// ////////// ",
+ " //////// ////////// ",
+ " //////// /////////// ",
+ " //////// /////////// ",
+ " /////////// ////////// ",
+ " ///////////////// /////////// 1 1 11111111111111111111111111 ",
+ " ////////////////////////////// 11111111111111111111111111111111111111111111111111 ",
+ " /////////////////////////// 11111111111111111111111111111111111111111111111111 ",
+ " ////////////////////////// 11111111111111111111111111111111111111111111111111 ",
+ " //////////////////////// 11111111111111111111111111111111111111111111111111 ",
+ " //////////////// 11111111111111111111111111111111111111111111111111 ",
+ " ///////// 11111111111111111111111111111111111111 ",
+ " / 11 ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/text-halign-adjust-multiline-800-800-1.0-grid-reference.json b/tests/visual_tests/grids/text-halign-adjust-multiline-800-800-1.0-grid-reference.json
new file mode 100644
index 000000000..0633eff75
--- /dev/null
+++ b/tests/visual_tests/grids/text-halign-adjust-multiline-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 0 +++ $$$$ ",
+ " %%%% )))))) ////// ///////// *** ,,, ... 00 00 0 0 0 00 0 ++++ $$$$ ",
+ " %%%%% ))))) ///// // //// *** ,,,,,, ... 00 0 0 0 0 0 0 ++++ $$$$ ",
+ " %%%% )))))) ) ////// / ///// *** ,,,,, ... 00000000000000000000000000000 ++++ $$$$ ",
+ " %%%% )))))) ) ////// / //// *** ,,,, ... 00000000000000000000000000000 +++ $$$$ ",
+ " %%%% ))))) ///// / //// / ,,, ... 00000000000000000000000000000 +++++ $$$$ ",
+ " %%%% ))))) ////// //// / ,,,, ... 00 0 0 0 0 0 00 0 +++ $$$$ ",
+ " %%%% ))) ////// ///// ,,, ... 00 0 +++ $$$$$ ",
+ " %%% )) //// ///// ,,,, ... ++++ $$$$$$ ",
+ " %%%%% /// //// ,,,, ... ++++ $$$$ ",
+ " %%% /// //// ,,, ... + +++ $$$$ ",
+ " %%% / /// ///// ... ++ ++++ $$$$ ",
+ " %%% /// //// .... ++++++++++++++++ +++ + ++++ $$$$$ ",
+ " %%% //// /// ... ++++++++++++++++++++++++++++++++++++++++++++ $$$$$ ",
+ " %%% //// /// ... +++++++++++++++++++++++++++++++++++++++++++ $$$$ ",
+ " %%%%% /// //// ... + ++ +++++++++++++++++++++++++++++++++ $$$$ ",
+ " %%% ////// //// ... + + + + $$$$ ",
+ " %%% /// ///// .... + $$$$ ",
+ " %%% /// ///// .... $$$$ ",
+ " %%% //// /// .... $$$$ ",
+ " %%% //// /// ..... $$$$ ",
+ " %%% /// /// .... $$$$ ",
+ " %%% /// //// ..... . .. $$$$ ",
+ " %%% /// //// ...... .. $$$$ ",
+ " %%% /// /// .......................................... $$$$ ",
+ " %%% //// /// ........................................ $$$$ ",
+ " %%% //// /// ....................................... $$$$ ",
+ " %%%%% / //// /// . . $$$$ ",
+ " %%%%% //// /// . $$$$$ ",
+ " //// //// $$$$ ",
+ " //// / ///// $$$$ ",
+ " ////// ///// ",
+ " //// ////// ",
+ " //// /////// ",
+ " //// ///// ",
+ " ///// ////// ",
+ " ///// // ////// 1 1 1 11 11 ",
+ " /////////// / ///// 11 1 1 1 11 1 ",
+ " /////////////////////// 11111111111111111111111111111111111111111111111111 ",
+ " ///////////////////// 11111111111111111111111111111111111111111111111111 ",
+ " //////////// 11111111111111111111111111111111111111111111111111 ",
+ " //// 1111111111 1 1 1 1 1 ",
+ " / 11 11 1 ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/grids/text-halign-adjust-multiline-800-800-2.0-grid-reference.json b/tests/visual_tests/grids/text-halign-adjust-multiline-800-800-2.0-grid-reference.json
new file mode 100644
index 000000000..4ddaa7136
--- /dev/null
+++ b/tests/visual_tests/grids/text-halign-adjust-multiline-800-800-2.0-grid-reference.json
@@ -0,0 +1,224 @@
+{
+ "keys": [
+ "",
+ "9",
+ "8",
+ "4",
+ "5",
+ "7",
+ "16",
+ "6",
+ "10",
+ "2",
+ "12",
+ "13",
+ "14",
+ "11",
+ "3",
+ "15",
+ "1"
+ ],
+ "data": {},
+ "grid": [
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " !!!! !!! ",
+ " !!!!!! !! ! ! ",
+ " !!!!!!!!! !!!!! ! !!! ",
+ " !!!!!!!!!!! !!!!!!! ! !!!!! ",
+ " !!!!!!!!!!!!!!! !!!!!!!!!!!! !!!!!!! ",
+ " !!!!!!!!!!!!!!!!!! ! !!!!!!!!!!!!! !!!!!!!!!! !! ",
+ " !!!!!!!!!!!!!!!!!!!! ! !!!!!!!!!!!!!!! !!!!!!!!!!!!! !!!! ",
+ " !!!!!!!!!!!! !!!!!!!!!! !!! !!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!! !!!!!! ",
+ " !!!!!!!!!!!! !!!!!!!!!!! !! ! !!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!! !!!!!!!!! ",
+ " !!!!!!!!!!!! !!!!!!!!!! !!! ! !!!!!!!!!!! !!!!!!!!!! !!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!! ",
+ " !!!!!!!!!!! !!!!!!!!!!!! ! !!!!!!!!!!!! !!!!!!!!!! !!!!!!!!!!! !!!!!!!!!!! !!!!!!!!!!!! ! ",
+ " !!!!!!!!!!!! !!!!!!!!!!!!! !!!!!!!!!!! !!!!!!!!!!! !!!!!!!!!!! ! !!!!!!!!!! ! !!!!!!!!!!!!! !! ",
+ " !!!!!!!!!!! ! !!!!!!!!!!! !!!!!!!!!!! !!!!!!!!!! ! !!!!!!!!!! !! !!!!!!!!!! !! !!!!!!!!!!! !!! ",
+ " !!!!!!!!!!! ! !!!!!!!!!!! !!!!!!!!!!!! !!!!!!!!!! !! !!!!!!!!!!! !!!!!!!!!! !! !!!!!!!!!! ",
+ " !!!!!!!!! !!! !!!!!!!!!! !!!!!!!!!!! !!! !!!!!!!!!!! ! ! !!!!!!!!!!! !!!!!!!!!!!! !!!!!!!!!!! ",
+ " !!!!!!! ! ! !!!!!!!!!! !!!!!!!!!!! !!!!!!!!!!! ! !!!!!!!!!! !!!!!!!!!! !!!!!!!!!!! ",
+ " !!!!! !! !!!!!!!!!! !!!!!!!!!! !!!!!!!!!! !!!!!!!!!!!! !!!!!!!!!! !!!!!!!!!! ",
+ " !!! ! !!!!!!!!!! !!!!!!!!!!! !!!!!!!!!!! !!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!! ",
+ " ! ! !!!!!!!!!! !!!!!!!!!!! !! !!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!! ",
+ " ! !!!!!!!!!!!!!!!!!!! ! !!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!! ",
+ " !!!!!!!!!!!!!!!! !!!!!!!!!!!!!!! !!!!!!!!!!!!! ",
+ " ## !!!!!!!!!!!!! # !!!!!!!!!!!! ! !!!!!!!!!!! ",
+ " ##### !!!!!!!!!!! #### !!!!!!!!!! ! !!!!!!! ",
+ " ######## !!!!!!!!! ###### !!!!!! ## !!!!! $$$$$$$ $ ",
+ " ########## !!!!! ######### !!!! #### !! ! $$$$$$$ $ ",
+ " ############## !!! ############ !! ######## ! ! # $$$$$$$ $ ",
+ " ################ ! ############## ########## #### $$$$$$$$$ ",
+ " ################### ! ################## ############ ##### $$$$$$ ",
+ " ##################### #################### ################ ####### $$$$$$ ",
+ " ############ ########### ########### ########## ################## ########## $$$$$$ ",
+ " ############ ########## ########### ########## #################### ########### $$$$$$ ",
+ " ############ ########## ########### ########### ########## ########### ########### $$$$$$ ",
+ " ############ ########### ########## ########## ########### ########### ########### $$$$$$ ",
+ " ########### ########## ########### ########## ########## ########## ########## $$$$$$ ",
+ " ######### ########## ########### ########## ########## ########### ########### $$$$$$ ",
+ " ###### ########## ########### ########### ########### ########### ########### $$$$$$ ",
+ " %%%%%%% ##### ########### ########### ########## ########### ########## ########### $$$$$$ ",
+ " %%%%%%% ## ########## ########## ########## ########## ##################### $$$$$$ ",
+ " %%%%%%% ########## ########### ########### ########## ################## $$$$$$$$$ ",
+ " %%%%%%% ########### ########### ##################### ############### $$$$$$ ",
+ " %%%%%%% ##################### ################## ############# $$$$$$ ",
+ " %%%%%%%%% ################## ################ ########## $$$$$$$$$ ",
+ " %%%%%%% ################ ############## ####### $$$$$$ ",
+ " %%%%%%% ############# ########### ##### $ $$$$$$ ",
+ " %%%%%%%%% ########## & ######## && ## $ $$$$$$ ",
+ " %%%%%%% ####### & & ###### && $ $$$$$$ ",
+ " %%%%%%% #####& & & &&&&&&& ### && &&&&&&&&& $$$$$$ ",
+ " %%%%%%%%% &&&&&&& ### &&&&&&&&& & &&&&&&&&&&& &&&&&&&&&&&&& $$$$$$ ",
+ " %%%%%%% &&&&&&&&&& &&&&&&&&&&&& &&&&&&&&&&&&&& &&&&&&&&&&&&&&& $$$$$$ ",
+ " %%%%%%% &&&&&&&&&&&&& &&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&& $$$$$$ ",
+ " %%%%%%% &&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&& && &&&&&&&&&&&&&&&&&&&& $$$$$$ ",
+ " %%%%%%% &&&&&&&&&&&&&&&&&&& && &&&&&&&&&&&&&&&&&&&& & &&&&&&&&&&&&&&&&&&&&& & & &&&&&&&&&&&&&&&&&&&&&& $$$$$$ ",
+ " %%%%%%% &&&&&&&&&&&&&&&&&&&&&&&& & &&&&&&&&&&&&&&&&&&&&&& && &&&&&&&&&&&&& &&&&&&&&&& & &&&&&&&&&&&& &&&&&&&&& $$$$$$ ",
+ " %%%%%%% &&&&&&&&&&&& &&&&&&&&&&& & &&&&&&&&&&& &&&&&&&&&& &&&&&&&&&&& &&&&&&&&& &&&&&&&&&&& &&&&&&&&& & $$$$$$ ",
+ " %%%%%%% &&&&&&&&&&& &&&&&&&&&&& &&&&&&&&&& &&&&&&&& &&&&&&&&&& &&&&&&&& &&&&&&&&&& && &&&&&&&& && $$$$$$$$$ ",
+ " %%%%%%% &&&&&&&&&&& &&&&&&&&& &&&&&&&&&&& &&&&&&&& &&&&&&&&&& &&&&&&&& &&&&&&&&&&& & &&&&&&&& &&&&& $$$$$$ ",
+ " %%%%%% &&&&&&& & &&&&&&&& &&&&&&&&&& & &&&&&&&& &&&&&&&&&&& &&&&&&&&&&&&&&&&&&&&& && &&&&&&&&&&&&&&&& $$$$$$ ",
+ " %%%%%%%%% &&&&&&& & &&&&&&&&& &&&&&&&&&&& & &&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&& & &&&&&&&&&&&&&&&&&& $ $$$$$$$ ",
+ " % %%%%%%% &&& & &&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&& && && &&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&& $ $$$$$$$ ",
+ " % %%%%%%%%% &&& &&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&& &&&&&&&&&&&&&&& &&&&&&&&&&&&& & $$ $$$$$$ ",
+ " %%%%%%%%%% % & &&&&&&&&&&&&&&& &&&&&&&&&&&&&& &&&&&&&&&&&& & &&&&&&&&&&& & & $$$$$$ ",
+ " %%%%%%%%% &&&&&&&&&&&&& & &&&&&&&&&&&& &&&&&&&&&& & &&&&&&& &&& $$$$$$ ",
+ " %%%%%%% & &&&&&&&&& & &&&&&&&& &&&& & $$$$$$ ",
+ " %%%%%% & &&&&&& & & '''''''''' $$$$$$ ",
+ " %%%%%% &&&& '''''''''' $$$$$$ ",
+ " %%%%%% & '''''''''' $$$$$$ ",
+ " %%%%%% '''''''''' $$$$$$$$$ ",
+ " %%%%%% '''''''''' $$$$$$ ",
+ " %%%%%% ''''''''''''''''''''''''''' $$$$$$ ",
+ " %%%%%% ''''''''''''''''''''''''''' $$$$$$ ",
+ " %%%%%% ( ((((((( ''''''''''''''''''''''''''' $$$$$$ ",
+ " %%%%%%%%% ((((((( ((((((((( ((((((((((( '''''''''''''''''''''''''''$$$$$$$$ ",
+ " %%%%%%%%% ((((((((( (((((((((((( ((((((((((((( ((((((((((((((( ''''''''''''''''''''''''''' $$$$$$ ",
+ " %%%%%% % ((((((((((((( (((((((((((((( (((((((((((((((( (((((((((((((((((( ''''''''''''''''''''''''''' $$$$$$ ",
+ " %%%%%% % (((((((((((((((( ((((((((((((((((( (((((((((((((((((( ((((((((((((((((((( $$$$$$$$$ ",
+ " %%%%%%%%%%% (((((((((((((((((( (((((((((((((((((((( (((((((((((((((((((( ((((((((((((((((((((( $$$$$$ ",
+ " %%%%%% ((((((((((((((((((((( ((((((((((((((((((((( (((((((((((((((((((((( (((((((((((( ((((((((( $$$$$$ ",
+ " %%%%%% (((((((((((((((((((((( (((((((((((( (((((((( ((((((((((( ((((((((( (((((((((( (((((((( $$$$$$ ",
+ " %%%%%% ((((((((((( (((((((( (((((((((( (((((((( ((((((((((( ((((((( (((((((((( (((((((( (( $$$$$$$$$ ",
+ " %%%%%% (((((((((( (((((((( (((((((((( (((((((( (((((((((( (((((((( (((((((((( (((((((( ((((( $$$$$$ ",
+ " %%%%%% ((((((((( ((((((( (((((((((( (((((((( (((((((((( ((((((((( ((((((((((( ((((((((((((((((( $$$$$$ ",
+ " %%%%%%%%% (((((( ((((((((( ((((((((((( ((((((((((((((((((((( (((((((((((((((((((( (((((((((((((((( $$$$$$ ",
+ " % %%%%%% (((( (((((((((((((((((((( (((((((((((((((((( ((((((((((((((((( ((((((((((((((((( $$$$$$ ",
+ " % %%%%%% (( (((((((((((((((((( (((((((((((((((( (((((((((((((((( )))) ((((((((((((((( $$$$$$ ",
+ " %%%%%% (((((((((((((((((** ((((((((((((((( (((((((((((((( ) )(()(((((((( $$$$$$ ",
+ " %%%%%% ((((((((((((( **** (((((((((((( (((((((((( ) )))) ) ()((((((( ) $$$$$$ ",
+ " %%%%%%%%% ((((((((((( ****** +++++ ((((((((( ((((((( )))))))))))))))))))))) ) ((( ) $ $$$$$$$$$ ",
+ " %%%%%% (((((((( ******** +++++++ (((( ( ))))))))))))))))))))))))))))))))))))) $$$$$$ ",
+ " %%%%%% (* ********** ++++++ , ))))))))))))))))))))))))))))))))))))))) $$$$$$ ",
+ " %%%%%% ************ ++++++ ,,,,,,, )))))))))))))))))))))))))))))))))))))))) $$$$$$ ",
+ " %%%%%% ** ************ * ++++++ ,,,,,,, ------------------------ )))))))))))))))))))))))))))))))))))))))))) $$$$$$ $ ",
+ " %%%%%% * ************** * ++++++ ,,,,,, ----------------------------- ))))))))))))))))))))))))))))))))))))))))))) $$$$$$ $ ",
+ " %%%%%% ** ********** *** +++++++ ,,,,,, ----------------------------- ) ))))))))))))))))))))))))))) $$$$$$$$ ",
+ " %%%%%%%%% * *********** +++++++ ,,,,,, ----------------------------- ) ))) ))))))))) ) $$$$$$ ",
+ " %%%%%% * *********** * ++++++ ,,,,,, ----------------------------- )) )))))))))) $$$$$$ ",
+ " %%%%%% * ************* * ++++++ ,,,,,,, ----------------------------- )) )))) ))))))) $$$$$$ ",
+ " %%%%%%%%% ** ** *********** * ++++++ ,,,,,,, -------------- ) )))))))) $$$$$$ ",
+ " %%%%%% ************ * ++++++ ,,,,,,, ............... ))))))) $$$$$$ ",
+ " %%%%%% * ********** * +++++++ ,,,,,, ...................................... ))))))))) $$$$$$ ",
+ " %%%%%%%%% ** ************ * +++++++ ,,,,,, ........................................... ) )))))) $$$$$$$$$$$ ",
+ " %%%%%% * ************ ++++++ ,,,,,, ............................................ )))))) $ $$$$$$ ",
+ " %%%%%% ** * ********** * ++++++ ,,,,,, ............................................. )))))))))) $ $$$$$$ ",
+ " %%%%%% * *********** ++++++ ,,,,,,, ............................................. ) ))))))) $$$$$$$$$ ",
+ " %%%%%%%%% ** ************* ++++++ ,,,,,,, ............................................ ))))))) $$$$$$ ",
+ " %%%%%% *** *********** * //// +++++++ ,,,,,, ............ ))))))) $$$$$$$$$ ",
+ " %%%%%% *** *********** //////////// +++++++ ,,,,,, ....... ))))))) $$$$$$ ",
+ " %%%%%% * ************ ** //////////////////// +++++++ ,,,,,, ....... ))))))))) $$$$$$ ",
+ " %%%%%% ************* ** //////////////////////// ++++++ ,,,,,, ...... )))))) $$$$$$ ",
+ " %%%%%% ************* /////////////////////////// ++++++ ,,,,,, ...... )))))) $$$$$$ ",
+ " %%%%%% %% ********** ** //////////////////////////// ++++++ ,,,,,,, ...... )))))) $$$$$$ ",
+ " %%%%%% %% ********** * ///////////////////////////////++++++ ,,,,,,, ...... 00000000000000000000000000000 )))))) $$$$$$ ",
+ " %%%%%%% *********** * /////////// //////////////+++++++,,,,,, ....... 00000000000000000000000000000 )))))) $$$$$$ ",
+ " %%%%%%% %*********** ** ////////// ////////+++++++,,,,,, ....... 00000000000000000000000000000 )))))) $$$$$$ ",
+ " %%%%%% ********** **** /////////// ///////++++ ,,,,,, ....... 00000000000000000000000000000 ))))))))))) $$$$$$ ",
+ " %%%%%%%%% ********** /////////// //////// ,,,,,, ...... 00000000000000000000000000000 ))))))) $$$$$$$$ ",
+ " %%%%%% ******* * ////////// //////// ,,,,,,, ...... 00000000000000000000000000000 ))))))) $$$ $$$$$$$ ",
+ " %%%%%% ***** * ///////// /////// ,,,,,,, ...... 000000000000000000 )) ) )))))) $$$ $$$$$$$$$$ ",
+ " %%%%%% **** * //////// //////// ,,,,,,, ...... ) ) ))) )))))) $$$$$$$$ $$ ",
+ " %%%%%% ** * /////// ////////,,,,,, ...... ) ) ) ) )))))) ) $$$$$$ $ ",
+ " %%%%%% * /////// //////// ,,,, ...... ))) )))) ) ) )))))))))) $$$$$$$$$ ",
+ " %%%%%% /////// //////// ...... ))))))))))))))))))))))))))))) )))))))))))))))) $$$$$$ ",
+ " %%%%%% ////// //////// ...... )))))))))))))))))))))))))))))))))))))))))))))) $$$$$$ ",
+ " %%%%%%%%%%% ////// ///// ....... )))))))))))))))))))))))))))))))))))))))))))))) $$$$$$ ",
+ " %%%%%% ////// ////// ....... ))))))))))))))))))))))))))))))))))))))))))))) $$$$$$ ",
+ " %%%%%%%%% ////// ////// ...... )))))))))))))))))))))))))))))))))))))))))))) $$$$$$ ",
+ " %%%%%% /////// ////// ...... ))))))))))))))))))))))))))))))))))))))))))) $$$$$$ ",
+ " %%%%%% /////// ////// ...... ) ) ) ))))))))))))))) ) $$$$$$ ",
+ " %%%%%%%%% ////// ////// ....... ) ) ) ) ) ) $$$$$$ ",
+ " %%%%%% ////// /////// ........ ) ) ) ) ) ) $$$$$$ ",
+ " %%%%%% ////// /////// ....... $$$$$$ ",
+ " %%%%%% ////// ////// ......... $$$$$$ ",
+ " %%%%%% /////// ////// .......... .................................. $$$$$$ ",
+ " %%%%%% /////// ////// ............................................ $$$$$$$$$ ",
+ " %%%%%% /////// ////// ............................................ $$$$$$ ",
+ " %%%%%% //////// /////// ........................................... $$$$$$$$$ ",
+ " %%%%%% //////// /////// ......................................... $$$$$$ ",
+ " %%%%%% //////// ////// ....................................... $$$$$$ ",
+ " %%%%%% //////// ////// .................................... $$$$$$$$$ ",
+ " %%%% //////// /////// $$$$$$ ",
+ " % % % //////// ///////// $$$$$$ ",
+ " % % % /////// ////////// ",
+ " %%% //////// ////////// 1 1 1 1 ",
+ " //////// /////////// 11 111 1 1 111 111 ",
+ " //////// /////////// 1 1 11 1 1 1 1 1 1 ",
+ " /////////// ////////// 11 1 1 1 1 1 111 1 ",
+ " ///////////////// /////////// 11111 1 1 1 11111111111111111111111111 ",
+ " ////////////////////////////// 11111111111111111111111111111111111111111111111111 ",
+ " /////////////////////////// 11111111111111111111111111111111111111111111111111 ",
+ " ////////////////////////// 11111111111111111111111111111111111111111111111111 ",
+ " //////////////////////// 11111111111111111111111111111111111111111111111111 ",
+ " //////////////// 11111111111111111111111111111111111111111111111111 ",
+ " ///////// 11111111111111111111111111111111111111 1 1 1111 ",
+ " / 1 1 1 1 1 1 1 1 1 1 1 1 1 ",
+ " 1 1 1 1 1 1 1 1 1 1 1 1 1111 ",
+ " 1 1 1 111 1 11 ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " "
+ ]
+}
\ No newline at end of file
diff --git a/tests/visual_tests/images/text-halign-adjust-800-800-1.0-agg-reference.png b/tests/visual_tests/images/text-halign-adjust-800-800-1.0-agg-reference.png
new file mode 100644
index 000000000..7e45d2c0e
Binary files /dev/null and b/tests/visual_tests/images/text-halign-adjust-800-800-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/text-halign-adjust-800-800-1.0-cairo-reference.png b/tests/visual_tests/images/text-halign-adjust-800-800-1.0-cairo-reference.png
new file mode 100644
index 000000000..6a375b551
Binary files /dev/null and b/tests/visual_tests/images/text-halign-adjust-800-800-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/text-halign-adjust-800-800-2.0-agg-reference.png b/tests/visual_tests/images/text-halign-adjust-800-800-2.0-agg-reference.png
new file mode 100644
index 000000000..58dc1202f
Binary files /dev/null and b/tests/visual_tests/images/text-halign-adjust-800-800-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/text-halign-adjust-800-800-2.0-cairo-reference.png b/tests/visual_tests/images/text-halign-adjust-800-800-2.0-cairo-reference.png
new file mode 100644
index 000000000..42d0184df
Binary files /dev/null and b/tests/visual_tests/images/text-halign-adjust-800-800-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/text-halign-adjust-multiline-800-800-1.0-agg-reference.png b/tests/visual_tests/images/text-halign-adjust-multiline-800-800-1.0-agg-reference.png
new file mode 100644
index 000000000..491d4f13c
Binary files /dev/null and b/tests/visual_tests/images/text-halign-adjust-multiline-800-800-1.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/text-halign-adjust-multiline-800-800-1.0-cairo-reference.png b/tests/visual_tests/images/text-halign-adjust-multiline-800-800-1.0-cairo-reference.png
new file mode 100644
index 000000000..c79822c64
Binary files /dev/null and b/tests/visual_tests/images/text-halign-adjust-multiline-800-800-1.0-cairo-reference.png differ
diff --git a/tests/visual_tests/images/text-halign-adjust-multiline-800-800-2.0-agg-reference.png b/tests/visual_tests/images/text-halign-adjust-multiline-800-800-2.0-agg-reference.png
new file mode 100644
index 000000000..177ec6cd7
Binary files /dev/null and b/tests/visual_tests/images/text-halign-adjust-multiline-800-800-2.0-agg-reference.png differ
diff --git a/tests/visual_tests/images/text-halign-adjust-multiline-800-800-2.0-cairo-reference.png b/tests/visual_tests/images/text-halign-adjust-multiline-800-800-2.0-cairo-reference.png
new file mode 100644
index 000000000..6afdaa9aa
Binary files /dev/null and b/tests/visual_tests/images/text-halign-adjust-multiline-800-800-2.0-cairo-reference.png differ
diff --git a/tests/visual_tests/styles/text-halign-adjust-multiline.xml b/tests/visual_tests/styles/text-halign-adjust-multiline.xml
new file mode 100644
index 000000000..0654bb1dd
--- /dev/null
+++ b/tests/visual_tests/styles/text-halign-adjust-multiline.xml
@@ -0,0 +1,30 @@
+
+
+
+
diff --git a/tests/visual_tests/styles/text-halign-adjust.xml b/tests/visual_tests/styles/text-halign-adjust.xml
new file mode 100644
index 000000000..039f760bd
--- /dev/null
+++ b/tests/visual_tests/styles/text-halign-adjust.xml
@@ -0,0 +1,30 @@
+
+
+
+
diff --git a/tests/visual_tests/test.py b/tests/visual_tests/test.py
index 36bc4f73a..3e9d6f0ac 100755
--- a/tests/visual_tests/test.py
+++ b/tests/visual_tests/test.py
@@ -182,6 +182,8 @@ files = {
'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},
+ 'text-halign-adjust': {'sizes': [(800,800)], 'bbox': default_text_box},
+ 'text-halign-adjust-multiline': {'sizes': [(800,800)], 'bbox': default_text_box},
'text-malayalam': {'sizes': [(800, 100)], 'bbox': default_text_box},
'text-bengali': {'sizes': [(800, 100)], 'bbox': default_text_box},
'text-font-features': {'sizes': [(500, 500)]},