Compare commits

..

5 Commits

Author SHA1 Message Date
35bd2803a4 v5.3.1 2019-06-06 12:32:18 +03:00
e7bf661432 Fix bug #41495 (#149)
Fix the problem with rendering WMF files
2019-05-31 17:32:12 +03:00
635265eaa2 Feature/pre5.3.1 (#146)
* Fix bug with fonts installed not for all users

* Fix compilation error with gcc >=5

* Fix  build for xp
2019-05-29 15:29:19 +03:00
7636ff79cc v5.3.0 2019-05-27 17:05:18 +03:00
564b7f9c29 v5.2.8 2019-02-05 16:23:16 +03:00
13 changed files with 341 additions and 235 deletions

View File

@ -1,18 +1,9 @@
@echo off
SET SCRIPTPATH=%~dp0
CD /D %~dp0
SET PLATFORM=win_32
if defined ProgramFiles(x86) (
SET PLATFORM=win_64
)
if defined TARGET (
SET PLATFORM=%TARGET%
)
mkdir "%SCRIPTPATH%%PLATFORM%"
cd "%SCRIPTPATH%%PLATFORM%"
Powershell.exe -executionpolicy remotesigned -file %SCRIPTPATH%download.ps1 http://d2ettrnqo7v976.cloudfront.net/cef/3163/%PLATFORM%/cef_binary.7z cef_binary.7z cef_binary
setlocal
SET UNSIP_PROGRAMM="%ProgramFiles%\7-Zip\7z.exe"
SET UNSIP_PROGRAMM2="%ProgramFiles(x86)%\7-Zip\7z.exe"
@ -20,11 +11,48 @@ if exist %UNSIP_PROGRAMM2% (
SET UNSIP_PROGRAMM=%UNSIP_PROGRAMM2%
)
if exist "cef_binary" (
echo "cef_binary.7z already extracted"
) else (
call %UNSIP_PROGRAMM% x "cef_binary.7z"
mkdir build
xcopy /Y /S cef_binary\Release\* build\
xcopy /Y /S cef_binary\Resources\* build\
if defined BUILD_PLATFORM (
if not "%BUILD_PLATFORM%"=="%BUILD_PLATFORM:xp=%" (
SET "BUILD_PLATFORMS=win_64 win_32 winxp_64 winxp_32"
GOTO :found
)
if not "%BUILD_PLATFORM%"=="%BUILD_PLATFORM:all=%" (
SET "BUILD_PLATFORMS=win_64 win_32"
GOTO :found
)
)
SET "BUILD_PLATFORMS=win_32"
if defined ProgramFiles(x86) (
SET "BUILD_PLATFORMS=win_64"
GOTO :found
)
if defined TARGET (
SET "BUILD_PLATFORMS=%TARGET%"
GOTO :found
)
echo "error"
GOTO :end
:found
for %%a in (%BUILD_PLATFORMS%) do (
echo "platform: %%a"
mkdir "%SCRIPTPATH%%%a"
cd "%SCRIPTPATH%%%a"
Powershell.exe -executionpolicy remotesigned -file %SCRIPTPATH%download.ps1 http://d2ettrnqo7v976.cloudfront.net/cef/3163/%%a/cef_binary.7z cef_binary.7z cef_binary
if exist "cef_binary" (
echo "cef_binary.7z already extracted"
) else (
call %UNSIP_PROGRAMM% x "cef_binary.7z"
mkdir build
xcopy /Y /S cef_binary\Release\* build\
xcopy /Y /S cef_binary\Resources\* build\
)
)
:end
endlocal
@echo on

View File

@ -1,64 +1,80 @@
@echo off
SET SCRIPTPATH=%~dp0
CD /D %~dp0
setlocal
SET ICU_MAJOR_VER=58
SET ICU_MINOR_VER=2
SET build_platform=win_32
if defined ProgramFiles(x86) (
SET build_platform=win_64
)
if defined TARGET (
SET build_platform=%TARGET%
)
if "%build_platform%" == "win_32" (
SET MACHINE=x86
)
if "%build_platform%" == "win_64" (
SET MACHINE=x64
)
if not exist "%build_platform%" (
md "%build_platform%"
)
if not exist "%build_platform%\build" (
md "%build_platform%\build"
)
cd "%SCRIPTPATH%%build_platform%"
if exist "%SCRIPTPATH%%build_platform%\icu\" (
echo "icu already exported"
) else (
svn export http://source.icu-project.org/repos/icu/tags/release-%ICU_MAJOR_VER%-%ICU_MINOR_VER%/icu4c ./icu
)
SET VC=%ProgramFiles%\Microsoft Visual Studio 14.0\VC
SET VC64=%ProgramFiles(x86)%\Microsoft Visual Studio 14.0\VC
if exist %VC64% (
SET VC=%VC64%
)
call "%VC%\vcvarsall.bat" %MACHINE%
if "%build_platform%" == "win_64" (
MSBuild.exe icu\source\allinone\allinone.sln /p:Configuration=Release /p:PlatformToolset=v140 /p:Platform="X64"
) else (
MSBuild.exe icu\source\allinone\allinone.sln /p:Configuration=Release /p:PlatformToolset=v140 /p:Platform="Win32"
SET UNSIP_PROGRAMM="%ProgramFiles%\7-Zip\7z.exe"
SET UNSIP_PROGRAMM2="%ProgramFiles(x86)%\7-Zip\7z.exe"
if exist %UNSIP_PROGRAMM2% (
SET UNSIP_PROGRAMM=%UNSIP_PROGRAMM2%
)
if "%build_platform%" == "win_64" (
XCOPY /Y "%SCRIPTPATH%%build_platform%\icu\bin64\icudt%ICU_MAJOR_VER%.dll" "%SCRIPTPATH%%build_platform%\build\"
XCOPY /Y "%SCRIPTPATH%%build_platform%\icu\bin64\icuuc%ICU_MAJOR_VER%.dll" "%SCRIPTPATH%%build_platform%\build\"
XCOPY /Y "%SCRIPTPATH%%build_platform%\icu\lib64\icudt.lib" "%SCRIPTPATH%%build_platform%\build\"
XCOPY /Y "%SCRIPTPATH%%build_platform%\icu\lib64\icuuc.lib" "%SCRIPTPATH%%build_platform%\build\"
) else (
XCOPY /Y "%SCRIPTPATH%%build_platform%\icu\bin\icudt%ICU_MAJOR_VER%.dll" "%SCRIPTPATH%%build_platform%\build\"
XCOPY /Y "%SCRIPTPATH%%build_platform%\icu\bin\icuuc%ICU_MAJOR_VER%.dll" "%SCRIPTPATH%%build_platform%\build\"
XCOPY /Y "%SCRIPTPATH%%build_platform%\icu\lib\icudt.lib" "%SCRIPTPATH%%build_platform%\build\"
XCOPY /Y "%SCRIPTPATH%%build_platform%\icu\lib\icuuc.lib" "%SCRIPTPATH%%build_platform%\build\"
if defined BUILD_PLATFORM (
if not "%BUILD_PLATFORM%"=="%BUILD_PLATFORM:all=%" (
SET "BUILD_PLATFORMS=win_64 win_32"
GOTO :found
)
)
SET "BUILD_PLATFORMS=win_32"
if defined ProgramFiles(x86) (
SET "BUILD_PLATFORMS=win_64"
GOTO :found
)
if defined TARGET (
SET "BUILD_PLATFORMS=%TARGET%"
GOTO :found
)
echo "error"
GOTO :end
:found
for %%a in (%BUILD_PLATFORMS%) do (
cd "%SCRIPTPATH%"
if not exist "%%a" (
md "%%a"
)
if not exist "%%a\build" (
md "%%a\build"
)
cd "%SCRIPTPATH%%%a"
if exist "icu" (
echo "icu already exported"
) else (
svn export http://source.icu-project.org/repos/icu/tags/release-%ICU_MAJOR_VER%-%ICU_MINOR_VER%/icu4c ./icu
)
if "%%a" == "win_64" (
call "%VC%\vcvarsall.bat" x64
MSBuild.exe icu\source\allinone\allinone.sln /p:Configuration=Release /p:PlatformToolset=v140 /p:Platform="X64"
XCOPY /Y "icu\bin64\icudt%ICU_MAJOR_VER%.dll" "build\"
XCOPY /Y "icu\bin64\icuuc%ICU_MAJOR_VER%.dll" "build\"
XCOPY /Y "icu\lib64\icudt.lib" "build\"
XCOPY /Y "icu\lib64\icuuc.lib" "build\"
) else (
call "%VC%\vcvarsall.bat" x86
MSBuild.exe icu\source\allinone\allinone.sln /p:Configuration=Release /p:PlatformToolset=v140 /p:Platform="Win32"
XCOPY /Y "icu\bin\icudt%ICU_MAJOR_VER%.dll" "build\"
XCOPY /Y "icu\bin\icuuc%ICU_MAJOR_VER%.dll" "build\"
XCOPY /Y "icu\lib\icudt.lib" "build\"
XCOPY /Y "icu\lib\icuuc.lib" "build\"
)
)
cd "%SCRIPTPATH%"
:end
endlocal
@echo on

View File

@ -20,4 +20,8 @@ call ninja -C out.gn/win_32/release
call gn gen out.gn/win_32/debug --args="is_debug=true target_cpu=\"x86\" v8_target_cpu=\"x86\" v8_static_library=true is_component_build=false v8_use_snapshot=false is_clang=false"
call ninja -C out.gn/win_32/debug
rem v8_use_snapshot=true v8_use_external_startup_data=true
rem v8_use_snapshot=true v8_use_external_startup_data=true
if not "%BUILD_PLATFORM%"=="%BUILD_PLATFORM:xp=%" (
call %~dp0v8_xp\build.bat
cd %~dp0
)

View File

@ -24,3 +24,8 @@ call git checkout -b 6.0 -t branch-heads/6.0
cd ../
call gclient sync --no-history
if not "%BUILD_PLATFORM%"=="%BUILD_PLATFORM:xp=%" (
call v8_xp\fetch.bat
cd %~dp0
)

View File

@ -1,7 +1,7 @@
SET SCRIPTPATH=%~dp0
CD /D %~dp0
SET PATH=%SCRIPTPATH%depot_tools;%SCRIPTPATH%depot_tools\win_tools-2_7_6_bin\python\bin;%PATH%
SET PATH=%SCRIPTPATH%depot_tools;%SCRIPTPATH%depot_tools\win_tools-2_7_13_chromium7_bin\python\bin;%PATH%
SET DEPOT_TOOLS_WIN_TOOLCHAIN=0
SET GYP_MSVS_VERSION=2015

View File

@ -8,7 +8,7 @@ if exist "depot_tools" (
call powershell -File .\fix-depot_tools.ps1
)
SET PATH=%SCRIPTPATH%depot_tools;%SCRIPTPATH%depot_tools\python276_bin;%PATH%
SET PATH=%SCRIPTPATH%depot_tools;%SCRIPTPATH%depot_tools\win_tools-2_7_13_chromium7_bin\python\bin;%PATH%
SET DEPOT_TOOLS_WIN_TOOLCHAIN=0
SET GYP_MSVS_VERSION=2015

View File

@ -25,6 +25,10 @@ LIBS += -L$$CORE_BUILDS_LIBRARIES_PATH -lUnicodeConverter -lkernel -lgraphics
} else {
DEFINES += V8_OS_XP
DESTDIR=$$DESTDIR/xp
OBJECTS_DIR = $$OBJECTS_DIR/xp
MOC_DIR = $$MOC_DIR/xp
RCC_DIR = $$RCC_DIR/xp
UI_DIR = $$UI_DIR/xp
include(../../Common/3dParty/v8/v8_xp/v8.pri)
}

View File

@ -1626,6 +1626,25 @@ std::vector<std::wstring> CApplicationFonts::GetSetupFontFiles()
continue;
}
}
if (true)
{
std::vector<std::wstring> oArray2 = NSDirectory::GetFiles(L"C:/Windows/Fonts", true);
wchar_t sUserName[1000];
DWORD nUserNameLen = 1000 + 1;
GetUserNameW(sUserName, &nUserNameLen);
std::wstring strUserName(sUserName, nUserNameLen - 1);
NSDirectory::GetFiles2(L"C:\\Users\\" + strUserName + L"\\AppData\\Local\\Microsoft\\Windows\\Fonts", oArray2, true);
for (std::vector<std::wstring>::iterator i = oArray2.begin(); i != oArray2.end(); i++)
{
if (map_files.end() == map_files.find(*i))
oArray.push_back(*i);
}
}
return oArray;
#endif

