// NeL - MMORPG Framework
// Copyright (C) 2010 Winch Gate Property Limited
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as
// published by the Free Software Foundation, either version 3 of the
// License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see .
#include "std_afx.h"
#include "blend_wnd.h"
#include
#include
using namespace NL3D;
using namespace NLMISC;
#define COLOR_BLEND_ENABLE (RGB(192, 43, 223))
#define COLOR_BLEND_DISABLE (RGB(140, 113, 142))
#define SEGMENT_COUNT 10
// ***************************************************************************
CBlendWnd::CBlendWnd()
{
}
// ***************************************************************************
void CBlendWnd::MakePoint (const RECT& src, POINT& dst, float x, float y)
{
float widthClient=(float)src.right-(float)src.left;
float heightClient=(float)src.bottom-(float)src.top;
dst.x=src.left+(int)(widthClient*x);
dst.y=src.top+(int)(heightClient*y);
}
// ***************************************************************************
void CBlendWnd::MakeRect (const RECT& src, RECT& dst, float x, float y, float width, float height)
{
float widthClient=(float)src.right-(float)src.left;
float heightClient=(float)src.bottom-(float)src.top;
dst.left=src.left+(int)(widthClient*x);
dst.top=src.top+(int)(heightClient*y);
dst.right=src.left+(int)(widthClient*(x+width));
dst.bottom=src.top+(int)(heightClient*(y+height));
}
// ***************************************************************************
void CBlendWnd::OnPaint (const RECT& client, CDC* pDc, float StartBlend, float EndBlend, float StartBlendTime, float EndBlendTime,
float Smoothness, float StartTime, float EndTime, bool enabled)
{
// Get the good color
COLORREF color=(enabled?COLOR_BLEND_ENABLE:COLOR_BLEND_DISABLE);
// *** Paint the left rect
// Offset start
float offsetLeft=(StartBlendTime-StartTime)/(EndTime-StartTime);
clamp (offsetLeft, 0, 1);
// Fill the background
pDc->FillSolidRect(&client, GetSysColor (COLOR_SCROLLBAR));
// Make a rect for left
RECT left;
MakeRect (client, left, 0.f, 1.f-StartBlend, offsetLeft, StartBlend);
pDc->FillSolidRect(&left, color);
// *** Paint the right rect
// Offset start
float offsetRight=(EndBlendTime-StartTime)/(EndTime-StartTime);
clamp (offsetRight, 0, 1);
// Make a rect for left
RECT right;
MakeRect (client, right, offsetRight, 1.f-EndBlend, 1.f-offsetRight, EndBlend);
pDc->FillSolidRect(&right, color);
// *** Paint the inter zone
// Set pen and brush color
CPen myPen (PS_NULL, 0, color);
CBrush myBrush (color);
CPen* oldPen=NULL;
CBrush* oldBrush=NULL;
// Then initialize it
oldPen=pDc->SelectObject (&myPen);
oldBrush=pDc->SelectObject (&myBrush);
for (uint i=0; iPolygon (polygon, 4);
}
// Draw limit line
CPen myBlackPen (PS_SOLID, 1, RGB(0,0,0));
pDc->SelectObject (&myBlackPen);
POINT p0;
POINT p1;
//MakePoint (client, p0, offsetLeft, 1.f-StartBlend);
MakePoint (client, p0, offsetLeft, 0.f);
MakePoint (client, p1, offsetLeft, 1.f);
pDc->MoveTo (p0);
pDc->LineTo (p1);
//MakePoint (client, p0, offsetRight, 1.f-EndBlend);
MakePoint (client, p0, offsetRight, 0.f);
MakePoint (client, p1, offsetRight, 1.f);
pDc->MoveTo (p0);
pDc->LineTo (p1);
// Make frame
pDc->MoveTo (client.left, client.top);
pDc->LineTo (client.right, client.top);
pDc->LineTo (client.right, client.bottom);
pDc->LineTo (client.left, client.bottom);
pDc->LineTo (client.left, client.top);
// Then reselect old object
pDc->SelectObject (oldPen);
pDc->SelectObject (oldBrush);
}
// ***************************************************************************