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

📄 main.c

📁 系统任务管理器
💻 C
📖 第 1 页 / 共 5 页
字号:
		   )			{			t = style->margin.top;			b = style->margin.bottom;			}		else			{			t = style->border.top * _GK.theme_scale / 100;			b = style->border.bottom * _GK.theme_scale / 100;			}		}	if (top)		*top = t;	if (bottom)		*bottom = b;	}GkrellmMargin *gkrellm_get_style_margins(GkrellmStyle *style)	{	static GkrellmMargin	m_default = {0,0,0,0};	if (!style)		return &m_default;	gkrellm_get_top_bottom_margins(style,				&style->margin.top, &style->margin.bottom);		/* XXX */	return &style->margin;	}voidgkrellm_set_style_margins(GkrellmStyle *style, GkrellmMargin *margin)	{	if (style && margin)		style->margin = *margin;	}voidgkrellm_draw_string(GdkDrawable *drawable, GkrellmTextstyle *ts,			gint x, gint y, gchar *s)	{	if (!drawable || !ts || !s)		return;	if (ts->effect)		{		gdk_gc_set_foreground(_GK.text_GC, &ts->shadow_color);		gkrellm_gdk_draw_string(drawable, ts->font, _GK.text_GC,					x + 1, y + 1, s);		}	gdk_gc_set_foreground(_GK.text_GC, &ts->color);	gkrellm_gdk_draw_string(drawable, ts->font, _GK.text_GC, x, y, s);	}voidgkrellm_draw_text(GdkDrawable *drawable, GkrellmTextstyle *ts, gint x, gint y,			gchar *s, gint len)	{	if (!drawable || !ts || !s)		return;	if (ts->effect)		{		gdk_gc_set_foreground(_GK.text_GC, &ts->shadow_color);		gkrellm_gdk_draw_text(drawable, ts->font, _GK.text_GC,					x + 1, y + 1, s, len);		}	gdk_gc_set_foreground(_GK.text_GC, &ts->color);	gkrellm_gdk_draw_text(drawable, ts->font, _GK.text_GC, x, y, s, len);	}gintgkrellm_label_x_position(gint position, gint w_field, gint w_label,				gint margin)	{	gint	x;	x = w_field * position / GKRELLM_LABEL_MAX;	x -= w_label / 2;	if (x > w_field - w_label - margin)		x = w_field - w_label - margin;	if (x < margin)		x = margin;	return x;	}/* ---------------------------------------------------------------------- */#define	RESISTANCE_PIXELS	35static gint		moving_gkrellm	= FALSE;static gint		x_press_event, y_press_event;static gint		gkrellm_width, gkrellm_height;voidgkrellm_motion(GtkWidget *widget, GdkEventMotion *ev, gpointer data)	{	gint			x_pointer, y_pointer, x, y, right_zone, bottom_zone;	GdkModifierType	m;	if (moving_gkrellm)		{		m = ev->state;		if (!(m & GDK_BUTTON1_MASK))			{			moving_gkrellm = FALSE;			return;			}		/* Catch up to the pointer so GKrellM does not lag the pointer motion.		*/		gkrellm_winop_flush_motion_events();		gdk_window_get_pointer(NULL, &x_pointer, &y_pointer, &m);		/* Subtract press event coordinates to account for pointer offset		|  into top_window.  Have edge resistance to the move.		*/		x = x_pointer - x_press_event;		y = y_pointer - y_press_event;		right_zone = _GK.w_display - gkrellm_width;		bottom_zone = _GK.h_display - gkrellm_height;		if (_GK.x_position >= 0 && x < 0 && x > -RESISTANCE_PIXELS)			x = 0;		if (   _GK.x_position <= right_zone			&& x > right_zone && x < right_zone + RESISTANCE_PIXELS		   )			x = right_zone;		if (_GK.y_position >= 0 && y < 0 && y > -RESISTANCE_PIXELS)			y = 0;		if (   _GK.y_position <= bottom_zone			&& y > bottom_zone && y < bottom_zone + RESISTANCE_PIXELS		   )			y = bottom_zone;		/* Moves to x,y position relative to root.		*/		_GK.y_position = y;		_GK.x_position = x;		_GK.position_valid = TRUE;		gdk_window_move(top_window->window, x, y);		}	}voidgkrellm_menu_popup(void)	{	gtk_menu_popup(GTK_MENU(item_factory->widget), NULL, NULL, NULL, NULL,					0, gtk_get_current_event_time());	}static voidtop_frame_button_release(GtkWidget *widget, GdkEventButton *ev, gpointer data)	{	if (!no_transparency)		gkrellm_winop_apply_rootpixmap_transparency();	moving_gkrellm = FALSE;	if (_GK.debug_level & DEBUG_POSITION)		printf("gkrellm moveto: x_pos=%d y_pos=%d\n",				_GK.x_position, _GK.y_position);	}static gbooleantop_frame_button_press(GtkWidget *widget, GdkEventButton *ev, gpointer data)	{	gint			x_pointer, y_pointer;	GdkModifierType	m;	time_t			time_check;	gdk_window_get_pointer(NULL, &x_pointer, &y_pointer, &m);	gdk_window_get_geometry(NULL, NULL, NULL, &_GK.w_display,				&_GK.h_display, NULL);	gkrellm_width = _GK.chart_width				+ _GK.frame_left_width + _GK.frame_right_width;	gkrellm_height = _GK.monitor_height + _GK.total_frame_height;	/* If system time is changed, gtk_timeout_add() setting gets	|  confused, so put some duct tape here ...	*/	time(&time_check);	if (time_check > _GK.time_now + 2 || time_check < _GK.time_now)		gkrellm_start_timer(_GK.update_HZ);	if (ev->button == 3)		{		gtk_menu_popup(GTK_MENU(item_factory->widget), NULL, NULL, NULL, NULL,					ev->button, ev->time);		return FALSE;		}	gtk_window_present(GTK_WINDOW(top_window));	if (_GK.client_mode && gkrellm_client_server_connect_state() == 0)		gkrellm_client_mode_connect_thread();	if (!_GK.withdrawn)		/* Move window unless in the slit */		{		/* I need pointer coords relative to top_window.  So, add in offsets		|  to hostname window if that is where we pressed.		*/		x_press_event = ev->x;		y_press_event = ev->y;		if (widget == gtree.top1_event_box)			{			x_press_event += _GK.frame_left_width;			y_press_event += _GK.frame_top_height;			}		moving_gkrellm = TRUE;		configure_position_lock = FALSE;		}	return FALSE;	}#define	CLOSE_LEFT	0#define	CLOSE_RIGHT	1  /* If any frame images have transparency (masks != NULL) use the  |  frame masks to construct a main window sized mask.  */static voidapply_frame_transparency(gboolean force)	{	GtkWidget			*win;	gint				w, h;	static gint			w_prev, h_prev;	if (decorated)		return;	win = gtree.window;	w = _GK.chart_width + _GK.frame_left_width + _GK.frame_right_width;	h = _GK.monitor_height + _GK.total_frame_height;	if (!gtree.window_transparency_mask || w != w_prev || h != h_prev)		{		if (gtree.window_transparency_mask)			g_object_unref(G_OBJECT(gtree.window_transparency_mask));		gtree.window_transparency_mask = gdk_pixmap_new(win->window, w, h, 1);		w_prev = w;		h_prev = h;		}	else if (!force && monitors_visible == mask_monitors_visible)		return;	/* Set entire shape mask to 1, then write in the frame masks.	*/	gdk_draw_rectangle(gtree.window_transparency_mask, _GK.bit1_GC, TRUE,				0, 0, w, h);	if (monitors_visible)		{		if (gtree.frame_top_mask)			gdk_draw_drawable(gtree.window_transparency_mask, _GK.bit1_GC,				gtree.frame_top_mask, 0, 0,  0, 0,  w, _GK.frame_top_height);		if (gtree.frame_bottom_mask)			gdk_draw_drawable(gtree.window_transparency_mask, _GK.bit1_GC,				gtree.frame_bottom_mask,				0, 0, 0, h - _GK.frame_bottom_height,				w, _GK.frame_bottom_height);		if (gtree.frame_left_mask)			gdk_draw_drawable(gtree.window_transparency_mask, _GK.bit1_GC,				gtree.frame_left_mask,				0, 0,  0, _GK.frame_top_height,				_GK.frame_left_width, _GK.monitor_height);		if (gtree.frame_right_mask)			gdk_draw_drawable(gtree.window_transparency_mask, _GK.bit1_GC,				gtree.frame_right_mask,				0, 0,  w - _GK.frame_right_width, _GK.frame_top_height,				_GK.frame_right_width, _GK.monitor_height);		}	else	/* Top and bottom frames are not visible and GKrellM is shut */		{		if (gtree.frame_left_mask)			gdk_draw_drawable(gtree.window_transparency_mask, _GK.bit1_GC,				gtree.frame_left_mask,				0, 0,  0, 0,				_GK.frame_left_width, _GK.monitor_height);		if (gtree.frame_right_mask)			gdk_draw_drawable(gtree.window_transparency_mask, _GK.bit1_GC,				gtree.frame_right_mask,				0, 0,  _GK.frame_left_width, 0,				_GK.frame_right_width, _GK.monitor_height);		}	gtk_widget_shape_combine_mask(gtree.window,						gtree.window_transparency_mask, 0, 0);	mask_monitors_visible = monitors_visible;	}static gbooleanside_frame_button_press(GtkWidget *widget, GdkEventButton *ev, gpointer data)	{	static gint		direction;	gint			x_gkrell, y_gkrell;	if (ev->button == 3)		{		gtk_menu_popup(GTK_MENU(item_factory->widget), NULL, NULL, NULL, NULL,					ev->button, ev->time);		return FALSE;		}	if (decorated || _GK.withdrawn)		return FALSE;	gdk_window_get_origin(gtree.window->window, &x_gkrell, &y_gkrell);	direction = (x_gkrell < _GK.w_display / 2) ? CLOSE_LEFT : CLOSE_RIGHT;	if (ev->button == 2 || (_GK.m2 && ev->button == 1))		{		monitors_visible = !monitors_visible;		if (monitors_visible)			{			gtk_widget_show(gtree.middle_vbox);			gtk_widget_show(gtree.top0_vbox);			gtk_widget_show(gtree.bottom_vbox);			if (direction == CLOSE_RIGHT)				gdk_window_move(gtree.window->window,								x_gkrell - _GK.chart_width, y_gkrell);			}		else			{			gtk_widget_hide(gtree.top0_vbox);			gtk_widget_hide(gtree.bottom_vbox);			gtk_widget_hide(gtree.middle_vbox);			if (direction == CLOSE_RIGHT)				gdk_window_move(gtree.window->window,								x_gkrell + _GK.chart_width, y_gkrell);			}		gdk_flush();  /* Avoid double click race */		}	return FALSE;	}static voidcreate_frame_top(GtkWidget *vbox)	{	static GtkWidget	*ft_vbox;	static GtkWidget	*ft_image;	GkrellmPiximage		*im;	gint				w, h;	if (decorated)		return;	im = _GK.frame_top_piximage;	w = _GK.chart_width + _GK.frame_left_width + _GK.frame_right_width;	h = (_GK.frame_top_height > 0) ? _GK.frame_top_height				: gdk_pixbuf_get_height(im->pixbuf);//	h = h * _GK.theme_scale / 100;	_GK.frame_top_height = h;	_GK.total_frame_height += h;	gkrellm_scale_piximage_to_pixmap(im,				&gtree.frame_top_pixmap, &gtree.frame_top_mask, w, h);	if (!ft_vbox)		{		ft_vbox = gtk_vbox_new(FALSE, 0);		gtk_container_add(GTK_CONTAINER(vbox), ft_vbox);		gtk_widget_show(ft_vbox);		ft_image = gtk_image_new_from_pixmap(gtree.frame_top_pixmap, NULL);		gtk_box_pack_start(GTK_BOX(ft_vbox), ft_image, FALSE, FALSE, 0);		gtk_widget_show(ft_image);		}	else		gtk_image_set_from_pixmap(GTK_IMAGE(ft_image),				gtree.frame_top_pixmap, NULL);	}static voidcreate_frame_bottom(GtkWidget *vbox)	{	static GtkWidget	*fb_vbox;	static GtkWidget	*fb_image;	GkrellmPiximage		*im;	gint				w, h;	if (decorated)		return;	im = _GK.frame_bottom_piximage;	w = _GK.chart_width + _GK.frame_left_width + _GK.frame_right_width;	h = (_GK.frame_bottom_height > 0) ? _GK.frame_bottom_height				: gdk_pixbuf_get_height(im->pixbuf);//	h = h * _GK.theme_scale / 100;	_GK.frame_bottom_height = h;	_GK.total_frame_height += h;	gkrellm_scale_piximage_to_pixmap(im,				&gtree.frame_bottom_pixmap, &gtree.frame_bottom_mask, w, h);	if (fb_vbox == NULL)		{		fb_vbox = gtk_vbox_new(FALSE, 0);		gtk_container_add(GTK_CONTAINER(vbox), fb_vbox);		gtk_widget_show(fb_vbox);		fb_image = gtk_image_new_from_pixmap(gtree.frame_bottom_pixmap, NULL);		gtk_box_pack_start(GTK_BOX(fb_vbox), fb_image, FALSE, FALSE, 0);		gtk_widget_show(fb_image);		}	else		gtk_image_set_from_pixmap(GTK_IMAGE(fb_image),				gtree.frame_bottom_pixmap, NULL);	}static voidframe_transparency_warning(void)    {    static gint warned = -1;	if (warned != _GK.theme_reload_count && _GK.command_line_theme)		fprintf(stderr,"Warning: frame overlap transparency may not work.  If any of the frame,\n""         chart, panel, spacer, or cap images have transparency, then all\n""         may need transparency.\n");	warned = _GK.theme_reload_count;	}static voiddraw_cap(GkrellmPiximage *piximage, gint y_mon, gint h_mon, gint h_spacer,		gboolean top, gboolean left)	{	GdkPixmap	*pixmap = NULL;	GdkBitmap	*mask = NULL;	GdkBitmap	*frame_mask;	gint		y, x_dst, h_pix, w_pix, h_cap;	if (!piximage || !piximage->pixbuf)		return;	h_pix = gdk_pixbuf_get_height(piximage->pixbuf);	w_pix = gdk_pixbuf_get_width(piximage->pixbuf);//	h_pix = h_pix * _GK.theme_scale / 100;//	w_pix = w_pix * _GK.theme_scale / 100;	y = top ? y_mon + h_spacer : y_mon + h_mon - h_pix - h_spacer;	if (y < y_mon)		y = y_mon;	h_cap = (y + h_pix <= y_mon + h_mon) ? h_pix : y_mon + h_mon - y;	if (h_cap <= 0)		return;	x_dst = left ? 0 : _GK.frame_right_width - w_pix;	gkrellm_scale_piximage_to_pixmap(piximage, &pixmap, &mask, w_pix, h_pix);	gdk_draw_drawable(				left ? gtree.frame_left_pixmap : gtree.frame_right_pixmap,				_GK.draw1_GC, pixmap, 0, 0, x_dst, y, w_pix, h_cap);	frame_mask = left ? gtree.frame_left_mask : gtree.frame_right_mask;	if (mask && frame_mask)		gdk_draw_drawable(frame_mask, _GK.bit1_GC, mask,

⌨️ 快捷键说明

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