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

📄 gtkcalendar.c

📁 gtk是linux一款强大的夸平台的图形化开发工具
💻 C
📖 第 1 页 / 共 5 页
字号:
{  GtkCalendar *calendar;  GdkGC *gc;  gchar buffer[255];  gint day;  gint day_height;  gint x_left;  gint x_loc;  gint y_top;  gint y_baseline;  gint day_xspace;  GtkCalendarPrivateData *private_data;    g_return_if_fail (widget != NULL);  g_return_if_fail (GTK_IS_CALENDAR (widget));  g_return_if_fail (row < 6);  g_return_if_fail (col < 7);  calendar = GTK_CALENDAR (widget);  private_data = GTK_CALENDAR_PRIVATE_DATA (widget);  /*   * Handle freeze/thaw functionality   */    if (private_data->freeze_count)    {      private_data->dirty_main = 1;      return;    }    day_height = row_height (calendar);    day_xspace = private_data->day_width - private_data->max_day_char_width*2;    day = calendar->day[row][col];    x_left = left_x_for_column (calendar, col);  x_loc = x_left + private_data->day_width / 2 + private_data->max_day_char_width;    y_top = top_y_for_row (calendar, row);  y_baseline = y_top + (day_height + private_data->max_day_char_ascent)/2;    gdk_window_clear_area (private_data->main_win, x_left, y_top,			 private_data->day_width, day_height);    gc = calendar->gc;    if (calendar->day_month[row][col] == MONTH_PREV)    {      gdk_gc_set_foreground (gc, PREV_MONTH_COLOR (GTK_WIDGET (calendar)));    }   else if (calendar->day_month[row][col] == MONTH_NEXT)    {      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, "%d", day);  x_loc -= gdk_string_measure (DAY_FONT (widget), buffer);  sprintf (buffer, "%d", day);  gdk_draw_string (private_data->main_win,		   DAY_FONT (widget), gc,		   x_loc, y_baseline, buffer);  if (calendar->marked_date[day-1]      && calendar->day_month[row][col] == MONTH_CURRENT)    gdk_draw_string (private_data->main_win,		     DAY_FONT (widget), gc,		     x_loc-1, y_baseline, buffer);  if (GTK_WIDGET_HAS_FOCUS (calendar)       && calendar->focus_row == row && calendar->focus_col == col)    {      gdk_draw_rectangle (private_data->main_win, calendar->xor_gc, 			  FALSE, x_left, y_top,			  private_data->day_width-1, day_height-1);    }}static voidgtk_calendar_paint_main (GtkWidget *widget){  GtkCalendar *calendar;  GtkCalendarPrivateData *private_data;  gint row, col;    g_return_if_fail (widget != NULL);  g_return_if_fail (widget->window != NULL);  g_return_if_fail (GTK_IS_CALENDAR (widget));    calendar = GTK_CALENDAR (widget);  private_data = GTK_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++)      gtk_calendar_paint_day (widget, row, col);}static voidgtk_calendar_compute_days (GtkCalendar *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 (GTK_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 & GTK_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   ---------------------------------------------------------------------- */voidgtk_calendar_display_options (GtkCalendar	       *calendar,			      GtkCalendarDisplayOptions flags){  GtkCalendarPrivateData *private_data;  gint resize = 0;  GtkWidget *widget;  gint i;    g_return_if_fail (calendar != NULL);  g_return_if_fail (GTK_IS_CALENDAR (calendar));    widget = GTK_WIDGET (calendar);  private_data = GTK_CALENDAR_PRIVATE_DATA (calendar);    if (GTK_WIDGET_REALIZED (widget))    {      if ((flags ^ calendar->display_flags) & GTK_CALENDAR_NO_MONTH_CHANGE)	{	  resize ++;	  if (! (flags & GTK_CALENDAR_NO_MONTH_CHANGE)	      && (private_data->header_win))	    {	      calendar->display_flags &= ~GTK_CALENDAR_NO_MONTH_CHANGE;	      gtk_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) & GTK_CALENDAR_SHOW_HEADING)	{	  resize++;	  	  if (flags & GTK_CALENDAR_SHOW_HEADING)	    {	      calendar->display_flags |= GTK_CALENDAR_SHOW_HEADING;	      gtk_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) & GTK_CALENDAR_SHOW_DAY_NAMES)	{	  resize++;	  	  if (flags & GTK_CALENDAR_SHOW_DAY_NAMES)	    {	      calendar->display_flags |= GTK_CALENDAR_SHOW_DAY_NAMES;	      gtk_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) & GTK_CALENDAR_SHOW_WEEK_NUMBERS)	{	  resize++;	  	  if (flags & GTK_CALENDAR_SHOW_WEEK_NUMBERS)	    {	      calendar->display_flags |= GTK_CALENDAR_SHOW_WEEK_NUMBERS;	      gtk_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) & GTK_CALENDAR_WEEK_START_MONDAY)	{	  if (calendar->display_flags & GTK_CALENDAR_WEEK_START_MONDAY)	    calendar->display_flags &= ~GTK_CALENDAR_WEEK_START_MONDAY;	  else	    calendar->display_flags |= GTK_CALENDAR_WEEK_START_MONDAY;	  	  gtk_calendar_compute_days (calendar);	  gtk_calendar_paint_main (GTK_WIDGET (calendar));	  if (private_data->day_name_win)	    gtk_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;  }gintgtk_calendar_select_month (GtkCalendar *calendar,			   guint	month,			   guint	year){  g_return_val_if_fail (calendar != NULL, FALSE);  g_return_val_if_fail (GTK_IS_CALENDAR (calendar), FALSE);  g_return_val_if_fail (month <= 11, FALSE);    calendar->month = month;  calendar->year  = year;    gtk_calendar_compute_days (calendar);    if (GTK_WIDGET_DRAWABLE (GTK_WIDGET (calendar)))    gtk_calendar_paint (GTK_WIDGET (calendar), NULL);    gtk_signal_emit (GTK_OBJECT (calendar),		   gtk_calendar_signals[MONTH_CHANGED_SIGNAL]);  return TRUE;}voidgtk_calendar_select_day (GtkCalendar *calendar,			 guint	      day){  g_return_if_fail (calendar != NULL);  g_return_if_fail (GTK_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)))	gtk_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)))	gtk_calendar_paint_day_num (GTK_WIDGET (calendar), day);    }    gtk_signal_emit (GTK_OBJECT (calendar),		   gtk_calendar_signals[DAY_SELECTED_SIGNAL]);}voidgtk_calendar_clear_marks (GtkCalendar *calendar){  guint day;    g_return_if_fail (calendar != NULL);  g_return_if_fail (GTK_IS_CALENDAR (calendar));    for (day = 0; day < 31; day++)    {      calendar->marked_date[day] = FALSE;    }    if (GTK_WIDGET_DRAWABLE (calendar))    {      gtk_calendar_paint_main (GTK_WIDGET (calendar));    }}gintgtk_calendar_mark_day (GtkCalendar *calendar,		       guint	    day){  g_return_val_if_fail (calendar != NULL, FALSE);  g_return_val_if_fail (GTK_IS_CALENDAR (calendar), FALSE);    if (day >= 1 && day <= 31)    calendar->marked_date[day - 1] = TRUE;    if (GTK_WIDGET_DRAWABLE (GTK_WIDGET (calendar)))    {      gtk_calendar_paint_main (GTK_WIDGET (calendar));    }    return TRUE;}gintgtk_calendar_unmark_day (GtkCalendar *calendar,			 guint	      day){  g_

⌨️ 快捷键说明

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