[Bf-blender-cvs] [d81aeb60fe7] blender2.8: Fix for text alignment on multiple text boxes

Dalai Felinto noreply at git.blender.org
Wed Sep 5 15:06:01 CEST 2018


Commit: d81aeb60fe7518fcd8d94975a8df4322b501d01a
Author: Dalai Felinto
Date:   Wed Sep 5 10:01:08 2018 -0300
Branches: blender2.8
https://developer.blender.org/rBd81aeb60fe7518fcd8d94975a8df4322b501d01a

Fix for text alignment on multiple text boxes

The original code was already making a distinction between lines in the last
text box and all lines. However I removed that bit since when I tested the
values were the same (I tested with a single text box).

Bringing this distinction back.

Not addressed here: All boxes should respect the alignment. Which at the moment
they don't seem to fully do.

===================================================================

M	source/blender/blenkernel/intern/font.c

===================================================================

diff --git a/source/blender/blenkernel/intern/font.c b/source/blender/blenkernel/intern/font.c
index 31de8d8d51e..1ed386f1447 100644
--- a/source/blender/blenkernel/intern/font.c
+++ b/source/blender/blenkernel/intern/font.c
@@ -1037,8 +1037,19 @@ makebreak:
 		if (tb_scale.h != 0.0f) {
 			if (i_textbox < slen) {
 				/* All previous textboxes are 'full', only align the last used text-box. */
-				struct CharTrans *ct_textbox = chartransdata + i_textbox;
+				struct CharTrans *ct_last, *ct_textbox;
 				float yoff = 0.0f;
+				int lines;
+
+				ct_last = chartransdata + slen - 1;
+				ct_textbox = chartransdata + i_textbox;
+
+				/* Do not use `lnr`. `lnr` correspond to all the text's lines.
+				 * While `lines` is only for the ones from the last text box. */
+				lines = ct_last->linenr - ct_textbox->linenr + 1;
+				if (mem[slen - 1] == '\n') {
+					lines++;
+				}
 
 				/* The initial Y origin of the textbox is harcoded to 1.0f * text scale. */
 				const float textbox_y_origin = 1.0f;
@@ -1050,14 +1061,14 @@ makebreak:
 						yoff = textbox_y_origin - ASCENT(vfd);
 						break;
 					case CU_ALIGN_Y_CENTER:
-						yoff = ((((vfd->em_height + (lnr - 1) * linedist) * 0.5f) - ASCENT(vfd)) -
+						yoff = ((((vfd->em_height + (lines - 1) * linedist) * 0.5f) - ASCENT(vfd)) -
 						        (tb_scale.h  * 0.5f) + textbox_y_origin);
 						break;
 					case CU_ALIGN_Y_BOTTOM_BASELINE:
-						yoff = textbox_y_origin + ((lnr - 1) * linedist) - tb_scale.h;
+						yoff = textbox_y_origin + ((lines - 1) * linedist) - tb_scale.h;
 						break;
 					case CU_ALIGN_Y_BOTTOM:
-						yoff = textbox_y_origin + ((lnr - 1) * linedist) - tb_scale.h + DESCENT(vfd);
+						yoff = textbox_y_origin + ((lines - 1) * linedist) - tb_scale.h + DESCENT(vfd);
 						break;
 				}



More information about the Bf-blender-cvs mailing list