[gnome-builder/gnome-builder-3-20] realtime-graphs: try harder to not jump when resizing
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-builder/gnome-builder-3-20] realtime-graphs: try harder to not jump when resizing
- Date: Tue, 10 May 2016 10:24:37 +0000 (UTC)
commit cc58268ba486b3a57549b69a4344a6d9e9376c6e
Author: Christian Hergert <chergert redhat com>
Date: Tue May 10 13:23:23 2016 +0300
realtime-graphs: try harder to not jump when resizing
We were resetting our x_offset when resizing the window, so things would
appear to jump backwards. This tries to persist the offset in time and
only apply the alloc.width multiplication when it comes time to render.
This allows us to keep the x_offset between resizes, and therefore endup
on the right offset even when destroying the surface.
contrib/rg/rg-graph.c | 14 ++++++++------
1 files changed, 8 insertions(+), 6 deletions(-)
---
diff --git a/contrib/rg/rg-graph.c b/contrib/rg/rg-graph.c
index 7176d39..fae62f5 100644
--- a/contrib/rg/rg-graph.c
+++ b/contrib/rg/rg-graph.c
@@ -29,7 +29,7 @@ typedef struct
GPtrArray *renderers;
cairo_surface_t *surface;
guint tick_handler;
- gint x_offset;
+ gdouble x_offset;
guint surface_dirty : 1;
} RgGraphPrivate;
@@ -117,7 +117,7 @@ rg_graph_tick_cb (GtkWidget *widget,
gint64 frame_time;
gint64 end_time;
gint64 timespan;
- gint x_offset;
+ gdouble x_offset;
g_assert (RG_IS_GRAPH (self));
@@ -133,7 +133,7 @@ rg_graph_tick_cb (GtkWidget *widget,
frame_time = gdk_frame_clock_get_frame_time (frame_clock);
end_time = rg_table_get_end_time (priv->table);
- x_offset = -((frame_time - end_time) / (gdouble)timespan * alloc.width);
+ x_offset = -((frame_time - end_time) / (gdouble)timespan);
if (x_offset != priv->x_offset)
{
@@ -215,8 +215,6 @@ rg_graph_ensure_surface (RgGraph *self)
}
cairo_destroy (cr);
-
- priv->x_offset = 0;
}
if (priv->tick_handler == 0)
@@ -249,7 +247,7 @@ rg_graph_draw (GtkWidget *widget,
gtk_style_context_restore (style_context);
cairo_save (cr);
- cairo_set_source_surface (cr, priv->surface, priv->x_offset, 0);
+ cairo_set_source_surface (cr, priv->surface, priv->x_offset * alloc.width, 0);
cairo_rectangle (cr, 0, 0, alloc.width, alloc.height);
cairo_fill (cr);
cairo_restore (cr);
@@ -280,9 +278,13 @@ static void
rg_graph__table_changed (RgGraph *self,
RgTable *table)
{
+ RgGraphPrivate *priv = rg_graph_get_instance_private (self);
+
g_assert (RG_IS_GRAPH (self));
g_assert (RG_IS_TABLE (table));
+ priv->x_offset = 0;
+
rg_graph_clear_surface (self);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]