mirror of
https://github.com/isledecomp/LEGOIslandRebuilder.git
synced 2024-11-27 09:35:41 -05:00
108 lines
2.6 KiB
C++
108 lines
2.6 KiB
C++
#include "StdAfx.h"
|
|
#include "GradientItem.h"
|
|
|
|
CGradientItem::CGradientItem(void)
|
|
{
|
|
m_clrLeft = RGB(0,0,0);
|
|
m_clrRight = RGB(0,255,0);
|
|
m_nButtonPushed = 0;
|
|
}
|
|
|
|
CPropertyGrid::EEditMode CGradientItem::GetEditMode()
|
|
{
|
|
return CPropertyGrid::EM_CUSTOM;
|
|
}
|
|
|
|
void CGradientItem::DrawItem(CDC& dc, CRect rc, bool focused)
|
|
{
|
|
CRect rect = rc;
|
|
rect.DeflateRect(focused?rc.Height()+2:2, 2);
|
|
|
|
CBrush brush;
|
|
brush.CreateSolidBrush(GetSysColor(COLOR_WINDOWTEXT));
|
|
dc.FrameRect(rect, &brush);
|
|
|
|
rect.DeflateRect(1,1);
|
|
|
|
TRIVERTEX vert[2] ;
|
|
GRADIENT_RECT gRect;
|
|
vert [0] .x = rect.left;
|
|
vert [0] .y = rect.top;
|
|
vert [0] .Red = GetRValue(m_clrLeft)*256;
|
|
vert [0] .Green = GetGValue(m_clrLeft)*256;
|
|
vert [0] .Blue = GetBValue(m_clrLeft)*256;
|
|
vert [0] .Alpha = 0x0000;
|
|
|
|
vert [1] .x = rect.right;
|
|
vert [1] .y = rect.bottom;
|
|
vert [1] .Red = GetRValue(m_clrRight)*256;
|
|
vert [1] .Green = GetGValue(m_clrRight)*256;
|
|
vert [1] .Blue = GetBValue(m_clrRight)*256;
|
|
vert [1] .Alpha = 0x0000;
|
|
|
|
gRect.UpperLeft = 0;
|
|
gRect.LowerRight = 1;
|
|
|
|
// DOWNGRADE: Commented out because MFC 4.2 doesn't have GradientFill
|
|
//dc.GradientFill(vert,2,&gRect,1,GRADIENT_FILL_RECT_H);
|
|
|
|
if (focused)
|
|
{
|
|
// for propert clean up
|
|
CFont* pOldFont = dc.SelectObject(m_pGrid->GetFontBold());
|
|
|
|
// the left button
|
|
CRect rc1 = rc;
|
|
rc1.right = rc1.left + rc1.Height();
|
|
dc.DrawFrameControl(rc1, DFC_BUTTON, DFCS_BUTTONPUSH|(m_nButtonPushed==1?DFCS_PUSHED:0));
|
|
dc.SelectObject(m_pGrid->GetFontBold());
|
|
dc.DrawText("...", rc1, DT_CENTER|DT_SINGLELINE|DT_VCENTER|DT_NOPREFIX);
|
|
|
|
// the right button
|
|
CRect rc2 = rc;
|
|
rc2.left = rc2.right - rc2.Height();
|
|
dc.DrawFrameControl(rc2, DFC_BUTTON, DFCS_BUTTONPUSH|(m_nButtonPushed==2?DFCS_PUSHED:0));
|
|
dc.SelectObject(m_pGrid->GetFontBold());
|
|
dc.DrawText("...", rc2, DT_CENTER|DT_SINGLELINE|DT_VCENTER|DT_NOPREFIX);
|
|
|
|
// clean up
|
|
dc.SelectObject(pOldFont);
|
|
}
|
|
}
|
|
|
|
bool CGradientItem::OnLButtonDown(CRect rc, CPoint pt)
|
|
{
|
|
m_nButtonPushed = 0;
|
|
if (rc.PtInRect(pt))
|
|
{
|
|
if (pt.x<=rc.left+rc.Height())
|
|
{
|
|
m_nButtonPushed = 1;
|
|
return true;
|
|
}
|
|
if (pt.x>=rc.right-rc.Height())
|
|
{
|
|
m_nButtonPushed = 2;
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
void CGradientItem::OnMouseMove(CRect rc, CPoint pt)
|
|
{
|
|
OnLButtonDown(rc, pt);
|
|
}
|
|
|
|
void CGradientItem::OnLButtonUp(CRect rc, CPoint pt)
|
|
{
|
|
COLORREF& clr = (m_nButtonPushed==1) ? m_clrLeft : m_clrRight;
|
|
m_nButtonPushed = 0;
|
|
CColorDialog dlg(clr, 0, m_pGrid);
|
|
if (dlg.DoModal() == IDOK)
|
|
{
|
|
clr = dlg.GetColor();
|
|
m_pGrid->Invalidate();
|
|
}
|
|
}
|
|
|