📄 gtkprogress.c
字号:
widget->allocation.height, -1); GTK_PROGRESS_CLASS (GTK_OBJECT (progress)->klass)->paint (progress); }}static voidgtk_progress_value_changed (GtkAdjustment *adjustment, GtkProgress *progress){ GTK_PROGRESS_CLASS (GTK_OBJECT (progress)->klass)->update (progress);}static gchar *gtk_progress_build_string (GtkProgress *progress, gfloat value, gfloat percentage){ gchar buf[256] = { 0 }; gchar tmp[256] = { 0 }; gchar *src; gchar *dest; gchar fmt[10]; src = progress->format; dest = buf; while (src && *src) { if (*src != '%') { *dest = *src; dest++; } else { gchar c; gint digits; c = *(src + sizeof(gchar)); digits = 0; if (c >= '0' && c <= '2') { digits = (gint) (c - '0'); src++; c = *(src + sizeof(gchar)); } switch (c) { case '%': *dest = '%'; src++; dest++; break; case 'p': case 'P': if (digits) { sprintf (fmt, "%%.%df", digits); sprintf (tmp, fmt, 100 * percentage); } else sprintf (tmp, "%.0f", 100 * percentage); strcat (buf, tmp); dest = &(buf[strlen (buf)]); src++; break; case 'v': case 'V': if (digits) { sprintf (fmt, "%%.%df", digits); sprintf (tmp, fmt, value); } else sprintf (tmp, "%.0f", value); strcat (buf, tmp); dest = &(buf[strlen (buf)]); src++; break; case 'l': case 'L': if (digits) { sprintf (fmt, "%%.%df", digits); sprintf (tmp, fmt, progress->adjustment->lower); } else sprintf (tmp, "%.0f", progress->adjustment->lower); strcat (buf, tmp); dest = &(buf[strlen (buf)]); src++; break; case 'u': case 'U': if (digits) { sprintf (fmt, "%%.%df", digits); sprintf (tmp, fmt, progress->adjustment->upper); } else sprintf (tmp, "%.0f", progress->adjustment->upper); strcat (buf, tmp); dest = &(buf[strlen (buf)]); src++; break; default: break; } } src++; } return g_strdup (buf);}/***************************************************************/voidgtk_progress_set_adjustment (GtkProgress *progress, GtkAdjustment *adjustment){ g_return_if_fail (progress != NULL); g_return_if_fail (GTK_IS_PROGRESS (progress)); if (adjustment) g_return_if_fail (GTK_IS_ADJUSTMENT (adjustment)); else adjustment = (GtkAdjustment*) gtk_adjustment_new (0, 0, 100, 0, 0, 0); if (progress->adjustment != adjustment) { if (progress->adjustment) { gtk_signal_disconnect_by_data (GTK_OBJECT (progress->adjustment), (gpointer) progress); gtk_object_unref (GTK_OBJECT (progress->adjustment)); } progress->adjustment = adjustment; if (adjustment) { gtk_object_ref (GTK_OBJECT (adjustment)); gtk_object_sink (GTK_OBJECT (adjustment)); gtk_signal_connect (GTK_OBJECT (adjustment), "value_changed", (GtkSignalFunc) gtk_progress_value_changed, (gpointer) progress); } }}voidgtk_progress_configure (GtkProgress *progress, gfloat value, gfloat min, gfloat max){ GtkAdjustment *adj; gboolean changed = FALSE; g_return_if_fail (progress != NULL); g_return_if_fail (GTK_IS_PROGRESS (progress)); g_return_if_fail (min <= max); g_return_if_fail (value >= min && value <= max); adj = progress->adjustment; if (fabs (adj->lower - min) > EPSILON || fabs (adj->upper - max) > EPSILON) changed = TRUE; adj->value = value; adj->lower = min; adj->upper = max; gtk_signal_emit_by_name (GTK_OBJECT (adj), "value_changed"); if (changed) gtk_signal_emit_by_name (GTK_OBJECT (progress->adjustment), "changed");}voidgtk_progress_set_percentage (GtkProgress *progress, gfloat percentage){ g_return_if_fail (progress != NULL); g_return_if_fail (GTK_IS_PROGRESS (progress)); g_return_if_fail (percentage >= 0 && percentage <= 1.0); gtk_progress_set_value (progress, progress->adjustment->lower + percentage * (progress->adjustment->upper - progress->adjustment->lower));}gfloatgtk_progress_get_current_percentage (GtkProgress *progress){ g_return_val_if_fail (progress != NULL, 0); g_return_val_if_fail (GTK_IS_PROGRESS (progress), 0); return (progress->adjustment->value - progress->adjustment->lower) / (progress->adjustment->upper - progress->adjustment->lower);}gfloatgtk_progress_get_percentage_from_value (GtkProgress *progress, gfloat value){ g_return_val_if_fail (progress != NULL, 0); g_return_val_if_fail (GTK_IS_PROGRESS (progress), 0); if (value >= progress->adjustment->lower && value <= progress->adjustment->upper) return (value - progress->adjustment->lower) / (progress->adjustment->upper - progress->adjustment->lower); else return 0.0;}voidgtk_progress_set_value (GtkProgress *progress, gfloat value){ g_return_if_fail (progress != NULL); g_return_if_fail (GTK_IS_PROGRESS (progress)); if (fabs (progress->adjustment->value - value) > EPSILON) gtk_adjustment_set_value (progress->adjustment, value);}gfloatgtk_progress_get_value (GtkProgress *progress){ g_return_val_if_fail (progress != NULL, 0); g_return_val_if_fail (GTK_IS_PROGRESS (progress), 0); return progress->adjustment->value;}voidgtk_progress_set_show_text (GtkProgress *progress, gint show_text){ g_return_if_fail (progress != NULL); g_return_if_fail (GTK_IS_PROGRESS (progress)); if (progress->show_text != show_text) { progress->show_text = show_text; if (GTK_WIDGET_DRAWABLE (GTK_WIDGET (progress))) gtk_widget_queue_resize (GTK_WIDGET (progress)); }}voidgtk_progress_set_text_alignment (GtkProgress *progress, gfloat x_align, gfloat y_align){ g_return_if_fail (progress != NULL); g_return_if_fail (GTK_IS_PROGRESS (progress)); g_return_if_fail (x_align >= 0.0 && x_align <= 1.0); g_return_if_fail (y_align >= 0.0 && y_align <= 1.0); if (progress->x_align != x_align || progress->y_align != y_align) { progress->x_align = x_align; progress->y_align = y_align; if (GTK_WIDGET_DRAWABLE (GTK_WIDGET (progress))) gtk_widget_queue_resize (GTK_WIDGET (progress)); }}voidgtk_progress_set_format_string (GtkProgress *progress, gchar *format){ g_return_if_fail (progress != NULL); g_return_if_fail (GTK_IS_PROGRESS (progress)); if (format) { if (progress->format) g_free (progress->format); progress->format = g_strdup (format); if (GTK_WIDGET_DRAWABLE (GTK_WIDGET (progress))) gtk_widget_queue_resize (GTK_WIDGET (progress)); }}gchar *gtk_progress_get_current_text (GtkProgress *progress){ g_return_val_if_fail (progress != NULL, 0); g_return_val_if_fail (GTK_IS_PROGRESS (progress), 0); return gtk_progress_build_string (progress, progress->adjustment->value, gtk_progress_get_current_percentage (progress));}gchar *gtk_progress_get_text_from_value (GtkProgress *progress, gfloat value){ g_return_val_if_fail (progress != NULL, 0); g_return_val_if_fail (GTK_IS_PROGRESS (progress), 0); return gtk_progress_build_string (progress, value, gtk_progress_get_percentage_from_value (progress, value));}voidgtk_progress_set_activity_mode (GtkProgress *progress, guint activity_mode){ g_return_if_fail (progress != NULL); g_return_if_fail (GTK_IS_PROGRESS (progress)); if (progress->activity_mode != (activity_mode != 0)) { progress->activity_mode = (activity_mode != 0); if (progress->activity_mode) GTK_PROGRESS_CLASS (GTK_OBJECT (progress)->klass)->act_mode_enter (progress); if (GTK_WIDGET_DRAWABLE (GTK_WIDGET (progress))) gtk_widget_queue_resize (GTK_WIDGET (progress)); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -