Win32 fixes. Now opens up a window and displays the statusbar

This commit is contained in:
Daniel Collin 2012-11-26 17:08:11 +01:00
parent bb784965d5
commit 9f5230de8e
3 changed files with 305 additions and 2 deletions

View File

@ -156,7 +156,6 @@ void Editor_create()
int id;
Emgui_create("foo");
id = Emgui_loadFontBitmap(g_minecraftiaFont, g_minecraftiaFontSize, EMGUI_LOCATION_MEMORY, 32, 128, g_minecraftiaFontLayout);
memset(&s_editorData, 0, sizeof(s_editorData));
RemoteConnection_createListner();
@ -335,7 +334,7 @@ static bool internalUpdate()
refresh = TrackView_render(&s_editorData.trackViewInfo, &s_editorData.trackData);
Emgui_end();
return refresh;
return !!refresh;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

View File

@ -0,0 +1,38 @@
#include <windows.h>
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int Dialog_open(char* path, int pathSize)
{
OPENFILENAME ofn;
ZeroMemory(&ofn, sizeof(ofn));
ofn.lStructSize = sizeof(ofn);
ofn.lpstrFile = path;
ofn.lpstrFile[0] = '\0';
ofn.nMaxFile = pathSize;
ofn.lpstrFilter = "All\0*.*\0Rocket\0*.Rocket\0";
ofn.nFilterIndex = 1;
ofn.lpstrFileTitle = NULL;
ofn.nMaxFileTitle = 0;
ofn.lpstrInitialDir = NULL;
ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;
return GetOpenFileName(&ofn);
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int Dialog_save(char* path, int pathSize)
{
(void)path;
(void)pathSize;
return 0;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void Dialog_showColorPicker(unsigned int* color)
{
(void)color;
}

View File

@ -0,0 +1,266 @@
#include <windows.h>
#include <windowsx.h>
#include <gl/gl.h>
#include "../Editor.h"
#include <string.h>
#include <Emgui.h>
#include <GFXBackend.h>
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
static HWND s_window;
static HINSTANCE s_instance;
static HDC s_dc;
static HGLRC s_context;
static bool s_active;
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
static void closeWindow()
{
if (s_context)
{
wglMakeCurrent(0, 0);
wglDeleteContext(s_context);
s_context = 0;
}
if (s_window)
{
ReleaseDC(s_window, s_dc);
DestroyWindow(s_window);
}
UnregisterClass("GLRocket", s_instance);
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void swapBuffers()
{
SwapBuffers(s_dc);
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool createWindow(const char* title, int width, int height)
{
GLuint format;
WNDCLASS wc;
DWORD exStyle;
DWORD style;
RECT rect;
static PIXELFORMATDESCRIPTOR pfd =
{
sizeof(PIXELFORMATDESCRIPTOR),
1,
PFD_DRAW_TO_WINDOW |
PFD_SUPPORT_OPENGL |
PFD_DOUBLEBUFFER,
PFD_TYPE_RGBA,
32,
0, 0, 0, 0, 0, 0,
0,
0,
0,
0, 0, 0, 0,
16,
0,
0,
PFD_MAIN_PLANE,
0,
0, 0, 0
};
rect.left = 0;
rect.right = width;
rect.top = 0;
rect.bottom= height;
s_instance = GetModuleHandle(0);
memset(&wc, 0, sizeof(wc));
wc.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC;
wc.lpfnWndProc = (WNDPROC)WndProc;
wc.hInstance = s_instance;
wc.hIcon = LoadIcon(NULL, IDI_WINLOGO);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.lpszClassName = "RocketEditor";
if (!RegisterClass(&wc))
{
MessageBox(0, "Failed To Register Window Class", "ERROR", MB_OK | MB_ICONEXCLAMATION);
return FALSE;
}
exStyle = WS_EX_APPWINDOW | WS_EX_WINDOWEDGE;
style = WS_OVERLAPPEDWINDOW;
AdjustWindowRectEx(&rect, style, FALSE, exStyle);
// Create The Window
if (!(s_window = CreateWindowEx(exStyle, "RocketEditor", title, style | WS_CLIPSIBLINGS | WS_CLIPCHILDREN,
0, 0, rect.right - rect.left, rect.bottom - rect.top, NULL, NULL, s_instance, NULL)))
{
closeWindow(); // Reset The Display
return FALSE; // Return FALSE
}
if (!(s_dc = GetDC(s_window)))
{
closeWindow();
return FALSE;
}
if (!(format = ChoosePixelFormat(s_dc, &pfd)))
{
closeWindow();
return FALSE;
}
if (!SetPixelFormat(s_dc, format,&pfd))
{
closeWindow();
return FALSE;
}
if (!(s_context = wglCreateContext(s_dc)))
{
closeWindow();
return FALSE;
}
if (!wglMakeCurrent(s_dc, s_context))
{
closeWindow();
return FALSE;
}
ShowWindow(s_window, SW_SHOW);
SetForegroundWindow(s_window);
SetFocus(s_window);
EMGFXBackend_create();
EMGFXBackend_updateViewPort(width, height);
return TRUE;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
LRESULT CALLBACK WndProc(HWND window, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_ACTIVATE:
{
if (!HIWORD(wParam))
s_active = true;
else
s_active = true;
return 0;
}
case WM_LBUTTONDOWN:
{
Emgui_setMouseLmb(1);
Editor_update();
break;
}
case WM_LBUTTONUP:
{
Emgui_setMouseLmb(0);
Editor_update();
break;
}
case WM_MOUSEMOVE:
{
const short pos_x = GET_X_LPARAM(lParam);
const short pos_y = GET_Y_LPARAM(lParam);
Emgui_setMousePos(pos_x, pos_y);
break;
}
case WM_SYSCOMMAND:
{
switch (wParam)
{
// prevent screensaver and power saving
case SC_SCREENSAVE:
case SC_MONITORPOWER:
return 0;
}
break;
}
case WM_CLOSE:
{
PostQuitMessage(0);
return 0;
}
case WM_SIZE:
{
EMGFXBackend_updateViewPort(LOWORD(lParam), HIWORD(lParam));
Editor_setWindowSize(LOWORD(lParam), HIWORD(lParam));
return 0;
}
}
return DefWindowProc(window, message, wParam, lParam);
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
static void CALLBACK timedCallback(HWND hwnd, UINT id, UINT_PTR ptr, DWORD meh)
{
Editor_timedUpdate();
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int WINAPI WinMain(HINSTANCE instance, HINSTANCE prevInstance, LPSTR cmndLine, int show)
{
MSG msg;
bool done = false;
memset(&msg, 0, sizeof(MSG));
if (!createWindow("RocketEditor", 800, 600))
return 0;
EMGFXBackend_create();
Editor_create();
Editor_update();
// Update timed function every 16 ms
SetTimer(s_window, 1, 16, timedCallback);
while (!done)
{
if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
if (msg.message == WM_QUIT)
{
done = true;
}
else
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
}
closeWindow();
return msg.wParam;
}