📄 calendar.c
字号:
{ 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 + -