Commit c16c34a8 authored by Elen.Subbotina's avatar Elen.Subbotina Committed by Alexander Trofimov

в целом закончено

git-svn-id: svn://fileserver/activex/AVS/Sources/TeamlabOffice/trunk/ServerComponents@62841 954022d7-b5bf-4e40-9824-e11837661b57
parent 52f22ef3
...@@ -4,6 +4,8 @@ ...@@ -4,6 +4,8 @@
#include <string> #include <string>
#include "../Common/MetaFileTypes.h" #include "../Common/MetaFileTypes.h"
#include "../Common/MetaFileRenderer.h"
#include "../../../../ASCOfficeUtils/ASCOfficeUtilsLib/OfficeUtils.h" #include "../../../../ASCOfficeUtils/ASCOfficeUtilsLib/OfficeUtils.h"
#ifdef _DEBUG #ifdef _DEBUG
#include <iostream> #include <iostream>
...@@ -133,7 +135,7 @@ void CSvmFile::PlayMetaFile() ...@@ -133,7 +135,7 @@ void CSvmFile::PlayMetaFile()
case META_LINECOLOR_ACTION: Read_META_SETLINECOLOR(); break; case META_LINECOLOR_ACTION: Read_META_SETLINECOLOR(); break;
case META_FILLCOLOR_ACTION: Read_META_SETFILLCOLOR(); break; case META_FILLCOLOR_ACTION: Read_META_SETFILLCOLOR(); break;
case META_TEXTFILLCOLOR_ACTION: case META_TEXTFILLCOLOR_ACTION: Read_META_SETTEXTFILLCOLOR(); break;
case META_TEXTCOLOR_ACTION: Read_META_SETTEXTCOLOR(); break; case META_TEXTCOLOR_ACTION: Read_META_SETTEXTCOLOR(); break;
case META_GRADIENT_ACTION: Read_META_GRADIENT(); break; case META_GRADIENT_ACTION: Read_META_GRADIENT(); break;
case META_GRADIENTEX_ACTION: Read_META_GRADIENTEX(); break; case META_GRADIENTEX_ACTION: Read_META_GRADIENTEX(); break;
...@@ -207,7 +209,7 @@ void CSvmFile::PlayMetaFile() ...@@ -207,7 +209,7 @@ void CSvmFile::PlayMetaFile()
name = L"(out of bounds)"; name = L"(out of bounds)";
std::wcout << name << L"\t(" << actionType << L") " << L"\tversion = " << m_currentActionVersion << L"\t; totalSize = " << m_unRecordSize << L"\n"; std::wcout << name << L"\t(" << actionType << L") " << L"\tversion = " << m_currentActionVersion << L"\t; totalSize = " << m_unRecordSize << L"\n";
} */ }*/
#endif #endif
m_currentActionType = actionType; m_currentActionType = actionType;
...@@ -262,7 +264,6 @@ void CSvmFile::Read_SVM_HEADER() ...@@ -262,7 +264,6 @@ void CSvmFile::Read_SVM_HEADER()
{ {
m_oStream >> m_oHeader; m_oStream >> m_oHeader;
m_oBoundingBox = m_oHeader.boundRect;
m_pDC->SetWindowExt ( m_oHeader.boundRect.nRight - m_oHeader.boundRect.nLeft, m_pDC->SetWindowExt ( m_oHeader.boundRect.nRight - m_oHeader.boundRect.nLeft,
m_oHeader.boundRect.nBottom - m_oHeader.boundRect.nTop); m_oHeader.boundRect.nBottom - m_oHeader.boundRect.nTop);
...@@ -272,9 +273,10 @@ void CSvmFile::Read_SVM_HEADER() ...@@ -272,9 +273,10 @@ void CSvmFile::Read_SVM_HEADER()
m_pDC->SetMapMode(m_oHeader.mapMode, true); m_pDC->SetMapMode(m_oHeader.mapMode, true);
m_oBoundingBox = m_oHeader.boundRect;
m_oBoundingBox.nRight *= m_pDC->m_dPixelWidthPrefered; m_oBoundingBox.nRight *= m_pDC->m_dPixelWidthPrefered;
m_oBoundingBox.nBottom *= m_pDC->m_dPixelHeightPrefered; m_oBoundingBox.nBottom *= m_pDC->m_dPixelHeightPrefered;
m_bFirstPoint = true; m_bFirstPoint = true;
} }
void CSvmFile::Read_META_POLYLINE() void CSvmFile::Read_META_POLYLINE()
...@@ -326,7 +328,7 @@ void CSvmFile::Read_META_POLYLINE() ...@@ -326,7 +328,7 @@ void CSvmFile::Read_META_POLYLINE()
LineTo(polygon.points[i].x, polygon.points[i].y); LineTo(polygon.points[i].x, polygon.points[i].y);
} }
ClosePath(); ClosePath();
DrawPath(true, true);//false); DrawPath(true, false);
} }
void CSvmFile::Read_META_POLYGON() void CSvmFile::Read_META_POLYGON()
...@@ -410,27 +412,27 @@ void CSvmFile::Read_META_POLYPOLYGON() ...@@ -410,27 +412,27 @@ void CSvmFile::Read_META_POLYPOLYGON()
} }
ClosePath(); ClosePath();
} }
for (unsigned short ushPolygonIndex = 0; ushPolygonIndex < complexPolygons.size(); ushPolygonIndex++) //for (unsigned short ushPolygonIndex = 0; ushPolygonIndex < complexPolygons.size(); ushPolygonIndex++)
{ //{
unsigned short ushPointsCount = complexPolygons[ushPolygonIndex].points.size(); // unsigned short ushPointsCount = complexPolygons[ushPolygonIndex].points.size();
if (ushPointsCount <= 0) // if (ushPointsCount <= 0)
continue; // continue;
MoveTo(complexPolygons[ushPolygonIndex].points[0].x, complexPolygons[ushPolygonIndex].points[0].y); // MoveTo(complexPolygons[ushPolygonIndex].points[0].x, complexPolygons[ushPolygonIndex].points[0].y);
for (int i = 1; i < ushPointsCount; i++) // for (int i = 1; i < ushPointsCount; i++)
{ // {
LineTo(complexPolygons[ushPolygonIndex].points[i].x, complexPolygons[ushPolygonIndex].points[i].y); // LineTo(complexPolygons[ushPolygonIndex].points[i].x, complexPolygons[ushPolygonIndex].points[i].y);
} // }
ClosePath(); // ClosePath();
} //}
DrawPath(true, true); DrawPath(true, true);
} }
} }
void CSvmFile::Read_META_SETMAPMODE() void CSvmFile::Read_META_SETMAPMODE()
{ {
MapMode mapMode; TSvmMapMode mapMode;
m_oStream >> mapMode; m_oStream >> mapMode;
m_pDC->SetMapMode(mapMode); m_pDC->SetMapMode(mapMode);
...@@ -484,11 +486,12 @@ void CSvmFile::Read_META_ARRAYTEXT() ...@@ -484,11 +486,12 @@ void CSvmFile::Read_META_ARRAYTEXT()
m_oStream >> nArrayLen; m_oStream >> nArrayLen;
int *mpDXAry = NULL;
if( nArrayLen > 0 ) if( nArrayLen > 0 )
{ {
// #i9762#, #106172# Ensure that DX array is at least mnLen entries long // #i9762#, #106172# Ensure that DX array is at least mnLen entries long
const unsigned int nIntAryLen = (std::max)(nArrayLen, (unsigned int)nLen) ; const unsigned int nIntAryLen = (std::max)(nArrayLen, (unsigned int)nLen) ;
int *mpDXAry = new int[ nIntAryLen ]; mpDXAry = new int[ nIntAryLen ];
int i=0; int i=0;
for( i = 0; i < nArrayLen; i++ ) for( i = 0; i < nArrayLen; i++ )
...@@ -512,7 +515,10 @@ void CSvmFile::Read_META_ARRAYTEXT() ...@@ -512,7 +515,10 @@ void CSvmFile::Read_META_ARRAYTEXT()
tempBuffer += (wchar_t)nTemp; tempBuffer += (wchar_t)nTemp;
} }
} }
DrawText(sText, sText.length(), startPoint.x, startPoint.y); DrawText(sText, sText.length(), startPoint.x, startPoint.y, mpDXAry);
if (mpDXAry)
delete []mpDXAry;
} }
void CSvmFile::Read_META_TEXTRECT() void CSvmFile::Read_META_TEXTRECT()
{ {
...@@ -554,6 +560,15 @@ void CSvmFile::Read_META_SETTEXTCOLOR() ...@@ -554,6 +560,15 @@ void CSvmFile::Read_META_SETTEXTCOLOR()
m_pDC->SetTextColor(oColor); m_pDC->SetTextColor(oColor);
UpdateOutputDC(); UpdateOutputDC();
} }
void CSvmFile::Read_META_SETTEXTFILLCOLOR()
{
TSvmColor oColor;
m_oStream >> oColor;
m_pDC->SetTextBgColor(oColor);
UpdateOutputDC();
}
void CSvmFile::Read_META_SETFILLCOLOR() void CSvmFile::Read_META_SETFILLCOLOR()
{ {
if (m_currentActionType == META_GRADIENT_ACTION || if (m_currentActionType == META_GRADIENT_ACTION ||
...@@ -901,12 +916,13 @@ void CSvmFile::Read_META_BMPSCALE() ...@@ -901,12 +916,13 @@ void CSvmFile::Read_META_BMPSCALE()
m_oStream.Skip(bitmap_info.nSizeImage); m_oStream.Skip(bitmap_info.nSizeImage);
delete Header; delete Header;
} }
if (bitmap_info.nHeight > m_oBoundingBox.nRight && if (bitmap_info.nHeight > m_oBoundingBox.nBottom &&
bitmap_info.nWidth > m_oBoundingBox.nBottom) bitmap_info.nWidth > m_oBoundingBox.nRight)
{ {
m_oBoundingBox.nRight = bitmap_info.nWidth; m_oBoundingBox.nRight = bitmap_info.nWidth;
m_oBoundingBox.nBottom = bitmap_info.nHeight; m_oBoundingBox.nBottom = bitmap_info.nHeight;
} }
TSvmSize size; TSvmSize size;
TSvmPoint point; TSvmPoint point;
...@@ -914,40 +930,17 @@ void CSvmFile::Read_META_BMPSCALE() ...@@ -914,40 +930,17 @@ void CSvmFile::Read_META_BMPSCALE()
m_oStream >> size.cx; m_oStream >> size.cx;
m_oStream >> size.cy; m_oStream >> size.cy;
MapMode aMapMode_new, aMapMode_old; TSvmMapMode aMapMode_new, aMapMode_old;
// //
aMapMode_old.unit = m_pDC->GetMapMode(); aMapMode_old = m_pDC->m_oMapMode;
aMapMode_new.unit = MAP_RELATIVE; aMapMode_new.unit = MAP_RELATIVE;
m_pDC->SetMapMode(aMapMode_new); m_pDC->SetMapMode(aMapMode_new);
if (pBgraBuffer && m_pOutput) if (pBgraBuffer && m_pOutput)
{ {
double w = m_oHeader.boundRect.nRight-m_oHeader.boundRect.nLeft;
double h = m_oHeader.boundRect.nBottom-m_oHeader.boundRect.nTop;
w /= size.cx;
h /= size.cy;
double dX = point.x, dY = point.y, dX1 = point.x + size.cx, dY1 = point.y + size.cy; double dX = point.x, dY = point.y, dX1 = point.x + size.cx, dY1 = point.y + size.cy;
dX *= w;
dX1 *= w;
dY *= h;
dY1 *= h;
//dX /= w;
//dX1 /= w;
//
//dY /= h;
//dY1 /= h;
//dX *= bitmap_info.nWidth;
//dX1 *= bitmap_info.nWidth;
//
//dY *= bitmap_info.nHeight;
//dY1 *= bitmap_info.nHeight;
TranslatePoint(dX, dY, dX, dY); TranslatePoint(dX, dY, dX, dY);
TranslatePoint(dX + dX1, dY + dY1, dX1, dY1); TranslatePoint(dX + dX1, dY + dY1, dX1, dY1);
......
...@@ -49,22 +49,16 @@ class CSvmFile : virtual public IMetaFileBase ...@@ -49,22 +49,16 @@ class CSvmFile : virtual public IMetaFileBase
} }
TRect* GetDCBounds() TRect* GetDCBounds()
{ {
//if ( MAP_RELATIVE == m_pDC->GetMapMode()) //if (m_oHeader.mapMode.isSimple)
//{ if (m_pDC->m_oMapMode.isSimple)
TSvmWindow* pViewport = m_pDC->GetViewport(); {
m_oDCRect = m_oBoundingBox;
m_oDCRect.nLeft = pViewport->lX;
m_oDCRect.nTop = pViewport->lY;
m_oDCRect.nRight = pViewport->ulW + pViewport->lX;
m_oDCRect.nBottom = pViewport->ulH + pViewport->lY;
return &m_oDCRect; return &m_oDCRect;
}
//} else
//else
{ {
return &m_oHeader.boundRect; return &m_oHeader.boundRect;
} }
} }
double GetPixelHeight() double GetPixelHeight()
{ {
...@@ -111,10 +105,10 @@ class CSvmFile : virtual public IMetaFileBase ...@@ -111,10 +105,10 @@ class CSvmFile : virtual public IMetaFileBase
{ {
return m_pDC->GetBgMode(); return m_pDC->GetBgMode();
} }
int GetTextBgColor() int GetTextBgColor()
{ {
TSvmColor& oColor = m_pDC->GetBgColor(); TSvmColor& oColor = m_pDC->GetTextBgColor();
return oColor.color; //METAFILE_RGBA(oColor.r, oColor.g, oColor.b); return METAFILE_RGBA(oColor.r, oColor.g, oColor.b);
} }
unsigned int GetFillMode() unsigned int GetFillMode()
{ {
...@@ -187,6 +181,7 @@ class CSvmFile : virtual public IMetaFileBase ...@@ -187,6 +181,7 @@ class CSvmFile : virtual public IMetaFileBase
void Read_META_TEXTALIGN(); void Read_META_TEXTALIGN();
void Read_META_TEXTRECT(); void Read_META_TEXTRECT();
void Read_META_SETMAPMODE(); void Read_META_SETMAPMODE();
void Read_META_SETTEXTFILLCOLOR();
void Read_META_SETTEXTCOLOR(); void Read_META_SETTEXTCOLOR();
void Read_META_SETFILLCOLOR(); void Read_META_SETFILLCOLOR();
void Read_META_SETLINECOLOR(); void Read_META_SETLINECOLOR();
...@@ -211,14 +206,16 @@ class CSvmFile : virtual public IMetaFileBase ...@@ -211,14 +206,16 @@ class CSvmFile : virtual public IMetaFileBase
} }
void TranslatePoint(int nX, int nY, double& dX, double &dY) void TranslatePoint(int nX, int nY, double& dX, double &dY)
{ {
TSvmWindow* pWindow = m_pDC->GetWindow(); if (m_pDC->m_oMapMode.isSimple ) return;
TSvmWindow* pViewport = m_pDC->GetViewport(); //TSvmWindow* pWindow = m_pDC->GetWindow();
//TSvmWindow* pViewport = m_pDC->GetViewport();
dX = (double)(nX) * m_pDC->m_dPixelWidth ;
dY = (double)(nY) * m_pDC->m_dPixelHeight ;
dX = (double)((double)(nX - pWindow->lX) * m_pDC->m_dPixelWidth) + pViewport->lX; //dX = (double)((double)(nX - pWindow->lX) * m_pDC->m_dPixelWidth) + pViewport->lX;
dY = (double)((double)(nY - pWindow->lY) * m_pDC->m_dPixelHeight) + pViewport->lY; //dY = (double)((double)(nY - pWindow->lY) * m_pDC->m_dPixelHeight) + pViewport->lY;
// Координаты приходят уже с примененной матрицей. Поэтому сначала мы умножаем на матрицу преобразования,
// вычитаем начальные координаты и умножаем на обратную матрицу преобразования.
TRect* pBounds = GetDCBounds(); TRect* pBounds = GetDCBounds();
double dT = pBounds->nTop; double dT = pBounds->nTop;
...@@ -326,7 +323,6 @@ class CSvmFile : virtual public IMetaFileBase ...@@ -326,7 +323,6 @@ class CSvmFile : virtual public IMetaFileBase
{ {
m_pOutput->MoveTo(dX, dY); m_pOutput->MoveTo(dX, dY);
} }
m_pDC->SetCurPos(nX, nY); m_pDC->SetCurPos(nX, nY);
} }
void LineTo(int nX, int nY) void LineTo(int nX, int nY)
...@@ -344,7 +340,6 @@ class CSvmFile : virtual public IMetaFileBase ...@@ -344,7 +340,6 @@ class CSvmFile : virtual public IMetaFileBase
{ {
m_pOutput->LineTo(dX, dY); m_pOutput->LineTo(dX, dY);
} }
m_pDC->SetCurPos(nX, nY); m_pDC->SetCurPos(nX, nY);
} }
void LineTo(TSvmPoint& oPoint) void LineTo(TSvmPoint& oPoint)
...@@ -368,7 +363,6 @@ class CSvmFile : virtual public IMetaFileBase ...@@ -368,7 +363,6 @@ class CSvmFile : virtual public IMetaFileBase
{ {
m_pOutput->CurveTo(dX1, dY1, dX2, dY2, dXe, dYe); m_pOutput->CurveTo(dX1, dY1, dX2, dY2, dXe, dYe);
} }
m_pDC->SetCurPos(nXe, nYe); m_pDC->SetCurPos(nXe, nYe);
} }
void CurveTo(TSvmPoint& oPoint1, TSvmPoint& oPoint2, TSvmPoint& oPointE) void CurveTo(TSvmPoint& oPoint1, TSvmPoint& oPoint2, TSvmPoint& oPointE)
...@@ -451,9 +445,16 @@ class CSvmFile : virtual public IMetaFileBase ...@@ -451,9 +445,16 @@ class CSvmFile : virtual public IMetaFileBase
pdDx[unCharIndex] = (dX1 - dX)/unCharsCount; pdDx[unCharIndex] = (dX1 - dX)/unCharsCount;
} }
} }
TSvmMapMode aMapMode_new, aMapMode_old;
//
aMapMode_old = m_pDC->m_oMapMode;
aMapMode_new.unit = MAP_RELATIVE;
m_pDC->SetMapMode(aMapMode_new);
m_pOutput->DrawString(wsString, unCharsCount, dX, dY, pdDx); m_pOutput->DrawString(wsString, unCharsCount, dX, dY, pdDx);
m_pDC->SetMapMode(aMapMode_old);
if (pdDx) if (pdDx)
delete[] pdDx; delete[] pdDx;
} }
...@@ -472,6 +473,7 @@ class CSvmFile : virtual public IMetaFileBase ...@@ -472,6 +473,7 @@ class CSvmFile : virtual public IMetaFileBase
if (m_pOutput) if (m_pOutput)
{ {
double dX = nX, dY = nY; double dX = nX, dY = nY;
TranslatePoint(nX, nY, dX, dY); TranslatePoint(nX, nY, dX, dY);
...@@ -481,66 +483,40 @@ class CSvmFile : virtual public IMetaFileBase ...@@ -481,66 +483,40 @@ class CSvmFile : virtual public IMetaFileBase
pdDx = new double[unCharsCount]; pdDx = new double[unCharsCount];
if (pdDx) if (pdDx)
{ {
int nCurX = nX; int nCurX = nX;
double dCurX = dX; double dCurX = dX;
int nCurXFirst = nX;
double dCurXFirst = dX;
for (unsigned int unCharIndex = 0; unCharIndex < unCharsCount; unCharIndex++) for (unsigned int unCharIndex = 0; unCharIndex < unCharsCount; unCharIndex++)
{ {
int nX1 = nCurX + pnDx[unCharIndex]; int nX1 = nCurXFirst + pnDx[unCharIndex];
double dX1 = nX1, dY1; double dX1 = nX1, dY1;
TranslatePoint(nX1, nY, dX1, dY1); TranslatePoint(nX1, nY, dX1, dY1);
pdDx[unCharIndex] = dX1 - dCurX; pdDx[unCharIndex] = dX1 - dCurX;
nCurX = nX1; nCurX = nX1;
dCurX = dX1; dCurX = dX1;
} }
} }
} }
TSvmMapMode aMapMode_new, aMapMode_old;
//
aMapMode_old = m_pDC->m_oMapMode;
aMapMode_new.unit = MAP_RELATIVE;
m_pDC->SetMapMode(aMapMode_new);
m_pOutput->DrawString(wsString, unCharsCount, dX, dY, pdDx); m_pOutput->DrawString(wsString, unCharsCount, dX, dY, pdDx);
m_pDC->SetMapMode(aMapMode_old);
if (pdDx) if (pdDx)
delete[] pdDx; delete[] pdDx;
} }
} }
TRect GetBoundingBox()
{
TRect oBB = m_oHeader.boundRect;
if (abs(oBB.nRight - oBB.nLeft) <= 1)
oBB.nRight = oBB.nLeft + 1024;
if (abs(oBB.nBottom - oBB.nTop) <= 1)
oBB.nBottom = oBB.nTop + 1024;
return oBB;
}
void RegisterPoint(short shX, short shY)
{
shX *= m_pDC->m_dPixelWidth;
shY *= m_pDC->m_dPixelHeight;
if (m_bFirstPoint)
{
m_oBoundingBox.nLeft = shX;
m_oBoundingBox.nRight = shX;
m_oBoundingBox.nTop = shY;
m_oBoundingBox.nBottom = shY;
m_bFirstPoint = false;
}
else
{
if (shX < m_oBoundingBox.nLeft)
m_oBoundingBox.nLeft = shX;
else if (shX > m_oBoundingBox.nRight)
m_oBoundingBox.nRight = shX;
if (shY < m_oBoundingBox.nTop)
m_oBoundingBox.nTop = shY;
else if (shY > m_oBoundingBox.nBottom)
m_oBoundingBox.nBottom = shY;
}
}
}; };
......
...@@ -57,16 +57,16 @@ Fraction::Fraction(CDataStream &stream) ...@@ -57,16 +57,16 @@ Fraction::Fraction(CDataStream &stream)
stream >> denominator; stream >> denominator;
} }
MapMode::MapMode() TSvmMapMode::TSvmMapMode()
: version() : version()
, unit(0) , unit(0)
, scaleX() , scaleX()
, scaleY() , scaleY()
, isSimple(true) , isSimple(false)
{ {
} }
MapMode::MapMode(CDataStream &stream) TSvmMapMode::TSvmMapMode(CDataStream &stream)
{ {
stream >> *this; stream >> *this;
} }
...@@ -85,7 +85,7 @@ CDataStream& operator>>(CDataStream &stream, Fraction &fract) ...@@ -85,7 +85,7 @@ CDataStream& operator>>(CDataStream &stream, Fraction &fract)
return stream; return stream;
} }
CDataStream& operator>>(CDataStream &stream, MapMode &mm) CDataStream& operator>>(CDataStream &stream, TSvmMapMode &mm)
{ {
stream >> mm.version; stream >> mm.version;
stream >> mm.unit; stream >> mm.unit;
......
...@@ -103,10 +103,11 @@ enum ESvmLineStyle ...@@ -103,10 +103,11 @@ enum ESvmLineStyle
LINE_SOLID = 1, LINE_SOLID = 1,
LINE_DASH = 2 LINE_DASH = 2
}; };
struct MapMode
struct TSvmMapMode
{ {
MapMode(); TSvmMapMode();
MapMode(CDataStream &stream); TSvmMapMode(CDataStream &stream);
VersionCompat version; VersionCompat version;
unsigned short unit; unsigned short unit;
...@@ -123,7 +124,7 @@ struct SvmHeader ...@@ -123,7 +124,7 @@ struct SvmHeader
VersionCompat versionCompat; VersionCompat versionCompat;
unsigned int compressionMode; unsigned int compressionMode;
MapMode mapMode; TSvmMapMode mapMode;
TRect boundRect; TRect boundRect;
unsigned int actionCount; unsigned int actionCount;
}; };
...@@ -372,7 +373,7 @@ void parseString(CDataStream &stream, std::wstring &string, unsigned short versi ...@@ -372,7 +373,7 @@ void parseString(CDataStream &stream, std::wstring &string, unsigned short versi
CDataStream& operator>>(CDataStream &stream, VersionCompat &compat); CDataStream& operator>>(CDataStream &stream, VersionCompat &compat);
CDataStream& operator>>(CDataStream &stream, Fraction &fract); CDataStream& operator>>(CDataStream &stream, Fraction &fract);
CDataStream& operator>>(CDataStream &stream, MapMode &mm); CDataStream& operator>>(CDataStream &stream, TSvmMapMode &mm);
CDataStream& operator>>(CDataStream &stream, SvmHeader &header); CDataStream& operator>>(CDataStream &stream, SvmHeader &header);
CDataStream& operator>>(CDataStream &stream, TSvmSize &s); CDataStream& operator>>(CDataStream &stream, TSvmSize &s);
CDataStream& operator>>(CDataStream &stream, TSvmPoint &p); CDataStream& operator>>(CDataStream &stream, TSvmPoint &p);
......
...@@ -390,14 +390,14 @@ void CSvmPlayer::InitStockPen(bool bNull, unsigned char r, unsigned char g, u ...@@ -390,14 +390,14 @@ void CSvmPlayer::InitStockPen(bool bNull, unsigned char r, unsigned char g, u
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
CSvmDC::CSvmDC() CSvmDC::CSvmDC()
{ {
m_ulMapMode = MAP_POINT; m_oMapMode.unit = MAP_POINT;
m_pBrush = NULL; m_pBrush = NULL;
m_pPen = NULL; m_pPen = NULL;
m_pFont = NULL; m_pFont = NULL;
m_oTransform.Init(); m_oTransform.Init();
m_oInverseTransform.Init(); m_oInverseTransform.Init();
m_oTextColor.Init(); m_oTextColor.Init();
m_oBgColor.Init(); m_oTextBgColor.Init();
m_ulTextAlign = TA_TOP | TA_LEFT | TA_NOUPDATECP; m_ulTextAlign = TA_TOP | TA_LEFT | TA_NOUPDATECP;
m_ulBgMode = TRANSPARENT; m_ulBgMode = TRANSPARENT;
m_ulMiterLimit = 0; m_ulMiterLimit = 0;
...@@ -422,7 +422,7 @@ CSvmDC* CSvmDC::Copy() ...@@ -422,7 +422,7 @@ CSvmDC* CSvmDC::Copy()
if (!pNewDC) if (!pNewDC)
return NULL; return NULL;
pNewDC->m_ulMapMode = m_ulMapMode; pNewDC->m_oMapMode = m_oMapMode;
pNewDC->m_pBrush = m_pBrush; pNewDC->m_pBrush = m_pBrush;
pNewDC->m_pPen = m_pPen; pNewDC->m_pPen = m_pPen;
pNewDC->m_pFont = m_pFont; pNewDC->m_pFont = m_pFont;
...@@ -430,7 +430,7 @@ CSvmDC* CSvmDC::Copy() ...@@ -430,7 +430,7 @@ CSvmDC* CSvmDC::Copy()
pNewDC->m_oTransform.Copy(&m_oTransform); pNewDC->m_oTransform.Copy(&m_oTransform);
pNewDC->m_oInverseTransform.Copy(&m_oInverseTransform); pNewDC->m_oInverseTransform.Copy(&m_oInverseTransform);
pNewDC->m_oTextColor.Copy(m_oTextColor); pNewDC->m_oTextColor.Copy(m_oTextColor);
pNewDC->m_oBgColor.Copy(m_oBgColor); pNewDC->m_oTextBgColor.Copy(m_oTextBgColor);
pNewDC->m_ulTextAlign = m_ulTextAlign; pNewDC->m_ulTextAlign = m_ulTextAlign;
pNewDC->m_ulBgMode = m_ulBgMode; pNewDC->m_ulBgMode = m_ulBgMode;
pNewDC->m_ulMiterLimit = m_ulMiterLimit; pNewDC->m_ulMiterLimit = m_ulMiterLimit;
...@@ -451,16 +451,16 @@ CSvmDC* CSvmDC::Copy() ...@@ -451,16 +451,16 @@ CSvmDC* CSvmDC::Copy()
return pNewDC; return pNewDC;
} }
ESvmMapUnit CSvmDC::GetMapMode() ESvmMapUnit CSvmDC::GetMapModeUnit()
{ {
return m_ulMapMode; return (ESvmMapUnit)m_oMapMode.unit;
} }
void CSvmDC::SetMapMode(MapMode & mapMode, bool prefered ) void CSvmDC::SetMapMode(TSvmMapMode & mapMode, bool prefered )
{ {
m_ulMapMode = (ESvmMapUnit)mapMode.unit; m_oMapMode = mapMode;
double dPixel = 1.;// double dPixel = 1.;//
switch (m_ulMapMode) switch (GetMapModeUnit())
{ {
case MAP_MM: // 1 unit = 1 mm case MAP_MM: // 1 unit = 1 mm
{ {
...@@ -561,6 +561,7 @@ void CSvmDC::SetTextColor(TSvmColor& oColor) ...@@ -561,6 +561,7 @@ void CSvmDC::SetTextColor(TSvmColor& oColor)
{ {
m_oTextColor.Copy(oColor); m_oTextColor.Copy(oColor);
} }
TSvmColor& CSvmDC::GetTextColor() TSvmColor& CSvmDC::GetTextColor()
{ {
return m_oTextColor; return m_oTextColor;
...@@ -607,17 +608,17 @@ unsigned int CSvmDC::GetBgMode() ...@@ -607,17 +608,17 @@ unsigned int CSvmDC::GetBgMode()
{ {
return m_ulBgMode; return m_ulBgMode;
} }
void CSvmDC::SetBgColor(TSvmColor& oColor) void CSvmDC::SetTextBgColor(TSvmColor& oColor)
{ {
m_oBgColor.Copy(oColor); m_oTextBgColor.Copy(oColor);
} }
void CSvmDC::SetBgColor(TSvmColor* oColor) void CSvmDC::SetTextBgColor(TSvmColor* oColor)
{ {
m_oBgColor.Copy(*oColor); m_oTextBgColor.Copy(*oColor);
} }
TSvmColor& CSvmDC::GetBgColor() TSvmColor& CSvmDC::GetTextBgColor()
{ {
return m_oBgColor; return m_oTextBgColor;
} }
void CSvmDC::SetMiterLimit(unsigned int ulMiter) void CSvmDC::SetMiterLimit(unsigned int ulMiter)
{ {
...@@ -670,35 +671,22 @@ void CSvmDC::SetPixelHeight(double dPixelH) ...@@ -670,35 +671,22 @@ void CSvmDC::SetPixelHeight(double dPixelH)
{ {
m_dPixelHeight = dPixelH; m_dPixelHeight = dPixelH;
} }
void CSvmDC::SetWindowOrigin(TSvmPoint& oPoint)
{
m_oWindow.lX = oPoint.x;
m_oWindow.lY = oPoint.y;
UpdatePixelMetrics();
}
void CSvmDC::SetWindowExtents(TSvmSize& oPoint)
{
m_oWindow.ulW = oPoint.cx;
m_oWindow.ulH = oPoint.cy;
UpdatePixelMetrics();
}
TSvmWindow* CSvmDC::GetWindow() TSvmWindow* CSvmDC::GetWindow()
{ {
return &m_oWindow; return &m_oWindow;
} }
void CSvmDC::SetViewportOrigin(TSvmPoint& oPoint) void CSvmDC::SetViewportOff(int lX, int lY)
{ {
m_oViewport.lX = oPoint.x; m_oViewport.lX = lX;
m_oViewport.lY = oPoint.y; m_oViewport.lY = lY;
UpdatePixelMetrics(); UpdatePixelMetrics();
} }
void CSvmDC::SetViewportExtents(TSvmSize& oPoint) void CSvmDC::SetViewportExt(int lX, int lY)
{ {
m_oViewport.ulW = oPoint.cx; m_oViewport.ulW = lX;
m_oViewport.ulH = oPoint.cy; m_oViewport.ulH = lY;
UpdatePixelMetrics(); UpdatePixelMetrics();
} }
...@@ -708,10 +696,10 @@ TSvmWindow* CSvmDC::GetViewport() ...@@ -708,10 +696,10 @@ TSvmWindow* CSvmDC::GetViewport()
} }
bool CSvmDC::UpdatePixelMetrics() bool CSvmDC::UpdatePixelMetrics()
{ {
if (m_ulMapMode == MAP_RELATIVE) if (GetMapModeUnit() == MAP_RELATIVE)
{ {
double dPixelX = (double)m_oViewport.ulW / (double)m_oWindow.ulW; double dPixelX = 1;//(double)m_oViewport.ulW / (double)m_oWindow.ulW;
double dPixelY = (double)m_oViewport.ulH / (double)m_oWindow.ulH; double dPixelY = 1;//(double)m_oViewport.ulH / (double)m_oWindow.ulH;
SetPixelWidth(dPixelX); SetPixelWidth(dPixelX);
SetPixelHeight(dPixelY); SetPixelHeight(dPixelY);
...@@ -719,11 +707,11 @@ bool CSvmDC::UpdatePixelMetrics() ...@@ -719,11 +707,11 @@ bool CSvmDC::UpdatePixelMetrics()
return true; return true;
} }
void CSvmDC::SetRop2Mode(unsigned int& nMode) void CSvmDC::SetRop2Mode(unsigned int& nMode)
{ {
m_ulRop2Mode = nMode; m_ulRop2Mode = nMode;
} }
unsigned int CSvmDC::GetRop2Mode() unsigned int CSvmDC::GetRop2Mode()
{ {
return m_ulRop2Mode; return m_ulRop2Mode;
} }
......
...@@ -63,8 +63,8 @@ public: ...@@ -63,8 +63,8 @@ public:
~CSvmDC(); ~CSvmDC();
CSvmDC* Copy(); CSvmDC* Copy();
ESvmMapUnit GetMapMode(); ESvmMapUnit GetMapModeUnit();
void SetMapMode(MapMode &mapMode, bool prefered = false); void SetMapMode(TSvmMapMode &mapMode, bool prefered = false);
TXForm* GetTransform(); TXForm* GetTransform();
TXForm* GetInverseTransform(); TXForm* GetInverseTransform();
void MultiplyTransform(TXForm& oForm, unsigned int ulMode); void MultiplyTransform(TXForm& oForm, unsigned int ulMode);
...@@ -80,9 +80,11 @@ public: ...@@ -80,9 +80,11 @@ public:
unsigned int GetTextAlign(); unsigned int GetTextAlign();
void SetBgMode(unsigned int ulBgMode); void SetBgMode(unsigned int ulBgMode);
unsigned int GetBgMode(); unsigned int GetBgMode();
void SetBgColor(TSvmColor& oColor);
void SetBgColor(TSvmColor* oColor); void SetTextBgColor(TSvmColor& oColor);
TSvmColor& GetBgColor(); void SetTextBgColor(TSvmColor* oColor);
TSvmColor& GetTextBgColor();
void SetMiterLimit(unsigned int ulMiter); void SetMiterLimit(unsigned int ulMiter);
unsigned int GetMiterLimit(); unsigned int GetMiterLimit();
void SetFillMode(unsigned int ulFillMode); void SetFillMode(unsigned int ulFillMode);
...@@ -92,11 +94,7 @@ public: ...@@ -92,11 +94,7 @@ public:
CSvmPen* GetPen(); CSvmPen* GetPen();
void SetStretchMode(unsigned int& oMode); void SetStretchMode(unsigned int& oMode);
unsigned int GetStretchMode(); unsigned int GetStretchMode();
void SetWindowOrigin(TSvmPoint& oPoint);
void SetWindowExtents(TSvmSize& oPoint);
TSvmWindow* GetWindow(); TSvmWindow* GetWindow();
void SetViewportOrigin(TSvmPoint& oPoint);
void SetViewportExtents(TSvmSize& oPoint);
TSvmWindow* GetViewport(); TSvmWindow* GetViewport();
void SetRop2Mode(unsigned int& nMode); void SetRop2Mode(unsigned int& nMode);
unsigned int GetRop2Mode(); unsigned int GetRop2Mode();
...@@ -111,6 +109,9 @@ public: ...@@ -111,6 +109,9 @@ public:
void SetArcDirection(unsigned int unDirection); void SetArcDirection(unsigned int unDirection);
unsigned int GetArcDirection(); unsigned int GetArcDirection();
void SetViewportOff(int lX, int lY);
void SetViewportExt(int lX, int lY);
void SetWindowOff(short shX, short shY) void SetWindowOff(short shX, short shY)
{ {
m_oWindow.lX += shX; m_oWindow.lX += shX;
...@@ -136,21 +137,24 @@ public: ...@@ -136,21 +137,24 @@ public:
double m_dPixelWidthPrefered; double m_dPixelWidthPrefered;
double m_dPixelHeightPrefered; double m_dPixelHeightPrefered;
TSvmMapMode m_oMapMode;
private: private:
void SetPixelWidth(double dPixelW); void SetPixelWidth(double dPixelW);
void SetPixelHeight(double dPixelH); void SetPixelHeight(double dPixelH);
bool UpdatePixelMetrics(); bool UpdatePixelMetrics();
ESvmMapUnit m_ulMapMode;
CSvmBrush* m_pBrush; CSvmBrush* m_pBrush;
CSvmPen* m_pPen; CSvmPen* m_pPen;
CSvmFont* m_pFont; CSvmFont* m_pFont;
//CSvmLogPalette* m_pPalette; //CSvmLogPalette* m_pPalette;
TXForm m_oTransform; TXForm m_oTransform;
TXForm m_oInverseTransform; TXForm m_oInverseTransform;
TSvmColor m_oTextColor; TSvmColor m_oTextColor;
TSvmColor m_oBgColor; TSvmColor m_oTextBgColor;
unsigned int m_ulTextAlign; unsigned int m_ulTextAlign;
unsigned int m_ulBgMode; unsigned int m_ulBgMode;
unsigned int m_ulMiterLimit; unsigned int m_ulMiterLimit;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment