Esme Povirk (@madewokherd) commented about dlls/gdiplus/graphics.c:
position.X = args->x + bounds->X / args->rel_width; position.Y = args->y + bounds->Y / args->rel_height + args->ascent;
- stat = draw_driver_string(graphics, &string[index], length, font, format,
args->brush, &position,
- GdipStringFormatGetGenericTypographic(&generic_format);
- LIST_FOR_EACH_ENTRY(section, &font_link_info->sections, struct gdip_font_link_section, entry)
- {
if (i >= section->end) continue;
to_draw_length = min(length - (i - index), section->end - i);
TRACE("index %d, todraw %ld, used %s\n", i, to_draw_length, section->font == font_link_info->base_font ? "base font" : "map");
GdipMeasureString(graphics, &string[i], to_draw_length, section->font, rect, generic_format, &bound_box, NULL, NULL);
stat = draw_driver_string(graphics, &string[i], to_draw_length,
section->font, format, args->brush, &position, DriverStringOptionsCmapLookup|DriverStringOptionsRealizedAdvance, NULL);
The assignment to stat is ignored in all iterations except the last one. We should probably break the loop if it isn't Ok.