📄 gseisviewaxistraces.c
字号:
} else if (private->str_values) { guint i, length, max_length = 0, max_index = 0; gchar *label; for (i = 0; i < private->str_values->len; i++) { label = (gchar*)g_ptr_array_index (private->str_values, i); length = 0; while (*(label++)) length++; if (length > max_length) { max_length = length; max_index = i; } } private->label_max_strlen = max_length; layout = gtk_widget_create_pango_layout (seis_view_gl, (const gchar*)g_ptr_array_index (private->str_values, max_index)); pango_layout_set_font_description (layout, private->font_desc); pango_layout_get_pixel_size (layout, &private->text_width_screen, &private->text_height_screen); g_object_unref (layout); } G_SEIS_VIEW_AXIS (axis)->size_pixels = private->text_height_screen * 1.775; } private->redisplay = TRUE; if (private->rendering_mutex) g_mutex_unlock (private->rendering_mutex);}enum { PROP_0, PROP_VALUES, PROP_STR_VALUES, PROP_FORMAT, PROP_PRECISION, PROP_FONT, PROP_FG_COLOR, PROP_BG_COLOR};static void g_seis_view_axis_traces_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { GSeisViewAxisTraces *self = G_SEIS_VIEW_AXIS_TRACES (object); GSeisViewAxisTracesPrivate *private = G_SEIS_VIEW_AXIS_TRACES_GET_PRIVATE (self); switch (prop_id) { case PROP_VALUES: g_seis_view_axis_traces_set_values (self, private->format, (GArray*)g_value_get_pointer (value)); break; case PROP_STR_VALUES: g_seis_view_axis_traces_set_str_values (self, (GPtrArray*)g_value_get_pointer (value)); break; case PROP_FORMAT: private->format = g_value_get_enum (value); g_object_notify (object, "format"); break; case PROP_PRECISION: g_seis_view_axis_traces_set_precision (self, g_value_get_uchar (value)); break; case PROP_FONT: g_seis_view_axis_traces_set_font (self, g_value_get_string (value)); break; case PROP_FG_COLOR: g_seis_view_axis_traces_set_fg_color (self, (GSeisColor*)g_value_get_boxed (value)); break; case PROP_BG_COLOR: g_seis_view_axis_traces_set_bg_color (self, (GSeisColor*)g_value_get_boxed (value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; }}static void g_seis_view_axis_traces_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { GSeisViewAxisTraces *self = G_SEIS_VIEW_AXIS_TRACES (object); GSeisViewAxisTracesPrivate *private = G_SEIS_VIEW_AXIS_TRACES_GET_PRIVATE (self); switch (prop_id) { case PROP_VALUES: g_value_set_pointer (value, private->values); case PROP_STR_VALUES: g_value_set_pointer (value, private->str_values); case PROP_FORMAT: g_value_set_enum (value, private->format); break; case PROP_PRECISION: g_value_set_uchar (value, private->precision); break; case PROP_FONT: g_value_set_string (value, private->font_name); break; case PROP_FG_COLOR: g_value_set_boxed (value, &private->fg_color); break; case PROP_BG_COLOR: g_value_set_boxed (value, &private->bg_color); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; }}static GType g_seis_view_axis_traces_format_get_type (void) { static GType etype = 0; if (etype == 0) { static const GEnumValue values[] = { { G_SEIS_VIEW_AXIS_TRACES_INTEGER, "G_SEIS_VIEW_AXIS_TRACES_INTEGER", "integer" }, { G_SEIS_VIEW_AXIS_TRACES_FLOAT, "G_SEIS_VIEW_AXIS_TRACES_FLOAT", "float" }, { 0, NULL, NULL } }; etype = g_enum_register_static ("GSeisViewAxisTracesFormat", values); } return etype;}static void g_seis_view_axis_traces_init (GSeisViewAxisTraces *self) { GSeisViewAxisTracesPrivate *private = G_SEIS_VIEW_AXIS_TRACES_GET_PRIVATE (self); private->format = G_SEIS_VIEW_AXIS_TRACES_FLOAT; private->label_max_strlen = 0; private->precision = 2; private->values = NULL; private->fg_color.red = G_MAXUINT16; private->fg_color.green = G_MAXUINT16; private->fg_color.blue = G_MAXUINT16; private->bg_color.red = 0; private->bg_color.green = 0; private->bg_color.blue = 0; private->font_name = NULL; private->font_list_base = 0; private->font_list_start = 32; private->font_list_end = 96; private->display_list_base = 0; private->font_desc = NULL; private->text_width_screen = 0; private->text_height_screen = 0; private->rebuild_font = TRUE; private->redisplay = TRUE; (G_SEIS_VIEW_AXIS (self))->type = G_SEIS_VIEW_AXIS_TOP; (G_SEIS_VIEW_AXIS (self))->size_pixels = 35; private->is_threaded = FALSE; private->rendering_mutex = NULL;#ifdef DEBUG g_print ("<GSeisViewAxisTraces is inited>\n");#endif}static void g_seis_view_axis_traces_finalize (GObject *object) { GSeisViewAxisTracesPrivate *private = G_SEIS_VIEW_AXIS_TRACES_GET_PRIVATE (G_SEIS_VIEW_AXIS_TRACES (object)); if (private->font_name) g_free (private->font_name); if (private->font_desc) pango_font_description_free (private->font_desc); if (private->values) g_array_free (private->values, TRUE); if (private->rendering_mutex) g_mutex_free (private->rendering_mutex);#ifdef DEBUG g_print ("<GSeisViewAxisTraces is finalized>\n");#endif if (G_OBJECT_CLASS (g_seis_view_axis_traces_parent_class)->finalize) G_OBJECT_CLASS (g_seis_view_axis_traces_parent_class)->finalize (object);}static void g_seis_view_axis_traces_class_init (GSeisViewAxisTracesClass *klass) { GObjectClass *gobject_class = G_OBJECT_CLASS (klass); GSeisViewAxisClass *axis_class = G_SEIS_VIEW_AXIS_CLASS (klass); gobject_class->finalize = g_seis_view_axis_traces_finalize; gobject_class->set_property = g_seis_view_axis_traces_set_property; gobject_class->get_property = g_seis_view_axis_traces_get_property; g_type_class_add_private (klass, sizeof (GSeisViewAxisTracesPrivate)); axis_class->view_attach_notify = g_seis_view_axis_traces_attach_notify; axis_class->view_detach_notify = g_seis_view_axis_traces_detach_notify; axis_class->view_data_viewport_change = g_seis_view_axis_traces_data_viewport_change; axis_class->view_redraw_event = g_seis_view_axis_traces_redraw_event; axis_class->view_resize_event = g_seis_view_axis_traces_resize_event; axis_class->axis_reshape = g_seis_view_axis_traces_reshape; g_object_class_install_property (gobject_class, PROP_VALUES, g_param_spec_pointer ("values", "Values", "Labels in integer/float format", G_PARAM_READWRITE)); g_object_class_install_property (gobject_class, PROP_STR_VALUES, g_param_spec_pointer ("str_values", "StrValues", "Labels in string format", G_PARAM_READWRITE)); g_object_class_install_property (gobject_class, PROP_FORMAT, g_param_spec_enum ("format", "Format", "Tick labels format", g_seis_view_axis_traces_format_get_type (), G_SEIS_VIEW_AXIS_TRACES_FLOAT, G_PARAM_READWRITE)); g_object_class_install_property (gobject_class, PROP_PRECISION, g_param_spec_uchar ("precision", "Precision", "Tick labels precision (number of digits in fractinal part)", 0, 6, 2, G_PARAM_READWRITE)); g_object_class_install_property (gobject_class, PROP_FONT, g_param_spec_string ("font", "Font", "Font to use in labels",#ifdef WIN32 "Tahoma 10",#else "Helvetica 10",#endif G_PARAM_READWRITE)); g_object_class_install_property (gobject_class, PROP_FG_COLOR, g_param_spec_boxed ("fg_color", "ForegroundColor", "Foreground color of the axis", G_TYPE_SEIS_COLOR, G_PARAM_READWRITE)); g_object_class_install_property (gobject_class, PROP_BG_COLOR, g_param_spec_boxed ("bg_color", "BackgroundColor", "Background color of the axis", G_TYPE_SEIS_COLOR, G_PARAM_READWRITE));#ifdef DEBUG g_print ("<GSeisViewAxisTraces class is inited>\n");#endif}GSeisViewAxisTraces* g_seis_view_axis_traces_new (void) { return g_object_new (G_SEIS_TYPE_VIEW_AXIS_TRACES, NULL);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -