114 lines
3.4 KiB
C++
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);
|
|
}
|
|
}
|