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

📄 callbacks.c

📁 一个linux下的时钟软件
💻 C
📖 第 1 页 / 共 2 页
字号:
}


gboolean
on_DrawingareaClockFace_expose_event   (GtkWidget       *widget,
                                        GdkEventExpose  *event,
                                        gpointer         user_data)
{
  g_return_val_if_fail (widget != NULL, FALSE);
  g_return_val_if_fail (event != NULL, FALSE);
  g_return_val_if_fail (GTK_WIDGET_DRAWABLE (widget), FALSE);
  g_return_val_if_fail (!GTK_WIDGET_NO_WINDOW (widget), FALSE);

  if (event->count > 0)
    return FALSE;

  gdk_draw_pixmap(widget->window, widget->style->fg_gc[GTK_WIDGET_STATE(widget)], clockfacepixmap,
				  event->area.x, event->area.y,
				  event->area.x, event->area.y,
				  event->area.width, event->area.height);//绘制时钟钟面

  gdk_draw_pixmap (widget->window, widget->style->white_gc, RingPixmap, 0, 0, 10, 10, 15, 18);//绘制闹铃图标

  return FALSE;
}


gbooleanon_drawingarea_expose_event            (GtkWidget       *widget,                                        GdkEventExpose  *event,                                        gpointer         user_data){  g_return_val_if_fail (widget != NULL, FALSE);
  g_return_val_if_fail (event != NULL, FALSE);
  g_return_val_if_fail (GTK_WIDGET_DRAWABLE (widget), FALSE);
  g_return_val_if_fail (!GTK_WIDGET_NO_WINDOW (widget), FALSE);

  if (event->count > 0)
    return FALSE;
  if (pclock->timer)
  {
    gtk_timeout_remove (pclock->timer);
    pclock->timer = gtk_timeout_add (pclock->interval, (GtkFunction) clock_timer, (gpointer) widget);
  }
  isclear = FALSE;
  clock_draw_internal (widget);

  return FALSE;}voidon_drawingarea_realize                 (GtkWidget       *widget,                                        gpointer         user_data){//GdkWindowAttr attributes;
//gint attributes_mask;
  g_return_if_fail (widget != NULL);
  GTK_WIDGET_SET_FLAGS (widget, GTK_REALIZED);
/*
  attributes.x = widget->allocation.x;
  attributes.y = widget->allocation.y;
  attributes.width = widget->allocation.width;
  attributes.height = widget->allocation.height;
  attributes.wclass = GDK_INPUT_OUTPUT;
  attributes.window_type = GDK_WINDOW_CHILD;
  attributes.event_mask = gtk_widget_get_events (widget) | GDK_EXPOSURE_MASK;
  attributes.visual = gtk_widget_get_visual (widget);
  attributes.colormap = gtk_widget_get_colormap (widget);
  attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP;

  widget->window = gdk_window_new (widget->parent->window, &attributes, attributes_mask);
  widget->style = gtk_style_attach (widget->style, widget->window);
  gdk_window_set_user_data (widget->window, widget);
  gtk_style_set_background (widget->parent->style, widget->window, GTK_STATE_NORMAL);*/  clock_init ( widget);
  if (!(pclock->timer))
    pclock->timer = gtk_timeout_add (pclock->interval, (GtkFunction) clock_timer, (gpointer) widget);
}voidon_drawingarea_draw                    (GtkWidget       *widget,                                        GdkRectangle    *area,                                        gpointer         user_data){  g_return_if_fail (widget != NULL);
  g_return_if_fail (GTK_WIDGET_DRAWABLE (widget));
  g_return_if_fail (!GTK_WIDGET_NO_WINDOW (widget));
  g_return_if_fail (GTK_IS_WIDGET (widget->parent));
  g_return_if_fail (GTK_WIDGET_DRAWABLE (widget->parent));
/*
  if (pclock->parent_style != widget->parent->style)
  {
    if (pclock->parent_style)
      gtk_style_unref (pclock->parent_style);
    pclock->parent_style = widget->parent->style;
    gtk_style_ref (pclock->parent_style);
  }
  gtk_style_unref (widget->parent_style);
*/
  gtk_style_ref (widget->style);
  clock_draw_internal (widget);}voidon_drawingarea_size_request            (GtkWidget       *widget,                                        GtkRequisition  *requisition,                                        gpointer         user_data){  requisition->width  = 80;//CLOCK_DEFAULT_SIZE;
  requisition->height = 78;//CLOCK_DEFAULT_SIZE;}voidon_drawingarea_size_allocate           (GtkWidget       *widget,                                        GtkAllocation   *allocation,                                        gpointer         user_data){  gint size;

  g_return_if_fail (widget != NULL);
  g_return_if_fail (allocation != NULL);

  widget->allocation = *allocation;

  if (GTK_WIDGET_REALIZED (widget))
	gdk_window_move_resize (widget->window, allocation->x, allocation->y, allocation->width, allocation->height);
  size = MIN (allocation->width, allocation->height);
  pclock->radius = size * 0.8;//指针长度
  pclock->pointer_width = MAX (pclock->radius / 5, 3);//指针宽度//  pclock->internal = size * 0.49;
}voidon_CloseButton_clicked                 (GtkButton       *button,                                        gpointer         user_data){  GtkWidget *clocksetwindow;  clocksetwindow = lookup_widget (GTK_WIDGET(button),"ClockSetWindow");  gtk_widget_destroy (GTK_WIDGET(clocksetwindow));}voidon_OkButton_clicked                    (GtkButton       *button,                                        gpointer         user_data){  GtkWidget *openbutt, *closebutt;
  GtkWidget *TSopenbutt,*TSclosebutt;  GdkBitmap *mask;  gint  flag = 0, hour, minute;  openbutt  = lookup_widget (GTK_WIDGET(button),"ClockOpenCheckButton");  closebutt  = lookup_widget (GTK_WIDGET(button),"ClockCloseCheckButton");  TSopenbutt  =  lookup_widget (GTK_WIDGET(button),"ClockTSOpenCheckButton");
  TSclosebutt  = lookup_widget (GTK_WIDGET(button),"ClockTSCloseCheckButton");
  switch (pclock->mode)  {	case CLOCK_ANALOG:	  if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (openbutt))&&!ringstate)	     {//当前设置为开启闹钟,以前的状态为关闭了闹钟			if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (TSopenbutt)) ||//单次提示为打开
				gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (TSclosebutt)))//每天提示为打开
			{
					RingPixmap = gdk_pixmap_colormap_create_from_xpm (NULL, gtk_widget_get_default_colormap (),
															  &mask, NULL, "./xpm/clockxpm/ringonclockface3.xpm");
					ringstate = TRUE;//绘制闹铃图标是通过expose_event事件
			}
	     }	  else if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (closebutt))&&ringstate)		{//当前设置为关闭闹钟,以前的状态为打开了闹钟			ringstate = FALSE;			RingPixmap = gdk_pixmap_colormap_create_from_xpm (NULL, gtk_widget_get_default_colormap (),
															  &mask, NULL, "./xpm/clockxpm/ringonclockface4.xpm");
		}	  break;	case CLOCK_LEDS:	  if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (openbutt)) && !ringstate)	    {//情况同上			if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (TSopenbutt)) ||
				gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (TSclosebutt)))
			{
					RingPixmap = gdk_pixmap_colormap_create_from_xpm (NULL, gtk_widget_get_default_colormap (),
															  &mask, NULL, "./xpm/clockxpm/ringonclockface1.xpm");
					ringstate = TRUE;//绘制闹铃图标是通过clock_timer定时器函数
			}
	    }	  else if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (closebutt))&&ringstate)		{			ringstate = FALSE;			RingPixmap = gdk_pixmap_colormap_create_from_xpm (NULL, gtk_widget_get_default_colormap (),
															  &mask, NULL, "./xpm/clockxpm/ringonclockface0.xpm");
		}  }
  hour = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(lookup_widget (GTK_WIDGET(button),"HourSpinButton")));  minute = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(lookup_widget (GTK_WIDGET(button),"MinuteSpinButton")));
  if (ringstate)    {		if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (TSopenbutt)))			flag = 1;//Onlyonce TS.		else if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (TSclosebutt)))			flag = 2;//everyday TS.		clock_save_data (hour, minute, flag);    }
  clock_save_data (hour, minute, flag);//相关数据写入文件中以备luncher调用
  on_CloseButton_clicked (button, NULL);//关闭闹铃设置窗口}voidon_CancelButton_clicked                (GtkButton       *button,                                        gpointer         user_data){  on_CloseButton_clicked (button,NULL);}voidon_ClockOpenCheckButton_clicked        (GtkButton       *button,                                        gpointer         user_data){
  toggle_button_press_flip (GTK_WIDGET(button), "ClockCloseCheckButton", 1);//设置toggle_button的当前状态
  if (!gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (button)))
  {
	gtk_widget_set_sensitive(lookup_widget(GTK_WIDGET(button), "ClockTSCloseCheckButton"), FALSE);
	gtk_widget_set_sensitive(lookup_widget(GTK_WIDGET(button), "ClockTSOpenCheckButton"), FALSE);
	gtk_widget_set_sensitive(lookup_widget(GTK_WIDGET(button), "HourSpinButton"), FALSE);
	gtk_widget_set_sensitive(lookup_widget(GTK_WIDGET(button), "MinuteSpinButton"), FALSE);
  }
  else
  {
	gtk_widget_set_sensitive(lookup_widget(GTK_WIDGET(button), "ClockTSCloseCheckButton"), TRUE);
	gtk_widget_set_sensitive(lookup_widget(GTK_WIDGET(button), "ClockTSOpenCheckButton"), TRUE);
	gtk_widget_set_sensitive(lookup_widget(GTK_WIDGET(button), "HourSpinButton"), TRUE);
	gtk_widget_set_sensitive(lookup_widget(GTK_WIDGET(button), "MinuteSpinButton"), TRUE);
  }
}voidon_ClockCloseCheckButton_clicked       (GtkButton       *button,                                        gpointer         user_data){  toggle_button_press_flip (GTK_WIDGET(button), "ClockOpenCheckButton", 2);
}voidon_ClockTSOpenCheckButton_clicked      (GtkButton       *button,                                        gpointer         user_data){  toggle_button_press_flip (GTK_WIDGET(button), "ClockTSCloseCheckButton", 3);//设置toggle_button的当前状态
}voidon_ClockTSCloseCheckButton_clicked     (GtkButton       *button,                                        gpointer         user_data){  toggle_button_press_flip (GTK_WIDGET(button), "ClockTSOpenCheckButton", 4);
}voidon_MainCloseButton_clicked             (GtkButton       *button,                                        gpointer         user_data){  GtkWidget *clockmainwindow;  extern	 int timeout_handler;

  clockmainwindow = lookup_widget (GTK_WIDGET(button),"ClockMainWindow");  gtk_timeout_remove (timeout_handler);
  gtk_timeout_remove (pclock->timer);  if (gdkxmp[0] != NULL)    leds_clock_destroy_pixmap ();  gtk_widget_destroy (GTK_WIDGET(clockmainwindow));  gtk_main_quit ();}

⌨️ 快捷键说明

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