Exemple #1
0
/* Init function. Here we setup all the gtk stuff */
static GtkWidget *init_fftscope_window()
{
	GtkWidget *fftscope_win;
	GtkStyle *style;
	GdkColor color;
	guint32 colors[129];
	int i;

	pthread_mutex_init(&fftscope_mutex, NULL);

	style = gtk_style_new();
	fftscope_win = gtk_window_new(GTK_WINDOW_TOPLEVEL);
	gtk_window_set_title(GTK_WINDOW(fftscope_win), "FFTscope");
	gtk_widget_set_usize(fftscope_win, 256, SCOPE_HEIGHT);
	gtk_window_set_wmclass(GTK_WINDOW(fftscope_win), "FFTscope",
			       "AlsaPlayer");
	gtk_window_set_policy(GTK_WINDOW(fftscope_win), FALSE, FALSE,
			      FALSE);
	style =
	    gtk_style_copy(gtk_widget_get_style(GTK_WIDGET(fftscope_win)));

	color.red = SCOPE_BG_RED << 8;
	color.blue = SCOPE_BG_BLUE << 8;
	color.green = SCOPE_BG_GREEN << 8;
	gdk_color_alloc(gdk_colormap_get_system(), &color);
	gtk_widget_set_style(GTK_WIDGET(fftscope_win), style);

	for (i = 0; i < 32; i++) {
		colors[i * 2] = colors[i * 2 + 1] =
		    ((i * 8) << 16) + (255 << 8);
		colors[i * 2 + 64] = colors[i * 2 + 65] =
		    (255 << 16) + (((31 - i) * 8) << 8);
	}
	colors[128] = 0;
	color_map = gdk_rgb_cmap_new(colors, 129);
	area = gtk_drawing_area_new();
	gtk_container_add(GTK_CONTAINER(fftscope_win), area);
	gtk_widget_realize(area);
	gdk_window_set_background(area->window, &color);

	gtk_widget_show(area);
	gtk_widget_show(fftscope_win);

	/* Signals */

	gtk_signal_connect(GTK_OBJECT(fftscope_win), "delete_event",
			   GTK_SIGNAL_FUNC(close_fftscope_window),
			   fftscope_win);


	/* Clear and show the window */
	gdk_window_clear(fftscope_win->window);
	gdk_flush();

	ready_state = 1;

	return fftscope_win;
}
Exemple #2
0
static GtkWidget *init_fftscope_window(void)
{
	GtkWidget *fftscope_win;
	GdkColor color;
	guint32 colors[129];
	int i;
	
	pthread_mutex_init(&fftscope_mutex, NULL);

	fftscope_win = gtk_window_new(GTK_WINDOW_TOPLEVEL);
	gtk_window_set_title(GTK_WINDOW(fftscope_win), "logFFTscope");
	gtk_widget_set_usize(fftscope_win, 256,128);
	gtk_window_set_wmclass (GTK_WINDOW(fftscope_win), "logFFTscope", "AlsaPlayer");
	gtk_window_set_policy (GTK_WINDOW (fftscope_win), FALSE, FALSE, FALSE);

	gtk_widget_realize(fftscope_win);
	
	color.red = SCOPE_BG_RED << 8;
	color.blue = SCOPE_BG_BLUE << 8;
	color.green = SCOPE_BG_GREEN << 8;
	gdk_color_alloc(gdk_colormap_get_system(), &color);
	
	colors[0] = 0;
	for (i = 1; i < 64; i++) {
		colors[i] = ((i*4) << 16) + (255 << 8);
		colors[i + 63] = (255 << 16) + (((63 - i) * 4) << 8);
  	}
	color_map = gdk_rgb_cmap_new(colors, 128);
	area = gtk_drawing_area_new();
	gtk_container_add(GTK_CONTAINER(fftscope_win), area);
	gtk_widget_realize(area);
	gdk_window_set_background(area->window, &color);
	
	gtk_widget_show(area);
	gtk_widget_show(fftscope_win);
	
	gtk_signal_connect(GTK_OBJECT(fftscope_win), "delete_event",
                GTK_SIGNAL_FUNC(close_fftscope_window), fftscope_win);


	ready_state = 1;

	return fftscope_win;
}
Exemple #3
0
/* draw a part of a pixmap info to the window */
void draw_pinfo(GdkWindow *w, GdkGC *gc,struct pixmap_info *p_info,
		int srcx,int srcy, int destx, int desty,
		int width, int height)
{
  guchar *bitbuf=p_info->row_pointers[srcy]+srcx*p_info->bit_depth/8;
  if (p_info->num_palette) {
    GdkRgbCmap* cmap=gdk_rgb_cmap_new(p_info->gdk_palette,
				      p_info->num_palette);
    
    /* printf("drawing %x:(%d,%d) to (%d,%d) w:%d h=%d\n",(int)p_info,
       srcx,srcy,destx,desty,width,height); */
    gdk_draw_indexed_image(w,gc,destx,desty,width,height,
			   GDK_RGB_DITHER_NONE,
			   bitbuf,p_info->row_len,
			   cmap);
    gdk_rgb_cmap_free(cmap);
  } else {
    gdk_draw_rgb_image(w,gc,destx,desty,width,height,
		       GDK_RGB_DITHER_NONE,bitbuf,
		       p_info->row_len);
	     
  }
  
}
int main(int argc, char **argv){
   GtkBuilder *builder = NULL;
   GError     *error = NULL;

   GtkWidget  *main_window = NULL;
   GtkWidget  *main_screen = NULL;
   GtkWidget  *button_list[MAX_BUTTON];
   GtkWidget  *led_list[MAX_LEDS];

#ifndef TRUE_COLOR
   guint32 virtual_color[256];
#endif
   //
   init_sighandler();

   //init gtk context
   gtk_init(&argc, &argv);
   gdk_rgb_init();

   //init color palette
#ifndef TRUE_COLOR
   virtual_palette_set((unsigned int *)virtual_color);
   V_CPU.cmap = gdk_rgb_cmap_new(virtual_color, 256);
#endif

   builder = gtk_builder_new();

   //load UI from file. If error occurs, report it and quit application.
   if(!gtk_builder_add_from_file(builder, UI_FILE, &error)) {
      g_warning("%s", error->message);
      g_free(error);
      return -1;
   }

   //
   gtk_builder_connect_signals(builder,NULL);

   //create main_window and configure it main_screen an buttonq
   main_window = GTK_WIDGET(gtk_builder_get_object(builder,"main_window"));
   gtk_signal_connect(GTK_OBJECT (main_window), "delete_event",
                      GTK_SIGNAL_FUNC(destroy),NULL);

   //create main screen and configure it
   main_screen = GTK_WIDGET(gtk_builder_get_object(builder,"main_screen"));
   //gtk_drawing_area_size(GTK_DRAWING_AREA(main_screen), SCREEN_XRES, SCREEN_YRES);
   gtk_signal_connect(GTK_OBJECT (main_screen), "expose_event",
                      GTK_SIGNAL_FUNC(on_darea_expose),NULL);

   //refresh screen rate 75 ms
   gtk_timeout_add(75, Repaint,(gpointer)main_screen);

   //read kb layout provide by user interface
   virtual_kb_create_button(builder,button_list,MAX_BUTTON,kb_layout,read_kb);

   //create radio button provide by user interface
   virtual_leds_create_radio_button(builder,led_list,MAX_LEDS);

   //add stdin in watch descriptor
   V_CPU.gui_event = gio_watch;
   V_CPU.gui_event[0].watch = (void*)g_io_channel_unix_new(0);
   g_io_add_watch((GIOChannel *)V_CPU.gui_event[0].watch,G_IO_IN, (GIOFunc)gio_watch[0].func,0);

   gtk_widget_add_events(main_screen,
                         GDK_POINTER_MOTION_MASK|GDK_BUTTON_PRESS_MASK|GDK_BUTTON_RELEASE_MASK);
   gtk_widget_show(main_window);

   //destroy builder, since we don't need it anymore
   g_object_unref(G_OBJECT(builder));

   //init hardware
   init_hardware((void *)&V_CPU);

   //wait for pipe ready
   if(load_pipe()<0) {
      return -1;
   }

   //main gtk loop
   gtk_main();

   return 0;
}
Exemple #5
0
/* EDITOR: MAIN FUNCTION
 * =====================
 * This is the first function called when calling the editor.
 * Here we get functions to Create, Load and Save LUMPS, as well as
 * play with palettes and generate colormaps.
 *
 * TODO: Import/Export of PCX files
 */
