Vertical text alignment and positioning fix #670
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Before fix:
The vertical text is being drawn off-screen. Note the boxes (from measuring the string) for vertical left-to-right are correct, hence no test failures.
GdipAddPathString()
has much the same issue, so I've added a test there that has vertical text to detect the incorrect drawing location (fails without fix). I've also added tests for alignment when drawing at a point instead of in a box, and drawing with both vertical and right-to-left (which fail without the fix).Here's a screenshot with only the changes to
pango_DrawString
applied, fixing the drawing location:On vertical text the alignment is opposite what it should be, and on right-to-left it is also significantly offset horizontally. Hence there are also changes dealing with alignment.
With all changes:
.Net / Windows 8.1 as a comparison:
Test application: text-align.txt
Compiles with
mcs -r:System.Windows.Forms,System.Drawing text-align.txt -unsafe
Furthermore, as
gdip_pango_setup_layout
transforms the Cairo context on vertical text,GdipAddPathString()
wasn't getting the correct path points. I've changed it to save and later restore the context to fix this.