Esempio n. 1
0
gint64
rg_table_get_end_time (RgTable *self)
{
  RgTableIter iter;

  g_return_val_if_fail (RG_IS_TABLE (self), 0);

  if (rg_table_get_iter_last (self, &iter))
    return rg_table_iter_get_timestamp (&iter);

  return g_get_monotonic_time ();
}
Esempio n. 2
0
static void
rg_graph_ensure_surface (RgGraph *self)
{
  RgGraphPrivate *priv = rg_graph_get_instance_private (self);
  GtkAllocation alloc;
  RgTableIter iter;
  gint64 begin_time;
  gint64 end_time;
  gdouble y_begin;
  gdouble y_end;
  cairo_t *cr;
  gsize i;

  g_assert (RG_IS_GRAPH (self));

  gtk_widget_get_allocation (GTK_WIDGET (self), &alloc);

  if (priv->surface == NULL)
    {
      priv->surface_dirty = TRUE;
      priv->surface = gdk_window_create_similar_surface (gtk_widget_get_window (GTK_WIDGET (self)),
                                                         CAIRO_CONTENT_COLOR_ALPHA,
                                                         alloc.width,
                                                         alloc.height);
    }

  if (priv->table == NULL)
    return;

  if (priv->surface_dirty)
    {
      priv->surface_dirty = FALSE;

      cr = cairo_create (priv->surface);

      cairo_save (cr);
      cairo_rectangle (cr, 0, 0, alloc.width, alloc.height);
      cairo_set_operator (cr, CAIRO_OPERATOR_CLEAR);
      cairo_fill (cr);
      cairo_restore (cr);

      g_object_get (priv->table,
                    "value-min", &y_begin,
                    "value-max", &y_end,
                    NULL);

      rg_table_get_iter_last (priv->table, &iter);
      end_time = rg_table_iter_get_timestamp (&iter);
      begin_time = end_time - rg_table_get_timespan (priv->table);

      for (i = 0; i < priv->renderers->len; i++)
        {
          RgRenderer *renderer;

          renderer = g_ptr_array_index (priv->renderers, i);

          cairo_save (cr);
          rg_renderer_render (renderer, priv->table, begin_time, end_time, y_begin, y_end, cr, &alloc);
          cairo_restore (cr);
        }

      cairo_destroy (cr);

      priv->x_offset = 0;
    }

  if (priv->tick_handler == 0)
    priv->tick_handler = gtk_widget_add_tick_callback (GTK_WIDGET (self),
                                                       rg_graph_tick_cb,
                                                       self,
                                                       NULL);
}