void VID_LaunchEditor(void)
{
	GtkWidget *vbox;
  	GtkWidget *fileMenu;
	GtkWidget *extraMenu;
	unsigned int ed_colors[256];

	ed_palfile = malloc(256+8);
	ed_palette = malloc(16*16*3);
	memcpy(&ed_palette, &host_basepal, sizeof(16*16*3));

	int i;
    	for (i = 0; i < 256; i++) 
	{
		unsigned char r, g, b;
		r = *ed_palette++;
		g = *ed_palette++;
		b = *ed_palette++;
		ed_colors[i] = r << 16 | g << 8 | b;
		ed_palfile->data[i] = i;
    	}

	ed_cmap = gdk_rgb_cmap_new(ed_colors, 256);
	
	ed_palfile = Image_Resize(ed_palfile->data, 16, 16, 64, 64);
	VID_EditorDrawTile();

  	ed_window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
  	gtk_window_set_position(GTK_WINDOW(ed_window), GTK_WIN_POS_CENTER);
  	gtk_window_set_default_size(GTK_WINDOW(ed_window), 300, 200);
  	gtk_window_set_title(GTK_WINDOW(ed_window), "NGUNIXEd - 2D Lump Editor");

  	vbox = gtk_vbox_new(FALSE, 0);
  	gtk_container_add(GTK_CONTAINER(ed_window), vbox);

  	ed_menubar = gtk_menu_bar_new();
  	fileMenu = gtk_menu_new();
	extraMenu = gtk_menu_new();
																	
  	GtkWidget *fileMi = gtk_menu_item_new_with_label("File");
	GtkWidget *newMi = gtk_menu_item_new_with_label("New");
	GtkWidget *loadMi = gtk_menu_item_new_with_label("Load...");
	GtkWidget *saveMi = gtk_menu_item_new_with_label("Save...");
	GtkWidget *importMi = gtk_menu_item_new_with_label("Import...");
	GtkWidget *exportMi = gtk_menu_item_new_with_label("Export...");

	GtkWidget *extrMi = gtk_menu_item_new_with_label("Extra");
	GtkWidget *swipalMi = gtk_menu_item_new_with_label("Switch Palette...");
	GtkWidget *viewcolmapMi = gtk_menu_item_new_with_label("View Colormap...");
	GtkWidget *gencolmapMi = gtk_menu_item_new_with_label("Generate Colormap...");

  	gtk_menu_item_set_submenu(GTK_MENU_ITEM(fileMi), fileMenu);
	gtk_menu_shell_append(GTK_MENU_SHELL(fileMenu), newMi);
	gtk_menu_shell_append(GTK_MENU_SHELL(fileMenu), loadMi);
	gtk_menu_shell_append(GTK_MENU_SHELL(fileMenu), saveMi);
	gtk_menu_shell_append(GTK_MENU_SHELL(fileMenu), importMi);
	gtk_menu_shell_append(GTK_MENU_SHELL(fileMenu), exportMi);
  	gtk_menu_shell_append(GTK_MENU_SHELL(ed_menubar), fileMi);

	gtk_menu_item_set_submenu(GTK_MENU_ITEM(extrMi), extraMenu);
	gtk_menu_shell_append(GTK_MENU_SHELL(extraMenu), swipalMi);
	gtk_menu_shell_append(GTK_MENU_SHELL(extraMenu), viewcolmapMi);
	gtk_menu_shell_append(GTK_MENU_SHELL(extraMenu), gencolmapMi);
	gtk_menu_shell_append(GTK_MENU_SHELL(ed_menubar), extrMi);

  	gtk_box_pack_start(GTK_BOX(vbox), ed_menubar, FALSE, FALSE, 0);

  	g_signal_connect(G_OBJECT(ed_window), "destroy", G_CALLBACK(VID_EditorQuit), NULL);
	g_signal_connect(G_OBJECT(newMi), "activate", G_CALLBACK(VID_EditorNewFile), NULL);
	g_signal_connect(G_OBJECT(loadMi), "activate", G_CALLBACK(VID_EditorLoadFile), NULL);
  	g_signal_connect(G_OBJECT(saveMi), "activate", G_CALLBACK(VID_EditorSaveFile), NULL);
	g_signal_connect(G_OBJECT(importMi), "activate", G_CALLBACK(VID_EditorImportFile), NULL);
	g_signal_connect(G_OBJECT(exportMi), "activate", G_CALLBACK(VID_EditorExportFile), NULL);
	g_signal_connect(G_OBJECT(swipalMi), "activate", G_CALLBACK(VID_EditorLoadPalette), NULL);
	g_signal_connect(G_OBJECT(viewcolmapMi), "activate", G_CALLBACK(VID_EditorViewColormap), NULL);
	g_signal_connect(G_OBJECT(gencolmapMi), "activate", G_CALLBACK(VID_EditorGenerateColormap), NULL);

	gtk_timeout_add(100, VID_EditorUpdate, NULL);

	gtk_widget_realize(ed_window);
	gtk_widget_realize(ed_menubar);
	ed_pic = gdk_gc_new(gtk_widget_get_window(ed_window));
  	gtk_widget_show_all(ed_window);

	Con_Printf("[EDITOR] Initialized\n");
	vid_ineditor = true;
	gtk_main();
}
Exemple #6
0
/* EDITOR: PALETTE SWITCHER
 * ========================
 * TODO: This somehow affects the main engine despite us using our own GdkColmap... 
 */
