/** * \fn void dialog_draw_save() * \brief Function to show a dialog to save the graphical view in a PNG file. */ void dialog_draw_save () { char *buffer = NULL; GtkFileFilter *filter; GtkFileChooserDialog *dlg; filter = gtk_file_filter_new (); gtk_file_filter_set_name (filter, "PNG file"); gtk_file_filter_add_pattern (filter, "*.png"); gtk_file_filter_add_pattern (filter, "*.PNG"); dlg = (GtkFileChooserDialog *) gtk_file_chooser_dialog_new (gettext ("Save graphical"), dialog_simulator->window, GTK_FILE_CHOOSER_ACTION_SAVE, gettext ("_OK"), GTK_RESPONSE_CANCEL, gettext ("_Cancel"), GTK_RESPONSE_OK, NULL); gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (dlg), filter); gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER (dlg), 1); if (gtk_dialog_run ((GtkDialog *) dlg) == GTK_RESPONSE_OK) buffer = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dlg)); gtk_widget_destroy (GTK_WIDGET (dlg)); if (buffer) { draw (); while (gtk_events_pending ()) gtk_main_iteration (); draw_save (buffer); g_free (buffer); } }
/** * \fn void dialog_simulator_save() * \brief Function to save the graphical view on a PNG file. */ void dialog_simulator_save () { char *filename = NULL; GtkFileChooserDialog *dlg; dlg = (GtkFileChooserDialog *) gtk_file_chooser_dialog_new (gettext ("Save graphical"), dialog_simulator->window, GTK_FILE_CHOOSER_ACTION_SAVE, gettext ("_Cancel"), GTK_RESPONSE_CANCEL, gettext ("_Open"), GTK_RESPONSE_ACCEPT, NULL); gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER (dlg), 1); if (gtk_dialog_run (GTK_DIALOG (dlg)) == GTK_RESPONSE_ACCEPT) filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dlg)); gtk_widget_destroy (GTK_WIDGET (dlg)); if (filename) { draw_save (filename); g_free (filename); } }
static void key_assigner_draw( void* d, mFloat x, mFloat y, mFloat w, mFloat h, mFloat delta) { #define DELTA_X 5 #define DELTA_Y 5 #define GRAY 0.5 key_assigner_t* key = (key_assigner_t*)d; wchar_t buffer[MAX_BUFFER]; drawState state; mFloat dy; int i; mFloat sy = y; (void)h; (void)delta; x += DELTA_X; y += 2 * DELTA_Y; draw_color_rgb(GRAY, GRAY, GRAY); swprintf( buffer, MAX_BUFFER, WC_FORMAT, key_assign.translated); dy = print_message(buffer, x, &y); y += dy; if(key->assigned == NOT_READY) { draw_color_rgb(GRAY, GRAY, GRAY); swprintf( buffer, MAX_BUFFER, WC_FORMAT, no_player.translated); dy = print_message(buffer, x, &y); y += dy; draw_save(&state); draw_color_rgb(GRAY, GRAY, GRAY); draw_translate(10, y - sy); draw_rectangle((unsigned int)((w - 20) * key->timer / ACTIVATION_TIME), 5); draw_restore(&state); key->selection = 0; return; } draw_color_rgb(GRAY, GRAY, GRAY); swprintf( buffer, MAX_BUFFER, WC_FORMAT L":", player_tr.translated); print_message(buffer, x, &y); swprintf( buffer, MAX_BUFFER, L"P%d", key->player_nb); dy = print_message(buffer, x + DELTA_X, &y); y += dy; swprintf( buffer, MAX_BUFFER, WC_FORMAT L":", input.translated); print_message(buffer, x, &y); if(key->type == KEYBOARD) { swprintf( buffer, MAX_BUFFER, WC_FORMAT, keyboard_tr.translated); } else if(key->type == MOUSE) { swprintf( buffer, MAX_BUFFER, WC_FORMAT, mouse_tr.translated); } else { swprintf( buffer, MAX_BUFFER, WC_FORMAT, joystick_tr.translated); } dy = print_message(buffer, x + DELTA_X, &y); y += dy; for(i = 0 ; i < KEY_NB ; i++) { const wchar_t* msgs[] = { jump.translated , left.translated , use.translated , right.translated, }; if(key->selection == i) draw_color_rgb(1.0, 1.0, 1.0); else draw_color_rgb(GRAY, GRAY, GRAY); if(key->type != MOUSE) { swprintf( buffer, MAX_BUFFER, WC_FORMAT L": %d", msgs[i], player_array[key->player_nb].input.key[i]); } else { swprintf( buffer, MAX_BUFFER, WC_FORMAT L": N/A", msgs[i]); } dy = print_message(buffer, x, &y); } y += dy; if(key->assigned == CHOOSE) { int j; int lower, upper; draw_color_rgb(GRAY, GRAY, GRAY); swprintf( buffer, MAX_BUFFER, WC_FORMAT, choose_tr.translated); print_message(buffer, x, &y); y += dy; lower = (int)(key->selected_character - MODELS_TO_SHOW / 2); upper = (int)(key->selected_character + MODELS_TO_SHOW / 2); if(model_nb_filenames > 0) { for(j = lower; j <= upper; j++) { if(j < 0 || j >= (int)model_nb_filenames) y += dy; // Don't print anything. else { if(j == (int)key->selected_character) draw_color_rgb(1.0, 1.0, 1.0); else draw_color_rgb(GRAY, GRAY, GRAY); swprintf( buffer, MAX_BUFFER, MB_FORMAT, model_filenames[j]); print_message(buffer, x, &y); } } y += dy; swprintf( buffer, MAX_BUFFER, WC_FORMAT, accept_tr.translated); draw_color_rgb(GRAY, GRAY, GRAY); print_message(buffer, x, &y); y += dy; draw_save(&state); draw_color_rgb(GRAY, GRAY, GRAY); draw_translate(10, y - sy); draw_rectangle((unsigned int)((w - 20) * key->timer_ready / ACTIVATION_TIME), 5); draw_restore(&state); y += dy; } else { swprintf( buffer, MAX_BUFFER, WC_FORMAT, no_model_tr.translated); print_message(buffer, x, &y); y += dy * MODELS_TO_SHOW; } swprintf( buffer, MAX_BUFFER, WC_FORMAT, unassign.translated); print_message(buffer, x, &y); y += dy; draw_save(&state); draw_color_rgb(GRAY, GRAY, GRAY); draw_translate(10, y - sy); draw_rectangle((unsigned int)((w - 20) * key->timer_unassign / ACTIVATION_TIME), 5); draw_restore(&state); } else if(key->assigned == READY) { oBody* body; loaded_texture_t** textures; draw_color_rgb(1.0, 1.0, 1.0); swprintf( buffer, MAX_BUFFER, WC_FORMAT, unassign.translated); print_message(buffer, x, &y); y += dy; draw_save(&state); draw_color_rgb(GRAY, GRAY, GRAY); draw_translate(10, y - sy); draw_rectangle((unsigned int)((w - 20) * key->timer_unassign / ACTIVATION_TIME), 5); draw_restore(&state); body = player_array[key->player_nb].model->model->body; textures = (loaded_texture_t**)oBodyGetData( body, "Walk", &key->nb_frames, &key->frame_time); // Make sure 'frame_nb' is in the right range. key->frame_nb %= key->nb_frames; draw_save(&state); draw_translate( (w - textures[key->frame_nb]->texture.width) / 2, y - window_border_y / window_zoom); draw_texture(textures[key->frame_nb]); draw_restore(&state); } }