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

📄 calendar.c

📁 一个linux下的时钟软件
💻 C
📖 第 1 页 / 共 5 页
字号:
    {      if(calendar->setting)      	return;      gdk_gc_set_foreground (gc, PREV_MONTH_COLOR (GTK_WIDGET (calendar)));    }   else if (calendar->day_month[row][col] == MONTH_NEXT)    {      if(calendar->setting)      	return;      gdk_gc_set_foreground (gc, NEXT_MONTH_COLOR (GTK_WIDGET (calendar)));    }   else     {/*      if (calendar->highlight_row == row && calendar->highlight_col == col)	{	  gdk_gc_set_foreground (gc, HIGHLIGHT_BACK_COLOR (GTK_WIDGET (calendar)));	  gdk_draw_rectangle (private_data->main_win, gc, TRUE, x_left, y_top,			      private_data->day_width, day_height);	}*/	  if (calendar->selected_day == day)		{		gdk_gc_set_foreground (gc, & (GTK_WIDGET (calendar)->style->bg[GTK_STATE_SELECTED]));		gdk_draw_rectangle (private_data->main_win, gc, TRUE, x_left, y_top,							private_data->day_width, day_height);		}	  if (calendar->marked_date[day-1])
		gdk_gc_set_foreground (gc, MARKED_COLOR	 (GTK_WIDGET (calendar)));	  else
		gdk_gc_set_foreground (gc, NORMAL_DAY_COLOR (GTK_WIDGET (calendar)));
	  if (calendar->selected_day == day)		gdk_gc_set_foreground (gc, & (GTK_WIDGET (calendar)->style->fg[GTK_STATE_SELECTED]));	  else		gdk_gc_set_foreground (gc, & (GTK_WIDGET (calendar)->style->fg[GTK_WIDGET_STATE (calendar)]));  }
  sprintf (buffer, "%02d", day);  x_loc -= gdk_string_measure (DAY_FONT (widget), buffer);  sprintf (buffer, "%02d", day);
  if (calendar->marked_date[day-1] && calendar->day_month[row][col] == MONTH_CURRENT)   {		color.red = 65000;		color.green = 0;		color.blue  = 0;		if(colormap ==NULL)		{			colormap = gdk_colormap_get_system();			mgc = gdk_gc_new( GTK_WIDGET (calendar)->window);		}		gdk_color_alloc(colormap,&color);		gdk_gc_set_foreground(mgc,   &color);		gdk_gc_set_foreground(gc,&color);
// Drawing marked_day for red.Modified:lishiyan 		gdk_draw_string (private_data->main_win, DAY_FONT (widget), mgc,//gc						 x_loc-1, y_baseline, buffer);   }
  else   {		gdk_draw_string (private_data->main_win,						 DAY_FONT (widget), gc,						 x_loc, y_baseline, buffer);   }  if (GTK_WIDGET_HAS_FOCUS (calendar) && calendar->focus_row == row && calendar->focus_col == col)    {#if 0    			gdk_draw_rectangle (private_data->main_win, calendar->xor_gc, 							FALSE, x_left, y_top,							private_data->day_width-1, day_height-1);#endif    }}
static voidcalendar_paint_main (GtkWidget *widget){  Calendar *calendar;  CalendarPrivateData *private_data;  gint row, col;    g_return_if_fail (widget != NULL);  g_return_if_fail (widget->window != NULL);  g_return_if_fail (IS_CALENDAR (widget));    calendar = CALENDAR (widget);  private_data = CALENDAR_PRIVATE_DATA (widget);  if (private_data->freeze_count)    {      private_data->dirty_main = 1;      return;    }  private_data->dirty_main = 0;  gdk_window_clear (private_data->main_win);    /* gtk_calendar_compute_days (calendar); */ /* REMOVE later */  for (col = 0; col < 7; col++)    for (row = 0; row < 6; row++)      calendar_paint_day (widget, row, col);}static voidcalendar_compute_days (Calendar *calendar){  gint month;  gint year;  gint ndays_in_month;  gint ndays_in_prev_month;  gint first_day;  gint row;  gint col;  gint day;    g_return_if_fail (calendar != NULL);  g_return_if_fail (IS_CALENDAR (calendar));    year = calendar->year;  month = calendar->month + 1;    ndays_in_month = month_length[leap (year)][month];    first_day = day_of_week (year, month, 1);    if (calendar->display_flags & CALENDAR_WEEK_START_MONDAY)    first_day--;  else    first_day %= 7;  /* Compute days of previous month */  if (month > 1)    ndays_in_prev_month = month_length[leap (year)][month-1];  else    ndays_in_prev_month = month_length[leap (year)][12];  day = ndays_in_prev_month - first_day + 1;    row = 0;  if (first_day > 0)    {      for (col = 0; col < first_day; col++)		{		  calendar->day[row][col] = day;		  calendar->day_month[row][col] = MONTH_PREV;		  day++;		}    }    /* Compute days of current month */  col = first_day;  for (day = 1; day <= ndays_in_month; day++)    {      calendar->day[row][col] = day;      calendar->day_month[row][col] = MONTH_CURRENT;            col++;      if (col == 7)		{			row++;			col = 0;		}    }    /* Compute days of next month */  day = 1;  for (; row <= 5; row++)    {      for (; col <= 6; col++)		{			calendar->day[row][col] = day;			calendar->day_month[row][col] = MONTH_NEXT;			day++;		}	  col = 0;    }}/* ----------------------------------------------------------------------   NAME:	gtk_calendar_display_options   DESCRIPTION:	Set display options (whether to display the   heading and the month headings)      flags is can be an XOR of:   GTK_CALENDAR_SHOW_HEADING   GTK_CALENDAR_SHOW_DAY_NAMES   GTK_CALENDAR_NO_MONTH_CHANGE   GTK_CALENDAR_SHOW_WEEK_NUMBERS   GTK_CALENDAR_WEEK_START_MONDAY   ---------------------------------------------------------------------- */voidcalendar_display_options (Calendar	       *calendar,			      CalendarDisplayOptions flags){  CalendarPrivateData *private_data;  gint resize = 0;  GtkWidget *widget;  gint i;  g_return_if_fail (calendar != NULL);  g_return_if_fail (IS_CALENDAR (calendar));  widget = GTK_WIDGET (calendar);  private_data = CALENDAR_PRIVATE_DATA (calendar);  if (GTK_WIDGET_REALIZED (widget))    {      if ((flags ^ calendar->display_flags) & CALENDAR_NO_MONTH_CHANGE)	  {		 resize ++;		 if (! (flags & CALENDAR_NO_MONTH_CHANGE) && (private_data->header_win))		  {			calendar->display_flags &= ~CALENDAR_NO_MONTH_CHANGE;			calendar_realize_arrows (widget);		  }		 else		 {	      for (i = 0; i < 4; i++)			{			  if (private_data->arrow_win[i])			    {			      gdk_window_set_user_data (private_data->arrow_win[i], NULL);			      gdk_window_destroy (private_data->arrow_win[i]);			      private_data->arrow_win[i] = NULL;			    }			}		 }	  }      if ((flags ^ calendar->display_flags) & CALENDAR_SHOW_HEADING)		{		  resize++;		  if (flags & CALENDAR_SHOW_HEADING)		    {		      calendar->display_flags |= CALENDAR_SHOW_HEADING;			  calendar_realize_header (widget);		    }		  else		    {		      for (i = 0; i < 4; i++)				{				  if (private_data->arrow_win[i])				    {					    gdk_window_set_user_data (private_data->arrow_win[i], NULL);					    gdk_window_destroy (private_data->arrow_win[i]);						private_data->arrow_win[i] = NULL;					}				}			  gdk_window_set_user_data (private_data->header_win, NULL);			  gdk_window_destroy (private_data->header_win);			  private_data->header_win = NULL;		    }		}      if ((flags ^ calendar->display_flags) & CALENDAR_SHOW_DAY_NAMES)		{		  resize++;		  if (flags & CALENDAR_SHOW_DAY_NAMES)		    {		      calendar->display_flags |= CALENDAR_SHOW_DAY_NAMES;		      calendar_realize_day_names (widget);		    }		  else		    {		      gdk_window_set_user_data (private_data->day_name_win, NULL);		      gdk_window_destroy (private_data->day_name_win);		      private_data->day_name_win = NULL;		    }		}      if ((flags ^ calendar->display_flags) & CALENDAR_SHOW_WEEK_NUMBERS)		{		  resize++;		  if (flags & CALENDAR_SHOW_WEEK_NUMBERS)		    {		      calendar->display_flags |= CALENDAR_SHOW_WEEK_NUMBERS;		      calendar_realize_week_numbers (widget);		    }		  else		    {		      gdk_window_set_user_data (private_data->week_win, NULL);		      gdk_window_destroy (private_data->week_win);		      private_data->week_win = NULL;		    }		}      if ((flags ^ calendar->display_flags) & CALENDAR_WEEK_START_MONDAY)		{		  if (calendar->display_flags & CALENDAR_WEEK_START_MONDAY)		    calendar->display_flags &= ~CALENDAR_WEEK_START_MONDAY;		  else		    calendar->display_flags |= CALENDAR_WEEK_START_MONDAY;		  calendar_compute_days (calendar);		  calendar_paint_main (GTK_WIDGET (calendar));		  if (private_data->day_name_win)		    calendar_paint_day_names (GTK_WIDGET (calendar));		}            calendar->display_flags = flags;      if (resize)		gtk_widget_queue_resize (GTK_WIDGET (calendar));          }   else    calendar->display_flags = flags;  }gintcalendar_select_month (Calendar *calendar,			   guint	month,			   guint	year){  g_return_val_if_fail (calendar != NULL, FALSE);  g_return_val_if_fail (IS_CALENDAR (calendar), FALSE);  g_return_val_if_fail (month <= 11, FALSE);
  if (year < 1901)
  {
     year = 1901;
     return FALSE;
  }
  calendar->month = month;  calendar->year  = year;    calendar_compute_days (calendar);    if (GTK_WIDGET_DRAWABLE (GTK_WIDGET (calendar)))    calendar_paint (GTK_WIDGET (calendar), NULL);    gtk_signal_emit (GTK_OBJECT (calendar), calendar_signals[MONTH_CHANGED_SIGNAL]);
  return TRUE;}voidcalendar_select_day (Calendar *calendar,			 guint	      day){  g_return_if_fail (calendar != NULL);  g_return_if_fail (IS_CALENDAR (calendar));  g_return_if_fail (day <= 31);    /* gtk_calendar_compute_days (calendar); */    /* Deselect the old day */  if (calendar->selected_day > 0)    {      gint selected_day;      selected_day = calendar->selected_day;      calendar->selected_day = 0;      if (GTK_WIDGET_DRAWABLE (GTK_WIDGET (calendar)))		calendar_paint_day_num (GTK_WIDGET (calendar), selected_day);    }    calendar->selected_day = day;    /* Deselect the new day */  if (day != 0)    {      if (GTK_WIDGET_DRAWABLE (GTK_WIDGET (calendar)))		calendar_paint_day_num (GTK_WIDGET (calendar), day);    }    gtk_signal_emit (GTK_OBJECT (calendar), calendar_signals[DAY_SELECTED_SIGNAL]);}voidcalendar_clear_marks (Calendar *calendar){  guint day;    g_return_if_fail (calendar != NULL);  g_return_if_fail (IS_CALENDAR (calendar));    for (day = 0; day < 31; day++)      calendar->marked_date[day] = FALSE;
  calendar->num_marked_dates = 0;   if (GTK_WIDGET_DRAWABLE (calendar))      calendar_paint_main (GTK_WIDGET (calendar));}gintcalendar_mark_day (Calendar *calendar,		       guint	    day){  g_return_val_if_fail (calendar != NULL, FALSE);  g_return_val_if_fail (IS_CALENDAR (calendar), FALSE);    if (day >= 1 && day <= 31 && calendar->marked_date[day-1] == FALSE)    {      calendar->marked_date[day - 1] = TRUE;      calendar->num_marked_dates++;    }  if (GTK_WIDGET_DRAWABLE (GTK_WIDGET (calendar)))    {      calendar_paint_main (GTK_WIDGET (calendar));    }    return TRUE;}gintcalendar_unmark_day (Calendar *calendar,			 guint	      day){  g_return_val_if_fail (calendar != NULL, FALSE);  g_return_val_if_fail (IS_CALENDAR (calendar), FALSE);    if (day >= 1 && day <= 31 && calendar->marked_date[day-1] == TRUE)    {      calendar->marked_date[day - 1] = FALSE;      calendar->num_marked_dates--;    }    if (GTK_WIDGET_DRAWABLE (GTK_WIDGET (calendar)))    {      calendar_paint_main (GTK_WIDGET (calendar));    }    return TRUE;}voidcalendar_get_date (Calendar *calendar,		       guint	   *year,		       guint	   *month,		       guint	   *day){  g_return_if_fail (calendar != NULL);  g_return_if_fail (IS_CALENDAR (calendar));    if (year)    *year = calendar->year;    if (month)    *month = calendar->month;    if (day)    *day = calendar->selected_day;}static gintcalendar_button_press (GtkWidget	  *widget,			   GdkEventButton *event){  Calendar *calendar;  CalendarPrivateData *private_dat

⌨️ 快捷键说明

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