More cleanups, and integgrated support for VNC (and RDP) remote renderers.

This commit is contained in:
waltje
2017-10-14 00:49:08 -04:00
parent ae3d0d8b22
commit 2b82661cf4
15 changed files with 245 additions and 110 deletions

View File

@@ -8,7 +8,7 @@
#
# Modified Makefile for Win32 (MinGW32) environment.
#
# Version: @(#)Makefile.mingw 1.0.57 2017/10/11
# Version: @(#)Makefile.mingw 1.0.58 2017/10/13
#
# Authors: Miran Grca, <mgrca8@gmail.com>
# Fred N. van Kempen, <decwiz@yahoo.com>
@@ -59,6 +59,12 @@ endif
ifndef USB
USB := n
endif
ifndef VNC
VNC := n
endif
ifndef RDP
RDP := n
endif
ifndef DEV_BUILD
DEV_BUILD := n
endif
@@ -194,6 +200,22 @@ MUNTOBJ := midi_mt32.o \
Tables.o TVA.o TVF.o TVP.o sha1.o c_interface.o
endif
ifeq ($(VNC), y)
CFLAGS += -DUSE_VNC
RFLAGS += -DUSE_VNC
CFLAGS += -I$(VNC_PATH)\INCLUDE
VNCLIB := $(VNC_PATH)\LIB\libvncserver.a
VNCOBJ := win_vnc.o
endif
ifeq ($(RDP), y)
CFLAGS += -DUSE_RDP
RFLAGS += -DUSE_RDP
CFLAGS += -I$(RDP_PATH)\INCLUDE
RDPLIB := $(RDP_PATH)\LIB\librdp.a
RDPOBJ := win_rdp.o
endif
# Options for the DEV branch.
ifeq ($(DEV_BRANCH), y)
CFLAGS += -DDEV_BRANCH
@@ -356,6 +378,7 @@ VIDOBJ := video.o \
PLATOBJ := win.o \
win_ddraw.o win_ddraw_fs.o win_d3d.o win_d3d_fs.o \
$(VNCOBJ) $(RDPOBJ) \
win_dynld.o win_thread.o $(WSERIAL) win_cdrom.o win_cdrom_ioctl.o \
win_keyboard.o win_mouse.o win_joystick.o win_midi.o \
win_dialog.o win_about.o win_status.o win_stbar.o \
@@ -376,6 +399,9 @@ LIBS := -mwindows \
-lopenal.dll \
-lddraw -ldinput8 -ldxguid -ld3d9 -ld3dx9 \
-lcomctl32 -lwinmm
ifeq ($(VNC), y)
LIBS += $(VNCLIB) -lws2_32 -lz -lpthread
endif
LIBS += -lkernel32 -lwsock32 -liphlpapi -lpsapi
LIBS += -static -lstdc++ -lgcc
LIBS += -Wl,--large-address-aware

View File

@@ -422,9 +422,11 @@ load_general(void)
vid_api = 0;
else if (! strcmp(temp, "d3d9"))
vid_api = 1;
#ifdef USE_VNC
else if (! strcmp(temp, "vnc"))
vid_api = 2;
#if 0
#endif
#ifdef USE_RDP
else if (! strcmp(temp, "rdp"))
vid_api = 3;
#endif
@@ -1181,11 +1183,13 @@ save_general(void)
config_set_string(cat, "vid_renderer", "d3d9");
break;
#ifdef USE_VNC
case 2:
config_set_string(cat, "vid_renderer", "vnc");
break;
#endif
#if 0
#ifdef USE_RDP
case 3:
config_set_string(cat, "vid_renderer", "rdp");
break;

View File

@@ -36,7 +36,10 @@ extern void get_executable_name(wchar_t *s, int size);
extern void set_window_title(wchar_t *s);
extern int dir_check_exist(wchar_t *path);
extern int dir_create(wchar_t *path);
extern void leave_fullscreen(void);
extern void plat_pause(int p);
/* Return the size (in wchar's) of a wchar_t array. */
#define sizeof_w(x) (sizeof((x)) / sizeof(wchar_t))

View File

@@ -64,6 +64,12 @@ BEGIN
BEGIN
MENUITEM "&DirectDraw", IDM_VID_DDRAW
MENUITEM "Direct&3D 9", IDM_VID_D3D
#ifdef USE_VNC
MENUITEM "&VNC", IDM_VID_VNC
#endif
#ifdef USE_RDP
MENUITEM "&RDP", IDM_VID_RDP
#endif
END
MENUITEM SEPARATOR
POPUP "&Window scale factor"

View File

@@ -10,7 +10,7 @@
*
* NOTE: FIXME: Strings 2176 and 2193 are same.
*
* Version: @(#)resource.h 1.0.11 2017/10/07
* Version: @(#)resource.h 1.0.12 2017/10/13
*
* Authors: Sarah Walker, <http://pcem-emulator.co.uk/>
* Miran Grca, <mgrca8@gmail.com>
@@ -424,6 +424,8 @@
#define IDM_VID_REMEMBER 40051
#define IDM_VID_DDRAW 40060
#define IDM_VID_D3D 40061
#define IDM_VID_VNC 40062
#define IDM_VID_RDP 40063
#define IDM_VID_SCALE_1X 40064
#define IDM_VID_SCALE_2X 40065
#define IDM_VID_SCALE_3X 40066

View File

@@ -8,7 +8,7 @@
*
* The Emulator's Windows core.
*
* Version: @(#)win.c 1.0.22 2017/10/12
* Version: @(#)win.c 1.0.23 2017/10/13
*
* Authors: Sarah Walker, <http://pcem-emulator.co.uk/>
* Miran Grca, <mgrca8@gmail.com>
@@ -61,10 +61,8 @@
#include "win.h"
#include "win_ddraw.h"
#include "win_d3d.h"
#ifndef MAPVK_VK_TO_VSC
# define MAPVK_VK_TO_VSC 0
#ifdef USE_VNC
# include "win_vnc.h"
#endif
@@ -79,29 +77,7 @@ typedef struct {
extern int updatestatus;
int recv_key[272];
HWND hwndMain;
HMENU menuMain;
HANDLE ghMutex;
HANDLE slirpMutex;
HINSTANCE hinstance;
HICON hIcon[512];
RECT oldclip;
LCID dwLanguage;
uint32_t dwLangID,
dwSubLangID;
rc_str_t *lpRCstr2048;
rc_str_t *lpRCstr3072;
rc_str_t *lpRCstr4096;
rc_str_t *lpRCstr4352;
rc_str_t *lpRCstr4608;
rc_str_t *lpRCstr5120;
rc_str_t *lpRCstr5376;
rc_str_t *lpRCstr5632;
rc_str_t *lpRCstr6144;
int pause = 0;
/* Public data, more or less non-specific to platform. */
int scale = 0;
uint64_t timer_freq;
int winsizex = 640,
@@ -113,39 +89,85 @@ int drawits = 0;
int quited = 0;
int mousecapture = 0;
uint64_t main_time;
/* Public data, specific to platform. */
HWND hwndMain;
HMENU menuMain;
HANDLE ghMutex;
HANDLE slirpMutex;
HINSTANCE hinstance;
HICON hIcon[512];
RECT oldclip;
LCID dwLanguage;
int recv_key[272];
uint32_t dwLangID,
dwSubLangID;
char openfilestring[260];
WCHAR wopenfilestring[260];
static RAWINPUTDEVICE device;
static HHOOK hKeyboardHook;
static int hook_enabled = 0;
/* Local data. */
static HANDLE thMain;
static HWND hwndRender; /* machine render window */
static wchar_t wTitle[512];
static RAWINPUTDEVICE device;
static HHOOK hKeyboardHook;
static int hook_enabled = 0;
static int save_window_pos = 0;
static int win_doresize = 0;
static int leave_fullscreen_flag = 0;
static int unscaled_size_x = 0;
static int unscaled_size_y = 0;
static int pause;
static uint64_t start_time;
static uint64_t end_time;
static wchar_t **argv;
static int argc;
static wchar_t *argbuf;
static rc_str_t *lpRCstr2048,
*lpRCstr3072,
*lpRCstr4096,
*lpRCstr4352,
*lpRCstr4608,
*lpRCstr5120,
*lpRCstr5376,
*lpRCstr5632,
*lpRCstr6144;
static struct {
int local;
int (*init)(HWND h);
void (*close)(void);
void (*resize)(int x, int y);
} vid_apis[2][2] = {
int (*pause)(void);
} vid_apis[2][4] = {
{
{ ddraw_init, ddraw_close, NULL },
{ d3d_init, d3d_close, d3d_resize }
{ 1, ddraw_init, ddraw_close, NULL, ddraw_pause },
{ 1, d3d_init, d3d_close, d3d_resize, d3d_pause },
#ifdef USE_VNC
{ 0, vnc_init, vnc_close, vnc_resize, vnc_pause },
#else
{ 0, NULL, NULL, NULL, NULL },
#endif
#ifdef USE_RDP
{ 0, rdp_init, rdp_close, rdp_resize, rdp_pause }
#else
{ 0, NULL, NULL, NULL, NULL }
#endif
},
{
{ ddraw_fs_init, ddraw_fs_close, NULL },
{ d3d_fs_init, d3d_fs_close, NULL }
{ 1, ddraw_fs_init, ddraw_fs_close, NULL, ddraw_fs_pause },
{ 1, d3d_fs_init, d3d_fs_close, NULL, d3d_fs_pause },
#ifdef USE_VNC
{ 0, vnc_init, vnc_close, vnc_resize, vnc_pause },
#else
{ 0, NULL, NULL, NULL, NULL },
#endif
#ifdef USE_RDP
{ 0, rdp_init, rdp_close, rdp_resize, rdp_pause }
#else
{ 0, NULL, NULL, NULL, NULL }
#endif
}
};
@@ -189,7 +211,7 @@ releasemouse(void)
static void
win_pc_reset(int hard)
{
pause = 1;
plat_pause(1);
Sleep(100);
@@ -202,7 +224,7 @@ win_pc_reset(int hard)
else
pc_send_cad();
pause = 0;
plat_pause(vid_apis[video_fullscreen][vid_api].pause());
}
@@ -257,7 +279,8 @@ MainThread(LPVOID param)
} else
Sleep(1);
if (!video_fullscreen && win_doresize && (winsizex>0) && (winsizey>0)) {
if (!video_fullscreen && vid_apis[0][vid_api].local &&
win_doresize && (winsizex>0) && (winsizey>0)) {
SendMessage(hwndSBAR, SB_GETBORDERS, 0, (LPARAM) sb_borders);
GetWindowRect(hwndMain, &r);
MoveWindow(hwndRender, 0, 0, winsizex, winsizey, TRUE);
@@ -327,6 +350,12 @@ ResetAllMenus(void)
CheckMenuItem(menuMain, IDM_VID_RESIZE, MF_UNCHECKED);
CheckMenuItem(menuMain, IDM_VID_DDRAW+0, MF_UNCHECKED);
CheckMenuItem(menuMain, IDM_VID_DDRAW+1, MF_UNCHECKED);
#ifdef USE_VNC
CheckMenuItem(menuMain, IDM_VID_DDRAW+2, MF_UNCHECKED);
#endif
#ifdef USE_VNC
CheckMenuItem(menuMain, IDM_VID_DDRAW+3, MF_UNCHECKED);
#endif
CheckMenuItem(menuMain, IDM_VID_FS_FULL+0, MF_UNCHECKED);
CheckMenuItem(menuMain, IDM_VID_FS_FULL+1, MF_UNCHECKED);
CheckMenuItem(menuMain, IDM_VID_FS_FULL+2, MF_UNCHECKED);
@@ -377,14 +406,14 @@ ResetAllMenus(void)
if (vid_resize)
CheckMenuItem(menuMain, IDM_VID_RESIZE, MF_CHECKED);
CheckMenuItem(menuMain, IDM_VID_DDRAW + vid_api, MF_CHECKED);
CheckMenuItem(menuMain, IDM_VID_FS_FULL + video_fullscreen_scale, MF_CHECKED);
CheckMenuItem(menuMain, IDM_VID_DDRAW+vid_api, MF_CHECKED);
CheckMenuItem(menuMain, IDM_VID_FS_FULL+video_fullscreen_scale, MF_CHECKED);
CheckMenuItem(menuMain, IDM_VID_REMEMBER, window_remember?MF_CHECKED:MF_UNCHECKED);
CheckMenuItem(menuMain, IDM_VID_SCALE_1X + scale, MF_CHECKED);
CheckMenuItem(menuMain, IDM_VID_SCALE_1X+scale, MF_CHECKED);
CheckMenuItem(menuMain, IDM_VID_CGACON, vid_cga_contrast?MF_CHECKED:MF_UNCHECKED);
CheckMenuItem(menuMain, IDM_VID_GRAYCT_601 + video_graytype, MF_CHECKED);
CheckMenuItem(menuMain, IDM_VID_GRAY_RGB + video_grayscale, MF_CHECKED);
CheckMenuItem(menuMain, IDM_VID_GRAYCT_601+video_graytype, MF_CHECKED);
CheckMenuItem(menuMain, IDM_VID_GRAY_RGB+video_grayscale, MF_CHECKED);
}
@@ -424,7 +453,6 @@ LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
static LRESULT CALLBACK
MainWindowProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
static wchar_t wOldTitle[512];
HMENU hmenu;
RECT rect;
int i = 0;
@@ -462,14 +490,7 @@ MainWindowProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
break;
case IDM_ACTION_PAUSE:
pause ^= 1;
if (pause) {
wcscpy(wOldTitle, wTitle);
wcscat(wTitle, L" - PAUSED -");
set_window_title(NULL);
} else
set_window_title(wOldTitle);
plat_pause(pause ^ 1);
break;
case IDM_CONFIG:
@@ -523,11 +544,21 @@ MainWindowProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
case IDM_VID_DDRAW:
case IDM_VID_D3D:
#ifdef USE_VNC
case IDM_VID_VNC:
#endif
#ifdef USE_RDP
case IDM_VID_RDP:
#endif
startblit();
video_wait_for_blit();
CheckMenuItem(hmenu, IDM_VID_DDRAW+vid_api, MF_UNCHECKED);
vid_apis[0][vid_api].close();
vid_api = LOWORD(wParam) - IDM_VID_DDRAW;
if (vid_apis[0][vid_api].local)
ShowWindow(hwndRender, SW_SHOW);
else
ShowWindow(hwndRender, SW_HIDE);
CheckMenuItem(hmenu, IDM_VID_DDRAW+vid_api, MF_CHECKED);
vid_apis[0][vid_api].init(hwndRender);
endblit();
@@ -687,7 +718,7 @@ MainWindowProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
#endif
case IDM_CONFIG_LOAD:
pause = 1;
plat_pause(1);
if (! file_dlg_st(hwnd, IDS_2160, "", 0)) {
if (ui_msgbox(MBX_QUESTION, (wchar_t *)IDS_2051) == IDYES) {
config_write(config_file_default);
@@ -747,15 +778,15 @@ MainWindowProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
pc_reset_hard_init();
}
}
pause = 0;
plat_pause(0);
break;
case IDM_CONFIG_SAVE:
pause = 1;
plat_pause(1);
if (! file_dlg_st(hwnd, IDS_2160, "", 1)) {
config_write(wopenfilestring);
}
pause = 0;
plat_pause(0);
break;
}
return(0);
@@ -817,7 +848,7 @@ MainWindowProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
MoveWindow(hwndSBAR, 0, winsizey + 6, winsizex, 17, TRUE);
if (hwndRender != NULL) {
if (vid_apis[0][vid_api].local && (hwndRender != NULL)) {
MoveWindow(hwndRender, 0, 0, winsizex, winsizey, TRUE);
if (vid_apis[video_fullscreen][vid_api].resize) {
@@ -1138,17 +1169,14 @@ WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPSTR lpszArg, int nFunsterStil)
/* Set the initial title for the program's main window. */
_swprintf(title, L"%s v%s", EMU_NAME_W, EMU_VERSION_W);
set_window_title(title);
/* Now create our main window. */
hwnd = CreateWindowEx (
0, /* no extended possibilites */
CLASS_NAME, /* class name */
title, /* Title Text */
#if 0
(WS_OVERLAPPEDWINDOW & ~WS_SIZEBOX), /* default window */
#else
(WS_OVERLAPPEDWINDOW & ~WS_SIZEBOX) | DS_3DLOOK,
#endif
CW_USEDEFAULT, /* Windows decides the position */
CW_USEDEFAULT, /* where window ends up on the screen */
640+(GetSystemMetrics(SM_CXFIXEDFRAME)*2), /* width */
@@ -1211,10 +1239,14 @@ WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPSTR lpszArg, int nFunsterStil)
ghMutex = CreateMutex(NULL, FALSE, L"86Box.BlitMutex");
/* Create the Machine Rendering window. */
hwndRender = CreateWindow(L"STATIC", NULL, WS_VISIBLE|WS_CHILD|SS_BITMAP,
hwndRender = CreateWindow(L"STATIC", NULL, WS_CHILD|SS_BITMAP,
0, 0, 1, 1, hwnd, NULL, hInst, NULL);
MoveWindow(hwndRender, 0, 0, winsizex, winsizey, TRUE);
/* If this is a local renderer, enable it. */
if (vid_apis[0][vid_api].local)
ShowWindow(hwndRender, SW_SHOW);
/* Select the best system renderer available. */
if (! vid_apis[0][vid_api].init(hwndRender)) {
vid_api ^= 1;
@@ -1259,6 +1291,9 @@ WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPSTR lpszArg, int nFunsterStil)
/* Fire up the machine. */
pc_reset_hard();
/* Set the PAUSE mode depending on the renderer. */
plat_pause(0);
/*
* Everything has been configured, and all seems to work,
* so now it is time to start the main thread to do some
@@ -1461,6 +1496,33 @@ win_language_check(void)
}
void
plat_pause(int p)
{
static wchar_t oldtitle[512];
/* If un-pausing, as the renderer if that's OK. */
if (p == 0)
p = vid_apis[video_fullscreen][vid_api].pause();
/* If already so, done. */
if (pause == p) return;
if (p) {
wcscpy(oldtitle, wTitle);
wcscat(wTitle, L" - PAUSED -");
set_window_title(NULL);
} else {
set_window_title(oldtitle);
}
pause = p;
/* Update the actual menu. */
CheckMenuItem(menuMain, IDM_ACTION_PAUSE, (pause)?MF_CHECKED:MF_UNCHECKED);
}
wchar_t *
plat_get_string(int i)
{
@@ -1497,13 +1559,6 @@ plat_get_string_from_string(char *str)
}
/* If these are in the headers, doesn't work...? --FvK */
//extern void ddraw_take_screenshot(wchar_t *);
//extern void ddraw_fs_take_screenshot(wchar_t *);
//extern void d3d_take_screenshot(wchar_t *);
//extern void d3d_fs_take_screenshot(wchar_t *);
void
take_screenshot(void)
{
@@ -1531,23 +1586,36 @@ take_screenshot(void)
wcscat(path, L"/");
#endif
if (vid_api == 1) {
wcsftime(fn, 128, L"%Y%m%d_%H%M%S.png", info);
append_filename_w(path, cfg_path, fn, 1024);
if (video_fullscreen)
d3d_fs_take_screenshot(path);
else
d3d_take_screenshot(path);
} else if (vid_api == 0) {
wcsftime(path, 128, L"%Y%m%d_%H%M%S.bmp", info);
append_filename_w(path, cfg_path, fn, 1024);
if (video_fullscreen)
ddraw_fs_take_screenshot(path);
else
ddraw_take_screenshot(path);
}
switch(vid_api) {
case 0: /* ddraw */
wcsftime(path, 128, L"%Y%m%d_%H%M%S.bmp", info);
append_filename_w(path, cfg_path, fn, 1024);
if (video_fullscreen)
ddraw_fs_take_screenshot(path);
else
ddraw_take_screenshot(path);
pclog("Screenshot: fn='%S'\n", path);
break;
pclog("Screenshot: fn='%S'\n", path);
case 1: /* d3d9 */
wcsftime(fn, 128, L"%Y%m%d_%H%M%S.png", info);
append_filename_w(path, cfg_path, fn, 1024);
if (video_fullscreen)
d3d_fs_take_screenshot(path);
else
d3d_take_screenshot(path);
pclog("Screenshot: fn='%S'\n", path);
break;
#ifdef USE_VNC
case 2: /* vnc */
wcsftime(fn, 128, L"%Y%m%d_%H%M%S.png", info);
append_filename_w(path, cfg_path, fn, 1024);
vnc_take_screenshot(path);
pclog("Screenshot: fn='%S'\n", path);
break;
#endif
}
}
@@ -1592,8 +1660,8 @@ updatewindowsize(int x, int y)
if (x < 160) x = 160;
if (y < 100) y = 100;
if (x > 2048) x = 2048;
if (y > 2048) y = 2048;
if (x > 2048) x = 2048;
if (y > 2048) y = 2048;
if (suppress_overscan)
temp_overscan_x = temp_overscan_y = 0;

View File

@@ -10,7 +10,7 @@
* support modules for Windows. Generic definitions for UI and
* platform go into ../plat*.h.
*
* Version: @(#)win.h 1.0.4 2017/10/09
* Version: @(#)win.h 1.0.5 2017/10/13
*
* Authors: Sarah Walker, <http://pcem-emulator.co.uk/>
* Miran Grca, <mgrca8@gmail.com>
@@ -45,7 +45,6 @@
#define SUB_CLASS_NAME L"86BoxSubWnd"
#define SB_CLASS_NAME L"86BoxStatusBar"
#define SB_MENU_NAME L"StatusBarMenu"
#define RENDER_NAME L"RenderWindow"
/* Application-specific window messages. */
#define WM_RESETD3D WM_USER
@@ -53,7 +52,6 @@
#define WM_SAVESETTINGS 0x8888
extern int pause;
extern int status_is_open;
extern int mousecapture;
extern LCID dwLanguage;

View File

@@ -8,7 +8,7 @@
*
* Handle the About dialog.
*
* Version: @(#)win_about.c 1.0.2 2017/10/09
* Version: @(#)win_about.c 1.0.3 2017/10/13
*
* Authors: Sarah Walker, <http://pcem-emulator.co.uk/>
* Miran Grca, <mgrca8@gmail.com>
@@ -29,6 +29,7 @@
#include <stdlib.h>
#include <wchar.h>
#include "../86box.h"
#include "../plat.h"
#include "win.h"
@@ -39,7 +40,7 @@ AboutDialogProcedure(HWND hdlg, UINT message, WPARAM wParam, LPARAM lParam)
switch (message) {
case WM_INITDIALOG:
pause = 1;
plat_pause(1);
h = GetDlgItem(hdlg, IDC_ABOUT_ICON);
SendMessage(h, STM_SETIMAGE, (WPARAM)IMAGE_ICON,
(LPARAM)LoadImage(hinstance,(PCTSTR)100,IMAGE_ICON,64,64,0));
@@ -49,7 +50,7 @@ AboutDialogProcedure(HWND hdlg, UINT message, WPARAM wParam, LPARAM lParam)
switch (LOWORD(wParam)) {
case IDOK:
EndDialog(hdlg, 0);
pause = 0;
plat_pause(0);
return TRUE;
default:

View File

@@ -8,7 +8,7 @@
*
* Direct3D 9 rendererer and screenshots taking.
*
* Version: @(#)win_d3d.cc 1.0.2 2017/10/10
* Version: @(#)win_d3d.cc 1.0.3 2017/10/13
*
* Authors: Sarah Walker, <http://pcem-emulator.co.uk/>
* Miran Grca, <mgrca8@gmail.com>
@@ -233,6 +233,11 @@ void d3d_close()
}
}
int d3d_pause(void)
{
return(0);
}
void d3d_blit_memtoscreen(int x, int y, int y1, int y2, int w, int h)
{
HRESULT hr = D3D_OK;

View File

@@ -8,7 +8,7 @@
*
* Direct3D 9 rendererer and screenshots taking.
*
* Version: @(#)win_d3d.h 1.0.1 2017/10/10
* Version: @(#)win_d3d.h 1.0.2 2017/10/13
*
* Authors: Sarah Walker, <http://pcem-emulator.co.uk/>
* Miran Grca, <mgrca8@gmail.com>
@@ -32,12 +32,14 @@ extern "C" {
extern int d3d_init(HWND h);
extern void d3d_close(void);
extern void d3d_reset(void);
extern int d3d_pause(void);
extern void d3d_resize(int x, int y);
extern void d3d_take_screenshot(wchar_t *fn);
extern int d3d_fs_init(HWND h);
extern void d3d_fs_close(void);
extern void d3d_fs_reset(void);
extern int d3d_fs_pause(void);
extern void d3d_fs_resize(int x, int y);
extern void d3d_fs_take_screenshot(wchar_t *fn);

View File

@@ -8,7 +8,7 @@
*
* Direct3D 9 full-screen rendererer.
*
* Version: @(#)win_d3d_fs.cc 1.0.4 2017/10/10
* Version: @(#)win_d3d_fs.cc 1.0.5 2017/10/13
*
* Authors: Sarah Walker, <http://pcem-emulator.co.uk/>
* Miran Grca, <mgrca8@gmail.com>
@@ -254,6 +254,11 @@ void d3d_fs_close()
DestroyWindow(d3d_device_window);
}
int d3d_fs_pause(void)
{
return(0);
}
static void d3d_fs_size(RECT window_rect, double *l, double *t, double *r, double *b, int w, int h)
{
int ratio_w, ratio_h;

View File

@@ -20,6 +20,7 @@ extern "C" void pclog(const char *format, ...);
extern "C" void device_force_redraw(void);
extern "C" int ddraw_init(HWND h);
extern "C" int ddraw_pause(void);
extern "C" void ddraw_close(void);
extern "C" void ddraw_take_screenshot(wchar_t *fn);
@@ -304,10 +305,6 @@ ddraw_blit_memtoscreen_8(int x, int y, int w, int h)
int
ddraw_init(HWND h)
{
#if NO_THIS_CRASHES_NOW
cgapal_rebuild();
#endif
if (FAILED(DirectDrawCreate(NULL, &lpdd, NULL))) return(0);
if (FAILED(lpdd->QueryInterface(IID_IDirectDraw7, (LPVOID *)&lpdd7)))
@@ -403,6 +400,13 @@ ddraw_close(void)
}
int
ddraw_pause(void)
{
return(0);
}
void
ddraw_take_screenshot(wchar_t *fn)
{

View File

@@ -15,10 +15,12 @@ extern "C" {
extern int ddraw_init(HWND h);
extern void ddraw_close(void);
extern int ddraw_pause(void);
extern void ddraw_take_screenshot(wchar_t *fn);
extern int ddraw_fs_init(HWND h);
extern void ddraw_fs_close(void);
extern int ddraw_fs_pause(void);
extern void ddraw_fs_take_screenshot(wchar_t *fn);
#ifdef __cplusplus

View File

@@ -24,6 +24,7 @@ extern "C" void device_force_redraw(void);
extern "C" int ddraw_fs_init(HWND h);
extern "C" void ddraw_fs_close(void);
extern "C" int ddraw_fs_pause(void);
extern "C" void ddraw_fs_take_screenshot(wchar_t *fn);
extern void ddraw_common_take_screenshot(wchar_t *fn, IDirectDrawSurface7 *pDDSurface);
@@ -320,6 +321,14 @@ static void ddraw_fs_blit_memtoscreen_8(int x, int y, int w, int h)
lpdds_pri->Flip(NULL, DDFLIP_NOVSYNC);
}
int
ddraw_fs_pause(void)
{
return(0);
}
void ddraw_fs_take_screenshot(wchar_t *fn)
{
ddraw_common_take_screenshot(fn, lpdds_back2);

View File

@@ -8,7 +8,7 @@
*
* Windows 86Box Settings dialog handler.
*
* Version: @(#)win_settings.c 1.0.20 2017/10/10
* Version: @(#)win_settings.c 1.0.21 2017/10/13
*
* Author: Miran Grca, <mgrca8@gmail.com>
*
@@ -4307,7 +4307,7 @@ static BOOL CALLBACK win_settings_main_proc(HWND hdlg, UINT message, WPARAM wPar
switch (message)
{
case WM_INITDIALOG:
pause = 1;
plat_pause(1);
win_settings_init();
displayed_category = -1;
h = GetDlgItem(hdlg, IDC_SETTINGSCATLIST);
@@ -4362,7 +4362,7 @@ static BOOL CALLBACK win_settings_main_proc(HWND hdlg, UINT message, WPARAM wPar
/* pclog("Destroying window...\n"); */
DestroyWindow(hwndChildDialog);
EndDialog(hdlg, 0);
pause = 0;
plat_pause(0);
return TRUE;
}
else
@@ -4372,7 +4372,7 @@ static BOOL CALLBACK win_settings_main_proc(HWND hdlg, UINT message, WPARAM wPar
case IDCANCEL:
DestroyWindow(hwndChildDialog);
EndDialog(hdlg, 0);
pause=0;
plat_pause(0);
return TRUE;
}
break;