📄 callbacks.c
字号:
}
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 + -