static void shader_dlg_params_refresh(void) { int i; for (i = 0; i < GFX_MAX_PARAMETERS; i++) { 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_CHECKBOX: { bool checked; video_shader_ctx_t shader_info; video_shader_driver_get_current_shader(&shader_info); checked = shader_info.data ? (shader_info.data->parameters[i].current == shader_info.data->parameters[i].maximum) : false; SendMessage(control->elems.checkbox.hwnd, BM_SETCHECK, checked, 0); } break; case SHADER_PARAM_CTRL_TRACKBAR: { video_shader_ctx_t shader_info; video_shader_driver_get_current_shader(&shader_info); if (shader_info.data && !shader_dlg_refresh_trackbar_label(i, &shader_info)) break; if (shader_info.data) { SendMessage(control->elems.trackbar.hwnd, TBM_SETRANGEMIN, (WPARAM)TRUE, (LPARAM)0); SendMessage(control->elems.trackbar.hwnd, TBM_SETRANGEMAX, (WPARAM)TRUE, (LPARAM)((shader_info.data->parameters[i].maximum - shader_info.data->parameters[i].minimum) / shader_info.data->parameters[i].step)); SendMessage(control->elems.trackbar.hwnd, TBM_SETPOS, (WPARAM)TRUE, (LPARAM)((shader_info.data->parameters[i].current - shader_info.data->parameters[i].minimum) / shader_info.data->parameters[i].step)); } } break; case SHADER_PARAM_CTRL_NONE: default: break; } } }
static void menu_action_setting_disp_set_label_shader_parameter( file_list_t* list, unsigned *w, unsigned type, unsigned i, const char *label, char *s, size_t len, const char *entry_label, const char *path, char *s2, size_t len2) { video_shader_ctx_t shader_info; const struct video_shader_parameter *param = NULL; *s = '\0'; *w = 19; strlcpy(s2, path, len2); video_shader_driver_get_current_shader(&shader_info); if (!shader_info.data) return; param = &shader_info.data->parameters[type - MENU_SETTINGS_SHADER_PARAMETER_0]; if (!param) return; snprintf(s, len, "%.2f [%.2f %.2f]", param->current, param->minimum, param->maximum); }
static int shader_action_parameter_left(unsigned type, const char *label, bool wraparound) { struct video_shader *shader = video_shader_driver_get_current_shader(); struct video_shader_parameter *param = &shader->parameters[type - MENU_SETTINGS_SHADER_PARAMETER_0]; return generic_shader_action_parameter_left(shader, param, type, label, wraparound); }
static int shader_action_parameter_toggle(unsigned type, const char *label, unsigned action) { #ifdef HAVE_SHADER_MANAGER struct video_shader_parameter *param = NULL; struct video_shader *shader = video_shader_driver_get_current_shader(); if (!shader) return 0; param = &shader->parameters[type - MENU_SETTINGS_SHADER_PARAMETER_0]; switch (action) { case MENU_ACTION_LEFT: param->current -= param->step; break; case MENU_ACTION_RIGHT: param->current += param->step; break; default: break; } param->current = min(max(param->minimum, param->current), param->maximum); #endif return 0; }
static void menu_action_setting_disp_set_label_shader_parameter( file_list_t* list, unsigned *w, unsigned type, unsigned i, const char *label, char *s, size_t len, const char *entry_label, const char *path, char *s2, size_t len2) { #if defined(HAVE_CG) || defined(HAVE_GLSL) || defined(HAVE_HLSL) const struct video_shader_parameter *param = NULL; struct video_shader *shader = NULL; #endif *s = '\0'; *w = 19; strlcpy(s2, path, len2); #if defined(HAVE_CG) || defined(HAVE_GLSL) || defined(HAVE_HLSL) shader = video_shader_driver_get_current_shader(); if (!shader) return; param = &shader->parameters[type - MENU_SETTINGS_SHADER_PARAMETER_0]; if (!param) return; snprintf(s, len, "%.2f [%.2f %.2f]", param->current, param->minimum, param->maximum); #endif }
static void shader_dlg_params_refresh(void) { int i; struct video_shader* shader = video_shader_driver_get_current_shader(); for (i = 0; i < GFX_MAX_PARAMETERS; i++) { 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_CHECKBOX: { bool checked = (shader->parameters[i].current == shader->parameters[i].maximum); SendMessage(control->checkbox.hwnd, BM_SETCHECK, checked, 0); } break; case SHADER_PARAM_CTRL_TRACKBAR: shader_dlg_refresh_trackbar_label(i); SendMessage(control->trackbar.hwnd, TBM_SETRANGEMIN, (WPARAM)TRUE, (LPARAM)0); SendMessage(control->trackbar.hwnd, TBM_SETRANGEMAX, (WPARAM)TRUE, (LPARAM)((shader->parameters[i].maximum - shader->parameters[i].minimum) / shader->parameters[i].step)); SendMessage(control->trackbar.hwnd, TBM_SETPOS, (WPARAM)TRUE, (LPARAM)((shader->parameters[i].current - shader->parameters[i].minimum) / shader->parameters[i].step)); break; case SHADER_PARAM_CTRL_NONE: default: break; } } }
static void shader_dlg_params_refresh(void) { int i; struct video_shader* shader = video_shader_driver_get_current_shader(); for (i = 0; i < GFX_MAX_PARAMETERS; i++) { if (g_shader_dlg.controls[i].type == SHADER_PARAM_CTRL_NONE) break; if (g_shader_dlg.controls[i].type == SHADER_PARAM_CTRL_CHECKBOX) { bool checked = (shader->parameters[i].current == shader->parameters[i].maximum); SendMessage(g_shader_dlg.controls[i].checkbox.hwnd, BM_SETCHECK, checked, 0); } else if (g_shader_dlg.controls[i].type == SHADER_PARAM_CTRL_TRACKBAR) { shader_dlg_refresh_trackbar_label(i); SendMessage(g_shader_dlg.controls[i].trackbar.hwnd, TBM_SETRANGEMIN, (WPARAM)TRUE, (LPARAM)0); SendMessage(g_shader_dlg.controls[i].trackbar.hwnd, TBM_SETRANGEMAX, (WPARAM)TRUE, (LPARAM)((shader->parameters[i].maximum - shader->parameters[i].minimum) / shader->parameters[i].step)); SendMessage(g_shader_dlg.controls[i].trackbar.hwnd, TBM_SETPOS, (WPARAM)TRUE, (LPARAM)((shader->parameters[i].current - shader->parameters[i].minimum) / shader->parameters[i].step)); } } }
static LRESULT CALLBACK ShaderDlgWndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam) { int i, pos; struct video_shader* shader = video_shader_driver_get_current_shader(); switch (message) { case WM_CREATE: break; case WM_CLOSE: case WM_DESTROY: case WM_QUIT: ShowWindow(g_shader_dlg.hwnd, 0); 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->parameters[i].current = shader->parameters[i].maximum; else shader->parameters[i].current = shader->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->parameters[i].current = shader->parameters[i].minimum + pos * shader->parameters[i].step; shader_dlg_refresh_trackbar_label(i); break; } return DefWindowProc(hwnd, message, wparam, lparam); }
int shader_action_parameter_right(unsigned type, const char *label, bool wraparound) { video_shader_ctx_t shader_info; struct video_shader_parameter *param = NULL; video_shader_driver_get_current_shader(&shader_info); param = &shader_info.data->parameters[type - MENU_SETTINGS_SHADER_PARAMETER_0]; return generic_shader_action_parameter_right(shader_info.data, param, type, label, wraparound); }
static int shader_action_parameter_right(unsigned type, const char *label, bool wraparound) { #ifdef HAVE_SHADER_MANAGER struct video_shader *shader = video_shader_driver_get_current_shader(); struct video_shader_parameter *param = &shader->parameters[type - MENU_SETTINGS_SHADER_PARAMETER_0]; shader_action_parameter_right_common(param, shader); #endif return 0; }
void ShaderParamsDialog::getShaders(struct video_shader **menu_shader, struct video_shader **video_shader) { video_shader_ctx_t shader_info = {0}; struct video_shader *shader = menu_shader_get(); if (menu_shader) { if (shader) { *menu_shader = shader; } else { *menu_shader = NULL; } } if (video_shader) { if (shader) { *video_shader = shader_info.data; } else { *video_shader = NULL; } } if (video_shader) { if (!video_shader_driver_get_current_shader(&shader_info)) { *video_shader = NULL; return; } if (!shader_info.data || shader_info.data->num_parameters > GFX_MAX_PARAMETERS) { *video_shader = NULL; return; } if (shader_info.data) { *video_shader = shader_info.data; } else { *video_shader = NULL; } } }
static INLINE struct video_shader *shader_manager_get_current_shader(const char *label, unsigned type) { menu_handle_t *menu = menu_driver_get_ptr(); if (!menu) return NULL; if (!strcmp(label, "video_shader_preset_parameters")) return menu->shader; else if (!strcmp(label, "video_shader_parameters")) return video_shader_driver_get_current_shader(); return NULL; }
static void shader_dlg_refresh_trackbar_label(int index) { char val_buffer[32] = {0}; struct video_shader* shader = video_shader_driver_get_current_shader(); if (floorf(shader->parameters[index].current) == shader->parameters[index].current) snprintf(val_buffer, sizeof(val_buffer), "%.0f", shader->parameters[index].current); else snprintf(val_buffer, sizeof(val_buffer), "%.2f", shader->parameters[index].current); SendMessage(g_shader_dlg.controls[index].trackbar.label_val, WM_SETTEXT, 0, (LPARAM)val_buffer); }
static int action_start_shader_action_parameter(unsigned type, const char *label) { #ifdef HAVE_SHADER_MANAGER struct video_shader_parameter *param = NULL; struct video_shader *shader = video_shader_driver_get_current_shader(); if (!shader) return 0; param = &shader->parameters[type - MENU_SETTINGS_SHADER_PARAMETER_0]; param->current = param->initial; param->current = min(max(param->minimum, param->current), param->maximum); #endif return 0; }
static int action_start_shader_action_parameter(unsigned type, const char *label) { #ifdef HAVE_SHADER_MANAGER video_shader_ctx_t shader_info; struct video_shader_parameter *param = NULL; video_shader_driver_get_current_shader(&shader_info); if (!shader_info.data) return 0; param = &shader_info.data->parameters [type - MENU_SETTINGS_SHADER_PARAMETER_0]; param->current = param->initial; param->current = MIN(MAX(param->minimum, param->current), param->maximum); #endif return 0; }
int shader_action_parameter_right(unsigned type, const char *label, bool wraparound) { video_shader_ctx_t shader_info; struct video_shader *shader = menu_shader_get(); struct video_shader_parameter *param_menu = NULL; struct video_shader_parameter *param_prev = NULL; int ret = 0; video_shader_driver_get_current_shader(&shader_info); param_prev = &shader_info.data->parameters[type - MENU_SETTINGS_SHADER_PARAMETER_0]; param_menu = shader ? &shader->parameters[type - MENU_SETTINGS_SHADER_PARAMETER_0] : NULL; if (!param_prev || !param_menu) return menu_cbs_exit(); ret = generic_shader_action_parameter_right(param_prev, type, label, wraparound); param_menu->current = param_prev->current; return ret; }
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); }
static LRESULT CALLBACK ShaderDlgWndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam) { int i, pos; const ui_window_t *window = ui_companion_driver_get_window_ptr(); 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; { video_shader_ctx_t shader_info; video_shader_driver_get_current_shader(&shader_info); 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: { video_shader_ctx_t shader_info; video_shader_driver_get_current_shader(&shader_info); 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; } if (shader_info.data) shader_dlg_refresh_trackbar_label(i, &shader_info); } break; } return DefWindowProc(hwnd, message, wparam, lparam); }