From cef153ea0eae3c47ff6ab69e4a41056858ab346f Mon Sep 17 00:00:00 2001 From: "Dr.Smile" Date: Sat, 5 Aug 2017 04:55:03 +0300 Subject: Reorganize outline transformation functions --- libass/ass_outline.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) (limited to 'libass/ass_outline.c') 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; } } -- cgit v1.2.3