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