BiomeVisualiser: Moved into the Tools folder
git-svn-id: http://mc-server.googlecode.com/svn/trunk@1655 0a769ca7-a7f5-676a-18bf-c427514a06d6
This commit is contained in:
190
Tools/BiomeVisualiser/BiomeViewWnd.cpp
Normal file
190
Tools/BiomeVisualiser/BiomeViewWnd.cpp
Normal file
@@ -0,0 +1,190 @@
|
||||
|
||||
// BiomeViewWnd.cpp
|
||||
|
||||
// Implements the cBiomeViewWnd class representing the window that displays biomes
|
||||
|
||||
#include "Globals.h"
|
||||
#include "BiomeViewWnd.h"
|
||||
#include "BiomeCache.h"
|
||||
#include "GeneratorBiomeSource.h"
|
||||
#include "../iniFile/iniFile.h"
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
const int TIMER_RERENDER = 1200;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
cBiomeViewWnd::cBiomeViewWnd(void) :
|
||||
m_Wnd(NULL),
|
||||
m_Thunk(&cBiomeViewWnd::WndProc, this),
|
||||
m_IsLButtonDown(false)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
bool cBiomeViewWnd::Create(HWND a_ParentWnd, LPCTSTR a_Title)
|
||||
{
|
||||
ASSERT(m_Wnd == NULL);
|
||||
|
||||
// Create a regular STATIC window, then override its window procedure with our own. No need for obnoxious RegisterWindowClass() stuff.
|
||||
m_Wnd = CreateWindow("STATIC", a_Title, WS_OVERLAPPEDWINDOW | WS_VISIBLE, 0, 0, 400, 300, a_ParentWnd, NULL, GetModuleHandle(NULL), NULL);
|
||||
if (m_Wnd == NULL)
|
||||
{
|
||||
LOGERROR("Cannot create main window: %d", GetLastError());
|
||||
return false;
|
||||
}
|
||||
SetWindowLongPtr(m_Wnd, GWLP_WNDPROC, m_Thunk);
|
||||
|
||||
cIniFile IniFile;
|
||||
cBiomeGen * BioGen = new cBioGenMultiStepMap(2);
|
||||
BioGen->Initialize(IniFile);
|
||||
m_Renderer.SetSource(new cGeneratorBiomeSource(BioGen));
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
LRESULT cBiomeViewWnd::WndProc(HWND a_Wnd, UINT a_Msg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
switch (a_Msg)
|
||||
{
|
||||
case WM_CLOSE: return OnClose();
|
||||
case WM_COMMAND: return OnCommand(wParam, lParam);
|
||||
case WM_LBUTTONDOWN: return OnLButtonDown(wParam, lParam);
|
||||
case WM_LBUTTONUP: return OnLButtonUp (wParam, lParam);
|
||||
case WM_MOUSEMOVE: return OnMouseMove (wParam, lParam);
|
||||
case WM_PAINT: return OnPaint();
|
||||
case WM_TIMER: return OnTimer(wParam);
|
||||
}
|
||||
return ::DefWindowProc(a_Wnd, a_Msg, wParam, lParam);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
LRESULT cBiomeViewWnd::OnClose(void)
|
||||
{
|
||||
PostQuitMessage(0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
LRESULT cBiomeViewWnd::OnCommand(WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
// TODO: Handle menu commands, when we get menu
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
LRESULT cBiomeViewWnd::OnLButtonDown(WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
m_IsLButtonDown = true;
|
||||
GetCursorPos(&m_MouseDown);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
LRESULT cBiomeViewWnd::OnMouseMove(WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
if (!m_IsLButtonDown)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
POINT pnt;
|
||||
GetCursorPos(&pnt);
|
||||
m_Renderer.MoveViewBy(pnt.x - m_MouseDown.x, pnt.y - m_MouseDown.y);
|
||||
if (m_Renderer.Render(m_Pixmap))
|
||||
{
|
||||
SetTimer(m_Wnd, TIMER_RERENDER, 200, NULL);
|
||||
}
|
||||
m_MouseDown = pnt;
|
||||
InvalidateRect(m_Wnd, NULL, FALSE);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
LRESULT cBiomeViewWnd::OnLButtonUp(WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
OnMouseMove(wParam, lParam); // Last movement - if the mouse move hasn't been reported due to speed
|
||||
m_IsLButtonDown = false;
|
||||
InvalidateRect(m_Wnd, NULL, FALSE);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
LRESULT cBiomeViewWnd::OnPaint(void)
|
||||
{
|
||||
PAINTSTRUCT ps;
|
||||
HDC DC = BeginPaint(m_Wnd, &ps);
|
||||
|
||||
RECT rc;
|
||||
GetClientRect(m_Wnd, &rc);
|
||||
int Wid = rc.right - rc.left;
|
||||
int Hei = rc.bottom - rc.top;
|
||||
if ((m_Pixmap.GetWidth() != Wid) || (m_Pixmap.GetHeight() != Hei))
|
||||
{
|
||||
m_Pixmap.SetSize(Wid, Hei);
|
||||
if (m_Renderer.Render(m_Pixmap))
|
||||
{
|
||||
SetTimer(m_Wnd, TIMER_RERENDER, 200, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
m_Pixmap.DrawToDC(DC, 0, 0);
|
||||
|
||||
EndPaint(m_Wnd, &ps);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
LRESULT cBiomeViewWnd::OnTimer(WPARAM wParam)
|
||||
{
|
||||
switch (wParam)
|
||||
{
|
||||
case TIMER_RERENDER:
|
||||
{
|
||||
if (!m_Renderer.Render(m_Pixmap))
|
||||
{
|
||||
KillTimer(m_Wnd, TIMER_RERENDER);
|
||||
}
|
||||
InvalidateRect(m_Wnd, NULL, FALSE);
|
||||
break;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user