--- emf-win32-inout.cpp.dist 2012-05-24 15:12:42 -0700 +++ emf-win32-inout.cpp 2012-05-24 15:16:56 -0700 @@ -1654,11 +1654,12 @@ PEMRSETMITERLIMIT pEmr = (PEMRSETMITERLIMIT) lpEMFR; - float miterlimit = pEmr->eMiterLimit; - miterlimit = miterlimit * 4.0 / 10.0; - d->dc[d->level].style.stroke_miterlimit.value = pix_to_size_point( d, miterlimit ); - if (d->dc[d->level].style.stroke_miterlimit.value < 1) - d->dc[d->level].style.stroke_miterlimit.value = 4.0; + //BUG in SetMiterLimit() on mingw, possibly in underlying Windows(at least on XP?) + //The function takes a float but saves a 32 bit int in the EMR_SETMITERLIMIT record. + float miterlimit = *((int32_t *) &(pEmr->eMiterLimit)); + d->dc[d->level].style.stroke_miterlimit.value = miterlimit; //ratio, not a pt size + if (d->dc[d->level].style.stroke_miterlimit.value < 2) + d->dc[d->level].style.stroke_miterlimit.value = 2.0; break; } case EMR_BEGINPATH: --- emf-win32-print.cpp.dist 2012-05-24 15:12:42 -0700 +++ emf-win32-print.cpp 2012-05-24 15:18:45 -0700 @@ -374,13 +374,7 @@ if (linejoin == PS_JOIN_MITER) { float oldmiterlimit; - float miterlimit = style->stroke_miterlimit.value; - - miterlimit = miterlimit * 10.0 / 4.0; - if (miterlimit < 1) - miterlimit = 10.0; - - miterlimit = miterlimit * IN_PER_PX * dwDPI; + float miterlimit = style->stroke_miterlimit.value; //ratio, not a pt size SetMiterLimit( hdc,