⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wmxmms.c

📁 xmms-1.2.10.tar.gz学习使用的就下吧
💻 C
📖 第 1 页 / 共 2 页
字号:
	if (seekslider_dragging)	{		seekslider_pos =			event->x - SEEKSLIDER_X - seekslider_drag_offset;		if (seekslider_pos < 0)			seekslider_pos = 0;		if (seekslider_pos > SEEKSLIDER_MAX)			seekslider_pos = SEEKSLIDER_MAX;		draw_seekslider();	}}void destroy_cb(GtkWidget *w, gpointer data){	gtk_exit(0);}static void update_tooltip(void){	static int pl_pos = -1;	static char *filename;	int new_pos;		if (!tooltips)		return;		new_pos = xmms_remote_get_playlist_pos(xmms_session);	if (new_pos == 0)	{		/*		 * Need to do some extra checking, as we get 0 also on		 * a empty playlist		 */		char *current = xmms_remote_get_playlist_file(xmms_session, 0);		if (!filename && current)		{			filename = current;			new_pos = -1;		}		else if (filename && !current)		{			g_free(filename);			filename = NULL;			new_pos = -1;		}		else if (filename && current && strcmp(filename, current))		{			g_free(filename);			filename = current;			new_pos = -1;		}	}	if (pl_pos != new_pos)	{		char *tip = NULL;		char *title =			xmms_remote_get_playlist_title(xmms_session, new_pos);		if (title)		{			tip = g_strdup_printf("%d. %s", new_pos+1, title);			g_free(title);		}		gtk_tooltips_set_tip(tooltips, window, tip, NULL);		g_free(tip);		pl_pos = new_pos;	}}int timeout_func(gpointer data){	int new_pos, pos;	gboolean playing, running;	running = xmms_remote_is_running(xmms_session);	if (running)	{		if (!xmms_running)		{			gtk_widget_shape_combine_mask(icon_win, mask, 0, 0);			gtk_widget_shape_combine_mask(window, mask, 0, 0);			xmms_running = running;			redraw_window();		}		if (!volslider_dragging)		{			int vl, vr;			xmms_remote_get_volume(xmms_session, &vl, &vr);			new_pos = ((vl > vr ? vl : vr) * 40) / 100;			if (new_pos < 0)				new_pos = 0;			if (new_pos > VOLSLIDER_HEIGHT)				new_pos = VOLSLIDER_HEIGHT;			if (volslider_pos != new_pos)			{				volslider_pos = new_pos;				draw_volslider();			}		}		update_tooltip();		playing = xmms_remote_is_playing(xmms_session);		if (!playing && seekslider_visible)		{			seekslider_visible = FALSE;			seekslider_dragging = FALSE;			seekslider_pos = -1;			draw_seekslider();		}		else if (playing)		{			int len, p = xmms_remote_get_playlist_pos(xmms_session);			len = xmms_remote_get_playlist_time(xmms_session, p);			if (len == -1)			{				seekslider_visible = FALSE;				seekslider_dragging = FALSE;				seekslider_pos = -1;				draw_seekslider();			}			else if (!seekslider_dragging)			{				seekslider_visible = TRUE;				pos = xmms_remote_get_output_time(xmms_session);				if (len != 0)					new_pos = (pos * SEEKSLIDER_MAX) / len;				else					new_pos = 0;				if (new_pos < 0)					new_pos = 0;				if (new_pos > SEEKSLIDER_MAX)					new_pos = SEEKSLIDER_MAX;				if (seekslider_pos != new_pos)				{					seekslider_pos = new_pos;					draw_seekslider();				}			}		}	}	else	{		if (xmms_running)		{			if (tooltips != NULL)				gtk_tooltips_set_tip(tooltips, window, NULL, NULL);			gtk_widget_shape_combine_mask(icon_win, launch_mask, 0, 0);			gtk_widget_shape_combine_mask(window, launch_mask, 0, 0);			xmms_running = FALSE;			redraw_window();		}	}	return TRUE;}void drag_data_received(GtkWidget *widget, GdkDragContext *context,			int x, int y, GtkSelectionData *selection_data,			guint info, guint time){	if (selection_data->data)	{		char *url = selection_data->data;		xmms_remote_playlist_clear(xmms_session);		xmms_remote_playlist_add_url_string(xmms_session, url);		xmms_remote_play(xmms_session);	}}void init(void){	GdkColor bg_color;	GdkWindow *leader;	XWMHints hints;	int i, w, h;	GdkGC *mask_gc;	for (i = 0; i < NUM_BUTTONS; i++)		button_list = g_list_append(button_list, &buttons[i]);	if (song_title)	{		tooltips = gtk_tooltips_new();		gtk_tooltips_set_delay(tooltips, 1000);	}	window = gtk_window_new(GTK_WINDOW_DIALOG);	if (has_geometry)		gtk_widget_set_uposition(window, win_x, win_y);	gtk_widget_set_usize(window, 64, 64);	gtk_widget_set_app_paintable(window, TRUE);	gtk_widget_set_events(window,			      GDK_BUTTON_MOTION_MASK | GDK_BUTTON_PRESS_MASK |			      GDK_BUTTON_RELEASE_MASK | GDK_EXPOSURE_MASK);	gtk_signal_connect(GTK_OBJECT(window), "expose_event",			   GTK_SIGNAL_FUNC(expose_cb), NULL);	gtk_signal_connect(GTK_OBJECT(window), "button_press_event",			   GTK_SIGNAL_FUNC(button_press_cb), NULL);	gtk_signal_connect(GTK_OBJECT(window), "button_release_event",			   GTK_SIGNAL_FUNC(button_release_cb), NULL);	gtk_signal_connect(GTK_OBJECT(window), "motion_notify_event",			   GTK_SIGNAL_FUNC(motion_notify_cb), NULL);	gtk_signal_connect(GTK_OBJECT(window), "destroy",			   GTK_SIGNAL_FUNC(destroy_cb), NULL);	gtk_drag_dest_set(window, GTK_DEST_DEFAULT_ALL, drop_types, 1,			  GDK_ACTION_COPY);	gtk_signal_connect(GTK_OBJECT(window), "drag_data_received",			   GTK_SIGNAL_FUNC(drag_data_received), NULL);	gtk_widget_realize(window);	bg_color.red = 0;	bg_color.green = 0;	bg_color.blue = 0;	gdk_colormap_alloc_color(gdk_colormap_get_system(),				 &bg_color, FALSE, TRUE);	gdk_window_set_background(window->window, &bg_color);	gdk_window_clear(window->window);	hints.initial_state = WithdrawnState;	hints.flags = StateHint;	XSetWMHints(GDK_DISPLAY(), GDK_WINDOW_XWINDOW(window->window), &hints);	icon_win = gtk_window_new(GTK_WINDOW_DIALOG);	gtk_widget_set_app_paintable(icon_win, TRUE);	gtk_widget_set_uposition(icon_win, 0, 0);	gtk_widget_set_usize(icon_win, 64, 64);	gtk_widget_set_events(icon_win,			      GDK_BUTTON_MOTION_MASK | GDK_BUTTON_PRESS_MASK |			      GDK_BUTTON_RELEASE_MASK | GDK_EXPOSURE_MASK);	gtk_signal_connect(GTK_OBJECT(icon_win), "expose_event",			   GTK_SIGNAL_FUNC(expose_cb), NULL);	gtk_signal_connect(GTK_OBJECT(icon_win), "button_press_event",			   GTK_SIGNAL_FUNC(button_press_cb), NULL);	gtk_signal_connect(GTK_OBJECT(icon_win), "button_release_event",			   GTK_SIGNAL_FUNC(button_release_cb), NULL);	gtk_signal_connect(GTK_OBJECT(icon_win), "motion_notify_event",			   GTK_SIGNAL_FUNC(motion_notify_cb), NULL);	gtk_signal_connect(GTK_OBJECT(icon_win), "destroy",			   GTK_SIGNAL_FUNC(destroy_cb), NULL);	gtk_drag_dest_set(icon_win, GTK_DEST_DEFAULT_ALL, drop_types, 1,			  GDK_ACTION_COPY);	gtk_signal_connect(GTK_OBJECT(icon_win), "drag_data_received",			   GTK_SIGNAL_FUNC(drag_data_received), NULL);	gtk_widget_realize(icon_win);	bg_color.red = 0;	bg_color.green = 0;	bg_color.blue = 0;	gdk_colormap_alloc_color(gdk_colormap_get_system(),				 &bg_color, FALSE, TRUE);	gdk_window_set_background(icon_win->window, &bg_color);	gdk_window_clear(icon_win->window);	dock_gc = gdk_gc_new(icon_win->window);	launch_pixmap = gdk_pixmap_new(window->window, 64, 64,				       gdk_visual_get_best_depth());	launch_mask = gdk_pixmap_new(window->window, 64, 64, 1);	mask_gc = gdk_gc_new(launch_mask);	bg_color.pixel = 0;	gdk_gc_set_foreground(mask_gc, &bg_color);	gdk_draw_rectangle(launch_mask, mask_gc, TRUE, 0, 0, -1, -1);	if (!icon_name)		icon_name = g_strdup_printf("%s/wmxmms.xpm", DATA_DIR);	pixmap = gdk_pixmap_create_from_xpm(window->window, &mask,					    NULL, icon_name);	if (!pixmap)	{		printf(_("ERROR: Couldn't find %s\n"), icon_name);		g_free(icon_name);		gtk_exit(1);	}	g_free(icon_name);	gdk_window_get_size(pixmap, &w, &h);	if (w > 64)		w = 64;	if (h > 64)		h = 64;	gdk_draw_pixmap(launch_pixmap, dock_gc, pixmap,			0, 0, 32 - (w / 2), 32 - (h / 2), w, h);	gdk_draw_pixmap(launch_mask, mask_gc, mask,			0, 0, 32 - (w / 2), 32 - (h / 2), w, h);	gdk_gc_unref(mask_gc);	gdk_pixmap_unref(pixmap);	gdk_bitmap_unref(mask);	gtk_widget_shape_combine_mask(window, launch_mask, 0, 0);	gtk_widget_shape_combine_mask(icon_win, launch_mask, 0, 0);	pixmap = gdk_pixmap_create_from_xpm_d(window->window,					      &mask, NULL, xmms_dock_master_xpm);	leader = gdk_window_foreign_new(gdk_leader_window);	gdk_window_set_icon(leader, icon_win->window, NULL, NULL);	gdk_window_reparent(icon_win->window, leader, 0, 0);	gdk_window_unref(leader);	gtk_widget_show(icon_win);	gtk_widget_show(window);	timeout_tag = gtk_timeout_add(100, timeout_func, NULL);}void display_usage(char *cmd){	printf(_(		"Usage: %s [options]\n\n"		"Options:\n"		"--------\n\n"		"-h, --help		Display this text and exit.\n"		"-g, --geometry		Set the geometry (for example +20+20)\n"		"-s, --session		Set the xmms session to use (Default: 0)\n"		"-c, --command		Command to launch xmms (Default: xmms)\n"		"-i, --icon		Set the icon to use when xmms is not running\n"		"-n, --single		Only a single click is needed to start xmms\n"		"-t, --title		Display song title when mouse is in window\n"		"-v, --version		Display version information and exit\n\n"),	       cmd);}static struct option lopt[] ={	{"help", 0, NULL, 'h'},	{"geometry", 1, NULL, 'g'},	{"session", 1, NULL, 's'},	{"command", 1, NULL, 'c'},	{"icon", 1, NULL, 'i'},	{"single", 0, NULL, 'n'},	{"title", 0, NULL, 't'},	{"version", 0, NULL, 'v'},	{NULL, 0, NULL, 0}};int main(int argc, char **argv){	int c;	gtk_set_locale();#ifdef ENABLE_NLS	bindtextdomain(PACKAGE, LOCALEDIR);	textdomain(PACKAGE);#endif	gtk_init(&argc, &argv);	while ((c = getopt_long(argc, argv, "hg:s:c:i:ntv", lopt, NULL)) != -1)	{		switch (c)		{			case 'h':				display_usage(argv[0]);				gtk_exit(0);				break;			case 'g':				XParseGeometry(optarg, &win_x, &win_y,					       NULL, NULL);				has_geometry = TRUE;				break;			case 's':				xmms_session = atoi(optarg);				break;			case 'c':				xmms_cmd = g_strdup(optarg);				break;			case 'i':				icon_name = g_strdup(optarg);				break;			case 'n':				single_click = TRUE;				break;			case 't':				song_title = TRUE;				break;			case 'v':				printf("wmxmms %s\n", VERSION);				gtk_exit(0);				break;		}	}	init();	gtk_main();	return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -