8 #include "mf_scaledfont.h"
12 struct scaled_renderstate
14 mf_pixel_callback_t orig_callback;
22 static void scaled_pixel_callback(gI16 x, gI16 y, gU8 count,
23 gU8 alpha,
void *state)
25 struct scaled_renderstate *rstate = state;
28 count *= rstate->x_scale;
29 x = rstate->x0 + x * rstate->x_scale;
30 y = rstate->y0 + y * rstate->y_scale;
32 for (dy = 0; dy < rstate->y_scale; dy++)
34 rstate->orig_callback(x, y + dy, count, alpha, rstate->orig_state);
38 gU8 mf_scaled_character_width(
const struct mf_font_s *font,
41 struct mf_scaledfont_s *sfont = (
struct mf_scaledfont_s*)font;
44 basewidth = sfont->basefont->character_width(sfont->basefont, character);
46 return sfont->x_scale * basewidth;
49 gU8 mf_scaled_render_character(
const struct mf_font_s *font,
52 mf_pixel_callback_t callback,
55 struct mf_scaledfont_s *sfont = (
struct mf_scaledfont_s*)font;
56 struct scaled_renderstate rstate;
59 rstate.orig_callback = callback;
60 rstate.orig_state = state;
61 rstate.x_scale = sfont->x_scale;
62 rstate.y_scale = sfont->y_scale;
66 basewidth = sfont->basefont->render_character(sfont->basefont, 0, 0,
67 character, scaled_pixel_callback, &rstate);
69 return sfont->x_scale * basewidth;
72 void mf_scale_font(
struct mf_scaledfont_s *newfont,
73 const struct mf_font_s *basefont,
74 gU8 x_scale, gU8 y_scale)
76 newfont->font = *basefont;
77 newfont->basefont = basefont;
79 newfont->font.width *= x_scale;
80 newfont->font.height *= y_scale;
81 newfont->font.baseline_x *= x_scale;
82 newfont->font.baseline_y *= y_scale;
83 newfont->font.min_x_advance *= x_scale;
84 newfont->font.max_x_advance *= x_scale;
85 newfont->font.line_height *= y_scale;
86 newfont->font.character_width = &mf_scaled_character_width;
87 newfont->font.render_character = &mf_scaled_render_character;
89 newfont->x_scale = x_scale;
90 newfont->y_scale = y_scale;