Ejemplo n.º 1
0
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);
    }
}
Ejemplo n.º 2
0
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;
}
Ejemplo n.º 3
0
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;
    }
}
Ejemplo n.º 4
0
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);
}