Windows2003-3790/windows/advcore/gdiplus/test/functest/ccontainer.cpp
2020-09-30 16:53:55 +02:00

114 lines
3.4 KiB
C++

/******************************Module*Header*******************************\
* Module Name: CContainer.cpp
*
* This file contains the code to support the functionality test harness
* for GDI+. This includes menu options and calling the appropriate
* functions for execution.
*
* Created: 05-May-2000 - Jeff Vezina [t-jfvez]
*
* Copyright (c) 2000 Microsoft Corporation
*
\**************************************************************************/
#include "CContainer.h"
#define ROOT 0
#define LEFT 1
#define RIGHT 2
#define TOP 3
#define BOTTOM 4
CContainer::CContainer(BOOL bRegression)
{
strcpy(m_szName,"Container");
m_circlePath=NULL;
m_circleRect.X=0;
m_circleRect.Y=0;
m_circleRect.Width=(int)(TESTAREAWIDTH/4.0f);
m_circleRect.Height=(int)(TESTAREAHEIGHT/4.0f);
m_bRegression=bRegression;
}
CContainer::~CContainer()
{
}
void CContainer::Draw(Graphics *g)
{
m_circlePath = new GraphicsPath;
m_circlePath->AddEllipse(m_circleRect);
// !!! [agodfrey] Question: If I add the next line, why do I get no output?
// m_circlePath->AddEllipse(m_circleRect);
INT id = g->Save();
g->TranslateTransform((int)(TESTAREAWIDTH/4.0f), (int)(TESTAREAHEIGHT/4.0f));
DrawFractal(g, 245, ROOT, 8);
g->Restore(id);
delete m_circlePath;
}
void CContainer::DrawFractal(Graphics * g, BYTE gray, INT side, INT count)
{
ARGB argb;
switch (count % 3)
{
case 0:
argb = Color::MakeARGB(255, 0, 0, gray);
break;
case 1:
argb = Color::MakeARGB(255, 0, gray, 0);
break;
case 2:
argb = Color::MakeARGB(255, gray, 0, 0);
gray -= 60;
break;
}
Color color(argb);
SolidBrush contBrush(color);
g->SetPageUnit(UnitPixel);
g->FillPath(&contBrush, m_circlePath);
if (--count == 0)
{
return;
}
Rect destRect;
GraphicsContainer cstate;
if (side != LEFT)
{
destRect = Rect((int)(TESTAREAWIDTH/4.0f), (int)(TESTAREAHEIGHT/16.0f), (int)(TESTAREAWIDTH/8.0f), (int)(TESTAREAHEIGHT/8.0f));
cstate = g->BeginContainer(destRect, m_circleRect, UnitPixel);
g->SetSmoothingMode(SmoothingModeAntiAlias);
DrawFractal(g, gray, RIGHT, count);
g->EndContainer(cstate);
}
if (side != TOP)
{
destRect = Rect((int)(TESTAREAWIDTH/16.0f), (int)(TESTAREAHEIGHT/4.0f), (int)(TESTAREAWIDTH/8.0f), (int)(TESTAREAHEIGHT/8.0f));
cstate = g->BeginContainer(destRect, m_circleRect, UnitPixel);
g->SetSmoothingMode(SmoothingModeNone);
DrawFractal(g, gray, BOTTOM, count);
g->EndContainer(cstate);
}
if (side != RIGHT)
{
destRect = Rect(-(int)(TESTAREAWIDTH/8.0f), (int)(TESTAREAHEIGHT/16.0f), (int)(TESTAREAWIDTH/8.0f), (int)(TESTAREAHEIGHT/8.0f));
cstate = g->BeginContainer(destRect, m_circleRect, UnitPixel);
g->SetSmoothingMode(SmoothingModeAntiAlias);
DrawFractal(g, gray, LEFT, count);
g->EndContainer(cstate);
}
if (side != BOTTOM)
{
destRect = Rect((int)(TESTAREAWIDTH/16.0f), -(int)(TESTAREAHEIGHT/8.0f), (int)(TESTAREAWIDTH/8.0f), (int)(TESTAREAHEIGHT/8.0f));
cstate = g->BeginContainer(destRect, m_circleRect, UnitPixel);
g->SetSmoothingMode(SmoothingModeNone);
DrawFractal(g, gray, TOP, count);
g->EndContainer(cstate);
}
}