View File

@ -107,6 +107,17 @@ namespace MetaFile
void Begin()
{
if (m_pFile)
{
TRect* pBounds = m_pFile->GetDCBounds();
int nL = pBounds->nLeft;
int nR = pBounds->nRight;
int nT = pBounds->nTop;
int nB = pBounds->nBottom;
m_dScaleX = (nR - nL <= 0) ? 1 : m_dW / (double)(nR - nL);
m_dScaleY = (nB - nT <= 0) ? 1 : m_dH / (double)(nB - nT);
}
}
void End()
{

View File

@ -64,10 +64,7 @@ namespace MetaFile
TRectD oBounds = oBoundsBox;
if (IsPlaceable())
{
double dLogicalToMM = 25.4 / 72;
if (m_oPlaceable.Inch > 0)
dLogicalToMM /= m_oPlaceable.Inch;
double dLogicalToMM = (m_oPlaceable.Inch > 0 ? 25.4 / m_oPlaceable.Inch : 25.4 / 1440);
oBounds *= dLogicalToMM;
}
else
@ -111,100 +108,100 @@ namespace MetaFile
//-----------------------------------------------------------
// 2.3.1 Bitmap records
//-----------------------------------------------------------
case META_BITBLT: Read_META_BITBLT(); break;
case META_DIBBITBLT: Read_META_DIBBITBLT(); break;
case META_DIBSTRETCHBLT: Read_META_DIBSTRETCHBLT(); break;
case META_SETDIBTODEV: Read_META_SETDIBTODEV(); break;
case META_STRETCHBLT: Read_META_STRETCHBLT(); break;
case META_STRETCHDIB: Read_META_STRETCHDIB(); break;
case META_BITBLT: Read_META_BITBLT(); break;
case META_DIBBITBLT: Read_META_DIBBITBLT(); break;
case META_DIBSTRETCHBLT: Read_META_DIBSTRETCHBLT(); break;
case META_SETDIBTODEV: Read_META_SETDIBTODEV(); break;
case META_STRETCHBLT: Read_META_STRETCHBLT(); break;
case META_STRETCHDIB: Read_META_STRETCHDIB(); break;
//-----------------------------------------------------------
// 2.3.2 Control records
//-----------------------------------------------------------
case META_EOF: bEof = true; break;
case META_EOF: bEof = true; break;
//-----------------------------------------------------------
// 2.3.3 Drawing records
//-----------------------------------------------------------
case META_ARC: Read_META_ARC(); break;
case META_CHORD: Read_META_CHORD(); break;
case META_ELLIPSE: Read_META_ELLIPSE(); break;
case META_EXTFLOODFILL: Read_META_UNSUPPORTED(); break;
case META_EXTTEXTOUT: Read_META_EXTTEXTOUT(); break;
case META_FILLREGION: Read_META_FILLREGION(); break;
case META_FLOODFILL: Read_META_UNSUPPORTED(); break;
case META_FRAMEREGION: Read_META_FRAMEREGION(); break;
case META_INVERTREGION: Read_META_INVERTREGION(); break;
case META_LINETO: Read_META_LINETO(); break;
case META_PAINTREGION: Read_META_PAINTREGION(); break;
case META_PATBLT: Read_META_PATBLT(); break;
case META_PIE: Read_META_PIE(); break;
case META_POLYLINE: Read_META_POLYLINE(); break;
case META_POLYGON: Read_META_POLYGON(); break;
case META_POLYPOLYGON: Read_META_POLYPOLYGON(); break;
case META_RECTANGLE: Read_META_RECTANGLE(); break;
case META_ROUNDRECT: Read_META_ROUNDRECT(); break;
case META_SETPIXEL: Read_META_SETPIXEL(); break;
case META_TEXTOUT: Read_META_TEXTOUT(); break;
case META_ARC: Read_META_ARC(); break;
case META_CHORD: Read_META_CHORD(); break;
case META_ELLIPSE: Read_META_ELLIPSE(); break;
case META_EXTFLOODFILL: Read_META_UNSUPPORTED(); break;
case META_EXTTEXTOUT: Read_META_EXTTEXTOUT(); break;
case META_FILLREGION: Read_META_FILLREGION(); break;
case META_FLOODFILL: Read_META_UNSUPPORTED(); break;
case META_FRAMEREGION: Read_META_FRAMEREGION(); break;
case META_INVERTREGION: Read_META_INVERTREGION(); break;
case META_LINETO: Read_META_LINETO(); break;
case META_PAINTREGION: Read_META_PAINTREGION(); break;
case META_PATBLT: Read_META_PATBLT(); break;
case META_PIE: Read_META_PIE(); break;
case META_POLYLINE: Read_META_POLYLINE(); break;
case META_POLYGON: Read_META_POLYGON(); break;
case META_POLYPOLYGON: Read_META_POLYPOLYGON(); break;
case META_RECTANGLE: Read_META_RECTANGLE(); break;
case META_ROUNDRECT: Read_META_ROUNDRECT(); break;
case META_SETPIXEL: Read_META_SETPIXEL(); break;
case META_TEXTOUT: Read_META_TEXTOUT(); break;
//-----------------------------------------------------------
// 2.3.4 Object records
//-----------------------------------------------------------
case META_CREATEBRUSHINDIRECT: Read_META_CREATEBRUSHINDIRECT(); break;
case META_CREATEFONTINDIRECT: Read_META_CREATEFONTINDIRECT(); break;
case META_CREATEPALETTE: Read_META_CREATEPALETTE(); break;
case META_CREATEPATTERNBRUSH: Read_META_CREATEPATTERNBRUSH(); break;
case META_CREATEPENINDIRECT: Read_META_CREATEPENINDIRECT(); break;
case META_CREATEREGION: Read_META_CREATEREGION(); break;
case META_DELETEOBJECT: Read_META_DELETEOBJECT(); break;
case META_DIBCREATEPATTERNBRUSH: Read_META_DIBCREATEPATTERNBRUSH(); break;
case META_SELECTCLIPREGION: Read_META_SELECTCLIPREGION(); break;
case META_SELECTOBJECT: Read_META_SELECTOBJECT(); break;
case META_SELECTPALETTE: Read_META_SELECTPALETTE(); break;
case META_CREATEBRUSHINDIRECT: Read_META_CREATEBRUSHINDIRECT(); break;
case META_CREATEFONTINDIRECT: Read_META_CREATEFONTINDIRECT(); break;
case META_CREATEPALETTE: Read_META_CREATEPALETTE(); break;
case META_CREATEPATTERNBRUSH: Read_META_CREATEPATTERNBRUSH(); break;
case META_CREATEPENINDIRECT: Read_META_CREATEPENINDIRECT(); break;
case META_CREATEREGION: Read_META_CREATEREGION(); break;
case META_DELETEOBJECT: Read_META_DELETEOBJECT(); break;
case META_DIBCREATEPATTERNBRUSH: Read_META_DIBCREATEPATTERNBRUSH(); break;
case META_SELECTCLIPREGION: Read_META_SELECTCLIPREGION(); break;
case META_SELECTOBJECT: Read_META_SELECTOBJECT(); break;
case META_SELECTPALETTE: Read_META_SELECTPALETTE(); break;
//-----------------------------------------------------------
// 2.3.5 State records
//-----------------------------------------------------------
case META_ANIMATEPALETTE: Read_META_UNSUPPORTED(); break;
case META_EXCLUDECLIPRECT: Read_META_EXCLUDECLIPRECT(); break;
case META_INTERSECTCLIPRECT: Read_META_INTERSECTCLIPRECT(); break;
case META_MOVETO: Read_META_MOVETO(); break;
case META_OFFSETCLIPRGN: Read_META_OFFSETCLIPRGN(); break;
case META_OFFSETVIEWPORTORG: Read_META_OFFSETVIEWPORTORG(); break;
case META_OFFSETWINDOWORG: Read_META_OFFSETWINDOWORG(); break;
case META_REALIZEPALETTE: Read_META_UNSUPPORTED(); break;
case META_RESIZEPALETTE: Read_META_UNSUPPORTED(); break;
case META_RESTOREDC: Read_META_RESTOREDC(); break;
case META_SAVEDC: Read_META_SAVEDC(); break;
case META_SCALEVIEWPORTEXT: Read_META_SCALEVIEWPORTEXT(); break;
case META_SCALEWINDOWEXT: Read_META_SCALEWINDOWEXT(); break;
case META_SETBKCOLOR: Read_META_SETBKCOLOR(); break;
case META_SETBKMODE: Read_META_SETBKMODE(); break;
case META_SETLAYOUT: Read_META_SETLAYOUT(); break;
case META_SETMAPMODE: Read_META_SETMAPMODE(); break;
case META_SETMAPPERFLAGS: Read_META_UNSUPPORTED(); break;
case META_SETPALENTRIES: Read_META_UNSUPPORTED(); break;
case META_SETPOLYFILLMODE: Read_META_SETPOLYFILLMODE(); break;
case META_SETRELABS: Read_META_UNSUPPORTED(); break;
case META_SETROP2: Read_META_SETROP2(); break;
case META_SETSTRETCHBLTMODE: Read_META_SETSTRETCHBLTMODE(); break;
case META_SETTEXTALIGN: Read_META_SETTEXTALIGN(); break;
case META_SETTEXTCHAREXTRA: Read_META_SETTEXTCHAREXTRA(); break;
case META_SETTEXTCOLOR: Read_META_SETTEXTCOLOR(); break;
case META_SETTEXTJUSTIFICATION: Read_META_SETTEXTJUSTIFICATION(); break;
case META_SETVIEWPORTEXT: Read_META_SETVIEWPORTEXT(); break;
case META_SETVIEWPORTORG: Read_META_SETVIEWPORTORG(); break;
case META_SETWINDOWEXT: Read_META_SETWINDOWEXT(); break;
case META_SETWINDOWORG: Read_META_SETWINDOWORG(); break;
case META_ANIMATEPALETTE: Read_META_UNSUPPORTED(); break;
case META_EXCLUDECLIPRECT: Read_META_EXCLUDECLIPRECT(); break;
case META_INTERSECTCLIPRECT: Read_META_INTERSECTCLIPRECT(); break;
case META_MOVETO: Read_META_MOVETO(); break;
case META_OFFSETCLIPRGN: Read_META_OFFSETCLIPRGN(); break;
case META_OFFSETVIEWPORTORG: Read_META_OFFSETVIEWPORTORG(); break;
case META_OFFSETWINDOWORG: Read_META_OFFSETWINDOWORG(); break;
case META_REALIZEPALETTE: Read_META_UNSUPPORTED(); break;
case META_RESIZEPALETTE: Read_META_UNSUPPORTED(); break;
case META_RESTOREDC: Read_META_RESTOREDC(); break;
case META_SAVEDC: Read_META_SAVEDC(); break;
case META_SCALEVIEWPORTEXT: Read_META_SCALEVIEWPORTEXT(); break;
case META_SCALEWINDOWEXT: Read_META_SCALEWINDOWEXT(); break;
case META_SETBKCOLOR: Read_META_SETBKCOLOR(); break;
case META_SETBKMODE: Read_META_SETBKMODE(); break;
case META_SETLAYOUT: Read_META_SETLAYOUT(); break;
case META_SETMAPMODE: Read_META_SETMAPMODE(); break;
case META_SETMAPPERFLAGS: Read_META_UNSUPPORTED(); break;
case META_SETPALENTRIES: Read_META_UNSUPPORTED(); break;
case META_SETPOLYFILLMODE: Read_META_SETPOLYFILLMODE(); break;
case META_SETRELABS: Read_META_UNSUPPORTED(); break;
case META_SETROP2: Read_META_SETROP2(); break;
case META_SETSTRETCHBLTMODE: Read_META_SETSTRETCHBLTMODE(); break;
case META_SETTEXTALIGN: Read_META_SETTEXTALIGN(); break;
case META_SETTEXTCHAREXTRA: Read_META_SETTEXTCHAREXTRA(); break;
case META_SETTEXTCOLOR: Read_META_SETTEXTCOLOR(); break;
case META_SETTEXTJUSTIFICATION: Read_META_SETTEXTJUSTIFICATION(); break;
case META_SETVIEWPORTEXT: Read_META_SETVIEWPORTEXT(); break;
case META_SETVIEWPORTORG: Read_META_SETVIEWPORTORG(); break;
case META_SETWINDOWEXT: Read_META_SETWINDOWEXT(); break;
case META_SETWINDOWORG: Read_META_SETWINDOWORG(); break;
//-----------------------------------------------------------
// 2.3.6 State records
//-----------------------------------------------------------
case META_ESCAPE: Read_META_ESCAPE(); break;
case META_ESCAPE: Read_META_ESCAPE(); break;
//-----------------------------------------------------------
// Неизвестные записи
//-----------------------------------------------------------
default:
{
//std::cout << ushType << " ";
Read_META_UNKNOWN();
break;
}
default:
{
//std::cout << ushType << " ";
Read_META_UNKNOWN();
break;
}
}
if (bEof)
@ -236,23 +233,8 @@ namespace MetaFile
m_oDCRect.nTop = pViewport->y;
m_oDCRect.nRight = pViewport->w + pViewport->x;
m_oDCRect.nBottom = pViewport->h + pViewport->y;
return &m_oDCRect;
unsigned short ushMapMode = m_pDC->GetMapMode();
if (MM_ANISOTROPIC == ushMapMode || MM_ISOTROPIC == ushMapMode)
{
TWmfWindow* pViewport = m_pDC->GetViewport();
m_oDCRect.nLeft = pViewport->x;
m_oDCRect.nTop = pViewport->y;
m_oDCRect.nRight = pViewport->w + pViewport->x;
m_oDCRect.nBottom = pViewport->h + pViewport->y;
return &m_oDCRect;
}
else
{
return &m_oRect;
}
}
double GetPixelHeight()
{
@ -321,7 +303,14 @@ namespace MetaFile
}
TXForm* GetTransform(int iGraphicsMode = GM_ADVANCED)
{
return m_pDC->GetTransform();
TRect* pBounds = GetDCBounds();
double dT = pBounds->nTop;
double dL = pBounds->nLeft;
TXForm oShiftXForm(1, 0, 0, 1, -dL, -dT);
m_oTransform.Copy(m_pDC->GetFinalTransform(iGraphicsMode));
m_oTransform.Multiply(oShiftXForm, MWT_RIGHTMULTIPLY);
return &m_oTransform;
}
unsigned int GetMiterLimit()
{
@ -359,24 +348,8 @@ namespace MetaFile
void TranslatePoint(short shX, short shY, double& dX, double &dY)
{
TWmfWindow* pWindow = m_pDC->GetWindow();
TWmfWindow* pViewport = m_pDC->GetViewport();
dX = (double)((double)(shX - pWindow->x) * m_pDC->GetPixelWidth()) + pViewport->x;
dY = (double)((double)(shY - pWindow->y) * m_pDC->GetPixelHeight()) + pViewport->y;
// Координаты приходят уже с примененной матрицей. Поэтому сначала мы умножаем на матрицу преобразования,
// вычитаем начальные координаты и умножаем на обратную матрицу преобразования.
TRect* pBounds = GetDCBounds();
double dT = pBounds->nTop;
double dL = pBounds->nLeft;
TEmfXForm* pInverse = GetInverseTransform();
TEmfXForm* pTransform = GetTransform();
pTransform->Apply(dX, dY);
dX -= dL;
dY -= dT;
pInverse->Apply(dX, dY);
dX = (double)shX;
dY = (double)shY;
}
TRect GetBoundingBox()
{
@ -820,6 +793,9 @@ namespace MetaFile
m_oStream >> m_oPlaceable.Inch;
m_oStream >> m_oPlaceable.Reserved;
m_oStream >> m_oPlaceable.Checksum;
m_pDC->SetViewportOrg(m_oPlaceable.BoundingBox.Left, m_oPlaceable.BoundingBox.Top);
m_pDC->SetViewportExt(m_oPlaceable.BoundingBox.Right - m_oPlaceable.BoundingBox.Left, m_oPlaceable.BoundingBox.Bottom - m_oPlaceable.BoundingBox.Top);
}
else
{
@ -852,7 +828,7 @@ namespace MetaFile
if (0x0100 != m_oHeader.Version && 0x0300 != m_oHeader.Version)
return SetError();
// Если у нас не задан Output, значит мы считаем, что идет сканирование метафайла.
// Если у нас не задан Output, значит мы считаем, что идет сканирование метафайла.
// Во время сканирования мы регистрируем все точки и вычисляем BoundingBox
if (m_pOutput)
{
@ -1627,6 +1603,8 @@ namespace MetaFile
TRect m_oBoundingBox;
bool m_bFirstPoint;
TXForm m_oTransform;
};
}

View File

@ -253,6 +253,8 @@ namespace MetaFile
m_ushTextAlign = TA_TOP | TA_LEFT | TA_NOUPDATECP;
m_ushCharSpacing = 0;
m_oTransform.Init();
m_oFinalTransform.Init();
m_oFinalTransform2.Init();
}
CWmfDC::~CWmfDC()
{
@ -286,6 +288,7 @@ namespace MetaFile
pNewDC->m_ushCharSpacing = m_ushCharSpacing;
pNewDC->m_oTransform.Init();
pNewDC->m_oClip = m_oClip;
pNewDC->m_oFinalTransform.Copy(&m_oFinalTransform);
return pNewDC;
}
@ -363,53 +366,55 @@ namespace MetaFile
switch (m_ushMapMode)
{
case MM_TEXT: // 1 unit = 1pt
{
SetPixelWidth(1);
SetPixelHeight(1);
break;
}
case MM_LOMETRIC: // 1 unit = 0.1mm
{
double dPixel = 0.1 * 72 / 25.4;
SetPixelWidth(dPixel);
SetPixelHeight(dPixel);
break;
}
case MM_HIMETRIC: // 1 unit = 0.01mm
{
double dPixel = 0.01 * 72 / 25.4;
SetPixelWidth(dPixel);
SetPixelHeight(dPixel);
break;
}
case MM_LOENGLISH: // 1 unit = 0.01 inch
{
double dPixel = 0.01 * 72;
SetPixelWidth(dPixel);
SetPixelHeight(dPixel);
break;
}
case MM_HIENGLISH: // 1 unit = 0.001 inch
{
double dPixel = 0.001 * 72;
SetPixelWidth(dPixel);
SetPixelHeight(dPixel);
break;
}
case MM_TWIPS: // 1 unit = 1/1440 inch
{
SetPixelWidth(0.05);
SetPixelHeight(0.05);
break;
}
case MM_ISOTROPIC:
case MM_ANISOTROPIC:
{
UpdatePixelMetrics();
break;
}
case MM_TEXT: // 1 unit = 1pt
{
SetPixelWidth(1);
SetPixelHeight(1);
break;
}
case MM_LOMETRIC: // 1 unit = 0.1mm
{
double dPixel = 0.1 * 72 / 25.4;
SetPixelWidth(dPixel);
SetPixelHeight(dPixel);
break;
}
case MM_HIMETRIC: // 1 unit = 0.01mm
{
double dPixel = 0.01 * 72 / 25.4;
SetPixelWidth(dPixel);
SetPixelHeight(dPixel);
break;
}
case MM_LOENGLISH: // 1 unit = 0.01 inch
{
double dPixel = 0.01 * 72;
SetPixelWidth(dPixel);
SetPixelHeight(dPixel);
break;
}
case MM_HIENGLISH: // 1 unit = 0.001 inch
{
double dPixel = 0.001 * 72;
SetPixelWidth(dPixel);
SetPixelHeight(dPixel);
break;
}
case MM_TWIPS: // 1 unit = 1/1440 inch
{
SetPixelWidth(0.05);
SetPixelHeight(0.05);
break;
}
case MM_ISOTROPIC:
case MM_ANISOTROPIC:
{
UpdatePixelMetrics();
break;
}
}
UpdateFinalTransform();
}
unsigned int CWmfDC::GetMapMode()
{
@ -440,24 +445,28 @@ namespace MetaFile
m_oWindow.x = shX;
m_oWindow.y = shY;
UpdatePixelMetrics();
UpdateFinalTransform();
}
void CWmfDC::SetWindowExt(short shW, short shH)
{
m_oWindow.w = shW;
m_oWindow.h = shH;
UpdatePixelMetrics();
UpdateFinalTransform();
}
void CWmfDC::SetWindowOff(short shX, short shY)
{
m_oWindow.x += shX;
m_oWindow.y += shY;
UpdatePixelMetrics();
UpdateFinalTransform();
}
void CWmfDC::SetWindowScale(double dX, double dY)
{
m_oWindow.w = (short)(m_oWindow.w * dX);
m_oWindow.h = (short)(m_oWindow.h * dY);
UpdatePixelMetrics();
UpdateFinalTransform();
}
TWmfWindow* CWmfDC::GetViewport()
{
@ -468,24 +477,28 @@ namespace MetaFile
m_oViewport.x = shX;
m_oViewport.y = shY;
UpdatePixelMetrics();
UpdateFinalTransform();
}
void CWmfDC::SetViewportExt(short shW, short shH)
{
m_oViewport.w = shW;
m_oViewport.h = shH;
UpdatePixelMetrics();
UpdateFinalTransform();
}
void CWmfDC::SetViewportOff(short shX, short shY)
{
m_oViewport.x += shX;
m_oViewport.y += shY;
UpdatePixelMetrics();
UpdateFinalTransform();
}
void CWmfDC::SetViewportScale(double dX, double dY)
{
m_oViewport.w = (short)(m_oViewport.w * dX);
m_oViewport.h = (short)(m_oViewport.h * dY);
UpdatePixelMetrics();
UpdateFinalTransform();
}
bool CWmfDC::UpdatePixelMetrics()
{
@ -510,6 +523,23 @@ namespace MetaFile
return true;
}
void CWmfDC::UpdateFinalTransform()
{
TWmfWindow* pWindow = GetWindow();
TWmfWindow* pViewPort = GetViewport();
TXForm oWindowXForm(1, 0, 0, 1, -pWindow->x, -pWindow->y);
TXForm oViewportXForm((double)GetPixelWidth(), 0, 0, (double)GetPixelHeight(), pViewPort->x, pViewPort->y);
m_oFinalTransform.Init();
m_oFinalTransform.Multiply(oWindowXForm, MWT_RIGHTMULTIPLY);
m_oFinalTransform.Multiply(m_oTransform, MWT_RIGHTMULTIPLY);
m_oFinalTransform.Multiply(oViewportXForm, MWT_RIGHTMULTIPLY);
m_oFinalTransform2.Init();
m_oFinalTransform2.Multiply(oWindowXForm, MWT_RIGHTMULTIPLY);
m_oFinalTransform2.Multiply(oViewportXForm, MWT_RIGHTMULTIPLY);
}
void CWmfDC::SetTextColor(TWmfColor& oColor)
{
m_oTextColor = oColor;
@ -603,6 +633,13 @@ namespace MetaFile
{
return &m_oTransform;
}
TXForm* CWmfDC::GetFinalTransform(int iGraphicsMode)
{
if (GM_COMPATIBLE == iGraphicsMode)
return &m_oFinalTransform2;
return &m_oFinalTransform;
}
unsigned int CWmfDC::GetMiterLimit()
{
return 0;
@ -611,4 +648,4 @@ namespace MetaFile
{
return &m_oClip;
}
}
}

View File

@ -129,6 +129,7 @@ namespace MetaFile
unsigned short GetCharSpacing();
TXForm* GetTransform();
TXForm* GetInverseTransform();
TXForm* GetFinalTransform(int iGraphicsMode);
unsigned int GetMiterLimit();
CWmfClip* GetClip();
@ -137,6 +138,7 @@ namespace MetaFile
void SetPixelWidth(double dW);
void SetPixelHeight(double dH);
bool UpdatePixelMetrics();
void UpdateFinalTransform();
private:
@ -163,6 +165,8 @@ namespace MetaFile
unsigned short m_ushTextAlign;
unsigned short m_ushCharSpacing;
TXForm m_oTransform;
TXForm m_oFinalTransform;
TXForm m_oFinalTransform2;
CWmfClip m_oClip;
};
}

View File

@ -5936,7 +5936,7 @@ namespace SVG
if (!strXmlNode.empty())
{
if ('#' == strXmlNode.c_str()[0])
return false;
return NULL;
}
#ifdef _DEBUG