void shader_dlg_show(HWND parent_hwnd) { const ui_window_t *window = ui_companion_driver_get_window_ptr(); if (!IsWindowVisible(g_shader_dlg.window.hwnd)) { if (parent_hwnd) { RECT parent_rect; GetWindowRect(parent_hwnd, &parent_rect); SetWindowPos(g_shader_dlg.window.hwnd, HWND_TOP, parent_rect.right, parent_rect.top, 0, 0, SWP_NOSIZE | SWP_SHOWWINDOW); } else window->set_visible(&g_shader_dlg.window, true); shader_dlg_update_on_top_state(); shader_dlg_params_reload(); } window->set_focused(&g_shader_dlg.window); }
static void shader_dlg_params_clear(void) { unsigned i; for (i = 0; i < GFX_MAX_PARAMETERS; i++) { const ui_window_t *window = ui_companion_driver_get_window_ptr(); shader_param_ctrl_t*control = &g_shader_dlg.controls[i]; if (control->type == SHADER_PARAM_CTRL_NONE) break; switch (control->type) { case SHADER_PARAM_CTRL_NONE: break; case SHADER_PARAM_CTRL_CHECKBOX: if (window) window->destroy(&control->checkbox); break; case SHADER_PARAM_CTRL_TRACKBAR: DestroyWindow(control->trackbar.label_title); DestroyWindow(control->trackbar.label_val); DestroyWindow(control->trackbar.hwnd); break; } control->type = SHADER_PARAM_CTRL_NONE; } }
static void gfx_ctx_wgl_update_title(void *data, void *data2) { const settings_t *settings = config_get_ptr(); video_frame_info_t* video_info = (video_frame_info_t*)data2; char title[128]; title[0] = '\0'; if (settings->bools.video_memory_show) { #ifndef __WINRT__ uint64_t mem_bytes_used = frontend_driver_get_used_memory(); uint64_t mem_bytes_total = frontend_driver_get_total_memory(); char mem[128]; mem[0] = '\0'; snprintf( mem, sizeof(mem), " || MEM: %.2f/%.2fMB", mem_bytes_used / (1024.0f * 1024.0f), mem_bytes_total / (1024.0f * 1024.0f)); strlcat(video_info->fps_text, mem, sizeof(video_info->fps_text)); #endif } video_driver_get_window_title(title, sizeof(title)); if (title[0]) { const ui_window_t *window = ui_companion_driver_get_window_ptr(); if (window) window->set_title(&main_window, title); } }
void win32_set_window(unsigned *width, unsigned *height, bool fullscreen, bool windowed_full, void *rect_data) { #ifndef _XBOX settings_t *settings = config_get_ptr(); RECT *rect = (RECT*)rect_data; if (!fullscreen || windowed_full) { const ui_window_t *window = ui_companion_driver_get_window_ptr(); if (!fullscreen && settings->ui.menubar_enable) { RECT rc_temp = {0, 0, (LONG)*height, 0x7FFF}; SetMenu(main_window.hwnd, LoadMenu(GetModuleHandle(NULL),MAKEINTRESOURCE(IDR_MENU))); SendMessage(main_window.hwnd, WM_NCCALCSIZE, FALSE, (LPARAM)&rc_temp); g_resize_height = *height += rc_temp.top + rect->top; SetWindowPos(main_window.hwnd, NULL, 0, 0, *width, *height, SWP_NOMOVE); } ShowWindow(main_window.hwnd, SW_RESTORE); UpdateWindow(main_window.hwnd); SetForegroundWindow(main_window.hwnd); if (window) window->set_focused(&main_window); } win32_show_cursor(!fullscreen); #endif }
void win32_monitor_from_window(void) { #ifndef _XBOX win32_monitor_last = MonitorFromWindow(main_window.hwnd, MONITOR_DEFAULTTONEAREST); const ui_window_t *window = ui_companion_driver_get_window_ptr(); if (window) window->destroy(&main_window); #endif }
static void gfx_ctx_gdi_update_window_title(void *data, video_frame_info_t *video_info) { const ui_window_t *window = ui_companion_driver_get_window_ptr(); char title[128]; title[0] = '\0'; video_driver_get_window_title(title, sizeof(title)); if (window && title[0]) window->set_title(&main_window, title); }
static void gfx_ctx_sixel_update_window_title(void *data, void *data2) { #if defined(_WIN32) && !defined(_XBOX) const ui_window_t *window = ui_companion_driver_get_window_ptr(); char title[128]; title[0] = '\0'; video_driver_get_window_title(title, sizeof(title)); if (window && title[0]) window->set_title(&main_window, title); #endif }
bool win32_has_focus(void) { #ifndef _XBOX const ui_window_t *window = ui_companion_driver_get_window_ptr(); #endif if (!g_inited) return false; #ifdef _XBOX return GetForegroundWindow() == main_window.hwnd; #else if (window) return window->focused(&main_window); return false; #endif }
static void gfx_ctx_wgl_update_title(void *data, void *data2) { const ui_window_t *window = ui_companion_driver_get_window_ptr(); if (window) { char title[128]; title[0] = '\0'; video_driver_get_window_title(title, sizeof(title)); if (title[0]) window->set_title(&main_window, title); } }
static LRESULT CALLBACK ShaderDlgWndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam) { int i, pos; video_shader_ctx_t shader_info; const ui_window_t *window = ui_companion_driver_get_window_ptr(); video_shader_driver_get_current_shader(&shader_info); switch (message) { case WM_CREATE: break; case WM_CLOSE: case WM_DESTROY: case WM_QUIT: if (window) window->set_visible(&g_shader_dlg.window, false); return 0; case WM_COMMAND: i = LOWORD(wparam); if (i == SHADER_DLG_CHECKBOX_ONTOP_ID) { shader_dlg_update_on_top_state(); break; } if (i >= GFX_MAX_PARAMETERS) break; if (g_shader_dlg.controls[i].type != SHADER_PARAM_CTRL_CHECKBOX) break; if (SendMessage(g_shader_dlg.controls[i].checkbox.hwnd, BM_GETCHECK, 0, 0) == BST_CHECKED) shader_info.data->parameters[i].current = shader_info.data->parameters[i].maximum; else shader_info.data->parameters[i].current = shader_info.data->parameters[i].minimum; break; case WM_HSCROLL: i = GetWindowLong((HWND)lparam, GWL_ID); if (i >= GFX_MAX_PARAMETERS) break; if (g_shader_dlg.controls[i].type != SHADER_PARAM_CTRL_TRACKBAR) break; pos = (int)SendMessage(g_shader_dlg.controls[i].trackbar.hwnd, TBM_GETPOS, 0, 0); shader_info.data->parameters[i].current = shader_info.data->parameters[i].minimum + pos * shader_info.data->parameters[i].step; shader_dlg_refresh_trackbar_label(i); break; } return DefWindowProc(hwnd, message, wparam, lparam); }
void shader_dlg_params_reload(void) { HFONT hFont; RECT parent_rect; int i, pos_x, pos_y; video_shader_ctx_t shader_info; const ui_window_t *window = ui_companion_driver_get_window_ptr(); video_shader_driver_get_current_shader(&shader_info); shader_dlg_params_clear(); if (!shader_info.data) return; if (shader_info.data->num_parameters > GFX_MAX_PARAMETERS) return; hFont = (HFONT)GetStockObject(DEFAULT_GUI_FONT); pos_y = g_shader_dlg.parameters_start_y; pos_x = SHADER_DLG_CTRL_X; for (i = 0; i < (int)shader_info.data->num_parameters; i++) { shader_param_ctrl_t*control = &g_shader_dlg.controls[i]; if ((shader_info.data->parameters[i].minimum == 0.0) && (shader_info.data->parameters[i].maximum == (shader_info.data->parameters[i].minimum + shader_info.data->parameters[i].step))) { if ((pos_y + SHADER_DLG_CHECKBOX_HEIGHT + SHADER_DLG_CTRL_MARGIN + 20) > SHADER_DLG_MAX_HEIGHT) { pos_y = g_shader_dlg.parameters_start_y; pos_x += SHADER_DLG_WIDTH; } control->type = SHADER_PARAM_CTRL_CHECKBOX; control->checkbox.hwnd = CreateWindowEx(0, "BUTTON", shader_info.data->parameters[i].desc, WS_CHILD | WS_VISIBLE | BS_AUTOCHECKBOX, pos_x, pos_y, SHADER_DLG_CTRL_WIDTH, SHADER_DLG_CHECKBOX_HEIGHT, g_shader_dlg.window.hwnd, (HMENU)(size_t)i, NULL, NULL); SendMessage(control->checkbox.hwnd, WM_SETFONT, (WPARAM)hFont, MAKELPARAM(TRUE, 0)); pos_y += SHADER_DLG_CHECKBOX_HEIGHT + SHADER_DLG_CTRL_MARGIN; } else { if ((pos_y + SHADER_DLG_LABEL_HEIGHT + SHADER_DLG_TRACKBAR_HEIGHT + SHADER_DLG_CTRL_MARGIN + 20) > SHADER_DLG_MAX_HEIGHT) { pos_y = g_shader_dlg.parameters_start_y; pos_x += SHADER_DLG_WIDTH; } control->type = SHADER_PARAM_CTRL_TRACKBAR; control->trackbar.label_title = CreateWindowEx(0, "STATIC", shader_info.data->parameters[i].desc, WS_CHILD | WS_VISIBLE | SS_LEFT, pos_x, pos_y, SHADER_DLG_CTRL_WIDTH, SHADER_DLG_LABEL_HEIGHT, g_shader_dlg.window.hwnd, (HMENU)(size_t)i, NULL, NULL); SendMessage(control->trackbar.label_title, WM_SETFONT, (WPARAM)hFont, MAKELPARAM(TRUE, 0)); pos_y += SHADER_DLG_LABEL_HEIGHT; control->trackbar.hwnd = CreateWindowEx(0, TRACKBAR_CLASS, "", WS_CHILD | WS_VISIBLE | TBS_HORZ | TBS_NOTICKS, pos_x + SHADER_DLG_TRACKBAR_LABEL_WIDTH, pos_y, SHADER_DLG_TRACKBAR_WIDTH, SHADER_DLG_TRACKBAR_HEIGHT, g_shader_dlg.window.hwnd, (HMENU)(size_t)i, NULL, NULL); control->trackbar.label_val = CreateWindowEx(0, "STATIC", "", WS_CHILD | WS_VISIBLE | SS_LEFT, pos_x, pos_y, SHADER_DLG_TRACKBAR_LABEL_WIDTH, SHADER_DLG_LABEL_HEIGHT, g_shader_dlg.window.hwnd, (HMENU)(size_t)i, NULL, NULL); SendMessage(control->trackbar.label_val, WM_SETFONT, (WPARAM)hFont, MAKELPARAM(TRUE, 0)); SendMessage(control->trackbar.hwnd, TBM_SETBUDDY, (WPARAM)TRUE, (LPARAM)control->trackbar.label_val); pos_y += SHADER_DLG_TRACKBAR_HEIGHT + SHADER_DLG_CTRL_MARGIN; } } if (window && g_shader_dlg.separator.hwnd) window->destroy(&g_shader_dlg.separator); g_shader_dlg.separator.hwnd = CreateWindowEx(0, "STATIC", "", SS_ETCHEDHORZ | WS_VISIBLE | WS_CHILD, SHADER_DLG_CTRL_X, g_shader_dlg.parameters_start_y - SHADER_DLG_CTRL_MARGIN - SHADER_DLG_SEPARATOR_HEIGHT / 2, (pos_x - SHADER_DLG_CTRL_X) + SHADER_DLG_CTRL_WIDTH, SHADER_DLG_SEPARATOR_HEIGHT / 2, g_shader_dlg.window.hwnd, NULL, NULL, NULL); shader_dlg_params_refresh(); GetWindowRect(g_shader_dlg.window.hwnd, &parent_rect); SetWindowPos(g_shader_dlg.window.hwnd, NULL, 0, 0, (pos_x - SHADER_DLG_CTRL_X) + SHADER_DLG_WIDTH, (pos_x == SHADER_DLG_CTRL_X) ? pos_y + 30 : SHADER_DLG_MAX_HEIGHT, SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE); }