aboutsummaryrefslogtreecommitdiffstats
path: root/libskrift_draw_text.c
blob: 05f278ce20629d1774830181b13a8cb4243da626 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
/* See LICENSE file for copyright and license details. */
#include "common.h"

int
libskrift_draw_text(LIBSKRIFT_CONTEXT *ctx, const char *text, const struct libskrift_colour *colour,
                    int16_t x, int16_t y, struct libskrift_image *image)
{
	struct libskrift_saved_grapheme saved = LIBSKRIFT_NO_SAVED_GRAPHEME;
	struct libskrift_glyph *glyph;
	double xpos = 0, ypos = 0;
	ssize_t len;
	int r;

	for (; *text; text += len) {
		len = libskrift_get_cluster_glyph(ctx, text, &saved, xpos, ypos, &glyph);
		if (len < 0)
			return -1;

		r = libskrift_apply_glyph(ctx, glyph, colour, x, y, image);
		xpos += (glyph->advance + ctx->rendering.interletter_spacing) * ctx->x_advancement;
		ypos += (glyph->advance + ctx->rendering.interletter_spacing) * ctx->y_advancement;
		free(glyph);
		if (r)
			return -1;
	}

	return 0;
}