diff options
| author | Alvin Penner <penner@vaxxine.com> | 2012-11-11 22:57:22 +0000 |
|---|---|---|
| committer | apenner <penner@vaxxine.com> | 2012-11-11 22:57:22 +0000 |
| commit | 0516dc2e3b182eead7fc62a0190043724f6bf2f7 (patch) | |
| tree | 39e8253e745c3ec9d33e445964a334deb2f4d669 /src | |
| parent | SPObject: Remove todo note (diff) | |
| download | inkscape-0516dc2e3b182eead7fc62a0190043724f6bf2f7.tar.gz inkscape-0516dc2e3b182eead7fc62a0190043724f6bf2f7.zip | |
emf import. modify sequence of operations to load file EMF_Illustrator_a4.emf (Bug 988601)
(bzr r11871)
Diffstat (limited to 'src')
| -rw-r--r-- | src/extension/internal/emf-win32-inout.cpp | 23 |
1 files changed, 14 insertions, 9 deletions
diff --git a/src/extension/internal/emf-win32-inout.cpp b/src/extension/internal/emf-win32-inout.cpp index 872de045a..e9360a0ea 100644 --- a/src/extension/internal/emf-win32-inout.cpp +++ b/src/extension/internal/emf-win32-inout.cpp @@ -61,6 +61,8 @@ namespace Extension { namespace Internal { static float device_scale = DEVICESCALE; +static float device_x; +static float device_y; static RECTL rc_old; static bool clipset = false; @@ -322,11 +324,11 @@ _pix_y_to_point(PEMF_CALLBACK_DATA d, double px) static double pix_to_x_point(PEMF_CALLBACK_DATA d, double px, double py) { - double ppx = _pix_x_to_point(d, px); - double ppy = _pix_y_to_point(d, py); + double ppx = px * d->dc[d->level].worldTransform.eM11 + py * d->dc[d->level].worldTransform.eM21 + d->dc[d->level].worldTransform.eDx; + double x = _pix_x_to_point(d, ppx); - double x = ppx * d->dc[d->level].worldTransform.eM11 + ppy * d->dc[d->level].worldTransform.eM21 + d->dc[d->level].worldTransform.eDx; x *= device_scale; + x -= device_x; return x; } @@ -334,11 +336,11 @@ pix_to_x_point(PEMF_CALLBACK_DATA d, double px, double py) static double pix_to_y_point(PEMF_CALLBACK_DATA d, double px, double py) { - double ppx = _pix_x_to_point(d, px); - double ppy = _pix_y_to_point(d, py); + double ppy = px * d->dc[d->level].worldTransform.eM12 + py * d->dc[d->level].worldTransform.eM22 + d->dc[d->level].worldTransform.eDy; + double y = _pix_y_to_point(d, ppy); - double y = ppx * d->dc[d->level].worldTransform.eM12 + ppy * d->dc[d->level].worldTransform.eM22 + d->dc[d->level].worldTransform.eDy; y *= device_scale; + y -= device_y; return y; } @@ -773,8 +775,10 @@ myEnhMetaFileProc(HDC /*hDC*/, HANDLETABLE * /*lpHTable*/, ENHMETARECORD const * d->xDPI = 2540; d->yDPI = 2540; - d->dc[d->level].PixelsInX = pEmr->rclFrame.right; // - pEmr->rclFrame.left; - d->dc[d->level].PixelsInY = pEmr->rclFrame.bottom; // - pEmr->rclFrame.top; + d->dc[d->level].PixelsInX = pEmr->rclFrame.right - pEmr->rclFrame.left; + d->dc[d->level].PixelsInY = pEmr->rclFrame.bottom - pEmr->rclFrame.top; + device_x = pEmr->rclFrame.left/100.0*PX_PER_MM; + device_y = pEmr->rclFrame.top/100.0*PX_PER_MM; d->MMX = d->dc[d->level].PixelsInX / 100.0; d->MMY = d->dc[d->level].PixelsInY / 100.0; @@ -2464,9 +2468,10 @@ EmfWin32::open( Inkscape::Extension::Input * /*mod*/, const gchar *uri ) DWORD dwNeeded = GetEnhMetaFileDescriptionA( hemf, 0, NULL ); if ( dwNeeded > 0 ) { d.pDesc = (CHAR *) malloc( dwNeeded + 1 ); + d.pDesc[dwNeeded] = 0; if ( GetEnhMetaFileDescription( hemf, dwNeeded, d.pDesc ) == 0 ) lstrcpy( d.pDesc, "" ); - if ( lstrlen( d.pDesc ) > 1 ) + if ((lstrlen(d.pDesc) > 1) && (lstrlen(d.pDesc) < dwNeeded)) d.pDesc[lstrlen(d.pDesc)] = '#'; } |
