void SourceEditor::enableFolding() { if (!foldingEnabled()) { m_foldsData.resize(lineCount()); GtkSourceView *view = gtkSourceView(); GtkSourceGutter *gutter = gtk_source_view_get_gutter(view, GTK_TEXT_WINDOW_LEFT); m_foldsRenderer = gtk_source_gutter_renderer_pixbuf_new(); gtk_source_gutter_insert(gutter, m_foldsRenderer, FOLD_POSITION); g_signal_connect(m_foldsRenderer, "activate", G_CALLBACK(activateFold), this); g_signal_connect(m_foldsRenderer, "query-activatable", G_CALLBACK(queryFoldActivatable), this); g_signal_connect(m_foldsRenderer, "query-data", G_CALLBACK(queryFoldData), this); gtk_source_gutter_renderer_set_alignment_mode( m_foldsRenderer, GTK_SOURCE_GUTTER_RENDERER_ALIGNMENT_MODE_FIRST); gtk_source_gutter_renderer_set_size(m_foldsRenderer, measureLineHeight(view) - 2); } }
static VALUE rg_get_gutter(VALUE self, VALUE window_type) { VALUE gutter; gutter = GOBJ2RVAL(gtk_source_view_get_gutter(_SELF(self), RVAL2GTKTEXTWINDOWTYPE(window_type))); G_CHILD_ADD(self, gutter); return gutter; }
void SourceEditor::disableFolding() { if (foldingEnabled()) { m_foldsData.clear(); GtkSourceView *view = gtkSourceView(); GtkTextBuffer *buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(view)); // Expand all folds. GtkTextIter begin, end; gtk_text_buffer_get_start_iter(buffer, &begin); gtk_text_buffer_get_end_iter(buffer, &end); gtk_text_buffer_remove_tag(buffer, tagInvisible, &begin, &end); GtkSourceGutter *gutter = gtk_source_view_get_gutter(view, GTK_TEXT_WINDOW_LEFT); gtk_source_gutter_remove(gutter, m_foldsRenderer); m_foldsRenderer = NULL; } }
static void ide_source_map_init (IdeSourceMap *self) { GtkSourceGutter *gutter; gtk_widget_add_events (GTK_WIDGET (self), GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK); /* Buffer */ self->buffer_signals = dzl_signal_group_new (IDE_TYPE_BUFFER); dzl_signal_group_connect_object (self->buffer_signals, "line-flags-changed", G_CALLBACK (ide_source_map__buffer_line_flags_changed), self, G_CONNECT_SWAPPED); /* View */ self->view_signals = dzl_signal_group_new (GTK_SOURCE_TYPE_VIEW); dzl_signal_group_connect_object (self->view_signals, "notify::buffer", G_CALLBACK (ide_source_map__view_notify_buffer), self, G_CONNECT_SWAPPED); dzl_signal_group_connect_object (self->view_signals, "enter-notify-event", G_CALLBACK (ide_source_map__enter_notify_event), self, G_CONNECT_SWAPPED); dzl_signal_group_connect_object (self->view_signals, "leave-notify-event", G_CALLBACK (ide_source_map__leave_notify_event), self, G_CONNECT_SWAPPED); dzl_signal_group_connect_object (self->view_signals, "motion-notify-event", G_CALLBACK (ide_source_map__motion_notify_event), self, G_CONNECT_SWAPPED); dzl_signal_group_connect_object (self->view_signals, "scroll-event", G_CALLBACK (ide_source_map__scroll_event), self, G_CONNECT_SWAPPED); g_signal_connect_object (self, "notify::view", G_CALLBACK (ide_source_map__view_changed), self, G_CONNECT_SWAPPED); gutter = gtk_source_view_get_gutter (GTK_SOURCE_VIEW (self), GTK_TEXT_WINDOW_LEFT); self->line_renderer = g_object_new (IDE_TYPE_LINE_CHANGE_GUTTER_RENDERER, "size", 2, "visible", TRUE, NULL); gtk_source_gutter_insert (gutter, self->line_renderer, 0); g_signal_connect_object (self, "enter-notify-event", G_CALLBACK (ide_source_map__enter_notify_event), self, G_CONNECT_SWAPPED); g_signal_connect_object (self, "leave-notify-event", G_CALLBACK (ide_source_map__leave_notify_event), self, G_CONNECT_SWAPPED); g_signal_connect_object (self, "motion-notify-event", G_CALLBACK (ide_source_map__motion_notify_event), self, G_CONNECT_SWAPPED); g_signal_connect_object (self, "scroll-event", G_CALLBACK (ide_source_map__scroll_event), self, G_CONNECT_SWAPPED); }