Esme Povirk (@madewokherd) commented about dlls/gdiplus/graphicspath.c:
- float dy0 = distance * (p2->Y - p1->Y) / length_0; - float dx1 = distance * (p3->X - p2->X) / length_1; - float dy1 = distance * (p3->Y - p2->Y) / length_1; - float det = (dy0*dx1 - dx0*dy1); - float dx = (dx0*dx1*(dx0-dx1) + dy0*dy0*dx1 - dy1*dy1*dx0)/det; - float dy = (dy0*dy1*(dy0-dy1) + dx0*dx0*dy1 - dx1*dx1*dy0)/det; + REAL distance = pen_width / 2.0; + REAL length_0 = hypotf((p2->X - p1->X), (p2->Y - p1->Y)); + REAL length_1 = hypotf((p3->X - p2->X), (p3->Y - p2->Y)); + REAL dx0 = distance * (p2->X - p1->X) / length_0; + REAL dy0 = distance * (p2->Y - p1->Y) / length_0; + REAL dx1 = distance * (p3->X - p2->X) / length_1; + REAL dy1 = distance * (p3->Y - p2->Y) / length_1; + REAL det = (dy0 * dx1 - dx0 * dy1); + REAL dx = (dx0 * dx1 * (dx0 - dx1) + dy0 * dy0 * dx1 - dy1 * dy1 * dx0) / det; + REAL dy = (dy0 * dy1 * (dy0 - dy1) + dx0 * dx0 * dy1 - dx1 * dx1 * dy0) / det; There are some unrelated changes in here.
-- https://gitlab.winehq.org/wine/wine/-/merge_requests/4475#note_53698