gint VID_EditorLoadPalette(gpointer data)
{
	int i;
	GtkWidget *dialog;
	GtkFileChooserAction action = GTK_FILE_CHOOSER_ACTION_OPEN;
	gint res;
	loadedfile_t *palfile;
	unsigned int colors[256];

	dialog = gtk_file_chooser_dialog_new ("NGUNIXEd - Open Palette (.lmp) File",
                                      NULL,
                                      action,
                                      ("_Cancel"),
                                      GTK_RESPONSE_CANCEL,
                                      ("_Open"),
                                      GTK_RESPONSE_ACCEPT,
                                      NULL);

	// Set the dialog and the default path (current directory)
	GtkFileChooser *chooser = GTK_FILE_CHOOSER (dialog);
	char path[MAX_OSPATH];
	sprintf(path, "file://%s", get_current_dir_name());
	gtk_file_chooser_set_current_folder_uri(chooser, path);

	// Add the filter for .lmp files
	GtkFileFilter *filter = gtk_file_filter_new ();
	gtk_file_filter_add_pattern (filter, "*.lmp");
	gtk_file_chooser_set_filter (chooser, filter);

	res = gtk_dialog_run (GTK_DIALOG (dialog));
	if (res == GTK_RESPONSE_ACCEPT)
  	{
    		char *filename;
    		filename = gtk_file_chooser_get_filename (chooser);

		palfile = COM_LoadFile (filename, 2);
		
		if(palfile)
		{
			Con_Printf("[EDITOR] Switching palette to %s\n", filename);

			for(i=0; i < 16*16*3; i++)
				ed_palette[i] = palfile->data[i];

    			if (ed_cmap) 
				gdk_rgb_cmap_free(ed_cmap);

    			for (i = 0; i < 256; i++) 
			{
				unsigned char r, g, b;
				r = *ed_palette++;
				g = *ed_palette++;
				b = *ed_palette++;
				colors[i] = r << 16 | g << 8 | b;
    			}

    			ed_cmap = gdk_rgb_cmap_new(colors, 256);
		}
    		g_free (filename);
  	}

	gtk_widget_destroy (dialog);
	return 0;
}