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

git-svn-id:...

git-svn-id: svn://fileserver/activex/AVS/Sources/TeamlabOffice/trunk/ServerComponents@54939 954022d7-b5bf-4e40-9824-e11837661b57
parent cc797754
......@@ -169,8 +169,6 @@ public:
BOOL m_bUsePattern;
CColor m_colors[2];
};
static CBrush* CreateBrush(NSStructures::CBrush* pBrush);
}
#endif // _BUILD_BRUSH_H_
\ No newline at end of file
......@@ -23,6 +23,8 @@ namespace Aggplus
m_oInitGdiplus.Init();
#endif
m_dGlobalAlpha = 1.0;
}
CGraphics::CGraphics(int dwWidth, int dwHeight, int stride, BYTE* pBuffer) : m_dwConfigFlags(0)
......@@ -40,6 +42,7 @@ namespace Aggplus
m_bIntegerGrid = false;
Create(pBuffer, dwWidth, dwHeight, stride, 0);
m_dGlobalAlpha = 1.0;
#ifdef _WINDOW_GDIPLUS_USE_
m_pBitmap = NULL;
......@@ -49,6 +52,7 @@ namespace Aggplus
CGraphics::CGraphics(CImage* pImage) : m_dwConfigFlags(0)
{
m_dGlobalAlpha = 1.0;
if (!pImage)
{
return;
......@@ -634,7 +638,7 @@ namespace Aggplus
m_rasterizer.get_rasterizer().add_path(trans);
}
CColor oColor((BYTE)pPen->Alpha, pPen->Color);
CColor oColor((BYTE)(pPen->Alpha * m_dGlobalAlpha), pPen->Color);
CBrushSolid oBrush(oColor);
m_rasterizer.get_rasterizer().filling_rule(agg::fill_non_zero);
......
......@@ -201,7 +201,8 @@ public:
agg::svg::frame_buffer_rgba& get_frame_buffer();
agg::svg::rasterizer& get_rasterizer();
bool m_bIntegerGrid;
bool m_bIntegerGrid;
double m_dGlobalAlpha;
public:
......
#include "GraphicsRenderer.h"
////////////////////////////////////////////////////////////////////////////////
namespace Aggplus
Aggplus::CBrush* CGraphicsRenderer::CreateBrush(NSStructures::CBrush* pBrush)
{
static CBrush* CreateBrush(NSStructures::CBrush* pBrush)
if (NULL == pBrush)
return NULL;
LONG Type = pBrush->Type;
if ((0 == Type) || (c_BrushTypeSolid == Type))
{
if (NULL == pBrush)
return NULL;
Aggplus::CColor oColor((BYTE)(pBrush->Alpha1 * m_dGlobalAlpha), pBrush->Color1);
Aggplus::CBrushSolid* pNew = new Aggplus::CBrushSolid(oColor);
LONG Type = pBrush->Type;
if ((0 == Type) || (c_BrushTypeSolid == Type))
{
Aggplus::CColor oColor((BYTE)pBrush->Alpha1, pBrush->Color1);
Aggplus::CBrushSolid* pNew = new Aggplus::CBrushSolid(oColor);
return pNew;
}
else if ((c_BrushTypeHorizontal == Type) ||
(c_BrushTypeVertical == Type) ||
(c_BrushTypeDiagonal1 == Type) ||
(c_BrushTypeDiagonal2 == Type) ||
(c_BrushTypeCenter == Type) ||
(c_BrushTypePathGradient1 == Type) ||
(c_BrushTypePathGradient2 == Type) ||
(c_BrushTypeCylinderHor == Type) ||
(c_BrushTypeCylinderVer == Type))
{
Aggplus::CColor o1((BYTE)(pBrush->Alpha1 * m_dGlobalAlpha), pBrush->Color1);
Aggplus::CColor o2((BYTE)(pBrush->Alpha2 * m_dGlobalAlpha), pBrush->Color2);
return pNew;
}
else if ((c_BrushTypeHorizontal == Type) ||
(c_BrushTypeVertical == Type) ||
(c_BrushTypeDiagonal1 == Type) ||
(c_BrushTypeDiagonal2 == Type) ||
(c_BrushTypeCenter == Type) ||
(c_BrushTypePathGradient1 == Type) ||
(c_BrushTypePathGradient2 == Type) ||
(c_BrushTypeCylinderHor == Type) ||
(c_BrushTypeCylinderVer == Type))
Aggplus::CBrushLinearGradient* pNew = new Aggplus::CBrushLinearGradient( Aggplus::RectF(0.0f, 0.0f, 1.0f, 1.0f), o1, o2, (float)pBrush->LinearAngle, TRUE );
if( pNew )
{
Aggplus::CColor o1((BYTE)pBrush->Alpha1, pBrush->Color1);
Aggplus::CColor o2((BYTE)pBrush->Alpha2, pBrush->Color2);
pNew->SetRelativeCoords( TRUE );
Aggplus::CBrushLinearGradient* pNew = new Aggplus::CBrushLinearGradient( Aggplus::RectF(0.0f, 0.0f, 1.0f, 1.0f), o1, o2, (float)pBrush->LinearAngle, TRUE );
if( pNew )
int nCountSubColors = pBrush->m_arrSubColors.GetSize();
if( nCountSubColors > 0 )
{
pNew->SetRelativeCoords( TRUE );
Aggplus::CColor* pColors = new Aggplus::CColor[nCountSubColors];
float* pBlends = new float[nCountSubColors];
int nCountSubColors = pBrush->m_arrSubColors.GetSize();
if( nCountSubColors > 0 )
if( pColors && pBlends )
{
Aggplus::CColor* pColors = new Aggplus::CColor[nCountSubColors];
float* pBlends = new float[nCountSubColors];
if( pColors && pBlends )
for( int i = 0; i < nCountSubColors; i++ )
{
for( int i = 0; i < nCountSubColors; i++ )
{
DWORD dwColor = (DWORD)pBrush->m_arrSubColors[i].color;
BYTE r = (dwColor >> 24) & 0xFF;
BYTE g = (dwColor >> 16) & 0xFF;
BYTE b = (dwColor >> 8) & 0xFF;
BYTE a = (dwColor) & 0xFF;
pColors[i] = Aggplus::CColor(a, b, g, r);
pBlends[i] = (float)(pBrush->m_arrSubColors[i].position / 65536.0);
}
pNew->SetInterpolationColors( pColors, pBlends, nCountSubColors );
DWORD dwColor = (DWORD)pBrush->m_arrSubColors[i].color;
BYTE r = (dwColor >> 24) & 0xFF;
BYTE g = (dwColor >> 16) & 0xFF;
BYTE b = (dwColor >> 8) & 0xFF;
BYTE a = (dwColor) & 0xFF;
pColors[i] = Aggplus::CColor((BYTE)(a * m_dGlobalAlpha), b, g, r);
pBlends[i] = (float)(pBrush->m_arrSubColors[i].position / 65536.0);
}
delete [] pColors;
delete [] pBlends;
pNew->SetInterpolationColors( pColors, pBlends, nCountSubColors );
}
pNew->SetBounds(pBrush->Bounds);
delete [] pColors;
delete [] pBlends;
}
if (pNew && c_BrushTypePathGradient2 == Type)
pNew->m_bType = BrushTypePathGradient;
return pNew;
pNew->SetBounds(pBrush->Bounds);
}
else if (c_BrushTypeHatch1 == Type)
{
Aggplus::CColor o1((BYTE)pBrush->Alpha1, pBrush->Color1);
Aggplus::CColor o2((BYTE)pBrush->Alpha2, pBrush->Color2);
Aggplus::CBrushHatch* pNew = new Aggplus::CBrushHatch();
pNew->m_dwColor1 = o1;
pNew->m_dwColor2 = o2;
pNew->m_name = pBrush->TexturePath;
if (pNew && c_BrushTypePathGradient2 == Type)
pNew->m_bType = Aggplus::BrushTypePathGradient;
pNew->Bounds = pBrush->Bounds;
return pNew;
}
else if (c_BrushTypeHatch1 == Type)
{
Aggplus::CColor o1((BYTE)(pBrush->Alpha1 * m_dGlobalAlpha), pBrush->Color1);
Aggplus::CColor o2((BYTE)(pBrush->Alpha2 * m_dGlobalAlpha), pBrush->Color2);
return pNew;
}
else
{
Aggplus::CBrushTexture* pNew = new Aggplus::CBrushTexture(pBrush->TexturePath, /*(Aggplus::WrapMode)TextureMode*/Aggplus::WrapModeClamp);
return pNew;
}
Aggplus::CBrushHatch* pNew = new Aggplus::CBrushHatch();
pNew->m_dwColor1 = o1;
pNew->m_dwColor2 = o2;
pNew->m_name = pBrush->TexturePath;
pNew->Bounds = pBrush->Bounds;
return pNew;
}
else
{
Aggplus::CBrushTexture* pNew = new Aggplus::CBrushTexture(pBrush->TexturePath, /*(Aggplus::WrapMode)TextureMode*/Aggplus::WrapModeClamp);
return pNew;
}
}
CGraphicsRenderer::CGraphicsRenderer()
{
m_pRenderer = NULL;
......@@ -584,7 +581,7 @@ HRESULT CGraphicsRenderer::CommandDrawTextCHAR(const LONG& c, const double& x, c
_SetFont();
Aggplus::CBrush* pBrush = Aggplus::CreateBrush(&m_oBrush);
Aggplus::CBrush* pBrush = CreateBrush(&m_oBrush);
m_pRenderer->DrawStringC(c, m_pFontManager, pBrush, x, y + baselineOffset);
RELEASEOBJECT(pBrush);
......@@ -599,7 +596,7 @@ HRESULT CGraphicsRenderer::CommandDrawText(const std::wstring& bsText, const dou
_SetFont();
Aggplus::CBrush* pBrush = Aggplus::CreateBrush(&m_oBrush);
Aggplus::CBrush* pBrush = CreateBrush(&m_oBrush);
m_pRenderer->DrawString(bsText, m_pFontManager, pBrush, x, y + baselineOffset);
RELEASEOBJECT(pBrush);
......@@ -803,7 +800,7 @@ HRESULT CGraphicsRenderer::DrawPath(const LONG& nType)
}
else
{
pBrush = Aggplus::CreateBrush(&m_oBrush);
pBrush = CreateBrush(&m_oBrush);
}
m_pRenderer->FillPath(pBrush, m_pPath);
......@@ -847,7 +844,7 @@ HRESULT CGraphicsRenderer::DrawPath(const LONG& nType)
}
else
{
pBrush = Aggplus::CreateBrush(&m_oBrush);
pBrush = CreateBrush(&m_oBrush);
}
m_pRenderer->FillPath(pBrush, m_pPath);
......@@ -1189,6 +1186,8 @@ void CGraphicsRenderer::put_GlobalAlphaEnabled(const bool& bEnabled, const doubl
m_dGlobalAlpha = dVal;
else
m_dGlobalAlpha = 1.0;
m_pRenderer->m_dGlobalAlpha = m_dGlobalAlpha;
}
void CGraphicsRenderer::AddRect(const double& x, const double& y, const double& w, const double& h)
......
......@@ -214,6 +214,7 @@ protected:
void ApplyTransform(const double& d1, const double& d2, const double& d3, const double& d4, const double& d5, const double& d6);
void ApplyTransform(Aggplus::CMatrix* pMatrix);
void _ResetTransform();
Aggplus::CBrush* CreateBrush(NSStructures::CBrush* pBrush);
public:
void CreateFromBgraFrame(CBgraFrame* pFrame);
......
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