Bartosz Kosiorek (@gang65) commented about dlls/gdiplus/graphicspath.c:
for(j = start; j <= i; j++){ + /* copy points coordinate of subpath in reverse order */ revpath.Points[j] = path->pathdata.Points[count-j-1]; - revpath.Types[j] = path->pathdata.Types[count-j-1]; + /* copy points type shifted by one (j + 1), as the first point type is always PathPointTypeStart */ + if (j < i) + revpath.Types[j + 1] = path->pathdata.Types[count - j - 1]; } - /* mark start point */ + /* first point of subpath is always Start point */ revpath.Types[start] = PathPointTypeStart; - /* set 'figure' endpoint type */ + /* check if subpath contains more than 1 point */ if(i-start > 1){ - revpath.Types[i] = path->pathdata.Types[count-start-1] & ~PathPointTypePathTypeMask; - revpath.Types[i] |= revpath.Types[i-1];
This line is a workaround, as it duplicate value of for last point type, from previous point. Current implementation is fixing that by taking real values of types. -- https://gitlab.winehq.org/wine/wine/-/merge_requests/7661#note_99060