diff options
author | Dr.Smile <vabnick@gmail.com> | 2017-08-05 04:55:03 +0300 |
---|---|---|
committer | Dr.Smile <vabnick@gmail.com> | 2017-09-17 04:07:20 +0300 |
commit | cef153ea0eae3c47ff6ab69e4a41056858ab346f (patch) | |
tree | ce5a3a0bd9f7b62129e8c2a20d88f6edd1b0bdc8 /libass/ass_outline.c | |
parent | a0bf40896a4295964bba56dc7edfa020af761f5e (diff) | |
download | libass-cef153ea0eae3c47ff6ab69e4a41056858ab346f.tar.bz2 libass-cef153ea0eae3c47ff6ab69e4a41056858ab346f.tar.xz |
Reorganize outline transformation functions
Diffstat (limited to 'libass/ass_outline.c')
-rw-r--r-- | libass/ass_outline.c | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/libass/ass_outline.c b/libass/ass_outline.c index 85ceff8..74b791c 100644 --- a/libass/ass_outline.c +++ b/libass/ass_outline.c @@ -284,15 +284,17 @@ void outline_translate(const ASS_Outline *outline, int32_t dx, int32_t dy) } } -void outline_transform(const ASS_Outline *outline, const FT_Matrix *matrix) +void outline_adjust(const ASS_Outline *outline, double scale_x, int32_t dx, int32_t dy) { + int32_t mul = lrint(scale_x * 0x10000); + if (mul == 0x10000) { + outline_translate(outline, dx, dy); + return; + } for (size_t i = 0; i < outline->n_points; i++) { - int32_t x = FT_MulFix(outline->points[i].x, matrix->xx) + - FT_MulFix(outline->points[i].y, matrix->xy); - int32_t y = FT_MulFix(outline->points[i].x, matrix->yx) + - FT_MulFix(outline->points[i].y, matrix->yy); - outline->points[i].x = x; - outline->points[i].y = y; + int32_t x = (int64_t) outline->points[i].x * mul >> 16; + outline->points[i].x = x + dx; + outline->points[i].y += dy; } } |