mirror of
https://github.com/ONLYOFFICE/core.git
synced 2026-04-07 13:55:33 +08:00
1357 lines
32 KiB
C++
1357 lines
32 KiB
C++
#include "stdafx.h"
|
|
#include "HTMLRenderer.h"
|
|
#include "Resource.h"
|
|
#include "math.h"
|
|
#include "..\Common\TimeMeasurer.h"
|
|
|
|
CASCHTMLRenderer::CASCHTMLRenderer()
|
|
{
|
|
}
|
|
|
|
HRESULT CASCHTMLRenderer::FinalConstruct()
|
|
{
|
|
m_lLastSavedPage = 0;
|
|
m_oDocument.SetUpdater(this);
|
|
|
|
m_dDpiX = 96.0;
|
|
m_dDpiY = 96.0;
|
|
|
|
m_lClipMode = c_nClipRegionTypeWinding;
|
|
|
|
m_oWriter.m_dDpiX = m_dDpiX;
|
|
m_oWriter.m_dDpiY = m_dDpiY;
|
|
|
|
m_oWriter.m_pPen = &m_oPen;
|
|
m_oWriter.m_pBrush = &m_oBrush;
|
|
m_oWriter.m_pFont = &m_oFont;
|
|
|
|
m_pSimpleGraphicsConverter = NULL;
|
|
CoCreateInstance(Graphics::CLSID_CASCGraphicSimpleComverter, NULL, CLSCTX_ALL, Graphics::IID_IASCGraphicSimpleComverter, (void**)&m_pSimpleGraphicsConverter);
|
|
|
|
IUnknown* punkRenderer = NULL;
|
|
this->QueryInterface(IID_IUnknown, (void**)&punkRenderer);
|
|
|
|
m_pSimpleGraphicsConverter->put_Renderer(punkRenderer);
|
|
RELEASEINTERFACE(punkRenderer);
|
|
|
|
m_bPageClosed = TRUE;
|
|
|
|
m_dTransformAngle = 0.0;
|
|
|
|
m_pFonts = NULL;
|
|
m_pFontManager = NULL;
|
|
|
|
m_oWriter.SetSimpleConverter(m_pSimpleGraphicsConverter, &m_oFullTransform);
|
|
m_oWriter.m_oPage.SetSettings(&m_oPen, &m_oBrush, &m_oFont, m_oWriter.GetStyles(), &m_oTransform);
|
|
|
|
m_bIsThumbnailsCreate = FALSE;
|
|
m_bIsWEB = FALSE;
|
|
m_bIsMenu = FALSE;
|
|
|
|
m_bIsMetafileDrawing = false;
|
|
m_bIsTextGraphicType = false;
|
|
|
|
#ifdef BUILD_SUPPORT_UNREGISTERED_WATERMARK
|
|
m_pEffectPainter = NULL;
|
|
#endif
|
|
|
|
return S_OK;
|
|
}
|
|
|
|
void CASCHTMLRenderer::FinalRelease()
|
|
{
|
|
RELEASEINTERFACE(m_pSimpleGraphicsConverter);
|
|
RELEASEINTERFACE(m_pFonts);
|
|
|
|
#ifdef BUILD_SUPPORT_UNREGISTERED_WATERMARK
|
|
RELEASEINTERFACE(m_pEffectPainter);
|
|
#endif
|
|
}
|
|
|
|
STDMETHODIMP CASCHTMLRenderer::get_Type(LONG* lType)
|
|
{
|
|
if (NULL == lType)
|
|
return S_FALSE;
|
|
|
|
*lType = c_nHtmlRendrerer;
|
|
return S_OK;
|
|
}
|
|
//-------- Ôóíêöèè äëÿ ðàáîòû ñî ñòðàíèöåé --------------------------------------------------
|
|
STDMETHODIMP CASCHTMLRenderer::NewPage()
|
|
{
|
|
if (m_bPageOpened)
|
|
{
|
|
EndPage();
|
|
}
|
|
|
|
m_oDocument.NewPage();
|
|
m_bPageClosed = FALSE;
|
|
m_bPageOpened = TRUE;
|
|
|
|
m_bIsMetafileDrawing = false;
|
|
m_bIsTextGraphicType = false;
|
|
return S_OK;
|
|
}
|
|
STDMETHODIMP CASCHTMLRenderer::get_Height(double* dHeight)
|
|
{
|
|
size_t nCount = m_oDocument.m_arrPages.GetCount();
|
|
if ((nCount > 0) && (NULL != dHeight))
|
|
{
|
|
*dHeight = m_oDocument.m_arrPages[nCount - 1].GetHeight();
|
|
}
|
|
|
|
return S_OK;
|
|
}
|
|
STDMETHODIMP CASCHTMLRenderer::put_Height(double dHeight)
|
|
{
|
|
LONG lCount = (LONG)m_oDocument.m_arrPages.GetCount();
|
|
if (0 != lCount)
|
|
{
|
|
if (m_bIsThumbnailsCreate)
|
|
{
|
|
m_oThumbnail.put_Height(dHeight);
|
|
}
|
|
m_oDocument.m_arrPages[lCount - 1].SetHeight(dHeight);
|
|
}
|
|
|
|
return S_OK;
|
|
}
|
|
STDMETHODIMP CASCHTMLRenderer::get_Width(double* dWidth)
|
|
{
|
|
size_t nCount = m_oDocument.m_arrPages.GetCount();
|
|
if ((nCount > 0) && (NULL != dWidth))
|
|
{
|
|
*dWidth = m_oDocument.m_arrPages[nCount - 1].GetWidth();
|
|
}
|
|
|
|
return S_OK;
|
|
}
|
|
STDMETHODIMP CASCHTMLRenderer::put_Width(double dWidth)
|
|
{
|
|
LONG lCount = (LONG)m_oDocument.m_arrPages.GetCount();
|
|
if (0 != lCount)
|
|
{
|
|
if (m_bIsThumbnailsCreate)
|
|
{
|
|
m_oThumbnail.put_Width(dWidth);
|
|
}
|
|
m_oDocument.m_arrPages[lCount - 1].SetWidth(dWidth);
|
|
}
|
|
|
|
return S_OK;
|
|
}
|
|
|
|
STDMETHODIMP CASCHTMLRenderer::get_DpiX(double* dDpiX)
|
|
{
|
|
if (NULL != dDpiX)
|
|
*dDpiX = m_dDpiX;
|
|
return S_OK;
|
|
}
|
|
STDMETHODIMP CASCHTMLRenderer::get_DpiY(double* dDpiY)
|
|
{
|
|
if (NULL != dDpiY)
|
|
*dDpiY = m_dDpiY;
|
|
return S_OK;
|
|
}
|
|
// pen --------------------------------------------------------------------------------------
|
|
STDMETHODIMP CASCHTMLRenderer::SetPen(BSTR bsXML)
|
|
{
|
|
if (m_bIsThumbnailsCreate)
|
|
{
|
|
m_oThumbnail.SetPen(bsXML);
|
|
}
|
|
m_oPen.FromXmlString((CString)bsXML);
|
|
return S_OK;
|
|
}
|
|
STDMETHODIMP CASCHTMLRenderer::get_PenColor(LONG* lColor)
|
|
{
|
|
*lColor = m_oPen.Color;
|
|
return S_OK;
|
|
}
|
|
STDMETHODIMP CASCHTMLRenderer::put_PenColor(LONG lColor)
|
|
{
|
|
if (m_bIsThumbnailsCreate)
|
|
{
|
|
m_oThumbnail.put_PenColor(lColor);
|
|
}
|
|
m_oPen.Color = lColor;
|
|
return S_OK;
|
|
}
|
|
STDMETHODIMP CASCHTMLRenderer::get_PenAlpha(LONG* lAlpha)
|
|
{
|
|
*lAlpha = m_oPen.Alpha;
|
|
return S_OK;
|
|
}
|
|
STDMETHODIMP CASCHTMLRenderer::put_PenAlpha(LONG lAlpha)
|
|
{
|
|
if (m_bIsThumbnailsCreate)
|
|
{
|
|
m_oThumbnail.put_PenAlpha(lAlpha);
|
|
}
|
|
m_oPen.Alpha = lAlpha;
|
|
return S_OK;
|
|
}
|
|
STDMETHODIMP CASCHTMLRenderer::get_PenSize(double* dSize)
|
|
{
|
|
*dSize = m_oPen.Size;
|
|
return S_OK;
|
|
}
|
|
STDMETHODIMP CASCHTMLRenderer::put_PenSize(double dSize)
|
|
{
|
|
if (m_bIsThumbnailsCreate)
|
|
{
|
|
m_oThumbnail.put_PenSize(dSize);
|
|
}
|
|
m_oPen.Size = dSize;
|
|
return S_OK;
|
|
}
|
|
STDMETHODIMP CASCHTMLRenderer::get_PenDashStyle(BYTE* val)
|
|
{
|
|
*val = m_oPen.DashStyle;
|
|
return S_OK;
|
|
}
|
|
STDMETHODIMP CASCHTMLRenderer::put_PenDashStyle(BYTE val)
|
|
{
|
|
if (m_bIsThumbnailsCreate)
|
|
{
|
|
m_oThumbnail.put_PenDashStyle(val);
|
|
}
|
|
m_oPen.DashStyle = val;
|
|
return S_OK;
|
|
}
|
|
STDMETHODIMP CASCHTMLRenderer::get_PenLineStartCap(BYTE* val)
|
|
{
|
|
*val = m_oPen.LineStartCap;
|
|
return S_OK;
|
|
}
|
|
STDMETHODIMP CASCHTMLRenderer::put_PenLineStartCap(BYTE val)
|
|
{
|
|
if (m_bIsThumbnailsCreate)
|
|
{
|
|
m_oThumbnail.put_PenLineStartCap(val);
|
|
}
|
|
m_oPen.LineStartCap = val;
|
|
return S_OK;
|
|
}
|
|
STDMETHODIMP CASCHTMLRenderer::get_PenLineEndCap(BYTE* val)
|
|
{
|
|
*val = m_oPen.LineEndCap;
|
|
return S_OK;
|
|
}
|
|
STDMETHODIMP CASCHTMLRenderer::put_PenLineEndCap(BYTE val)
|
|
{
|
|
if (m_bIsThumbnailsCreate)
|
|
{
|
|
m_oThumbnail.put_PenLineEndCap(val);
|
|
}
|
|
m_oPen.LineEndCap = val;
|
|
return S_OK;
|
|
}
|
|
STDMETHODIMP CASCHTMLRenderer::get_PenLineJoin(BYTE* val)
|
|
{
|
|
*val = m_oPen.LineJoin;
|
|
return S_OK;
|
|
}
|
|
STDMETHODIMP CASCHTMLRenderer::put_PenLineJoin(BYTE val)
|
|
{
|
|
if (m_bIsThumbnailsCreate)
|
|
{
|
|
m_oThumbnail.put_PenLineJoin(val);
|
|
}
|
|
m_oPen.LineJoin = val;
|
|
return S_OK;
|
|
}
|
|
STDMETHODIMP CASCHTMLRenderer::get_PenDashOffset(double* val)
|
|
{
|
|
*val = m_oPen.DashOffset;
|
|
return S_OK;
|
|
}
|
|
STDMETHODIMP CASCHTMLRenderer::put_PenDashOffset(double val)
|
|
{
|
|
if (m_bIsThumbnailsCreate)
|
|
{
|
|
m_oThumbnail.put_PenDashOffset(val);
|
|
}
|
|
m_oPen.DashOffset = val;
|
|
return S_OK;
|
|
}
|
|
STDMETHODIMP CASCHTMLRenderer::get_PenAlign(LONG* val)
|
|
{
|
|
*val = m_oPen.Align;
|
|
return S_OK;
|
|
}
|
|
STDMETHODIMP CASCHTMLRenderer::put_PenAlign(LONG val)
|
|
{
|
|
if (m_bIsThumbnailsCreate)
|
|
{
|
|
m_oThumbnail.put_PenAlign(val);
|
|
}
|
|
m_oPen.Align = val;
|
|
return S_OK;
|
|
}
|
|
STDMETHODIMP CASCHTMLRenderer::get_PenMiterLimit(double* val)
|
|
{
|
|
*val = m_oPen.MiterLimit;
|
|
return S_OK;
|
|
}
|
|
STDMETHODIMP CASCHTMLRenderer::put_PenMiterLimit(double val)
|
|
{
|
|
if (m_bIsThumbnailsCreate)
|
|
{
|
|
m_oThumbnail.put_PenMiterLimit(val);
|
|
}
|
|
m_oPen.MiterLimit = val;
|
|
return S_OK;
|
|
}
|
|
STDMETHODIMP CASCHTMLRenderer::PenDashPattern(SAFEARRAY* pPattern)
|
|
{
|
|
if (m_bIsThumbnailsCreate)
|
|
{
|
|
m_oThumbnail.PenDashPattern(pPattern);
|
|
}
|
|
|
|
if (NULL != pPattern)
|
|
{
|
|
m_oPen.SetDashPattern((double*)pPattern->pvData, pPattern->rgsabound[0].cElements);
|
|
}
|
|
|
|
return S_OK;
|
|
}
|
|
// brush ------------------------------------------------------------------------------------
|
|
STDMETHODIMP CASCHTMLRenderer::SetBrush(BSTR bsXML)
|
|
{
|
|
if (m_bIsThumbnailsCreate)
|
|
{
|
|
m_oThumbnail.SetBrush(bsXML);
|
|
}
|
|
m_oBrush.FromXmlString((CString)bsXML);
|
|
return S_OK;
|
|
}
|
|
STDMETHODIMP CASCHTMLRenderer::get_BrushType(LONG* lType)
|
|
{
|
|
*lType = m_oBrush.Type;
|
|
return S_OK;
|
|
}
|
|
STDMETHODIMP CASCHTMLRenderer::put_BrushType(LONG lType)
|
|
{
|
|
if (m_bIsThumbnailsCreate)
|
|
{
|
|
m_oThumbnail.put_BrushType(lType);
|
|
}
|
|
m_oBrush.Type = lType;
|
|
return S_OK;
|
|
}
|
|
STDMETHODIMP CASCHTMLRenderer::get_BrushColor1(LONG* lColor)
|
|
{
|
|
*lColor = m_oBrush.Color1;
|
|
return S_OK;
|
|
}
|
|
STDMETHODIMP CASCHTMLRenderer::put_BrushColor1(LONG lColor)
|
|
{
|
|
if (m_bIsThumbnailsCreate)
|
|
{
|
|
m_oThumbnail.put_BrushColor1(lColor);
|
|
}
|
|
m_oBrush.Color1 = lColor;
|
|
return S_OK;
|
|
}
|
|
STDMETHODIMP CASCHTMLRenderer::get_BrushAlpha1(LONG* lAlpha)
|
|
{
|
|
*lAlpha = m_oBrush.Alpha1;
|
|
return S_OK;
|
|
}
|
|
STDMETHODIMP CASCHTMLRenderer::put_BrushAlpha1(LONG lAlpha)
|
|
{
|
|
if (m_bIsThumbnailsCreate)
|
|
{
|
|
m_oThumbnail.put_BrushAlpha1(lAlpha);
|
|
}
|
|
m_oBrush.Alpha1 = lAlpha;
|
|
return S_OK;
|
|
}
|
|
STDMETHODIMP CASCHTMLRenderer::get_BrushColor2(LONG* lColor)
|
|
{
|
|
*lColor = m_oBrush.Color2;
|
|
return S_OK;
|
|
}
|
|
STDMETHODIMP CASCHTMLRenderer::put_BrushColor2(LONG lColor)
|
|
{
|
|
if (m_bIsThumbnailsCreate)
|
|
{
|
|
m_oThumbnail.put_BrushColor2(lColor);
|
|
}
|
|
m_oBrush.Color2 = lColor;
|
|
return S_OK;
|
|
}
|
|
STDMETHODIMP CASCHTMLRenderer::get_BrushAlpha2(LONG* lAlpha)
|
|
{
|
|
*lAlpha = m_oBrush.Alpha2;
|
|
return S_OK;
|
|
}
|
|
STDMETHODIMP CASCHTMLRenderer::put_BrushAlpha2(LONG lAlpha)
|
|
{
|
|
if (m_bIsThumbnailsCreate)
|
|
{
|
|
m_oThumbnail.put_BrushAlpha2(lAlpha);
|
|
}
|
|
m_oBrush.Alpha2 = lAlpha;
|
|
return S_OK;
|
|
}
|
|
STDMETHODIMP CASCHTMLRenderer::get_BrushTexturePath(BSTR* bsPath)
|
|
{
|
|
*bsPath = m_oBrush.TexturePath.AllocSysString();
|
|
return S_OK;
|
|
}
|
|
STDMETHODIMP CASCHTMLRenderer::put_BrushTexturePath(BSTR bsPath)
|
|
{
|
|
if (m_bIsThumbnailsCreate)
|
|
{
|
|
m_oThumbnail.put_BrushTexturePath(bsPath);
|
|
}
|
|
m_oBrush.TexturePath = (CString)bsPath;
|
|
return S_OK;
|
|
}
|
|
STDMETHODIMP CASCHTMLRenderer::get_BrushTextureMode(LONG* lMode)
|
|
{
|
|
*lMode = m_oBrush.TextureMode;
|
|
return S_OK;
|
|
}
|
|
STDMETHODIMP CASCHTMLRenderer::put_BrushTextureMode(LONG lMode)
|
|
{
|
|
if (m_bIsThumbnailsCreate)
|
|
{
|
|
m_oThumbnail.put_BrushTextureMode(lMode);
|
|
}
|
|
m_oBrush.TextureMode = lMode;
|
|
return S_OK;
|
|
}
|
|
STDMETHODIMP CASCHTMLRenderer::get_BrushTextureAlpha(LONG* lTxAlpha)
|
|
{
|
|
*lTxAlpha = m_oBrush.TextureAlpha;
|
|
return S_OK;
|
|
}
|
|
STDMETHODIMP CASCHTMLRenderer::put_BrushTextureAlpha(LONG lTxAlpha)
|
|
{
|
|
if (m_bIsThumbnailsCreate)
|
|
{
|
|
m_oThumbnail.put_BrushTextureAlpha(lTxAlpha);
|
|
}
|
|
m_oBrush.TextureAlpha = lTxAlpha;
|
|
return S_OK;
|
|
}
|
|
STDMETHODIMP CASCHTMLRenderer::get_BrushLinearAngle(double* dAngle)
|
|
{
|
|
*dAngle = m_oBrush.LinearAngle;
|
|
return S_OK;
|
|
}
|
|
STDMETHODIMP CASCHTMLRenderer::put_BrushLinearAngle(double dAngle)
|
|
{
|
|
if (m_bIsThumbnailsCreate)
|
|
{
|
|
m_oThumbnail.put_BrushLinearAngle(dAngle);
|
|
}
|
|
m_oBrush.LinearAngle = dAngle;
|
|
return S_OK;
|
|
}
|
|
STDMETHODIMP CASCHTMLRenderer::BrushRect(BOOL val, double left, double top, double width, double height)
|
|
{
|
|
if (m_bIsThumbnailsCreate)
|
|
{
|
|
m_oThumbnail.BrushRect(val, left, top, width, height);
|
|
}
|
|
|
|
m_oBrush.Rectable = val;
|
|
m_oBrush.Rect.X = (float)left;
|
|
m_oBrush.Rect.Y = (float)top;
|
|
m_oBrush.Rect.Width = (float)width;
|
|
m_oBrush.Rect.Height = (float)height;
|
|
|
|
return S_OK;
|
|
}
|
|
// font -------------------------------------------------------------------------------------
|
|
STDMETHODIMP CASCHTMLRenderer::SetFont(BSTR bsXML)
|
|
{
|
|
if (m_bIsThumbnailsCreate)
|
|
{
|
|
m_oThumbnail.SetFont(bsXML);
|
|
}
|
|
m_oFont.FromXmlString((CString)bsXML);
|
|
return S_OK;
|
|
}
|
|
STDMETHODIMP CASCHTMLRenderer::get_FontName(BSTR* bsName)
|
|
{
|
|
*bsName = m_oFont.Name.AllocSysString();
|
|
return S_OK;
|
|
}
|
|
STDMETHODIMP CASCHTMLRenderer::put_FontName(BSTR bsName)
|
|
{
|
|
if (m_bIsThumbnailsCreate)
|
|
{
|
|
m_oThumbnail.put_FontName(bsName);
|
|
}
|
|
m_oFont.Name = (CString)bsName;
|
|
return S_OK;
|
|
}
|
|
STDMETHODIMP CASCHTMLRenderer::get_FontPath(BSTR* bsName)
|
|
{
|
|
*bsName = m_oFont.Path.AllocSysString();
|
|
return S_OK;
|
|
}
|
|
STDMETHODIMP CASCHTMLRenderer::put_FontPath(BSTR bsName)
|
|
{
|
|
if (m_bIsThumbnailsCreate)
|
|
{
|
|
m_oThumbnail.put_FontPath(bsName);
|
|
}
|
|
m_oFont.Path = bsName;
|
|
return S_OK;
|
|
}
|
|
STDMETHODIMP CASCHTMLRenderer::get_FontSize(double* dSize)
|
|
{
|
|
*dSize = m_oFont.Size;
|
|
return S_OK;
|
|
}
|
|
STDMETHODIMP CASCHTMLRenderer::put_FontSize(double dSize)
|
|
{
|
|
if (m_bIsThumbnailsCreate)
|
|
{
|
|
m_oThumbnail.put_FontSize(dSize);
|
|
}
|
|
m_oFont.Size = dSize;
|
|
return S_OK;
|
|
}
|
|
STDMETHODIMP CASCHTMLRenderer::get_FontStyle(LONG* lStyle)
|
|
{
|
|
*lStyle = m_oFont.GetStyle();
|
|
return S_OK;
|
|
}
|
|
STDMETHODIMP CASCHTMLRenderer::put_FontStyle(LONG lStyle)
|
|
{
|
|
if (m_bIsThumbnailsCreate)
|
|
{
|
|
m_oThumbnail.put_FontStyle(lStyle);
|
|
}
|
|
m_oFont.SetStyle(lStyle);
|
|
return S_OK;
|
|
}
|
|
STDMETHODIMP CASCHTMLRenderer::get_FontStringGID(BOOL* bGID)
|
|
{
|
|
*bGID = m_oFont.StringGID;
|
|
return S_OK;
|
|
}
|
|
STDMETHODIMP CASCHTMLRenderer::put_FontStringGID(BOOL bGID)
|
|
{
|
|
if (m_bIsThumbnailsCreate)
|
|
{
|
|
m_oThumbnail.put_FontStringGID(bGID);
|
|
}
|
|
m_oFont.StringGID = bGID;
|
|
m_pFontManager->SetStringGID(bGID);
|
|
return S_OK;
|
|
}
|
|
STDMETHODIMP CASCHTMLRenderer::get_FontCharSpace(double* dSpace)
|
|
{
|
|
*dSpace = m_oFont.CharSpace;
|
|
return S_OK;
|
|
}
|
|
STDMETHODIMP CASCHTMLRenderer::put_FontCharSpace(double dSpace)
|
|
{
|
|
if (m_bIsThumbnailsCreate)
|
|
{
|
|
m_oThumbnail.put_FontCharSpace(dSpace);
|
|
}
|
|
m_oFont.CharSpace = dSpace;
|
|
return S_OK;
|
|
}
|
|
// shadow -----------------------------------------------------------------------------------
|
|
STDMETHODIMP CASCHTMLRenderer::SetShadow(BSTR bsXML)
|
|
{
|
|
if (m_bIsThumbnailsCreate)
|
|
{
|
|
m_oThumbnail.SetShadow(bsXML);
|
|
}
|
|
m_oShadow.FromXmlString((CString)bsXML);
|
|
return S_OK;
|
|
}
|
|
STDMETHODIMP CASCHTMLRenderer::get_ShadowDistanceX(double* val)
|
|
{
|
|
*val = m_oShadow.DistanceX;
|
|
return S_OK;
|
|
}
|
|
STDMETHODIMP CASCHTMLRenderer::put_ShadowDistanceX(double val)
|
|
{
|
|
if (m_bIsThumbnailsCreate)
|
|
{
|
|
m_oThumbnail.put_ShadowDistanceX(val);
|
|
}
|
|
m_oShadow.DistanceX = val;
|
|
return S_OK;
|
|
}
|
|
STDMETHODIMP CASCHTMLRenderer::get_ShadowDistanceY(double* val)
|
|
{
|
|
*val = m_oShadow.DistanceY;
|
|
return S_OK;
|
|
}
|
|
STDMETHODIMP CASCHTMLRenderer::put_ShadowDistanceY(double val)
|
|
{
|
|
if (m_bIsThumbnailsCreate)
|
|
{
|
|
m_oThumbnail.put_ShadowDistanceY(val);
|
|
}
|
|
m_oShadow.DistanceY = val;
|
|
return S_OK;
|
|
}
|
|
STDMETHODIMP CASCHTMLRenderer::get_ShadowBlurSize(double* val)
|
|
{
|
|
*val = m_oShadow.BlurSize;
|
|
return S_OK;
|
|
}
|
|
STDMETHODIMP CASCHTMLRenderer::put_ShadowBlurSize(double val)
|
|
{
|
|
if (m_bIsThumbnailsCreate)
|
|
{
|
|
m_oThumbnail.put_ShadowBlurSize(val);
|
|
}
|
|
m_oShadow.BlurSize = val;
|
|
return S_OK;
|
|
}
|
|
STDMETHODIMP CASCHTMLRenderer::get_ShadowColor(LONG* val)
|
|
{
|
|
*val = m_oShadow.Color;
|
|
return S_OK;
|
|
}
|
|
STDMETHODIMP CASCHTMLRenderer::put_ShadowColor(LONG val)
|
|
{
|
|
if (m_bIsThumbnailsCreate)
|
|
{
|
|
m_oThumbnail.put_ShadowColor(val);
|
|
}
|
|
m_oShadow.Color = val;
|
|
return S_OK;
|
|
}
|
|
STDMETHODIMP CASCHTMLRenderer::get_ShadowAlpha(LONG* val)
|
|
{
|
|
*val = m_oShadow.Alpha;
|
|
return S_OK;
|
|
}
|
|
STDMETHODIMP CASCHTMLRenderer::put_ShadowAlpha(LONG val)
|
|
{
|
|
if (m_bIsThumbnailsCreate)
|
|
{
|
|
m_oThumbnail.put_ShadowAlpha(val);
|
|
}
|
|
m_oShadow.Alpha = val;
|
|
return S_OK;
|
|
}
|
|
STDMETHODIMP CASCHTMLRenderer::get_ShadowVisible(BOOL* val)
|
|
{
|
|
*val = m_oShadow.Visible;
|
|
return S_OK;
|
|
}
|
|
STDMETHODIMP CASCHTMLRenderer::put_ShadowVisible(BOOL val)
|
|
{
|
|
if (m_bIsThumbnailsCreate)
|
|
{
|
|
m_oThumbnail.put_ShadowVisible(val);
|
|
}
|
|
m_oShadow.Visible = val;
|
|
return S_OK;
|
|
}
|
|
// edge -------------------------------------------------------------------------------------
|
|
STDMETHODIMP CASCHTMLRenderer::SetEdgeText(BSTR bsXML)
|
|
{
|
|
if (m_bIsThumbnailsCreate)
|
|
{
|
|
m_oThumbnail.SetEdgeText(bsXML);
|
|
}
|
|
m_oEdge.FromXmlString((CString)bsXML);
|
|
return S_OK;
|
|
}
|
|
STDMETHODIMP CASCHTMLRenderer::get_EdgeVisible(LONG* val)
|
|
{
|
|
*val = m_oEdge.Visible;
|
|
return S_OK;
|
|
}
|
|
STDMETHODIMP CASCHTMLRenderer::put_EdgeVisible(LONG val)
|
|
{
|
|
if (m_bIsThumbnailsCreate)
|
|
{
|
|
m_oThumbnail.put_EdgeVisible(val);
|
|
}
|
|
m_oEdge.Visible = val;
|
|
return S_OK;
|
|
}
|
|
STDMETHODIMP CASCHTMLRenderer::get_EdgeColor(LONG* val)
|
|
{
|
|
*val = m_oEdge.Color;
|
|
return S_OK;
|
|
}
|
|
STDMETHODIMP CASCHTMLRenderer::put_EdgeColor(LONG val)
|
|
{
|
|
if (m_bIsThumbnailsCreate)
|
|
{
|
|
m_oThumbnail.put_EdgeColor(val);
|
|
}
|
|
m_oEdge.Color = val;
|
|
return S_OK;
|
|
}
|
|
STDMETHODIMP CASCHTMLRenderer::get_EdgeAlpha(LONG* val)
|
|
{
|
|
*val = m_oEdge.Alpha;
|
|
return S_OK;
|
|
}
|
|
STDMETHODIMP CASCHTMLRenderer::put_EdgeAlpha(LONG val)
|
|
{
|
|
if (m_bIsThumbnailsCreate)
|
|
{
|
|
m_oThumbnail.put_EdgeAlpha(val);
|
|
}
|
|
m_oEdge.Alpha = val;
|
|
return S_OK;
|
|
}
|
|
STDMETHODIMP CASCHTMLRenderer::get_EdgeDist(double* val)
|
|
{
|
|
*val = m_oEdge.Dist;
|
|
return S_OK;
|
|
}
|
|
STDMETHODIMP CASCHTMLRenderer::put_EdgeDist(double val)
|
|
{
|
|
if (m_bIsThumbnailsCreate)
|
|
{
|
|
m_oThumbnail.put_EdgeDist(val);
|
|
}
|
|
m_oEdge.Dist = val;
|
|
return S_OK;
|
|
}
|
|
//-------- Ôóíêöèè äëÿ âûâîäà òåêñòà --------------------------------------------------------
|
|
STDMETHODIMP CASCHTMLRenderer::CommandDrawText(BSTR bsText, double fX, double fY, double fWidth, double fHeight, double fBaseLineOffset)
|
|
{
|
|
if (c_nHyperlinkType == m_lCurrentCommandType)
|
|
return S_OK;
|
|
|
|
if ((abs(m_dTransformAngle) > 1) || (m_bIsMetafileDrawing == true) || m_bIsWatermarkEnabled)
|
|
{
|
|
PathCommandEnd();
|
|
BeginCommand(c_nPathType);
|
|
PathCommandText(bsText, fX, fY, fWidth, fHeight, fBaseLineOffset);
|
|
DrawPath(c_nWindingFillMode);
|
|
EndCommand(c_nPathType);
|
|
PathCommandEnd();
|
|
return S_OK;
|
|
}
|
|
|
|
if (m_bIsThumbnailsCreate)
|
|
{
|
|
m_oThumbnail.CommandDrawText(bsText, fX, fY, fWidth, fHeight, fBaseLineOffset);
|
|
}
|
|
|
|
double x = fX;
|
|
double y = fY;
|
|
m_oFullTransform.TransformPoint(x, y);
|
|
|
|
double r = fX + fWidth;
|
|
double b = fY + fHeight;
|
|
m_oFullTransform.TransformPoint(r, b);
|
|
|
|
m_oWriter.WriteText(bsText, NULL, x, y, r - x, b - y, fBaseLineOffset);
|
|
|
|
return S_OK;
|
|
}
|
|
STDMETHODIMP CASCHTMLRenderer::CommandDrawTextEx(BSTR bsText, BSTR bsGidText, BSTR bsSourceCodeText, double fX, double fY, double fWidth, double fHeight, double fBaseLineOffset, DWORD lFlags)
|
|
{
|
|
if ((abs(m_dTransformAngle) > 1) || (m_bIsMetafileDrawing == true) || m_bIsWatermarkEnabled)
|
|
{
|
|
PathCommandEnd();
|
|
BeginCommand(c_nPathType);
|
|
PathCommandTextEx(bsText, bsGidText, bsSourceCodeText, fX, fY, fWidth, fHeight, fBaseLineOffset, lFlags);
|
|
DrawPath(c_nWindingFillMode);
|
|
EndCommand(c_nPathType);
|
|
PathCommandEnd();
|
|
return S_OK;
|
|
}
|
|
|
|
if (m_bIsThumbnailsCreate)
|
|
{
|
|
m_oThumbnail.CommandDrawTextEx(bsText, bsGidText, bsSourceCodeText, fX, fY, fWidth, fHeight, fBaseLineOffset, lFlags);
|
|
}
|
|
|
|
double x = fX;
|
|
double y = fY;
|
|
m_oFullTransform.TransformPoint(x, y);
|
|
|
|
double r = fX + fWidth;
|
|
double b = fY + fHeight;
|
|
m_oFullTransform.TransformPoint(r, b);
|
|
|
|
m_oWriter.WriteText(bsText, bsGidText, x, y, r - x, b - y, fBaseLineOffset);
|
|
return S_OK;
|
|
}
|
|
//-------- Ìàðêåðû äëÿ êîìàíä ---------------------------------------------------------------
|
|
STDMETHODIMP CASCHTMLRenderer::BeginCommand(DWORD lType)
|
|
{
|
|
if (m_bIsThumbnailsCreate)
|
|
{
|
|
m_oThumbnail.BeginCommand(lType);
|
|
}
|
|
|
|
if (c_nClipType == lType)
|
|
{
|
|
m_oWriter.WritePathClip();
|
|
}
|
|
else if (c_nPathType == lType)
|
|
{
|
|
m_oWriter.WriteBeginPath();
|
|
m_pSimpleGraphicsConverter->PathCommandEnd();
|
|
}
|
|
else if (c_nTableCell == lType)
|
|
{
|
|
m_oWriter.m_oPage.WriteNewTableBox();
|
|
}
|
|
else if (c_nImageType == lType)
|
|
{
|
|
m_bIsMetafileDrawing = true;
|
|
}
|
|
else if (c_nTextGraphicType == lType)
|
|
{
|
|
m_bIsTextGraphicType = true;
|
|
}
|
|
//else if (c_nParagraphType == lType)
|
|
//{
|
|
// m_oWriter.m_oPage.m_oText.BeginParagraph();
|
|
//}
|
|
m_lCurrentCommandType = lType;
|
|
|
|
return S_OK;
|
|
}
|
|
STDMETHODIMP CASCHTMLRenderer::EndCommand(DWORD lType)
|
|
{
|
|
if (m_bIsThumbnailsCreate)
|
|
{
|
|
m_oThumbnail.EndCommand(lType);
|
|
}
|
|
|
|
if (c_nPageType == lType)
|
|
{
|
|
EndPage();
|
|
}
|
|
else if (c_nClipType == lType)
|
|
{
|
|
m_oWriter.WritePathClipEnd();
|
|
}
|
|
else if (c_nResetClipType == lType)
|
|
{
|
|
m_oWriter.WritePathResetClip();
|
|
}
|
|
else if (c_nTableCell == lType)
|
|
{
|
|
m_oWriter.m_oPage.WriteNewTableBox();
|
|
}
|
|
//else if (c_nPathType == lType)
|
|
//{
|
|
// PathCommandEnd();
|
|
//}
|
|
else if (c_nImageType == lType)
|
|
{
|
|
m_bIsMetafileDrawing = false;
|
|
}
|
|
else if (c_nTextGraphicType == lType)
|
|
{
|
|
m_bIsTextGraphicType = false;
|
|
}
|
|
else if (c_nNumberingMarker == lType)
|
|
{
|
|
// ÷òîáû îòñòóï òî÷íî ñðàáîòàë.
|
|
m_oWriter.m_oPage.m_oText.m_bIsNewLine = true;
|
|
}
|
|
//else if (c_nParagraphType == lType)
|
|
//{
|
|
// m_oWriter.m_oPage.m_oText.EndParagraph();
|
|
//}
|
|
m_lCurrentCommandType = -1;
|
|
|
|
return S_OK;
|
|
}
|
|
//-------- Ôóíêöèè äëÿ ðàáîòû ñ Graphics Path -----------------------------------------------
|
|
STDMETHODIMP CASCHTMLRenderer::PathCommandMoveTo(double fX, double fY)
|
|
{
|
|
if (c_nSimpleGraphicType == m_lCurrentCommandType)
|
|
{
|
|
MoveTo(fX, fY);
|
|
}
|
|
else
|
|
{
|
|
m_pSimpleGraphicsConverter->PathCommandMoveTo(fX, fY);
|
|
|
|
if (m_bIsThumbnailsCreate)
|
|
{
|
|
m_oThumbnail.PathCommandMoveTo(fX, fY);
|
|
}
|
|
}
|
|
|
|
return S_OK;
|
|
}
|
|
STDMETHODIMP CASCHTMLRenderer::PathCommandLineTo(double fX, double fY)
|
|
{
|
|
if (c_nSimpleGraphicType == m_lCurrentCommandType)
|
|
{
|
|
LineTo(fX, fY);
|
|
}
|
|
else
|
|
{
|
|
m_pSimpleGraphicsConverter->PathCommandLineTo(fX, fY);
|
|
|
|
if (m_bIsThumbnailsCreate)
|
|
{
|
|
m_oThumbnail.PathCommandLineTo(fX, fY);
|
|
}
|
|
}
|
|
|
|
return S_OK;
|
|
}
|
|
STDMETHODIMP CASCHTMLRenderer::PathCommandLinesTo(SAFEARRAY* pPoints)
|
|
{
|
|
if (m_bIsThumbnailsCreate)
|
|
{
|
|
m_oThumbnail.PathCommandLinesTo(pPoints);
|
|
}
|
|
m_pSimpleGraphicsConverter->PathCommandLinesTo(pPoints);
|
|
return S_OK;
|
|
}
|
|
STDMETHODIMP CASCHTMLRenderer::PathCommandCurveTo(double fX1, double fY1, double fX2, double fY2, double fX3, double fY3)
|
|
{
|
|
if (c_nSimpleGraphicType == m_lCurrentCommandType)
|
|
{
|
|
CurveTo(fX1, fY1, fX2, fY2, fX3, fY3);
|
|
}
|
|
else
|
|
{
|
|
m_pSimpleGraphicsConverter->PathCommandCurveTo(fX1, fY1, fX2, fY2, fX3, fY3);
|
|
|
|
if (m_bIsThumbnailsCreate)
|
|
{
|
|
m_oThumbnail.PathCommandCurveTo(fX1, fY1, fX2, fY2, fX3, fY3);
|
|
}
|
|
}
|
|
|
|
return S_OK;
|
|
}
|
|
STDMETHODIMP CASCHTMLRenderer::PathCommandCurvesTo(SAFEARRAY* pPoints)
|
|
{
|
|
if (m_bIsThumbnailsCreate)
|
|
{
|
|
m_oThumbnail.PathCommandCurvesTo(pPoints);
|
|
}
|
|
|
|
m_pSimpleGraphicsConverter->PathCommandCurvesTo(pPoints);
|
|
return S_OK;
|
|
}
|
|
STDMETHODIMP CASCHTMLRenderer::PathCommandArcTo(double fX, double fY, double fWidth, double fHeight, double fStartAngle, double fSweepAngle)
|
|
{
|
|
if (m_bIsThumbnailsCreate)
|
|
{
|
|
m_oThumbnail.PathCommandArcTo(fX, fY, fWidth, fHeight, fStartAngle, fSweepAngle);
|
|
}
|
|
|
|
m_pSimpleGraphicsConverter->PathCommandArcTo(fX, fY, fWidth, fHeight, fStartAngle, fSweepAngle);
|
|
return S_OK;
|
|
}
|
|
STDMETHODIMP CASCHTMLRenderer::PathCommandClose()
|
|
{
|
|
if (c_nSimpleGraphicType == m_lCurrentCommandType)
|
|
{
|
|
Close();
|
|
}
|
|
else
|
|
{
|
|
m_pSimpleGraphicsConverter->PathCommandClose();
|
|
|
|
if (m_bIsThumbnailsCreate)
|
|
{
|
|
m_oThumbnail.PathCommandClose();
|
|
}
|
|
}
|
|
|
|
return S_OK;
|
|
}
|
|
STDMETHODIMP CASCHTMLRenderer::PathCommandEnd()
|
|
{
|
|
if (c_nSimpleGraphicType == m_lCurrentCommandType)
|
|
{
|
|
End();
|
|
}
|
|
else
|
|
{
|
|
m_pSimpleGraphicsConverter->PathCommandEnd();
|
|
|
|
if (m_bIsThumbnailsCreate)
|
|
{
|
|
m_oThumbnail.PathCommandEnd();
|
|
}
|
|
}
|
|
|
|
return S_OK;
|
|
}
|
|
STDMETHODIMP CASCHTMLRenderer::DrawPath(long nType)
|
|
{
|
|
if (m_bIsThumbnailsCreate)
|
|
{
|
|
m_oThumbnail.DrawPath(nType);
|
|
}
|
|
if (!m_bIsTextGraphicType || 3 < m_oFont.GetTextDecorationStyle())
|
|
{
|
|
m_oWriter.WriteDrawPath(nType, m_dTransformAngle);
|
|
}
|
|
|
|
return S_OK;
|
|
}
|
|
STDMETHODIMP CASCHTMLRenderer::PathCommandStart()
|
|
{
|
|
if (c_nSimpleGraphicType == m_lCurrentCommandType)
|
|
{
|
|
Start();
|
|
}
|
|
else
|
|
{
|
|
m_pSimpleGraphicsConverter->PathCommandEnd();
|
|
m_pSimpleGraphicsConverter->PathCommandStart();
|
|
|
|
if (m_bIsThumbnailsCreate)
|
|
{
|
|
m_oThumbnail.PathCommandStart();
|
|
}
|
|
}
|
|
|
|
return S_OK;
|
|
}
|
|
STDMETHODIMP CASCHTMLRenderer::PathCommandGetCurrentPoint(double* fX, double* fY)
|
|
{
|
|
m_pSimpleGraphicsConverter->PathCommandGetCurrentPoint(fX, fY);
|
|
return S_OK;
|
|
}
|
|
STDMETHODIMP CASCHTMLRenderer::PathCommandText(BSTR bsText, double fX, double fY, double fWidth, double fHeight, double fBaseLineOffset)
|
|
{
|
|
_SetFont();
|
|
if (m_bIsThumbnailsCreate)
|
|
{
|
|
m_oThumbnail.PathCommandText(bsText, fY, fY, fWidth, fHeight, fBaseLineOffset);
|
|
}
|
|
m_pSimpleGraphicsConverter->PathCommandText(bsText, m_pFontManager, fX, fY, fWidth, fHeight, fBaseLineOffset);
|
|
return S_OK;
|
|
}
|
|
STDMETHODIMP CASCHTMLRenderer::PathCommandTextEx(BSTR bsText, BSTR bsGidText, BSTR bsSourceCodeText, double fX, double fY, double fWidth, double fHeight, double fBaseLineOffset, DWORD lFlags)
|
|
{
|
|
BOOL bGid = m_oFont.StringGID;
|
|
if (NULL != bsGidText)
|
|
{
|
|
m_oFont.StringGID = TRUE;
|
|
PathCommandText(bsGidText, fX, fY, fWidth, fHeight, fBaseLineOffset);
|
|
}
|
|
|
|
m_oFont.StringGID = FALSE;
|
|
PathCommandText(bsText, fX, fY, fWidth, fHeight, fBaseLineOffset);
|
|
|
|
m_oFont.StringGID = bGid;
|
|
return S_OK;
|
|
}
|
|
//-------- Ôóíêöèè äëÿ âûâîäà èçîáðàæåíèé ---------------------------------------------------
|
|
STDMETHODIMP CASCHTMLRenderer::DrawImage(IUnknown* pInterface, double fX, double fY, double fWidth, double fHeight)
|
|
{
|
|
if (m_bIsThumbnailsCreate)
|
|
{
|
|
m_oThumbnail.DrawImage(pInterface, fX, fY, fWidth, fHeight);
|
|
}
|
|
|
|
double x = fX;
|
|
double y = fY;
|
|
|
|
double r = fX + fWidth;
|
|
double b = fY + fHeight;
|
|
|
|
if (0 == m_dTransformAngle)
|
|
{
|
|
m_oFullTransform.TransformPoint(x, y);
|
|
m_oFullTransform.TransformPoint(r, b);
|
|
}
|
|
else
|
|
{
|
|
NSHtmlRenderer::CMatrix oTemp = m_oFullTransform;
|
|
|
|
double dCx = (x + r) / 2;
|
|
double dCy = (y + b) / 2;
|
|
m_oFullTransform.TransformPoint(dCx, dCy);
|
|
oTemp.RotateAt(-m_dTransformAngle, dCx, dCy, Aggplus::MatrixOrderAppend);
|
|
|
|
oTemp.TransformPoint(x, y);
|
|
oTemp.TransformPoint(r, b);
|
|
}
|
|
|
|
m_oWriter.WriteImage(pInterface, x, y, r - x, b - y, m_dTransformAngle);
|
|
|
|
return S_OK;
|
|
}
|
|
STDMETHODIMP CASCHTMLRenderer::DrawImageFromFile(BSTR bstrVal, double fX, double fY, double fWidth, double fHeight)
|
|
{
|
|
if (m_bIsThumbnailsCreate)
|
|
{
|
|
m_oThumbnail.DrawImageFromFile(bstrVal, fX, fY, fWidth, fHeight);
|
|
}
|
|
|
|
double x = fX;
|
|
double y = fY;
|
|
|
|
double r = fX + fWidth;
|
|
double b = fY + fHeight;
|
|
|
|
if (0 == m_dTransformAngle)
|
|
{
|
|
m_oFullTransform.TransformPoint(x, y);
|
|
m_oFullTransform.TransformPoint(r, b);
|
|
}
|
|
else
|
|
{
|
|
NSHtmlRenderer::CMatrix oTemp = m_oFullTransform;
|
|
|
|
double dCx = (x + r) / 2;
|
|
double dCy = (y + b) / 2;
|
|
m_oFullTransform.TransformPoint(dCx, dCy);
|
|
oTemp.RotateAt(-m_dTransformAngle, dCx, dCy, Aggplus::MatrixOrderAppend);
|
|
|
|
oTemp.TransformPoint(x, y);
|
|
oTemp.TransformPoint(r, b);
|
|
}
|
|
|
|
m_oWriter.WriteImage((CString)bstrVal, x, y, r - x, b - y, m_oTransform.z_Rotation());
|
|
|
|
return S_OK;
|
|
}
|
|
// transform --------------------------------------------------------------------------------
|
|
STDMETHODIMP CASCHTMLRenderer::GetCommandParams(double* dAngle, double* dLeft, double* dTop, double* dWidth, double* dHeight, DWORD* lFlags)
|
|
{
|
|
return S_OK;
|
|
}
|
|
STDMETHODIMP CASCHTMLRenderer::SetCommandParams(double dAngle, double dLeft, double dTop, double dWidth, double dHeight, DWORD lFlags)
|
|
{
|
|
if (m_bIsThumbnailsCreate)
|
|
{
|
|
m_oThumbnail.SetCommandParams(dAngle, dLeft, dTop, dWidth, dHeight, lFlags);
|
|
}
|
|
|
|
if ((dWidth <= 1) || (dHeight <= 1))
|
|
lFlags = 0;
|
|
|
|
BOOL bFlipX = (0 != (c_nParamFlipX & lFlags));
|
|
BOOL bFlipY = (0 != (c_nParamFlipY & lFlags));
|
|
|
|
double m11 = bFlipX ? -1.0 : 1.0;
|
|
double m22 = bFlipY ? -1.0 : 1.0;
|
|
|
|
NSHtmlRenderer::CMatrix oMatrix(1, 0, 0, 1, 0, 0);
|
|
|
|
if ((0 != dAngle) || (0 != lFlags))
|
|
{
|
|
double dCentreX = (dLeft + dWidth / 2.0);
|
|
double dCentreY = (dTop + dHeight / 2.0);
|
|
|
|
oMatrix.Translate(-dCentreX, -dCentreY , Aggplus::MatrixOrderAppend);
|
|
|
|
oMatrix.Rotate(dAngle , Aggplus::MatrixOrderAppend);
|
|
oMatrix.Scale(m11, m22 , Aggplus::MatrixOrderAppend);
|
|
|
|
oMatrix.Translate(dCentreX, dCentreY , Aggplus::MatrixOrderAppend);
|
|
}
|
|
|
|
m_oTransform = oMatrix;
|
|
CalculateFullTransform();
|
|
|
|
return S_OK;
|
|
}
|
|
STDMETHODIMP CASCHTMLRenderer::SetTransform(double dA, double dB, double dC, double dD, double dE, double dF)
|
|
{
|
|
if (m_bIsThumbnailsCreate)
|
|
{
|
|
m_oThumbnail.SetTransform(dA, dB, dC, dD, dE, dF);
|
|
}
|
|
|
|
NSHtmlRenderer::CMatrix oTrans(dA, dB, dC, dD, dE, dF);
|
|
m_oTransform = oTrans;
|
|
|
|
CalculateFullTransform();
|
|
|
|
return S_OK;
|
|
}
|
|
STDMETHODIMP CASCHTMLRenderer::GetTransform(double *pdA, double *pdB, double *pdC, double *pdD, double *pdE, double *pdF)
|
|
{
|
|
return S_OK;
|
|
}
|
|
STDMETHODIMP CASCHTMLRenderer::ResetTransform(void)
|
|
{
|
|
if (m_bIsThumbnailsCreate)
|
|
{
|
|
m_oThumbnail.ResetTransform();
|
|
}
|
|
|
|
m_oTransform.Reset();
|
|
|
|
CalculateFullTransform();
|
|
|
|
return S_OK;
|
|
}
|
|
// -----------------------------------------------------------------------------------------
|
|
STDMETHODIMP CASCHTMLRenderer::get_ClipMode(LONG* plMode)
|
|
{
|
|
*plMode = m_lClipMode;
|
|
return S_OK;
|
|
}
|
|
STDMETHODIMP CASCHTMLRenderer::put_ClipMode(LONG lMode)
|
|
{
|
|
if (m_bIsThumbnailsCreate)
|
|
{
|
|
m_oThumbnail.put_ClipMode(lMode);
|
|
}
|
|
m_lClipMode = lMode;
|
|
m_oWriter.m_oPage.m_oVectorWriter.SetClipMode(m_lClipMode);
|
|
return S_OK;
|
|
}
|
|
// additiaonal params ----------------------------------------------------------------------
|
|
STDMETHODIMP CASCHTMLRenderer::SetAdditionalParam(BSTR ParamName, VARIANT ParamValue)
|
|
{
|
|
//CString strParamName = (CString)ParamName;
|
|
//
|
|
//if (_T("ParagraphMetrics") == strParamName)
|
|
//{
|
|
// CString strXml = ParamValue.bstrVal;
|
|
// m_oWriter.m_oPage.m_oText.SetParInfo(strXml);
|
|
// return S_OK;
|
|
//}
|
|
CString sParamName = ParamName;
|
|
if ( _T("SourceRendererType") == sParamName && VT_I4 == ParamValue.vt )
|
|
{
|
|
m_oWriter.m_oPage.m_oText.m_bIsPDFTextStyle = ( ParamValue.lVal == c_nPDFWriter ? true : false );
|
|
}
|
|
else if (_T("UseFontWidthForPick") == sParamName && VT_BOOL == ParamValue.vt)
|
|
{
|
|
m_oWriter.m_oPage.m_oText.m_oFontManager.m_bIsUseFontWidth = ((VARIANT_TRUE == ParamValue.boolVal) ? true : false);
|
|
}
|
|
else if (_T("EffectPainter") == sParamName && VT_UNKNOWN == ParamValue.vt)
|
|
{
|
|
#ifdef BUILD_SUPPORT_UNREGISTERED_WATERMARK
|
|
RELEASEINTERFACE(m_pEffectPainter);
|
|
|
|
if (NULL != ParamValue.punkVal)
|
|
{
|
|
ParamValue.punkVal->QueryInterface(Graphics::IID_IAVSEffectPainter, (void**)&m_pEffectPainter);
|
|
}
|
|
#endif
|
|
}
|
|
|
|
if (m_bIsThumbnailsCreate)
|
|
{
|
|
m_oThumbnail.SetAdditionalParam(ParamName, ParamValue);
|
|
}
|
|
return S_OK;
|
|
}
|
|
STDMETHODIMP CASCHTMLRenderer::GetAdditionalParam(BSTR ParamName, VARIANT* ParamValue)
|
|
{
|
|
CString sParamName = ParamName;
|
|
if ( _T("MaxImageSize") == sParamName )
|
|
{
|
|
ParamValue->vt = VT_I4;
|
|
ParamValue->lVal = 800;
|
|
}
|
|
return S_OK;
|
|
}
|
|
// --------------------------------------------------------------------------------------------
|
|
|
|
// file
|
|
STDMETHODIMP CASCHTMLRenderer::CreateOfficeFile(BSTR bsFilePath)
|
|
{
|
|
m_strDstFile = (CString)bsFilePath;
|
|
|
|
int nIndexLastSlash = m_strDstFile.ReverseFind(TCHAR('\\'));
|
|
if (-1 == nIndexLastSlash)
|
|
return S_FALSE;
|
|
|
|
CString strDir = m_strDstFile.Mid(0, nIndexLastSlash);
|
|
|
|
int nIndexExt = m_strDstFile.ReverseFind(TCHAR('.'));
|
|
|
|
if ((-1 == nIndexExt) || nIndexExt <= nIndexLastSlash)
|
|
nIndexExt = m_strDstFile.GetLength();
|
|
|
|
CString strName = m_strDstFile.Mid(nIndexLastSlash + 1, nIndexExt - nIndexLastSlash - 1);
|
|
|
|
m_oWriter.CreateFile(strDir, strName);
|
|
m_oWriter.WriteStartDocument();
|
|
|
|
m_lCurrentPage = -1;
|
|
m_bPageOpened = FALSE;
|
|
|
|
if (NULL == m_pFonts)
|
|
{
|
|
CoCreateInstance(Graphics::CLSID_CASCWinFonts, NULL, CLSCTX_ALL, Graphics::IID_IASCWinFonts, (void**)&m_pFonts);
|
|
}
|
|
if (NULL == m_pFontManager)
|
|
{
|
|
CoCreateInstance(Graphics::CLSID_CASCFontManager, NULL, CLSCTX_ALL, Graphics::IID_IASCFontManager, (void**)&m_pFontManager);
|
|
|
|
m_pFontManager->Initialize(L"");
|
|
m_pFontManager->SetDefaultFont(L"Arial");
|
|
}
|
|
|
|
m_oFont.SetDefaultParams();
|
|
m_oInstalledFont.SetDefaultParams();
|
|
|
|
return S_OK;
|
|
}
|
|
STDMETHODIMP CASCHTMLRenderer::CloseFile()
|
|
{
|
|
if (m_bPageOpened)
|
|
{
|
|
EndPage();
|
|
}
|
|
|
|
if (!m_bIsWEB)
|
|
m_oWriter.WriteEndDocument(m_oDocument);
|
|
else
|
|
{
|
|
if (!m_bIsMenu)
|
|
m_oWriter.WriteEndDocument2(m_oDocument);
|
|
else
|
|
m_oWriter.WriteEndDocument3(m_oDocument);
|
|
}
|
|
|
|
#ifdef BUILD_SUPPORT_UNREGISTERED_WATERMARK
|
|
RELEASEINTERFACE(m_pEffectPainter);
|
|
#endif
|
|
return S_OK;
|
|
}
|
|
|
|
STDMETHODIMP CASCHTMLRenderer::get_Mode(LONG* plMode)
|
|
{
|
|
LONG lMode = 0;
|
|
if (m_oWriter.m_bIsThumbnails)
|
|
lMode |= 0x01;
|
|
if (m_oWriter.m_bIsMenu)
|
|
lMode |= 0x02;
|
|
|
|
*plMode = lMode;
|
|
return S_OK;
|
|
}
|
|
STDMETHODIMP CASCHTMLRenderer::put_Mode(LONG lMode)
|
|
{
|
|
m_oWriter.m_bIsThumbnails = (0x01 == (lMode & 0x01));
|
|
m_oWriter.m_bIsMenu = (0x02 == (lMode & 0x02));
|
|
|
|
m_bIsWEB = (0x04 == (lMode & 0x04));
|
|
m_bIsMenu = FALSE;
|
|
if (m_bIsWEB)
|
|
{
|
|
m_bIsMenu = (0x08 == (lMode & 0x08));
|
|
}
|
|
|
|
m_oWriter.m_oDstInfo.m_bIsWeb = (0x10 == (lMode & 0x10));
|
|
|
|
m_bIsThumbnailsCreate = (true == m_oWriter.m_bIsThumbnails) ? TRUE : FALSE;
|
|
return S_OK;
|
|
}
|