mirror of
https://github.com/ONLYOFFICE/core.git
synced 2026-07-11 06:22:44 +08:00
150 lines
3.2 KiB
C++
150 lines
3.2 KiB
C++
// CASCGlyphImage.h : Declaration of the CGlyphImage
|
||
|
||
#pragma once
|
||
#include "..\stdafx.h"
|
||
#include "..\resource.h" // main symbols
|
||
|
||
#include "..\Interfaces\IASCGlyphImage.h"
|
||
|
||
#include "Font\GlyphBitmap.h"
|
||
|
||
// CGlyphImage
|
||
[coclass, uuid("F891A27A-A985-4b85-BCB8-039AAC2A9A76"), threading(apartment), vi_progid("AVSGraphics.GlyphImage"), progid("AVSGraphics.GlyphImage"), version(1.0), support_error_info(IGlyphImage), registration_script("control.rgs")]
|
||
class ATL_NO_VTABLE CGlyphImage
|
||
: public IGlyphImage2
|
||
{
|
||
|
||
public:
|
||
TGlyphBitmap m_oGlyph;
|
||
|
||
public:
|
||
|
||
CGlyphImage() : m_oGlyph()
|
||
{
|
||
m_oGlyph.bFreeData = false;
|
||
m_oGlyph.pData = NULL;
|
||
}
|
||
|
||
~CGlyphImage()
|
||
{
|
||
Destroy();
|
||
}
|
||
|
||
public:
|
||
STDMETHOD(SetAdditionalParam)(BSTR ParamName, VARIANT ParamValue)
|
||
{
|
||
return S_OK;
|
||
}
|
||
STDMETHOD(GetAdditionalParam)(BSTR ParamName, VARIANT* ParamValue)
|
||
{
|
||
return S_OK;
|
||
}
|
||
STDMETHOD(CreateDublicate)(IASCGraphicsBase** ppGraphicsBase)
|
||
{
|
||
if (NULL == ppGraphicsBase)
|
||
return S_FALSE;
|
||
|
||
RELEASEINTERFACE((*ppGraphicsBase));
|
||
if (SUCCEEDED(CoCreateInstance(__uuidof(CGlyphImage), NULL, CLSCTX_INPROC, __uuidof(IASCGraphicsBase), (void**)ppGraphicsBase)))
|
||
{
|
||
((CGlyphImage*)(*ppGraphicsBase))->m_oGlyph = m_oGlyph;
|
||
return S_OK;
|
||
}
|
||
return S_FALSE;
|
||
}
|
||
|
||
STDMETHOD(get_Width)(LONG* width)
|
||
{
|
||
if (NULL == width)
|
||
return S_FALSE;
|
||
|
||
*width = m_oGlyph.nWidth;
|
||
return S_OK;
|
||
}
|
||
STDMETHOD(get_Height)(LONG* height)
|
||
{
|
||
if (NULL == height)
|
||
return S_FALSE;
|
||
|
||
*height = m_oGlyph.nHeight;
|
||
return S_OK;
|
||
}
|
||
STDMETHOD(get_Antialiased)(VARIANT_BOOL* bVal)
|
||
{
|
||
if (NULL == bVal)
|
||
return S_FALSE;
|
||
|
||
*bVal = (TRUE == m_oGlyph.bAA) ? VARIANT_TRUE : VARIANT_FALSE;
|
||
return S_OK;
|
||
}
|
||
STDMETHOD(get_Data)(BYTE** ppBuffer)
|
||
{
|
||
if (NULL == ppBuffer)
|
||
return S_FALSE;
|
||
|
||
*ppBuffer = m_oGlyph.pData;
|
||
return S_OK;
|
||
}
|
||
|
||
STDMETHOD(Create)(BYTE* pData, LONG lX, LONG lY, LONG lWidth, LONG lHeight, BOOL bIsFreeData)
|
||
{
|
||
m_oGlyph.nX = lX;
|
||
m_oGlyph.nY = lY;
|
||
m_oGlyph.nWidth = lWidth;
|
||
m_oGlyph.nHeight = lHeight;
|
||
|
||
m_oGlyph.bAA = FALSE;
|
||
m_oGlyph.bFreeData = FALSE;
|
||
|
||
m_oGlyph.pData = pData;
|
||
|
||
//if (FALSE)
|
||
//{
|
||
// m_oGlyph.bFreeData = TRUE;
|
||
// m_oGlyph.pData = (unsigned char*)malloc(lWidth * lHeight);
|
||
// memcpy(m_oGlyph.pData, pData, lWidth * lHeight);
|
||
//}
|
||
|
||
return S_OK;
|
||
}
|
||
|
||
public:
|
||
|
||
void Create(TGlyphBitmap* pGlyph)
|
||
{
|
||
if (NULL == pGlyph)
|
||
return;
|
||
|
||
Destroy();
|
||
|
||
m_oGlyph.nX = pGlyph->nX;
|
||
m_oGlyph.nY = pGlyph->nY;
|
||
m_oGlyph.nWidth = pGlyph->nWidth;
|
||
m_oGlyph.nHeight = pGlyph->nHeight;
|
||
|
||
m_oGlyph.bAA = pGlyph->bAA;
|
||
m_oGlyph.bFreeData = pGlyph->bFreeData;
|
||
|
||
m_oGlyph.bFreeData = true;
|
||
m_oGlyph.pData = new BYTE[m_oGlyph.nWidth * m_oGlyph.nHeight];
|
||
memcpy(m_oGlyph.pData, pGlyph->pData, m_oGlyph.nWidth * m_oGlyph.nHeight);
|
||
|
||
//if (m_oGlyph.bFreeData)
|
||
//{
|
||
// // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||
// // <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD>)
|
||
//}
|
||
|
||
//m_oGlyph.pData = pGlyph->pData;
|
||
}
|
||
|
||
protected:
|
||
|
||
void Destroy()
|
||
{
|
||
if (m_oGlyph.bFreeData)
|
||
{
|
||
RELEASEMEM(m_oGlyph.pData);
|
||
}
|
||
}
|
||
}; |