win32: add simple menu to opengl context
This commit is contained in:
parent
ab3a8822ce
commit
b9cbcd0b81
|
@ -115,7 +115,7 @@ endif
|
||||||
ifeq ($(HAVE_OPENGL), 1)
|
ifeq ($(HAVE_OPENGL), 1)
|
||||||
OBJ += gfx/gl.o gfx/math/matrix.o gfx/fonts/gl_font.o gfx/fonts/gl_raster_font.o gfx/gfx_context.o gfx/context/wgl_ctx.o gfx/shader_glsl.o
|
OBJ += gfx/gl.o gfx/math/matrix.o gfx/fonts/gl_font.o gfx/fonts/gl_raster_font.o gfx/gfx_context.o gfx/context/wgl_ctx.o gfx/shader_glsl.o
|
||||||
DEFINES += -DHAVE_OPENGL -DHAVE_OVERLAY -DHAVE_GLSL -DHAVE_GL_SYNC
|
DEFINES += -DHAVE_OPENGL -DHAVE_OVERLAY -DHAVE_GLSL -DHAVE_GL_SYNC
|
||||||
LIBS += -lopengl32 -lgdi32
|
LIBS += -lopengl32 -lgdi32 -lcomdlg32
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifeq ($(HAVE_SDL_IMAGE), 1)
|
ifeq ($(HAVE_SDL_IMAGE), 1)
|
||||||
|
|
|
@ -25,7 +25,9 @@
|
||||||
#include "../gfx_context.h"
|
#include "../gfx_context.h"
|
||||||
#include "../gl_common.h"
|
#include "../gl_common.h"
|
||||||
#include "../gfx_common.h"
|
#include "../gfx_common.h"
|
||||||
|
#include "../../media/resource.h"
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
|
#include <commdlg.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#define IDI_ICON 1
|
#define IDI_ICON 1
|
||||||
|
@ -44,6 +46,8 @@ static unsigned g_interval;
|
||||||
|
|
||||||
static unsigned g_resize_width;
|
static unsigned g_resize_width;
|
||||||
static unsigned g_resize_height;
|
static unsigned g_resize_height;
|
||||||
|
static unsigned g_pos_x = CW_USEDEFAULT;
|
||||||
|
static unsigned g_pos_y = CW_USEDEFAULT;
|
||||||
static bool g_resized;
|
static bool g_resized;
|
||||||
|
|
||||||
static bool g_restore_desktop;
|
static bool g_restore_desktop;
|
||||||
|
@ -86,6 +90,25 @@ static void create_gl_context(HWND hwnd)
|
||||||
g_quit = true;
|
g_quit = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool BrowseForFile(char *filename)
|
||||||
|
{
|
||||||
|
OPENFILENAME ofn;
|
||||||
|
memset((void *)&ofn, 0, sizeof(OPENFILENAME));
|
||||||
|
|
||||||
|
ofn.lStructSize = sizeof(OPENFILENAME);
|
||||||
|
ofn.hwndOwner = g_hwnd;
|
||||||
|
ofn.lpstrFilter = "All Files\0*.*\0\0";
|
||||||
|
ofn.lpstrFile = filename;
|
||||||
|
ofn.lpstrTitle = "Select ROM";
|
||||||
|
ofn.lpstrDefExt = "";
|
||||||
|
ofn.nMaxFile = PATH_MAX;
|
||||||
|
ofn.Flags = OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;
|
||||||
|
if(GetOpenFileName(&ofn)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
static LRESULT CALLBACK WndProc(HWND hwnd, UINT message,
|
static LRESULT CALLBACK WndProc(HWND hwnd, UINT message,
|
||||||
WPARAM wparam, LPARAM lparam)
|
WPARAM wparam, LPARAM lparam)
|
||||||
{
|
{
|
||||||
|
@ -118,8 +141,14 @@ static LRESULT CALLBACK WndProc(HWND hwnd, UINT message,
|
||||||
case WM_CLOSE:
|
case WM_CLOSE:
|
||||||
case WM_DESTROY:
|
case WM_DESTROY:
|
||||||
case WM_QUIT:
|
case WM_QUIT:
|
||||||
|
{
|
||||||
|
WINDOWPLACEMENT placement;
|
||||||
|
GetWindowPlacement(g_hwnd, &placement);
|
||||||
|
g_pos_x = placement.rcNormalPosition.left;
|
||||||
|
g_pos_y = placement.rcNormalPosition.top;
|
||||||
g_quit = true;
|
g_quit = true;
|
||||||
return 0;
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
case WM_SIZE:
|
case WM_SIZE:
|
||||||
// Do not send resize message if we minimize.
|
// Do not send resize message if we minimize.
|
||||||
|
@ -130,6 +159,28 @@ static LRESULT CALLBACK WndProc(HWND hwnd, UINT message,
|
||||||
g_resized = true;
|
g_resized = true;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
case WM_COMMAND:
|
||||||
|
switch(wparam & 0xffff)
|
||||||
|
{
|
||||||
|
case ID_M_OPENROM:
|
||||||
|
{
|
||||||
|
char rom_file[PATH_MAX] = {0};
|
||||||
|
if(BrowseForFile(rom_file))
|
||||||
|
{
|
||||||
|
strlcpy(g_extern.fullpath, rom_file, sizeof(g_extern.fullpath));
|
||||||
|
g_extern.lifecycle_mode_state |= (1ULL << MODE_LOAD_GAME);
|
||||||
|
PostMessage(g_hwnd, WM_CLOSE, 0, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case ID_M_RESET:
|
||||||
|
rarch_game_reset();
|
||||||
|
break;
|
||||||
|
case ID_M_QUIT:
|
||||||
|
PostMessage(g_hwnd, WM_CLOSE, 0, 0);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return DefWindowProc(hwnd, message, wparam, lparam);
|
return DefWindowProc(hwnd, message, wparam, lparam);
|
||||||
|
@ -280,6 +331,7 @@ static bool gfx_ctx_set_video_mode(
|
||||||
bool fullscreen)
|
bool fullscreen)
|
||||||
{
|
{
|
||||||
DWORD style;
|
DWORD style;
|
||||||
|
RECT rect = {0};
|
||||||
|
|
||||||
HMONITOR hm_to_use = NULL;
|
HMONITOR hm_to_use = NULL;
|
||||||
MONITORINFOEX current_mon;
|
MONITORINFOEX current_mon;
|
||||||
|
@ -315,7 +367,6 @@ static bool gfx_ctx_set_video_mode(
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
style = WS_OVERLAPPEDWINDOW | WS_CLIPSIBLINGS | WS_CLIPCHILDREN;
|
style = WS_OVERLAPPEDWINDOW | WS_CLIPSIBLINGS | WS_CLIPCHILDREN;
|
||||||
RECT rect = {0};
|
|
||||||
rect.right = width;
|
rect.right = width;
|
||||||
rect.bottom = height;
|
rect.bottom = height;
|
||||||
AdjustWindowRect(&rect, style, FALSE);
|
AdjustWindowRect(&rect, style, FALSE);
|
||||||
|
@ -324,14 +375,23 @@ static bool gfx_ctx_set_video_mode(
|
||||||
}
|
}
|
||||||
|
|
||||||
g_hwnd = CreateWindowEx(0, "RetroArch", "RetroArch", style,
|
g_hwnd = CreateWindowEx(0, "RetroArch", "RetroArch", style,
|
||||||
fullscreen ? mon_rect.left : CW_USEDEFAULT,
|
fullscreen ? mon_rect.left : g_pos_x,
|
||||||
fullscreen ? mon_rect.top : CW_USEDEFAULT,
|
fullscreen ? mon_rect.top : g_pos_y,
|
||||||
width, height,
|
width, height,
|
||||||
NULL, NULL, NULL, NULL);
|
NULL, NULL, NULL, NULL);
|
||||||
|
|
||||||
if (!g_hwnd)
|
if (!g_hwnd)
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
|
if(!fullscreen)
|
||||||
|
{
|
||||||
|
SetMenu(g_hwnd,LoadMenu(GetModuleHandle(NULL),MAKEINTRESOURCE(IDR_MENU)));
|
||||||
|
RECT rcTemp = {0, 0, g_resize_height, 0x7FFF}; // 0x7FFF="Infinite" height
|
||||||
|
SendMessage(g_hwnd, WM_NCCALCSIZE, FALSE, (LPARAM)&rcTemp); // recalculate margin, taking possible menu wrap into account
|
||||||
|
g_resize_height += rcTemp.top + rect.top; // extend by new top margin and substract previous margin
|
||||||
|
SetWindowPos(g_hwnd, NULL, 0, 0, g_resize_width, g_resize_height, SWP_NOMOVE);
|
||||||
|
}
|
||||||
|
|
||||||
if (!fullscreen || windowed_full)
|
if (!fullscreen || windowed_full)
|
||||||
{
|
{
|
||||||
ShowWindow(g_hwnd, SW_RESTORE);
|
ShowWindow(g_hwnd, SW_RESTORE);
|
||||||
|
|
|
@ -1 +1,13 @@
|
||||||
1 ICON DISCARDABLE "retroarch-icon.ico"
|
#include "resource.h"
|
||||||
|
1 ICON "retroarch-icon.ico"
|
||||||
|
|
||||||
|
IDR_MENU MENU
|
||||||
|
BEGIN
|
||||||
|
POPUP "File"
|
||||||
|
BEGIN
|
||||||
|
MENUITEM "Open ROM", ID_M_OPENROM
|
||||||
|
MENUITEM SEPARATOR
|
||||||
|
MENUITEM "Reset", ID_M_RESET
|
||||||
|
MENUITEM "Quit", ID_M_QUIT
|
||||||
|
END
|
||||||
|
END
|
|
@ -0,0 +1,6 @@
|
||||||
|
// Used by rarch.rc
|
||||||
|
//
|
||||||
|
#define IDR_MENU 101
|
||||||
|
#define ID_M_OPENROM 40001
|
||||||
|
#define ID_M_RESET 40002
|
||||||
|
#define ID_M_QUIT 40003
|
Loading…
Reference in New Issue