Exemplo n.º 1
0
/**
 * \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);
    }
}
Exemplo n.º 2
0
/**
 * \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);
	}
}