mirror of
https://github.com/ondra-novak/gates_of_skeldal.git
synced 2025-07-17 19:56:40 -04:00
github publish
This commit is contained in:
commit
506e23bf32
542 changed files with 120675 additions and 0 deletions
113
mapedit/ColEdit/PaletteEditor.cpp
Normal file
113
mapedit/ColEdit/PaletteEditor.cpp
Normal file
|
@ -0,0 +1,113 @@
|
|||
// 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());
|
||||
}
|
||||
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue