From 49c2989ecbe4a0990edf744d0b1f530bc39c34cf Mon Sep 17 00:00:00 2001 From: Alvin Penner Date: Sun, 27 May 2012 18:15:46 -0400 Subject: emf import/export. patch by David Mathog for setmiterlimit (Bug 1004084) Fixed bugs: - https://launchpad.net/bugs/1004084 (bzr r11427) --- src/extension/internal/emf-win32-inout.cpp | 11 ++++++----- src/extension/internal/emf-win32-print.cpp | 8 +------- 2 files changed, 7 insertions(+), 12 deletions(-) diff --git a/src/extension/internal/emf-win32-inout.cpp b/src/extension/internal/emf-win32-inout.cpp index f54bfc6ea..9c8755201 100644 --- a/src/extension/internal/emf-win32-inout.cpp +++ b/src/extension/internal/emf-win32-inout.cpp @@ -1654,11 +1654,12 @@ myEnhMetaFileProc(HDC /*hDC*/, HANDLETABLE * /*lpHTable*/, ENHMETARECORD const * 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 < 1.0) + d->dc[d->level].style.stroke_miterlimit.value = 1.0; break; } case EMR_BEGINPATH: diff --git a/src/extension/internal/emf-win32-print.cpp b/src/extension/internal/emf-win32-print.cpp index ef76c2c14..2b79fd5a4 100644 --- a/src/extension/internal/emf-win32-print.cpp +++ b/src/extension/internal/emf-win32-print.cpp @@ -374,13 +374,7 @@ void PrintEmfWin32::create_pen(SPStyle const *style, const Geom::Affine &transfo 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, -- cgit v1.2.3