📄 gtktext.c
字号:
(GtkTextFunction)gtk_text_move_next_line, /* n */ NULL, /* o */ (GtkTextFunction)gtk_text_move_previous_line, /* p */ NULL, /* q */ NULL, /* r */ NULL, /* s */ NULL, /* t */ (GtkTextFunction)gtk_text_delete_line, /* u */ (GtkTextFunction)gtk_editable_paste_clipboard, /* v */ (GtkTextFunction)gtk_text_delete_backward_word, /* w */ (GtkTextFunction)gtk_editable_cut_clipboard, /* x */ NULL, /* y */ NULL, /* z */};static const GtkTextFunction alt_keys[26] ={ NULL, /* a */ (GtkTextFunction)gtk_text_move_backward_word, /* b */ NULL, /* c */ (GtkTextFunction)gtk_text_delete_forward_word, /* d */ NULL, /* e */ (GtkTextFunction)gtk_text_move_forward_word, /* f */ NULL, /* g */ NULL, /* h */ NULL, /* i */ NULL, /* j */ NULL, /* k */ NULL, /* l */ NULL, /* m */ NULL, /* n */ NULL, /* o */ NULL, /* p */ NULL, /* q */ NULL, /* r */ NULL, /* s */ NULL, /* t */ NULL, /* u */ NULL, /* v */ NULL, /* w */ NULL, /* x */ NULL, /* y */ NULL, /* z */};/**********************************************************************//* Widget Crap *//**********************************************************************/GtkTypegtk_text_get_type (void){ static GtkType text_type = 0; if (!text_type) { static const GtkTypeInfo text_info = { "GtkText", sizeof (GtkText), sizeof (GtkTextClass), (GtkClassInitFunc) gtk_text_class_init, (GtkObjectInitFunc) gtk_text_init, /* reserved_1 */ NULL, /* reserved_2 */ NULL, (GtkClassInitFunc) NULL, }; text_type = gtk_type_unique (GTK_TYPE_EDITABLE, &text_info); } return text_type;}static voidgtk_text_class_init (GtkTextClass *class){ GtkObjectClass *object_class; GtkWidgetClass *widget_class; GtkEditableClass *editable_class; object_class = (GtkObjectClass*) class; widget_class = (GtkWidgetClass*) class; editable_class = (GtkEditableClass*) class; parent_class = gtk_type_class (GTK_TYPE_EDITABLE); gtk_object_add_arg_type ("GtkText::hadjustment", GTK_TYPE_ADJUSTMENT, GTK_ARG_READWRITE | GTK_ARG_CONSTRUCT, ARG_HADJUSTMENT); gtk_object_add_arg_type ("GtkText::vadjustment", GTK_TYPE_ADJUSTMENT, GTK_ARG_READWRITE | GTK_ARG_CONSTRUCT, ARG_VADJUSTMENT); gtk_object_add_arg_type ("GtkText::line_wrap", GTK_TYPE_BOOL, GTK_ARG_READWRITE, ARG_LINE_WRAP); gtk_object_add_arg_type ("GtkText::word_wrap", GTK_TYPE_BOOL, GTK_ARG_READWRITE, ARG_WORD_WRAP); object_class->set_arg = gtk_text_set_arg; object_class->get_arg = gtk_text_get_arg; object_class->destroy = gtk_text_destroy; object_class->finalize = gtk_text_finalize; widget_class->realize = gtk_text_realize; widget_class->unrealize = gtk_text_unrealize; widget_class->style_set = gtk_text_style_set; widget_class->draw_focus = gtk_text_draw_focus; widget_class->size_request = gtk_text_size_request; widget_class->size_allocate = gtk_text_size_allocate; widget_class->draw = gtk_text_draw; widget_class->expose_event = gtk_text_expose; widget_class->button_press_event = gtk_text_button_press; widget_class->button_release_event = gtk_text_button_release; widget_class->motion_notify_event = gtk_text_motion_notify; widget_class->key_press_event = gtk_text_key_press; widget_class->focus_in_event = gtk_text_focus_in; widget_class->focus_out_event = gtk_text_focus_out; widget_class->set_scroll_adjustments_signal = gtk_signal_new ("set_scroll_adjustments", GTK_RUN_LAST, object_class->type, GTK_SIGNAL_OFFSET (GtkTextClass, set_scroll_adjustments), gtk_marshal_NONE__POINTER_POINTER, GTK_TYPE_NONE, 2, GTK_TYPE_ADJUSTMENT, GTK_TYPE_ADJUSTMENT); editable_class->set_editable = gtk_text_real_set_editable; editable_class->insert_text = gtk_text_insert_text; editable_class->delete_text = gtk_text_delete_text; editable_class->move_cursor = gtk_text_move_cursor; editable_class->move_word = gtk_text_move_word; editable_class->move_page = gtk_text_move_page; editable_class->move_to_row = gtk_text_move_to_row; editable_class->move_to_column = gtk_text_move_to_column; editable_class->kill_char = gtk_text_kill_char; editable_class->kill_word = gtk_text_kill_word; editable_class->kill_line = gtk_text_kill_line; editable_class->update_text = gtk_text_update_text; editable_class->get_chars = gtk_text_get_chars; editable_class->set_selection = gtk_text_set_selection; editable_class->set_position = gtk_text_set_position; class->set_scroll_adjustments = gtk_text_set_adjustments;}static voidgtk_text_set_arg (GtkObject *object, GtkArg *arg, guint arg_id){ GtkText *text; text = GTK_TEXT (object); switch (arg_id) { case ARG_HADJUSTMENT: gtk_text_set_adjustments (text, GTK_VALUE_POINTER (*arg), text->vadj); break; case ARG_VADJUSTMENT: gtk_text_set_adjustments (text, text->hadj, GTK_VALUE_POINTER (*arg)); break; case ARG_LINE_WRAP: gtk_text_set_line_wrap (text, GTK_VALUE_BOOL (*arg)); break; case ARG_WORD_WRAP: gtk_text_set_word_wrap (text, GTK_VALUE_BOOL (*arg)); break; default: break; }}static voidgtk_text_get_arg (GtkObject *object, GtkArg *arg, guint arg_id){ GtkText *text; text = GTK_TEXT (object); switch (arg_id) { case ARG_HADJUSTMENT: GTK_VALUE_POINTER (*arg) = text->hadj; break; case ARG_VADJUSTMENT: GTK_VALUE_POINTER (*arg) = text->vadj; break; case ARG_LINE_WRAP: GTK_VALUE_BOOL (*arg) = text->line_wrap; break; case ARG_WORD_WRAP: GTK_VALUE_BOOL (*arg) = text->word_wrap; break; default: arg->type = GTK_TYPE_INVALID; break; }}static voidgtk_text_init (GtkText *text){ GTK_WIDGET_SET_FLAGS (text, GTK_CAN_FOCUS); text->text_area = NULL; text->hadj = NULL; text->vadj = NULL; text->gc = NULL; text->bg_gc = NULL; text->line_wrap_bitmap = NULL; text->line_arrow_bitmap = NULL; text->use_wchar = FALSE; text->text.ch = g_new (guchar, INITIAL_BUFFER_SIZE); text->text_len = INITIAL_BUFFER_SIZE; text->scratch_buffer.ch = NULL; text->scratch_buffer_len = 0; text->freeze_count = 0; if (!params_mem_chunk) params_mem_chunk = g_mem_chunk_new ("LineParams", sizeof (LineParams), 256 * sizeof (LineParams), G_ALLOC_AND_FREE); text->default_tab_width = 4; text->tab_stops = NULL; text->tab_stops = g_list_prepend (text->tab_stops, (void*)8); text->tab_stops = g_list_prepend (text->tab_stops, (void*)8); text->line_start_cache = NULL; text->first_cut_pixels = 0; text->line_wrap = TRUE; text->word_wrap = FALSE; text->timer = 0; text->button = 0; text->current_font = NULL; init_properties (text); GTK_EDITABLE (text)->editable = FALSE; gtk_editable_set_position (GTK_EDITABLE (text), 0);}GtkWidget*gtk_text_new (GtkAdjustment *hadj, GtkAdjustment *vadj){ GtkWidget *text; if (hadj) g_return_val_if_fail (GTK_IS_ADJUSTMENT (hadj), NULL); if (vadj) g_return_val_if_fail (GTK_IS_ADJUSTMENT (vadj), NULL); text = gtk_widget_new (GTK_TYPE_TEXT, "hadjustment", hadj, "vadjustment", vadj, NULL); return text;}voidgtk_text_set_word_wrap (GtkText *text, gint word_wrap){ g_return_if_fail (text != NULL); g_return_if_fail (GTK_IS_TEXT (text)); text->word_wrap = (word_wrap != FALSE); if (GTK_WIDGET_REALIZED (text)) { recompute_geometry (text); gtk_widget_queue_draw (GTK_WIDGET (text)); }}voidgtk_text_set_line_wrap (GtkText *text, gint line_wrap){ g_return_if_fail (text != NULL); g_return_if_fail (GTK_IS_TEXT (text)); text->line_wrap = (line_wrap != FALSE); if (GTK_WIDGET_REALIZED (text)) { recompute_geometry (text); gtk_widget_queue_draw (GTK_WIDGET (text)); }}voidgtk_text_set_editable (GtkText *text, gboolean is_editable){ g_return_if_fail (text != NULL); g_return_if_fail (GTK_IS_TEXT (text)); gtk_editable_set_editable (GTK_EDITABLE (text), is_editable);}static voidgtk_text_real_set_editable (GtkEditable *editable, gboolean is_editable){ GtkText *text; g_return_if_fail (editable != NULL); g_return_if_fail (GTK_IS_TEXT (editable)); text = GTK_TEXT (editable); editable->editable = (is_editable != FALSE); if (GTK_WIDGET_REALIZED (text)) { recompute_geometry (text); gtk_widget_queue_draw (GTK_WIDGET (text)); }}voidgtk_text_set_adjustments (GtkText *text, GtkAdjustment *hadj, GtkAdjustment *vadj){ g_return_if_fail (text != NULL); g_return_if_fail (GTK_IS_TEXT (text)); if (hadj) g_return_if_fail (GTK_IS_ADJUSTMENT (hadj)); else hadj = GTK_ADJUSTMENT (gtk_adjustment_new (0.0, 0.0, 0.0, 0.0, 0.0, 0.0)); if (vadj) g_return_if_fail (GTK_IS_ADJUSTMENT (vadj)); else vadj = GTK_ADJUSTMENT (gtk_adjustment_new (0.0, 0.0, 0.0, 0.0, 0.0, 0.0)); if (text->hadj && (text->hadj != hadj)) { gtk_signal_disconnect_by_data (GTK_OBJECT (text->hadj), text); gtk_object_unref (GTK_OBJECT (text->hadj)); } if (text->vadj && (text->vadj != vadj)) { gtk_signal_disconnect_by_data (GTK_OBJECT (text->vadj), text); gtk_object_unref (GTK_OBJECT (text->vadj)); } if (text->hadj != hadj) { text->hadj = hadj; gtk_object_ref (GTK_OBJECT (text->hadj)); gtk_object_sink (GTK_OBJECT (text->hadj)); gtk_signal_connect (GTK_OBJECT (text->hadj), "changed", (GtkSignalFunc) gtk_text_adjustment, text); gtk_signal_connect (GTK_OBJECT (text->hadj), "value_changed", (GtkSignalFunc) gtk_text_adjustment, text); gtk_signal_connect (GTK_OBJECT (text->hadj), "disconnect", (GtkSignalFunc) gtk_text_disconnect, text); gtk_text_adjustment (hadj, text); } if (text->vadj != vadj) { text->vadj = vadj; gtk_object_ref (GTK_OBJECT (text->vadj)); gtk_object_sink (GTK_OBJECT (text->vadj)); gtk_signal_connect (GTK_OBJECT (text->vadj), "changed", (GtkSignalFunc) gtk_text_adjustment, text); gtk_signal_connect (GTK_OBJECT (text->vadj), "value_changed", (GtkSignalFunc) gtk_text_adjustment, text); gtk_signal_connect (GTK_OBJECT (text->vadj), "disconnect", (GtkSignalFunc) gtk_text_disconnect, text); gtk_text_adjustment (vadj, text); }}voidgtk_text_set_point (GtkText *text, guint index){ g_return_if_fail (text != NULL); g_return_if_fail (GTK_IS_TEXT (text)); g_return_if_fail (index <= TEXT_LENGTH (text)); text->point = find_mark (text, index);}guintgtk_text_get_point (GtkText *text){ g_return_val_if_fail (text != NULL, 0); g_return_val_if_fail (GTK_IS_TEXT (text), 0); return text->point.index;}guintgtk_text_get_length (GtkText *text){ g_return_val_if_fail (text != NULL, 0); g_return_val_if_fail (GTK_IS_TEXT (text), 0); return TEXT_LENGTH (text);}voidgtk_text_freeze (GtkText *text){ g_return_if_fail (text != NULL); g_return_if_fail (GTK_IS_TEXT (text)); text->freeze_count++;}voidgtk_text_thaw (GtkText *text){ g_return_if_fail (text != NULL); g_return_if_fail (GTK_IS_TEXT (text));
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -