Files
core/ASCImageStudio3/ASCGraphics/Objects/ASCGlyphImage.h

150 lines
3.2 KiB
C++
Raw Blame History

// 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);
}
}
};