mirror of
https://github.com/ondra-novak/gates_of_skeldal.git
synced 2025-07-16 03:06:45 -04:00
113 lines
2.3 KiB
C++
113 lines
2.3 KiB
C++
// PaletteEditor.cpp : implementation file
|
|
//
|
|
|
|
#include "stdafx.h"
|
|
#include "ColEdit.h"
|
|
#include "PaletteEditor.h"
|
|
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CPaletteEditor
|
|
|
|
CPaletteEditor::CPaletteEditor()
|
|
{
|
|
memset(_selection,0,sizeof(_selection));
|
|
}
|
|
|
|
CPaletteEditor::~CPaletteEditor()
|
|
{
|
|
}
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(CPaletteEditor, CStatic)
|
|
//{{AFX_MSG_MAP(CPaletteEditor)
|
|
ON_WM_PAINT()
|
|
ON_WM_LBUTTONDOWN()
|
|
ON_WM_MOUSEMOVE()
|
|
ON_WM_LBUTTONUP()
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CPaletteEditor message handlers
|
|
|
|
void CPaletteEditor::OnPaint()
|
|
{
|
|
CPaintDC dc(this); // device context for painting
|
|
CRect rc;
|
|
GetClientRect(&rc);
|
|
char *p=_palette;
|
|
|
|
for (int i=0;i<16;i++)
|
|
for (int j=0;j<16;j++)
|
|
{
|
|
int x1=rc.right*j/16;
|
|
int y1=rc.bottom*i/16;
|
|
int x2=rc.right*(j+1)/16-1;
|
|
int y2=rc.bottom*(i+1)/16-1;
|
|
|
|
COLORREF ref=RGB(p[0],p[1],p[2]);
|
|
bool white=(p[0]*0.3+p[1]*0.5+p[2]*0.2)<128;
|
|
p+=3;
|
|
dc.FillSolidRect(x1,y1,x2-x1,y2-y1,ref);
|
|
dc.SelectStockObject(white?WHITE_PEN:BLACK_PEN);
|
|
if (!_selection[i*16+j])
|
|
{
|
|
dc.SelectStockObject(HOLLOW_BRUSH);
|
|
dc.Rectangle(x1,y1,x2,y2);
|
|
dc.MoveTo(x1,y1);dc.LineTo(x2,y2);
|
|
dc.MoveTo(x1,y2);dc.LineTo(x2,y1);
|
|
}
|
|
}
|
|
}
|
|
// Do not call CStatic::OnPaint() for painting message}
|
|
|
|
|
|
void CPaletteEditor::OnLButtonDown(UINT nFlags, CPoint point)
|
|
{
|
|
int pt=IndexFromPoint(point);
|
|
if (!(nFlags & MK_CONTROL))
|
|
memset(_selection,0,sizeof(_selection));
|
|
if (pt>=0 && pt<256)
|
|
_selection[pt]=!_selection[pt];
|
|
_drawsel=_selection[pt];
|
|
Invalidate();
|
|
SetCapture();
|
|
}
|
|
|
|
|
|
void CPaletteEditor::OnMouseMove(UINT nFlags, CPoint point)
|
|
{
|
|
if (GetCapture()==this)
|
|
{
|
|
int pt=IndexFromPoint(point);
|
|
if (pt>=0 && pt<256)
|
|
_selection[pt]=_drawsel;
|
|
Invalidate();
|
|
}
|
|
}
|
|
|
|
int CPaletteEditor::IndexFromPoint(CPoint pt)
|
|
{
|
|
CRect rc;
|
|
GetClientRect(&rc);
|
|
int x=pt.x*16/rc.right;
|
|
int y=pt.y*16/rc.bottom;
|
|
int ret=y*16+x;
|
|
return ret;
|
|
}
|
|
|
|
void CPaletteEditor::OnLButtonUp(UINT nFlags, CPoint point)
|
|
{
|
|
if (GetCapture()==this)
|
|
{
|
|
ReleaseCapture();
|
|
GetParent()->SendNotifyMessage(WM_COMMAND,MAKEWPARAM(GetDlgCtrlID(),BN_CLICKED),(LPARAM)GetSafeHwnd());
|
|
}
|
|
|
|
}
|