summaryrefslogtreecommitdiffstats
path: root/libass/ass_outline.c
diff options
context:
space:
mode:
authorDr.Smile <vabnick@gmail.com>2017-08-05 04:55:03 +0300
committerDr.Smile <vabnick@gmail.com>2017-09-17 04:07:20 +0300
commitcef153ea0eae3c47ff6ab69e4a41056858ab346f (patch)
treece5a3a0bd9f7b62129e8c2a20d88f6edd1b0bdc8 /libass/ass_outline.c
parenta0bf40896a4295964bba56dc7edfa020af761f5e (diff)
downloadlibass-cef153ea0eae3c47ff6ab69e4a41056858ab346f.tar.bz2
libass-cef153ea0eae3c47ff6ab69e4a41056858ab346f.tar.xz
Reorganize outline transformation functions
Diffstat (limited to 'libass/ass_outline.c')
-rw-r--r--libass/ass_outline.c16
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;
}
}