mirror of
https://github.com/holub/mame
synced 2025-06-05 20:33:45 +03:00
168 lines
4.2 KiB
C
168 lines
4.2 KiB
C
//============================================================
|
|
//
|
|
// window.h - Win32 window handling
|
|
//
|
|
// Copyright Nicola Salmoria and the MAME Team.
|
|
// Visit http://mamedev.org for licensing and usage restrictions.
|
|
//
|
|
//============================================================
|
|
|
|
#ifndef __WIN_WINDOW__
|
|
#define __WIN_WINDOW__
|
|
|
|
#include "video.h"
|
|
#include "render.h"
|
|
|
|
|
|
//============================================================
|
|
// PARAMETERS
|
|
//============================================================
|
|
|
|
#ifndef MESS
|
|
#define HAS_WINDOW_MENU FALSE
|
|
#else
|
|
#define HAS_WINDOW_MENU TRUE
|
|
#endif
|
|
|
|
|
|
|
|
//============================================================
|
|
// CONSTANTS
|
|
//============================================================
|
|
|
|
#define RESIZE_STATE_NORMAL 0
|
|
#define RESIZE_STATE_RESIZING 1
|
|
#define RESIZE_STATE_PENDING 2
|
|
|
|
|
|
|
|
//============================================================
|
|
// TYPE DEFINITIONS
|
|
//============================================================
|
|
|
|
typedef struct _win_window_info win_window_info;
|
|
struct _win_window_info
|
|
{
|
|
win_window_info * next;
|
|
volatile int init_state;
|
|
|
|
// window handle and info
|
|
HWND hwnd;
|
|
char title[256];
|
|
RECT non_fullscreen_bounds;
|
|
int startmaximized;
|
|
int isminimized;
|
|
int ismaximized;
|
|
int resize_state;
|
|
|
|
// monitor info
|
|
win_monitor_info * monitor;
|
|
int fullscreen;
|
|
int fullscreen_safe;
|
|
int maxwidth, maxheight;
|
|
int refresh;
|
|
float aspect;
|
|
|
|
// rendering info
|
|
osd_lock * render_lock;
|
|
render_target * target;
|
|
int targetview;
|
|
int targetorient;
|
|
int targetlayerconfig;
|
|
const render_primitive_list *primlist;
|
|
|
|
// input info
|
|
DWORD lastclicktime;
|
|
int lastclickx;
|
|
int lastclicky;
|
|
|
|
// drawing data
|
|
void * drawdata;
|
|
|
|
running_machine * machine;
|
|
};
|
|
|
|
|
|
typedef struct _win_draw_callbacks win_draw_callbacks;
|
|
struct _win_draw_callbacks
|
|
{
|
|
void (*exit)(void);
|
|
|
|
int (*window_init)(win_window_info *window);
|
|
const render_primitive_list *(*window_get_primitives)(win_window_info *window);
|
|
int (*window_draw)(win_window_info *window, HDC dc, int update);
|
|
void (*window_destroy)(win_window_info *window);
|
|
};
|
|
|
|
|
|
|
|
//============================================================
|
|
// GLOBAL VARIABLES
|
|
//============================================================
|
|
|
|
// windows
|
|
extern win_window_info *win_window_list;
|
|
|
|
|
|
|
|
//============================================================
|
|
// PROTOTYPES
|
|
//============================================================
|
|
|
|
// core initialization
|
|
void winwindow_init(running_machine *machine);
|
|
|
|
// creation/deletion of windows
|
|
void winwindow_video_window_create(running_machine *machine, int index, win_monitor_info *monitor, const win_window_config *config);
|
|
|
|
BOOL winwindow_has_focus(void);
|
|
void winwindow_update_cursor_state(running_machine *machine);
|
|
void winwindow_video_window_update(win_window_info *window);
|
|
win_monitor_info *winwindow_video_window_monitor(win_window_info *window, const RECT *proposed);
|
|
|
|
LRESULT CALLBACK winwindow_video_window_proc(HWND wnd, UINT message, WPARAM wparam, LPARAM lparam);
|
|
void winwindow_toggle_full_screen(void);
|
|
|
|
void winwindow_process_events_periodic(running_machine *machine);
|
|
void winwindow_process_events(running_machine *machine, int ingame);
|
|
|
|
void winwindow_ui_pause_from_window_thread(running_machine *machine, int pause);
|
|
void winwindow_ui_pause_from_main_thread(running_machine *machine, int pause);
|
|
int winwindow_ui_is_paused(running_machine *machine);
|
|
|
|
void winwindow_ui_exec_on_main_thread(void (*func)(void *), void *param);
|
|
void winwindow_dispatch_message(running_machine *machine, MSG *message);
|
|
|
|
#if HAS_WINDOW_MENU
|
|
int win_create_menu(running_machine *machine, HMENU *menus);
|
|
#endif
|
|
|
|
|
|
|
|
//============================================================
|
|
// win_has_menu
|
|
//============================================================
|
|
|
|
INLINE BOOL win_has_menu(win_window_info *window)
|
|
{
|
|
return GetMenu(window->hwnd) ? TRUE : FALSE;
|
|
}
|
|
|
|
|
|
//============================================================
|
|
// rect_width / rect_height
|
|
//============================================================
|
|
|
|
INLINE int rect_width(const RECT *rect)
|
|
{
|
|
return rect->right - rect->left;
|
|
}
|
|
|
|
|
|
INLINE int rect_height(const RECT *rect)
|
|
{
|
|
return rect->bottom - rect->top;
|
|
}
|
|
|
|
#endif
|