static gboolean gtk_source_map_draw (GtkWidget *widget, cairo_t *cr) { GtkSourceMap *map = GTK_SOURCE_MAP (widget); GtkSourceMapPrivate *priv; GtkStyleContext *style_context; priv = gtk_source_map_get_instance_private (map); if (GTK_WIDGET_CLASS (gtk_source_map_parent_class)->draw (widget, cr)) { return TRUE; } style_context = gtk_widget_get_style_context (widget); gtk_style_context_save (style_context); gtk_style_context_add_class (style_context, "scrubber"); gtk_render_background (style_context, cr, priv->scrubber_area.x, priv->scrubber_area.y, priv->scrubber_area.width, priv->scrubber_area.height); gtk_style_context_restore (style_context); return FALSE; }
static void gtk_source_map_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { GtkSourceMap *map = GTK_SOURCE_MAP (object); GtkSourceMapPrivate *priv; priv = gtk_source_map_get_instance_private (map); switch (prop_id) { case PROP_FONT_DESC: g_value_set_boxed (value, priv->font_desc); break; case PROP_VIEW: g_value_set_object (value, gtk_source_map_get_view (map)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } }
static void gtk_source_map_get_preferred_width (GtkWidget *widget, gint *mininum_width, gint *natural_width) { GtkSourceMap *map = GTK_SOURCE_MAP (widget); GtkSourceMapPrivate *priv; PangoLayout *layout; gint height; gint width; priv = gtk_source_map_get_instance_private (map); if (priv->font_desc == NULL) { *mininum_width = *natural_width = DEFAULT_WIDTH; return; } /* * FIXME: * * This seems like the type of thing we should calculate when * rebuilding our CSS since it gets used a bunch and changes * very little. */ layout = gtk_widget_create_pango_layout (GTK_WIDGET (priv->child_view), "X"); pango_layout_get_pixel_size (layout, &width, &height); g_object_unref (layout); width *= gtk_source_view_get_right_margin_position (priv->view); *mininum_width = *natural_width = width; }
static void gtk_source_map_size_allocate (GtkWidget *widget, GtkAllocation *alloc) { GtkSourceMap *map = GTK_SOURCE_MAP (widget); GTK_WIDGET_CLASS (gtk_source_map_parent_class)->size_allocate (widget, alloc); update_scrubber_position (map); }
static void ide_source_map__view_changed (IdeSourceMap *self, GParamSpec *psepct, gpointer data) { GtkSourceView *view; g_return_if_fail (IDE_IS_SOURCE_MAP (self)); view = gtk_source_map_get_view (GTK_SOURCE_MAP (self)); g_object_bind_property_full (view, "font-desc", self, "font-desc", G_BINDING_SYNC_CREATE, shrink_font, NULL, NULL, NULL); dzl_signal_group_set_target (self->view_signals, view); }
static void gtk_source_map_destroy (GtkWidget *widget) { GtkSourceMap *map = GTK_SOURCE_MAP (widget); GtkSourceMapPrivate *priv; priv = gtk_source_map_get_instance_private (map); disconnect_buffer (map); disconnect_view (map); g_clear_object (&priv->css_provider); g_clear_pointer (&priv->font_desc, pango_font_description_free); GTK_WIDGET_CLASS (gtk_source_map_parent_class)->destroy (widget); }
static void gtk_source_map_get_preferred_height (GtkWidget *widget, gint *minimum_height, gint *natural_height) { GtkSourceMap *map = GTK_SOURCE_MAP (widget); GtkSourceMapPrivate *priv; priv = gtk_source_map_get_instance_private (map); if (priv->view == NULL) { *minimum_height = *natural_height = 0; return; } gtk_widget_get_preferred_height (GTK_WIDGET (priv->child_view), minimum_height, natural_height); *minimum_height = 0; }
static void gtk_source_map_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { GtkSourceMap *map = GTK_SOURCE_MAP (object); switch (prop_id) { case PROP_VIEW: gtk_source_map_set_view (map, g_value_get_object (value)); break; case PROP_FONT_DESC: gtk_source_map_set_font_desc (map, g_value_get_boxed (value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } }