Added a draft version of combining structures

This commit is contained in:
Kirill Poljakov
2021-06-15 22:15:08 +03:00
parent 57774bb53e
commit b9308428ed
13 changed files with 1279 additions and 558 deletions

View File

@ -71,6 +71,12 @@ INCLUDEPATH += \
HEADERS += \
../../raster/Metafile/CXmlOutput.h \
../../raster/Metafile/Emf/EmfInterpretator/CEmfInterpretarorRender.h \
../../raster/Metafile/Emf/EmfInterpretator/CEmfInterpretarorXml.h \
../../raster/Metafile/Emf/EmfParser/CEmfParser.h \
../../raster/Metafile/Emf/EmfParser/CEmfParserBase.h \
../../raster/Metafile/Emf/EmfParser/CEmfxParser.h \
../../raster/Metafile/Emf/EmfInterpretator/CEmfInterpretarorBase.h \
./../config.h \
\
./../Matrix.h \
@ -112,6 +118,10 @@ HEADERS += \
SOURCES += \
../../raster/Metafile/CXmlOutput.cpp \
../../raster/Metafile/Emf/EmfInterpretator/CEmfInterpretarorRender.cpp \
../../raster/Metafile/Emf/EmfInterpretator/CEmfInterpretarorXml.cpp \
../../raster/Metafile/Emf/EmfParser/CEmfParser.cpp \
../../raster/Metafile/Emf/EmfParser/CEmfxParser.cpp \
./../Matrix.cpp \
./../GraphicsPath.cpp \
./../../raster/BgraFrame.cpp \

File diff suppressed because it is too large Load Diff

View File

@ -33,6 +33,9 @@
#define _METAFILE_EMF_EMFFILE_H
#include "../Common/MetaFile.h"
#include "EmfParser/CEmfParser.h"
#include "EmfParser/CEmfxParser.h"
#include "EmfInterpretator/CEmfInterpretarorXml.h"
#include "../CXmlOutput.h"
#include "EmfTypes.h"
@ -53,8 +56,9 @@ namespace MetaFile
{
m_pPath = NULL;
m_pDC = m_oPlayer.GetDC();
m_pOutputXml = NULL;
m_pParser = new CEmfParser;
m_pInterpretator = new CEmfInterpretarorXml();
}
~CEmfFile()
@ -62,6 +66,8 @@ namespace MetaFile
ClearFile();
if (NULL != m_pOutputXml)
delete m_pOutputXml;
if (NULL != m_pInterpretator)
delete m_pInterpretator;
}
void CreateOutputXml(TypeXmlOutput oTypeXmlOutput)
@ -346,7 +352,9 @@ namespace MetaFile
friend class CEmfPlayer;
friend class CEmfClip;
CEmfInterpretarorXml* m_pInterpretator;
CXmlOutput *m_pOutputXml;
CEmfParserBase *m_pParser;
};
}

View File

@ -0,0 +1,42 @@
#ifndef CEMFINTERPRETARORBASE_H
#define CEMFINTERPRETARORBASE_H
#include "../EmfTypes.h"
#include "../EmfObjects.h"
#include "../../Common/IOutputDevice.h"
namespace MetaFile
{
class CEmfInterpretarorBase : public IOutputDevice
{
public:
virtual void SaveValue (TEmfAlphaBlend&) = 0;
virtual void SaveValue (TEmfStretchDIBITS&) = 0;
virtual void SaveValue (TEmfBitBlt&) = 0;
virtual void SaveValue (TEmfSetDiBitsToDevice&) = 0;
virtual void SaveValue (TEmfStretchBLT&) = 0;
virtual void SaveValue (TXForm&) = 0;
virtual void SaveValue (CEmfLogBrushEx&) = 0;
virtual void SaveValue (TEmfColor&) = 0;
virtual void SaveValue (CEmfLogFont&) = 0;
virtual void SaveValue (TEmfPointL&) = 0;
virtual void SaveValue (TEmfPointS&) = 0;
virtual void SaveValue (TEmfRectL&) = 0;
virtual void SaveValue (TEmfSizeL&) = 0;
virtual void SaveValue (TEmfDibPatternBrush&) = 0;
virtual void SaveValue (CEmfLogPalette&) = 0;
virtual void SaveValue (TEmfExtTextoutA&) = 0;
virtual void SaveValue (TEmfExtTextoutW&) = 0;
virtual void SaveValue (TEmfPolyTextoutA&) = 0;
virtual void SaveValue (TEmfPolyTextoutW&) = 0;
virtual void SaveValue (TEmfSmallTextout&) = 0;
virtual void SaveValue (unsigned short&) = 0;
virtual void SaveValue (unsigned char&) = 0;
virtual void SaveValue (unsigned int&) = 0;
virtual void SaveValue (double&) = 0;
virtual void SaveValue (int&) = 0;
};
}
#endif // CEMFINTERPRETARORBASE_H

View File

@ -0,0 +1,7 @@
#include "CEmfInterpretarorRender.h"
namespace MetaFile
{
CEmfInterpretarorRender::CEmfInterpretarorRender()
{}
}

View File

@ -0,0 +1,16 @@
#ifndef CEMFINTERPRETARORRENDER_H
#define CEMFINTERPRETARORRENDER_H
#include "CEmfInterpretarorBase.h"
#include "../../Common/MetaFileRenderer.h"
namespace MetaFile
{
class CEmfInterpretarorRender : public CEmfInterpretarorBase
{
public:
CEmfInterpretarorRender();
};
}
#endif // CEMFINTERPRETARORRENDER_H

View File

@ -0,0 +1,47 @@
#include "CEmfInterpretarorXml.h"
namespace MetaFile
{
CEmfInterpretarorXml::CEmfInterpretarorXml() :
m_pOutputXml(new CXmlOutput(TypeXmlOutput::IsWriter))
{
m_pOutputXml->WriteString(L"<?xml version=\"1.0\"?>\n");
m_pOutputXml->WriteNodeBegin(L"EMF");
}
CEmfInterpretarorXml::~CEmfInterpretarorXml()
{
if (NULL != m_pOutputXml)
{
m_pOutputXml->WriteNodeEnd(L"EMF");
m_pOutputXml->SaveToFile(NSFile::GetProcessDirectory() + L"/test.xml");
delete m_pOutputXml;
}
}
void CEmfInterpretarorXml::Save_EMR_HEADER(const TEmfHeader &oTEmfHeader, const unsigned int &unValue, CDataStream &oDataStream)
{
m_pOutputXml->WriteNodeBegin(L"EMR_HEADER", {XmlArgument(L"Id", EMR_HEADER),
XmlArgument(L"Size", unValue + 8)});
m_pOutputXml->WriteNode(L"Bounds", oTEmfHeader.oBounds);
m_pOutputXml->WriteNode(L"Frame", oTEmfHeader.oFrame);
m_pOutputXml->WriteNode(L"Signature", oTEmfHeader.ulSignature);
m_pOutputXml->WriteNode(L"Version", oTEmfHeader.ulVersion);
m_pOutputXml->WriteNode(L"Size", oTEmfHeader.ulSize);
m_pOutputXml->WriteNode(L"Records", oTEmfHeader.ulRecords);
m_pOutputXml->WriteNode(L"CountObjects", oTEmfHeader.ushObjects);
m_pOutputXml->WriteNode(L"Reserved", oTEmfHeader.ushReserved);
m_pOutputXml->WriteNode(L"SizeDescription", oTEmfHeader.ulSizeDescription);
m_pOutputXml->WriteNode(L"OffsetDescription", oTEmfHeader.ulOffsetDescription);
m_pOutputXml->WriteNode(L"PalletEntries", oTEmfHeader.ulPalEntries);
m_pOutputXml->WriteNode(L"Device", oTEmfHeader.oDevice);
m_pOutputXml->WriteNode(L"Millimeters", oTEmfHeader.oMillimeters);
unsigned int unSize = unValue - 80;
if (unSize > 0)
m_pOutputXml->WriteNode(L"Buffer", oDataStream, unSize);
m_pOutputXml->WriteNodeEnd(L"EMR_HEADER");
}
}

View File

@ -0,0 +1,23 @@
#ifndef CEMFINTERPRETARORXML_H
#define CEMFINTERPRETARORXML_H
//#include "CEmfInterpretarorBase.h"
#include "../../Common/IOutputDevice.h"
#include "../../CXmlOutput.h"
namespace MetaFile
{
class CEmfInterpretarorXml /*: public IOutputDevice*/
{
public:
CEmfInterpretarorXml();
virtual ~CEmfInterpretarorXml();
void Save_EMR_HEADER(const TEmfHeader& oTEmfHeader, const unsigned int &unValue, CDataStream &oDataStream);
private:
CXmlOutput *m_pOutputXml;
};
}
#endif // CEMFINTERPRETARORXML_H

View File

@ -0,0 +1,175 @@
#include "CEmfParser.h"
namespace MetaFile
{
CEmfParser::CEmfParser()
{
m_pStream = new CDataStream;
}
bool CEmfParser::IsValid() const
{
return m_pStream->IsValid();
}
bool CEmfParser::IsEof() const
{
return m_pStream->IsEof();
}
unsigned int CEmfParser::CanRead()
{
return m_pStream->CanRead();
}
void CEmfParser::Skip(unsigned int unSkip)
{
m_pStream->Skip(unSkip);
}
unsigned int CEmfParser::Tell()
{
return m_pStream->Tell();
}
void CEmfParser::SeekToStart()
{
m_pStream->SeekToStart();
}
void CEmfParser::SetStream(CDataStream &pDataStream)
{
m_pStream = &pDataStream;
}
CDataStream *CEmfParser::GetDataStream() const
{
return m_pStream;
}
void CEmfParser::ReadValue(TEmfAlphaBlend &oTEmfAlphaBlend)
{
*m_pStream >> oTEmfAlphaBlend;
}
void CEmfParser::ReadValue(TEmfStretchDIBITS &oTEmfStretchDIBITS)
{
*m_pStream >> oTEmfStretchDIBITS;
}
void CEmfParser::ReadValue(TEmfBitBlt &oTEmfBitBlt)
{
*m_pStream >> oTEmfBitBlt;
}
void CEmfParser::ReadValue(TEmfSetDiBitsToDevice &oTEmfSetDiBitsToDevice)
{
*m_pStream >> oTEmfSetDiBitsToDevice;
}
void CEmfParser::ReadValue(TEmfStretchBLT &oTEmfStretchBLT)
{
*m_pStream >> oTEmfStretchBLT;
}
void CEmfParser::ReadValue(TXForm &oTXForm)
{
*m_pStream >> oTXForm;
}
void CEmfParser::ReadValue(CEmfLogBrushEx &oCEmfLogBrushEx)
{
*m_pStream >> oCEmfLogBrushEx;
}
void CEmfParser::ReadValue(TEmfColor &oTEmfColor)
{
*m_pStream >> oTEmfColor;
}
void CEmfParser::ReadValue(CEmfLogFont &oCEmfLogFont)
{
*m_pStream >> oCEmfLogFont;
}
void CEmfParser::ReadValue(TEmfPointL &oTEmfPointL)
{
*m_pStream >> oTEmfPointL;
}
void CEmfParser::ReadValue(TEmfPointS &oTEmfPointS)
{
*m_pStream >> oTEmfPointS;
}
void CEmfParser::ReadValue(TEmfRectL &oTEmfRectL)
{
*m_pStream >> oTEmfRectL;
}
void CEmfParser::ReadValue(TEmfSizeL &oTEmfSizeL)
{
*m_pStream >> oTEmfSizeL;
}
void CEmfParser::ReadValue(TEmfDibPatternBrush &oTEmfDibPatternBrush)
{
*m_pStream >> oTEmfDibPatternBrush;
}
void CEmfParser::ReadValue(CEmfLogPalette &oCEmfLogPalette)
{
*m_pStream >> oCEmfLogPalette;
}
void CEmfParser::ReadValue(TEmfExtTextoutA &oTEmfExtTextoutA)
{
*m_pStream >> oTEmfExtTextoutA;
}
void CEmfParser::ReadValue(TEmfExtTextoutW &oTEmfExtTextoutW)
{
*m_pStream >> oTEmfExtTextoutW;
}
void CEmfParser::ReadValue(TEmfPolyTextoutA &oTEmfPolyTextoutA)
{
*m_pStream >> oTEmfPolyTextoutA;
}
void CEmfParser::ReadValue(TEmfPolyTextoutW &oTEmfPolyTextoutW)
{
*m_pStream >> oTEmfPolyTextoutW;
}
void CEmfParser::ReadValue(TEmfSmallTextout &oTEmfSmallTextout)
{
*m_pStream >> oTEmfSmallTextout;
}
void CEmfParser::ReadValue(unsigned short &ushValue)
{
*m_pStream >> ushValue;
}
void CEmfParser::ReadValue(unsigned char &ucValue)
{
*m_pStream >> ucValue;
}
void CEmfParser::ReadValue(unsigned int &unValue)
{
*m_pStream >> unValue;
}
void CEmfParser::ReadValue(double &dValue)
{
*m_pStream >> dValue;
}
void CEmfParser::ReadValue(int &nValue)
{
*m_pStream >> nValue;
}
}

View File

@ -0,0 +1,54 @@
#ifndef CEMFPARSER_H
#define CEMFPARSER_H
#include "CEmfParserBase.h"
namespace MetaFile
{
class CEmfParser : public CEmfParserBase
{
public:
CEmfParser();
bool IsValid() const override;
bool IsEof() const override;
unsigned int CanRead() override;
void Skip(unsigned int unSkip) override;
unsigned int Tell() override;
void SeekToStart() override;
void SetStream (CDataStream& pDataStream) override;
CDataStream* GetDataStream() const override;
void ReadValue (TEmfAlphaBlend& oTEmfAlphaBlend) override;
void ReadValue (TEmfStretchDIBITS& oTEmfStretchDIBITS) override;
void ReadValue (TEmfBitBlt& oTEmfBitBlt) override;
void ReadValue (TEmfSetDiBitsToDevice& oTEmfSetDiBitsToDevice) override;
void ReadValue (TEmfStretchBLT& oTEmfStretchBLT) override;
void ReadValue (TXForm& oTXForm) override;
void ReadValue (CEmfLogBrushEx& oCEmfLogBrushEx) override;
void ReadValue (TEmfColor& oTEmfColor) override;
void ReadValue (CEmfLogFont& oCEmfLogFont) override;
void ReadValue (TEmfPointL& oTEmfPointL) override;
void ReadValue (TEmfPointS& oTEmfPointS) override;
void ReadValue (TEmfRectL& oTEmfRectL) override;
void ReadValue (TEmfSizeL& oTEmfSizeL) override;
void ReadValue (TEmfDibPatternBrush& oTEmfDibPatternBrush) override;
void ReadValue (CEmfLogPalette& oCEmfLogPalette) override;
void ReadValue (TEmfExtTextoutA& oTEmfExtTextoutA) override;
void ReadValue (TEmfExtTextoutW& oTEmfExtTextoutW) override;
void ReadValue (TEmfPolyTextoutA& oTEmfPolyTextoutA) override;
void ReadValue (TEmfPolyTextoutW& oTEmfPolyTextoutW) override;
void ReadValue (TEmfSmallTextout& oTEmfSmallTextout) override;
void ReadValue (unsigned short& ushValue) override;
void ReadValue (unsigned char& ucValue) override;
void ReadValue (unsigned int& unValue) override;
void ReadValue (double& dValue) override;
void ReadValue (int& nValue) override;
private:
CDataStream *m_pStream;
};
}
#endif // CEMFPARSER_H

View File

@ -0,0 +1,50 @@
#ifndef CEMFPARSERBASE_H
#define CEMFPARSERBASE_H
#include "../EmfTypes.h"
#include "../EmfObjects.h"
#include "../../Common/MetaFileUtils.h"
namespace MetaFile
{
class CEmfParserBase
{
public:
virtual bool IsValid() const = 0;
virtual bool IsEof() const = 0;
virtual unsigned int CanRead() = 0;
virtual void Skip(unsigned int) = 0;
virtual unsigned int Tell() = 0;
virtual void SeekToStart() = 0;
virtual void SetStream (CDataStream&) = 0;
virtual CDataStream* GetDataStream() const = 0;
virtual void ReadValue (TEmfAlphaBlend&) = 0;
virtual void ReadValue (TEmfStretchDIBITS&) = 0;
virtual void ReadValue (TEmfBitBlt&) = 0;
virtual void ReadValue (TEmfSetDiBitsToDevice&) = 0;
virtual void ReadValue (TEmfStretchBLT&) = 0;
virtual void ReadValue (TXForm&) = 0;
virtual void ReadValue (CEmfLogBrushEx&) = 0;
virtual void ReadValue (TEmfColor&) = 0;
virtual void ReadValue (CEmfLogFont&) = 0;
virtual void ReadValue (TEmfPointL&) = 0;
virtual void ReadValue (TEmfPointS&) = 0;
virtual void ReadValue (TEmfRectL&) = 0;
virtual void ReadValue (TEmfSizeL&) = 0;
virtual void ReadValue (TEmfDibPatternBrush&) = 0;
virtual void ReadValue (CEmfLogPalette&) = 0;
virtual void ReadValue (TEmfExtTextoutA&) = 0;
virtual void ReadValue (TEmfExtTextoutW&) = 0;
virtual void ReadValue (TEmfPolyTextoutA&) = 0;
virtual void ReadValue (TEmfPolyTextoutW&) = 0;
virtual void ReadValue (TEmfSmallTextout&) = 0;
virtual void ReadValue (unsigned short&) = 0;
virtual void ReadValue (unsigned char&) = 0;
virtual void ReadValue (unsigned int&) = 0;
virtual void ReadValue (double&) = 0;
virtual void ReadValue (int&) = 0;
};
}
#endif // CEMFPARSERBASE_H

View File

@ -0,0 +1,5 @@
#include "CEmfxParser.h"
namespace MetaFile
{
}

View File

@ -0,0 +1,51 @@
#ifndef CEMFXPARSER_H
#define CEMFXPARSER_H
#include "CEmfParserBase.h"
#include "../../CXmlOutput.h"
namespace MetaFile
{
class CEmfxParser : public CEmfParserBase
{
public:
virtual bool IsValid() const = 0;
virtual bool IsEof() const = 0;
virtual unsigned int CanRead() = 0;
virtual void Skip(unsigned int) = 0;
virtual unsigned int Tell() = 0;
virtual void SeekToStart() = 0;
virtual void SetStream (CDataStream&) = 0;
virtual void ReadValue (TEmfAlphaBlend&) = 0;
virtual void ReadValue (TEmfStretchDIBITS&) = 0;
virtual void ReadValue (TEmfBitBlt&) = 0;
virtual void ReadValue (TEmfSetDiBitsToDevice&) = 0;
virtual void ReadValue (TEmfStretchBLT&) = 0;
virtual void ReadValue (TXForm&) = 0;
virtual void ReadValue (CEmfLogBrushEx&) = 0;
virtual void ReadValue (TEmfColor&) = 0;
virtual void ReadValue (CEmfLogFont&) = 0;
virtual void ReadValue (TEmfPointL&) = 0;
virtual void ReadValue (TEmfPointS&) = 0;
virtual void ReadValue (TEmfRectL&) = 0;
virtual void ReadValue (TEmfSizeL&) = 0;
virtual void ReadValue (TEmfDibPatternBrush&) = 0;
virtual void ReadValue (CEmfLogPalette&) = 0;
virtual void ReadValue (TEmfExtTextoutA&) = 0;
virtual void ReadValue (TEmfExtTextoutW&) = 0;
virtual void ReadValue (TEmfPolyTextoutA&) = 0;
virtual void ReadValue (TEmfPolyTextoutW&) = 0;
virtual void ReadValue (TEmfSmallTextout&) = 0;
virtual void ReadValue (unsigned short&) = 0;
virtual void ReadValue (unsigned char&) = 0;
virtual void ReadValue (unsigned int&) = 0;
virtual void ReadValue (double&) = 0;
virtual void ReadValue (int&) = 0;
private:
};
}
#endif // CEMFXPARSER_H