Пример #1
0
static void CreateColorMixMap(void)
{
	const int FROM_NEIGHBOUR = 0x00;
	const int MIX_THRESHOLD = HGR_BLUE; // (skip) bottom 2 HGR colors

	for (int t=0; t<6; t++)	// Color_Palette_Index_e::HGR_BLACK(0) ... Color_Palette_Index_e::HGR_VIOLET(5)
	{
		for (int m=0; m<6; m++)
		{
			for (int b=0; b<6; b++)
			{
				BYTE cTop = t;
				BYTE cMid = m;
				BYTE cBot = b;

				WORD mixTop, mixBot;

				if (cMid < MIX_THRESHOLD)
				{
					mixTop = mixBot = cMid;
				}
				else
				{
					if (cTop < MIX_THRESHOLD)
						mixTop = FROM_NEIGHBOUR;
					else
						mixTop = MixColors(cMid,cTop);

					if (cBot < MIX_THRESHOLD)
						mixBot = FROM_NEIGHBOUR;
					else
						mixBot = MixColors(cMid,cBot);

					if (mixTop == FROM_NEIGHBOUR && mixBot != FROM_NEIGHBOUR)
						mixTop = mixBot;
					else if (mixBot == FROM_NEIGHBOUR && mixTop != FROM_NEIGHBOUR)
						mixBot = mixTop;
					else if (mixBot == FROM_NEIGHBOUR && mixTop == FROM_NEIGHBOUR)
						mixBot = mixTop = cMid;
				}

				colormixmap[t][m][b] = (mixTop << 8) | mixBot;
			}
		}
	}
}
Пример #2
0
void RenderSky(HDC hdc, const RECT rci, COLORREF Col1, COLORREF Col2 , int iSteps)
{
	RECT rc = rci;

RECT rcd=rc;
int i;

#if BUGSTOP
LKASSERT(iSteps >=2)
#endif
if(iSteps == 1) iSteps++;
double fdy = (double)(rc.top - rc.bottom)/(double)(iSteps-1);
HPEN   hpHorizon;
HBRUSH hbHorizon;
COLORREF Col;
double fTop;
LKASSERT(iSteps!=0);

/* just take something in order to store the old brush and pen for restoring them */
HPEN OldPen     = (HPEN)   SelectObject(hdc, GetStockObject(WHITE_PEN));
HBRUSH OldBrush = (HBRUSH) SelectObject(hdc, GetStockObject(BLACK_BRUSH));
	rcd = rc;

	fTop = (double)rcd.bottom-fdy;
	for(i=0 ; i < iSteps ; i++)
	{
	  rcd.bottom  = rcd.top ;
	  fTop += fdy;
	  rcd.top     = (long)fTop;

	  Col = MixColors( Col2, Col1,  (double) i / (double) iSteps);

//	  rcd = RectIntersect(rcd,rc);
	  hpHorizon = (HPEN)CreatePen(PS_SOLID, (1), Col);
	  hbHorizon = (HBRUSH)CreateSolidBrush(Col);
	  SelectObject(hdc, hpHorizon);
	  SelectObject(hdc, hbHorizon);

	  Rectangle(hdc,rcd.left,rcd.top,rcd.right,rcd.bottom);

	  SelectObject(hdc, OldPen);
	  SelectObject(hdc, OldBrush);

	  DeleteObject(hpHorizon);
	  DeleteObject(hbHorizon);
   }
}
Пример #3
0
void RenderCircleSky(HDC hdc, const RECT rc, COLORREF Col1, COLORREF Col2 , int iSteps)
{
RECT rcd;
int i;


double fdy = (double)(rc.top - rc.bottom)/(double)iSteps;
HPEN   hpHorizon;
HBRUSH hbHorizon;
COLORREF Col;
double fTop;
LKASSERT(iSteps!=0);

/* just take something in order to store the old brush and pen for restoring them */
HPEN OldPen     = (HPEN)   SelectObject(hdc, GetStockObject(WHITE_PEN));
HBRUSH OldBrush = (HBRUSH) SelectObject(hdc, GetStockObject(BLACK_BRUSH));
	rcd = rc;

	fTop = (double)rcd.bottom;
	for(i=0 ; i < iSteps ; i++)
	{
	  rcd.bottom  = rcd.top ;
	  fTop += fdy;
	  rcd.top     = (long)fTop;

	  Col = MixColors( Col2, Col1,  (double) i / (double) iSteps);

//	  rcd = RectIntersect(rcd,rc);
	  hpHorizon = (HPEN)CreatePen(PS_SOLID, IBLSCALE(1), Col);
	  hbHorizon = (HBRUSH)CreateSolidBrush(Col);
	  SelectObject(hdc, hpHorizon);
	  SelectObject(hdc, hbHorizon);

	//  Rectangle(hdc,rcd.left,rcd.top,rcd.right,rcd.bottom);
	//  Circle(hdc,rcd.left,rcd.top,rcd.right,rcd.bottom);
	//  int Circle(HDC hdc, long x, long y, int radius, RECT rc, bool clip, bool fill)
	  SelectObject(hdc, OldPen);
	  SelectObject(hdc, OldBrush);

	  DeleteObject(hpHorizon);
	  DeleteObject(hbHorizon);
   }
}