Commit f37beb96 authored by Oleg.Korshul's avatar Oleg.Korshul Committed by Alexander Trofimov

utf 8

git-svn-id: svn://fileserver/activex/AVS/Sources/TeamlabOffice/trunk/ServerComponents@63563 954022d7-b5bf-4e40-9824-e11837661b57
parent 49337ff6
#ifndef _METAFILE_COMMON_IOUTPUTDEVICE_H #ifndef _METAFILE_COMMON_IOUTPUTDEVICE_H
#define _METAFILE_COMMON_IOUTPUTDEVICE_H #define _METAFILE_COMMON_IOUTPUTDEVICE_H
#include "MetaFileTypes.h" #include "MetaFileTypes.h"
...@@ -12,11 +12,11 @@ namespace MetaFile ...@@ -12,11 +12,11 @@ namespace MetaFile
IOutputDevice() {} IOutputDevice() {}
virtual ~IOutputDevice() {} virtual ~IOutputDevice() {}
// // Начало и окончание работы устройства
virtual void Begin() = 0; virtual void Begin() = 0;
virtual void End() = 0; virtual void End() = 0;
// pBuffer - BGRA ulWidth, ulHeight, // pBuffer - BGRA картинка размерами ulWidth, ulHeight, которую надо нарисовать в заданном ректе
virtual void DrawBitmap(double dX, double dY, double dW, double dH, BYTE* pBuffer, unsigned int unWidth, unsigned int unHeight) = 0; virtual void DrawBitmap(double dX, double dY, double dW, double dH, BYTE* pBuffer, unsigned int unWidth, unsigned int unHeight) = 0;
virtual void DrawString(std::wstring& wsText, unsigned int unCharsCount, double dX, double dY, double* pDx) = 0; virtual void DrawString(std::wstring& wsText, unsigned int unCharsCount, double dX, double dY, double* pDx) = 0;
......
#ifndef _METAFILE_COMMON_METAFILECLIP_H #ifndef _METAFILE_COMMON_METAFILECLIP_H
#define _METAFILE_COMMON_METAFILECLIP_H #define _METAFILE_COMMON_METAFILECLIP_H
#include "IOutputDevice.h" #include "IOutputDevice.h"
......
#ifndef _METAFILE_COMMON_METAFILERENDERER_H #ifndef _METAFILE_COMMON_METAFILERENDERER_H
#define _METAFILE_COMMON_METAFILERENDERER_H #define _METAFILE_COMMON_METAFILERENDERER_H
#include "../../../graphics/IRenderer.h" #include "../../../graphics/IRenderer.h"
...@@ -160,7 +160,7 @@ namespace MetaFile ...@@ -160,7 +160,7 @@ namespace MetaFile
if (NULL != pDx && unCharsCount > 1) if (NULL != pDx && unCharsCount > 1)
{ {
// pDx , // Тогда мы складываем все pDx кроме последнего символа, последний считаем отдельно
double dTempTextW = 0; double dTempTextW = 0;
for (unsigned int unCharIndex = 0; unCharIndex < unCharsCount - 1; unCharIndex++) for (unsigned int unCharIndex = 0; unCharIndex < unCharsCount - 1; unCharIndex++)
{ {
...@@ -186,7 +186,7 @@ namespace MetaFile ...@@ -186,7 +186,7 @@ namespace MetaFile
fW = (float)dMmToPt * (oBox.fMaxX - oBox.fMinX); fW = (float)dMmToPt * (oBox.fMaxX - oBox.fMinX);
} }
// // Просчитаем положение подчеркивания
pFontManager->GetUnderline(&fUndX1, &fUndY1, &fUndX2, &fUndY2, &fUndSize); pFontManager->GetUnderline(&fUndX1, &fUndY1, &fUndX2, &fUndY2, &fUndSize);
fUndY1 *= (float)dMmToPt; fUndY1 *= (float)dMmToPt;
fUndY2 *= (float)dMmToPt; fUndY2 *= (float)dMmToPt;
...@@ -204,11 +204,11 @@ namespace MetaFile ...@@ -204,11 +204,11 @@ namespace MetaFile
double dX = oTextPoint.x; double dX = oTextPoint.x;
double dY = oTextPoint.y; double dY = oTextPoint.y;
// // Найдем начальную точку текста
unsigned int ulTextAlign = m_pFile->GetTextAlign(); unsigned int ulTextAlign = m_pFile->GetTextAlign();
if (ulTextAlign & TA_BASELINE) if (ulTextAlign & TA_BASELINE)
{ {
// // Ничего не делаем
} }
else if (ulTextAlign & TA_BOTTOM) else if (ulTextAlign & TA_BOTTOM)
{ {
...@@ -237,7 +237,7 @@ namespace MetaFile ...@@ -237,7 +237,7 @@ namespace MetaFile
} }
else //if (ulTextAlign & TA_LEFT) else //if (ulTextAlign & TA_LEFT)
{ {
// // Ничего не делаем
} }
if (pFont->IsUnderline()) if (pFont->IsUnderline())
...@@ -251,12 +251,12 @@ namespace MetaFile ...@@ -251,12 +251,12 @@ namespace MetaFile
bool bChangeCTM = false; bool bChangeCTM = false;
if (0 != pFont->GetEscapement()) if (0 != pFont->GetEscapement())
{ {
// TODO: shEscapement, Orientation // TODO: тут реализован только параметр shEscapement, еще нужно реализовать параметр Orientation
m_pRenderer->SetTransform(dCosTheta, dSinTheta, -dSinTheta, dCosTheta, dX - dX * dCosTheta + dY * dSinTheta, dY - dX * dSinTheta - dY * dCosTheta); m_pRenderer->SetTransform(dCosTheta, dSinTheta, -dSinTheta, dCosTheta, dX - dX * dCosTheta + dY * dSinTheta, dY - dX * dSinTheta - dY * dCosTheta);
bChangeCTM = true; bChangeCTM = true;
} }
// // Для начала нарисуем фон текста
if (OPAQUE == m_pFile->GetTextBgMode()) if (OPAQUE == m_pFile->GetTextBgMode())
{ {
m_pRenderer->put_BrushType(c_BrushTypeSolid); m_pRenderer->put_BrushType(c_BrushTypeSolid);
...@@ -275,7 +275,7 @@ namespace MetaFile ...@@ -275,7 +275,7 @@ namespace MetaFile
m_pRenderer->PathCommandEnd(); m_pRenderer->PathCommandEnd();
} }
// // Нарисуем подчеркивание
if (pFont->IsUnderline()) if (pFont->IsUnderline())
{ {
m_pRenderer->put_PenSize((double)fUndSize); m_pRenderer->put_PenSize((double)fUndSize);
...@@ -291,12 +291,12 @@ namespace MetaFile ...@@ -291,12 +291,12 @@ namespace MetaFile
m_pRenderer->PathCommandEnd(); m_pRenderer->PathCommandEnd();
} }
// // Установим цвет текста
m_pRenderer->put_BrushType(c_BrushTypeSolid); m_pRenderer->put_BrushType(c_BrushTypeSolid);
m_pRenderer->put_BrushColor1(m_pFile->GetTextColor()); m_pRenderer->put_BrushColor1(m_pFile->GetTextColor());
m_pRenderer->put_BrushAlpha1(255); m_pRenderer->put_BrushAlpha1(255);
// // Рисуем сам текст
if (NULL == pDx) if (NULL == pDx)
{ {
...@@ -548,7 +548,7 @@ namespace MetaFile ...@@ -548,7 +548,7 @@ namespace MetaFile
case HS_DIAGCROSS: wsBrushType = L"diagCross"; break; case HS_DIAGCROSS: wsBrushType = L"diagCross"; break;
} }
// TODO: , Hatch RGB, BGR // TODO: Непонятно почему, но в Hatch все цвета идут не как RGB, а как BGR
if (TRANSPARENT == m_pFile->GetTextBgMode()) if (TRANSPARENT == m_pFile->GetTextBgMode())
m_pRenderer->put_BrushAlpha2(0); m_pRenderer->put_BrushAlpha2(0);
else else
...@@ -632,7 +632,7 @@ namespace MetaFile ...@@ -632,7 +632,7 @@ namespace MetaFile
int nColor = pPen->GetColor(); int nColor = pPen->GetColor();
double dPixelWidth = m_pFile->GetPixelWidth(); double dPixelWidth = m_pFile->GetPixelWidth();
// TODO: dWidth PS_GEOMETRIC // TODO: dWidth зависит еще от флага PS_GEOMETRIC в стиле карандаша
double dWidth = pPen->GetWidth() * m_dScaleX * dPixelWidth; double dWidth = pPen->GetWidth() * m_dScaleX * dPixelWidth;
if (dWidth <= 0.01) if (dWidth <= 0.01)
dWidth = 0; dWidth = 0;
...@@ -661,13 +661,13 @@ namespace MetaFile ...@@ -661,13 +661,13 @@ namespace MetaFile
double dMiterLimit = m_pFile->GetMiterLimit() * m_dScaleX * dPixelWidth; double dMiterLimit = m_pFile->GetMiterLimit() * m_dScaleX * dPixelWidth;
// TODO: PS_USERSTYLE // TODO: Реализовать PS_USERSTYLE
BYTE nDashStyle = Aggplus::DashStyleSolid;; BYTE nDashStyle = Aggplus::DashStyleSolid;;
// WinGDI 1px PS_SOLID // В WinGDI все карандаши толщиной больше 1px рисуются в стиле PS_SOLID
if (1 >= pPen->GetWidth() && PS_SOLID != ulPenStyle) if (1 >= pPen->GetWidth() && PS_SOLID != ulPenStyle)
{ {
dWidth = 0; // 1p dWidth = 0; // Специальное значение для 1pх карандаша
double dDpiX; double dDpiX;
m_pRenderer->get_DpiX(&dDpiX); m_pRenderer->get_DpiX(&dDpiX);
...@@ -753,9 +753,9 @@ namespace MetaFile ...@@ -753,9 +753,9 @@ namespace MetaFile
m_pRenderer->put_PenAlpha(255); m_pRenderer->put_PenAlpha(255);
m_pRenderer->put_PenMiterLimit(dMiterLimit); m_pRenderer->put_PenMiterLimit(dMiterLimit);
// TO DO: AVSRenderer, ushROPMode // TO DO: С текущим интерфейсом AVSRenderer, остальные случаи ushROPMode
// . // реализовать невозможно. Потому что данный параметр нужно протаскивать
// Pen'a, . // как параметр Pen'a, и тот кто рисует сам должен разруливать все случаи.
switch (m_pFile->GetRop2Mode()) switch (m_pFile->GetRop2Mode())
{ {
...@@ -786,12 +786,12 @@ namespace MetaFile ...@@ -786,12 +786,12 @@ namespace MetaFile
IRenderer* m_pRenderer; IRenderer* m_pRenderer;
IMetaFileBase* m_pFile; IMetaFileBase* m_pFile;
int m_lDrawPathType; int m_lDrawPathType;
double m_dX; // double m_dX; // Координаты левого верхнего угла
double m_dY; // double m_dY; //
double m_dW; // double m_dW; //
double m_dH; // double m_dH; //
double m_dScaleX; // /, double m_dScaleX; // Коэффициенты сжатия/растяжения, чтобы
double m_dScaleY; // . double m_dScaleY; // результирующая картинка была нужных размеров.
bool m_bStartedPath; bool m_bStartedPath;
}; };
} }
......
#include "MetaFileTypes.h" #include "MetaFileTypes.h"
#include "../Emf/EmfTypes.h" #include "../Emf/EmfTypes.h"
#include "../Wmf/WmfTypes.h" #include "../Wmf/WmfTypes.h"
......
#ifndef _METAFILE_COMMON_METAFILETYPES_H #ifndef _METAFILE_COMMON_METAFILETYPES_H
#define _METAFILE_COMMON_METAFILETYPES_H #define _METAFILE_COMMON_METAFILETYPES_H
#include <string> #include <string>
...@@ -410,7 +410,7 @@ namespace MetaFile ...@@ -410,7 +410,7 @@ namespace MetaFile
Init(); Init();
else if (MWT_LEFTMULTIPLY == ulMode) else if (MWT_LEFTMULTIPLY == ulMode)
{ {
// oOther ñëåâà, òåêóùàÿ ìàòðèöà ñïðàâà // oOther слева, текущая матрица справа
double dM11 = oOther.M11 * M11 + oOther.M12 * M21; double dM11 = oOther.M11 * M11 + oOther.M12 * M21;
double dM12 = oOther.M11 * M21 + oOther.M12 * M22; double dM12 = oOther.M11 * M21 + oOther.M12 * M22;
double dM21 = oOther.M21 * M11 + oOther.M22 * M21; double dM21 = oOther.M21 * M11 + oOther.M22 * M21;
...@@ -428,7 +428,7 @@ namespace MetaFile ...@@ -428,7 +428,7 @@ namespace MetaFile
} }
else if (MWT_RIGHTMULTIPLY == ulMode) else if (MWT_RIGHTMULTIPLY == ulMode)
{ {
// oOther ñïðàâà, òåêóùàÿ ìàòðèöà ñëåâà // oOther справа, текущая матрица слева
double dM11 = M11 * oOther.M11 + M12 * oOther.M21; double dM11 = M11 * oOther.M11 + M12 * oOther.M21;
double dM12 = M11 * oOther.M21 + M12 * oOther.M22; double dM12 = M11 * oOther.M21 + M12 * oOther.M22;
double dM21 = M21 * oOther.M11 + M22 * oOther.M21; double dM21 = M21 * oOther.M11 + M22 * oOther.M21;
......
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