Compare commits

..

8 Commits

Author SHA1 Message Date
390ab3bcc8 [ios] add constants (#157) 2019-06-18 13:46:28 +03:00
075f70c220 Fix prefious commit (#156) 2019-06-17 16:17:14 +03:00
6abf1613ec Fix mac build (#155) 2019-06-17 15:58:07 +03:00
0abc21d4ee Merge pull request #154 from ONLYOFFICE/ios/fixed-build
Fix ios build
2019-06-17 14:13:41 +03:00
7a7cdab770 up 2019-06-17 14:10:11 +03:00
7ae3c6f2ea Fix bug with svg (#153) 2019-06-07 15:22:15 +03:00
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
11 changed files with 230 additions and 168 deletions

View File

@ -38,6 +38,7 @@ fi
if [[ "$platform" == "mac" ]]
then
sed -i -e "s/if (mac_sdk_version != mac_sdk_min_build_override/if (false \&\& mac_sdk_version != mac_sdk_min_build_override/g" build/config/mac/mac_sdk.gni
# for new macOS!!!
#sudo xcode-select -s /Applications/Xcode.app/Contents/Developer
gn gen out.gn/mac_64 --args='is_debug=false target_cpu="x64" v8_static_library=true is_component_build=false v8_use_snapshot=false'

View File

@ -788,4 +788,7 @@
#define ASC_MENU_EVENT_TYPE_ON_EDIT_TEXT 22003
#define ASC_EVENT_TYPE_SPELLCHECK_MESSAGE 22004
#define ASC_EVENT_TYPE_SPELLCHECK_TURN_ON 22005
#endif //_BUILD_EDITOR_DEFINES_CROSSPLATFORM_H_

View File

@ -173,6 +173,8 @@
17A7F02B1B13154500760AFB /* SvmPlayer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 17A7F0221B13154500760AFB /* SvmPlayer.cpp */; };
17DD67B71B7E2778000F800F /* lepton_utils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 17DD67B51B7E2778000F800F /* lepton_utils.cpp */; };
697B72D41E3B78D90054C17C /* EmfFile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 697B72D31E3B78D90054C17C /* EmfFile.cpp */; };
8A2EE9BB22AFBAC200E8AB1A /* SVGTransformer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8A2EE9B922AFBAC200E8AB1A /* SVGTransformer.cpp */; };
8A2EE9BC22AFBAC200E8AB1A /* SVGFramework.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8A2EE9BA22AFBAC200E8AB1A /* SVGFramework.cpp */; };
8AC2819D2195A582006FA3D7 /* StringExt.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8AC2819B2195A582006FA3D7 /* StringExt.cpp */; };
/* End PBXBuildFile section */
@ -436,6 +438,10 @@
17A7F0231B13154500760AFB /* SvmPlayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SvmPlayer.h; sourceTree = "<group>"; };
17DD67B51B7E2778000F800F /* lepton_utils.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lepton_utils.cpp; sourceTree = "<group>"; };
697B72D31E3B78D90054C17C /* EmfFile.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = EmfFile.cpp; sourceTree = "<group>"; };
8A2EE9B722AFBAC200E8AB1A /* SVGFramework.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGFramework.h; sourceTree = "<group>"; };
8A2EE9B822AFBAC200E8AB1A /* SVGTransformer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGTransformer.h; sourceTree = "<group>"; };
8A2EE9B922AFBAC200E8AB1A /* SVGTransformer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SVGTransformer.cpp; sourceTree = "<group>"; };
8A2EE9BA22AFBAC200E8AB1A /* SVGFramework.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SVGFramework.cpp; sourceTree = "<group>"; };
8AC2819B2195A582006FA3D7 /* StringExt.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = StringExt.cpp; path = ../../../common/StringExt.cpp; sourceTree = "<group>"; };
8AC2819C2195A582006FA3D7 /* StringExt.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = StringExt.h; path = ../../../common/StringExt.h; sourceTree = "<group>"; };
/* End PBXFileReference section */
@ -470,6 +476,7 @@
17A762BC1B0F35320046BC0B /* metafile */ = {
isa = PBXGroup;
children = (
8A2EE9B622AFBAC200E8AB1A /* svg */,
17A7F0191B13154500760AFB /* StarView */,
17A765081B0F3A3E0046BC0B /* Jp2 */,
17A7631F1B0F38FE0046BC0B /* JBig2 */,
@ -793,6 +800,18 @@
path = ../../../raster/Metafile/StarView;
sourceTree = "<group>";
};
8A2EE9B622AFBAC200E8AB1A /* svg */ = {
isa = PBXGroup;
children = (
8A2EE9B722AFBAC200E8AB1A /* SVGFramework.h */,
8A2EE9B822AFBAC200E8AB1A /* SVGTransformer.h */,
8A2EE9B922AFBAC200E8AB1A /* SVGTransformer.cpp */,
8A2EE9BA22AFBAC200E8AB1A /* SVGFramework.cpp */,
);
name = svg;
path = ../../../raster/Metafile/svg;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
@ -827,6 +846,7 @@
developmentRegion = English;
hasScannedForEncodings = 0;
knownRegions = (
English,
en,
);
mainGroup = 17A762B11B0F35320046BC0B;
@ -1002,6 +1022,8 @@
17A763EF1B0F39370046BC0B /* bardecode.cpp in Sources */,
17A7631E1B0F389C0046BC0B /* MetaFileUtils.cpp in Sources */,
17A763231B0F39120046BC0B /* JBig2File.cpp in Sources */,
8A2EE9BC22AFBAC200E8AB1A /* SVGFramework.cpp in Sources */,
8A2EE9BB22AFBAC200E8AB1A /* SVGTransformer.cpp in Sources */,
17A765031B0F39370046BC0B /* writefile.cpp in Sources */,
17A764B11B0F39370046BC0B /* psio2stub.cpp in Sources */,
17A764FF1B0F39370046BC0B /* webpio.cpp in Sources */,

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

@ -144,7 +144,7 @@ namespace MetaFile
}
return false;
};
}
bool CMetaFile::DrawOnRenderer(IRenderer* pRenderer, double dX, double dY, double dWidth, double dHeight)
{
if (NULL == pRenderer)
@ -176,7 +176,7 @@ namespace MetaFile
}
pRenderer->EndCommand(c_nImageType);
return true;
};
}
void CMetaFile::Close()
{
m_oWmfFile.Close();
@ -185,7 +185,7 @@ namespace MetaFile
m_oSvgFile.Close();
m_lType = 0;
};
}
int CMetaFile::GetType()
{
return m_lType;

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

@ -3003,7 +3003,7 @@ namespace SVG
bool CreateImage (BYTE* pBuffer, unsigned long Length, int ImageEncoder = INVALID_ENCODER)
{
return false;
}
private:

View File

@ -828,6 +828,12 @@ namespace NSHtmlRenderer
}
HRESULT CASCSVGWriter::GetTransform(double *pdA, double *pdB, double *pdC, double *pdD, double *pdE, double *pdF)
{
*pdA = m_pTransform->sx();
*pdB = m_pTransform->shy();
*pdC = m_pTransform->shx();
*pdD = m_pTransform->sy();
*pdE = m_pTransform->tx();
*pdF = m_pTransform->ty();
return S_OK;
}
HRESULT CASCSVGWriter::ResetTransform(void)

View File

@ -42,7 +42,7 @@
</AdditionalOptions>
</TestAction>
<LaunchAction
buildConfiguration = "Release"
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"