mirror of
https://github.com/varun-r-mallya/sysprof.git
synced 2026-02-11 07:30:54 +00:00
libsysprof-gtk: move flip-y to SysprofXYLayer
So that we can use it to perform value coordinate flipping on multiple charts and graphs.
This commit is contained in:
@ -53,7 +53,6 @@ sysprof_column_layer_snapshot (GtkWidget *widget,
|
|||||||
GtkSnapshot *snapshot)
|
GtkSnapshot *snapshot)
|
||||||
{
|
{
|
||||||
SysprofColumnLayer *self = (SysprofColumnLayer *)widget;
|
SysprofColumnLayer *self = (SysprofColumnLayer *)widget;
|
||||||
graphene_matrix_t flip_y;
|
|
||||||
const float *x_values;
|
const float *x_values;
|
||||||
const float *y_values;
|
const float *y_values;
|
||||||
const GdkRGBA *color;
|
const GdkRGBA *color;
|
||||||
@ -79,8 +78,13 @@ sysprof_column_layer_snapshot (GtkWidget *widget,
|
|||||||
|
|
||||||
gtk_snapshot_save (snapshot);
|
gtk_snapshot_save (snapshot);
|
||||||
|
|
||||||
graphene_matrix_init_from_2d (&flip_y, 1, 0, 0, -1, 0, height);
|
if (!sysprof_xy_layer_get_flip_y (SYSPROF_XY_LAYER (self)))
|
||||||
gtk_snapshot_transform_matrix (snapshot, &flip_y);
|
{
|
||||||
|
graphene_matrix_t flip_y;
|
||||||
|
|
||||||
|
graphene_matrix_init_from_2d (&flip_y, 1, 0, 0, -1, 0, height);
|
||||||
|
gtk_snapshot_transform_matrix (snapshot, &flip_y);
|
||||||
|
}
|
||||||
|
|
||||||
for (guint i = 0; i < n_values; i++)
|
for (guint i = 0; i < n_values; i++)
|
||||||
{
|
{
|
||||||
@ -106,6 +110,8 @@ sysprof_column_layer_get_index_at_coord (SysprofColumnLayer *self,
|
|||||||
graphene_point_t point;
|
graphene_point_t point;
|
||||||
const float *x_values;
|
const float *x_values;
|
||||||
const float *y_values;
|
const float *y_values;
|
||||||
|
gboolean flip_y;
|
||||||
|
guint best = GTK_INVALID_LIST_POSITION;
|
||||||
guint n_values;
|
guint n_values;
|
||||||
int width;
|
int width;
|
||||||
int height;
|
int height;
|
||||||
@ -114,6 +120,7 @@ sysprof_column_layer_get_index_at_coord (SysprofColumnLayer *self,
|
|||||||
|
|
||||||
width = gtk_widget_get_width (GTK_WIDGET (self));
|
width = gtk_widget_get_width (GTK_WIDGET (self));
|
||||||
height = gtk_widget_get_height (GTK_WIDGET (self));
|
height = gtk_widget_get_height (GTK_WIDGET (self));
|
||||||
|
flip_y = sysprof_xy_layer_get_flip_y (SYSPROF_XY_LAYER (self));
|
||||||
|
|
||||||
_sysprof_xy_layer_get_xy (SYSPROF_XY_LAYER (self), &x_values, &y_values, &n_values);
|
_sysprof_xy_layer_get_xy (SYSPROF_XY_LAYER (self), &x_values, &y_values, &n_values);
|
||||||
|
|
||||||
@ -124,7 +131,18 @@ sysprof_column_layer_get_index_at_coord (SysprofColumnLayer *self,
|
|||||||
|
|
||||||
for (guint i = 0; i < n_values; i++)
|
for (guint i = 0; i < n_values; i++)
|
||||||
{
|
{
|
||||||
graphene_rect_t rect = GRAPHENE_RECT_INIT (x_values[i]*width, height, 1, -(y_values[i]*height));
|
graphene_rect_t rect;
|
||||||
|
|
||||||
|
if (flip_y)
|
||||||
|
rect = GRAPHENE_RECT_INIT (x_values[i]*width,
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
y_values[i]*height);
|
||||||
|
else
|
||||||
|
rect = GRAPHENE_RECT_INIT (x_values[i]*width,
|
||||||
|
height - y_values[i]*height,
|
||||||
|
1,
|
||||||
|
y_values[i]*height);
|
||||||
|
|
||||||
if (graphene_rect_contains_point (&rect, &point))
|
if (graphene_rect_contains_point (&rect, &point))
|
||||||
{
|
{
|
||||||
@ -133,9 +151,18 @@ sysprof_column_layer_get_index_at_coord (SysprofColumnLayer *self,
|
|||||||
|
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (rect.origin.x <= x &&
|
||||||
|
rect.origin.x + rect.size.width >= x)
|
||||||
|
{
|
||||||
|
if (area != NULL)
|
||||||
|
*area = rect;
|
||||||
|
|
||||||
|
best = i;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return GTK_INVALID_LIST_POSITION;
|
return best;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|||||||
@ -38,7 +38,6 @@ struct _SysprofLineLayer
|
|||||||
guint color_set : 1;
|
guint color_set : 1;
|
||||||
guint dashed : 1;
|
guint dashed : 1;
|
||||||
guint fill : 1;
|
guint fill : 1;
|
||||||
guint flip_y : 1;
|
|
||||||
guint spline : 1;
|
guint spline : 1;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -54,7 +53,6 @@ enum {
|
|||||||
PROP_COLOR,
|
PROP_COLOR,
|
||||||
PROP_DASHED,
|
PROP_DASHED,
|
||||||
PROP_FILL,
|
PROP_FILL,
|
||||||
PROP_FLIP_Y,
|
|
||||||
PROP_SPLINE,
|
PROP_SPLINE,
|
||||||
N_PROPS
|
N_PROPS
|
||||||
};
|
};
|
||||||
@ -104,8 +102,7 @@ sysprof_line_layer_snapshot (GtkWidget *widget,
|
|||||||
|
|
||||||
cairo_set_line_width (cr, 1);
|
cairo_set_line_width (cr, 1);
|
||||||
|
|
||||||
if (!self->flip_y)
|
cairo_set_matrix (cr, &(cairo_matrix_t) {1, 0, 0, -1, 0, height});
|
||||||
cairo_set_matrix (cr, &(cairo_matrix_t) {1, 0, 0, -1, 0, height});
|
|
||||||
|
|
||||||
first_x = last_x = floor (x_values[0] * width);
|
first_x = last_x = floor (x_values[0] * width);
|
||||||
first_y = last_y = floor (y_values[0] * height);
|
first_y = last_y = floor (y_values[0] * height);
|
||||||
@ -246,9 +243,6 @@ sysprof_line_layer_snapshot_motion (SysprofChartLayer *layer,
|
|||||||
graphene_rect_t area;
|
graphene_rect_t area;
|
||||||
cairo_t *cr;
|
cairo_t *cr;
|
||||||
|
|
||||||
if (self->flip_y)
|
|
||||||
best_y = height - best_y;
|
|
||||||
|
|
||||||
area = GRAPHENE_RECT_INIT (best_x - half_size, best_y - half_size, size, size);
|
area = GRAPHENE_RECT_INIT (best_x - half_size, best_y - half_size, size, size);
|
||||||
cr = gtk_snapshot_append_cairo (snapshot, &area);
|
cr = gtk_snapshot_append_cairo (snapshot, &area);
|
||||||
|
|
||||||
@ -289,10 +283,6 @@ sysprof_line_layer_get_property (GObject *object,
|
|||||||
g_value_set_boolean (value, sysprof_line_layer_get_fill (self));
|
g_value_set_boolean (value, sysprof_line_layer_get_fill (self));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PROP_FLIP_Y:
|
|
||||||
g_value_set_boolean (value, sysprof_line_layer_get_flip_y (self));
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PROP_SPLINE:
|
case PROP_SPLINE:
|
||||||
g_value_set_boolean (value, sysprof_line_layer_get_spline (self));
|
g_value_set_boolean (value, sysprof_line_layer_get_spline (self));
|
||||||
break;
|
break;
|
||||||
@ -324,10 +314,6 @@ sysprof_line_layer_set_property (GObject *object,
|
|||||||
sysprof_line_layer_set_fill (self, g_value_get_boolean (value));
|
sysprof_line_layer_set_fill (self, g_value_get_boolean (value));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PROP_FLIP_Y:
|
|
||||||
sysprof_line_layer_set_flip_y (self, g_value_get_boolean (value));
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PROP_SPLINE:
|
case PROP_SPLINE:
|
||||||
sysprof_line_layer_set_spline (self, g_value_get_boolean (value));
|
sysprof_line_layer_set_spline (self, g_value_get_boolean (value));
|
||||||
break;
|
break;
|
||||||
@ -366,11 +352,6 @@ sysprof_line_layer_class_init (SysprofLineLayerClass *klass)
|
|||||||
FALSE,
|
FALSE,
|
||||||
(G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS));
|
(G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS));
|
||||||
|
|
||||||
properties [PROP_FLIP_Y] =
|
|
||||||
g_param_spec_boolean ("flip-y", NULL, NULL,
|
|
||||||
FALSE,
|
|
||||||
(G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS));
|
|
||||||
|
|
||||||
properties [PROP_SPLINE] =
|
properties [PROP_SPLINE] =
|
||||||
g_param_spec_boolean ("spline", NULL, NULL,
|
g_param_spec_boolean ("spline", NULL, NULL,
|
||||||
FALSE,
|
FALSE,
|
||||||
@ -461,30 +442,6 @@ sysprof_line_layer_set_fill (SysprofLineLayer *self,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
gboolean
|
|
||||||
sysprof_line_layer_get_flip_y (SysprofLineLayer *self)
|
|
||||||
{
|
|
||||||
g_return_val_if_fail (SYSPROF_IS_LINE_LAYER (self), FALSE);
|
|
||||||
|
|
||||||
return self->flip_y;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
sysprof_line_layer_set_flip_y (SysprofLineLayer *self,
|
|
||||||
gboolean flip_y)
|
|
||||||
{
|
|
||||||
g_return_if_fail (SYSPROF_IS_LINE_LAYER (self));
|
|
||||||
|
|
||||||
flip_y = !!flip_y;
|
|
||||||
|
|
||||||
if (flip_y != self->flip_y)
|
|
||||||
{
|
|
||||||
self->flip_y = flip_y;
|
|
||||||
g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_FLIP_Y]);
|
|
||||||
gtk_widget_queue_draw (GTK_WIDGET (self));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
gboolean
|
gboolean
|
||||||
sysprof_line_layer_get_spline (SysprofLineLayer *self)
|
sysprof_line_layer_get_spline (SysprofLineLayer *self)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -37,6 +37,8 @@ struct _SysprofXYLayer
|
|||||||
|
|
||||||
SysprofNormalizedSeries *normal_x;
|
SysprofNormalizedSeries *normal_x;
|
||||||
SysprofNormalizedSeries *normal_y;
|
SysprofNormalizedSeries *normal_y;
|
||||||
|
|
||||||
|
guint flip_y : 1;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _SysprofXYLayerClass
|
struct _SysprofXYLayerClass
|
||||||
|
|||||||
@ -25,11 +25,12 @@
|
|||||||
|
|
||||||
enum {
|
enum {
|
||||||
PROP_0,
|
PROP_0,
|
||||||
|
PROP_FLIP_Y,
|
||||||
|
PROP_NORMALIZED_X,
|
||||||
|
PROP_NORMALIZED_Y,
|
||||||
PROP_SERIES,
|
PROP_SERIES,
|
||||||
PROP_X_AXIS,
|
PROP_X_AXIS,
|
||||||
PROP_Y_AXIS,
|
PROP_Y_AXIS,
|
||||||
PROP_NORMALIZED_X,
|
|
||||||
PROP_NORMALIZED_Y,
|
|
||||||
N_PROPS
|
N_PROPS
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -84,6 +85,10 @@ sysprof_xy_layer_get_property (GObject *object,
|
|||||||
g_value_set_object (value, self->normal_y);
|
g_value_set_object (value, self->normal_y);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case PROP_FLIP_Y:
|
||||||
|
g_value_set_boolean (value, sysprof_xy_layer_get_flip_y (self));
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||||
}
|
}
|
||||||
@ -111,6 +116,10 @@ sysprof_xy_layer_set_property (GObject *object,
|
|||||||
sysprof_xy_layer_set_y_axis (self, g_value_get_object (value));
|
sysprof_xy_layer_set_y_axis (self, g_value_get_object (value));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case PROP_FLIP_Y:
|
||||||
|
sysprof_xy_layer_set_flip_y (self, g_value_get_boolean (value));
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||||
}
|
}
|
||||||
@ -150,6 +159,11 @@ sysprof_xy_layer_class_init (SysprofXYLayerClass *klass)
|
|||||||
SYSPROF_TYPE_NORMALIZED_SERIES,
|
SYSPROF_TYPE_NORMALIZED_SERIES,
|
||||||
(G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
|
(G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
|
||||||
|
|
||||||
|
properties [PROP_FLIP_Y] =
|
||||||
|
g_param_spec_boolean ("flip-y", NULL, NULL,
|
||||||
|
FALSE,
|
||||||
|
(G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
||||||
|
|
||||||
g_object_class_install_properties (object_class, N_PROPS, properties);
|
g_object_class_install_properties (object_class, N_PROPS, properties);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -295,3 +309,28 @@ sysprof_xy_layer_set_y_axis (SysprofXYLayer *self,
|
|||||||
sysprof_normalized_series_set_axis (self->normal_y, y_axis);
|
sysprof_normalized_series_set_axis (self->normal_y, y_axis);
|
||||||
g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_Y_AXIS]);
|
g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_Y_AXIS]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
gboolean
|
||||||
|
sysprof_xy_layer_get_flip_y (SysprofXYLayer *self)
|
||||||
|
{
|
||||||
|
g_return_val_if_fail (SYSPROF_IS_XY_LAYER (self), FALSE);
|
||||||
|
|
||||||
|
return self->flip_y;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
sysprof_xy_layer_set_flip_y (SysprofXYLayer *self,
|
||||||
|
gboolean flip_y)
|
||||||
|
{
|
||||||
|
g_return_if_fail (SYSPROF_IS_XY_LAYER (self));
|
||||||
|
|
||||||
|
flip_y = !!flip_y;
|
||||||
|
|
||||||
|
if (flip_y != self->flip_y)
|
||||||
|
{
|
||||||
|
self->flip_y = flip_y;
|
||||||
|
sysprof_normalized_series_set_inverted (self->normal_y, flip_y);
|
||||||
|
g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_FLIP_Y]);
|
||||||
|
gtk_widget_queue_draw (GTK_WIDGET (self));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@ -36,6 +36,11 @@ G_DECLARE_FINAL_TYPE (SysprofXYLayer, sysprof_xy_layer, SYSPROF, XY_LAYER, Syspr
|
|||||||
SYSPROF_AVAILABLE_IN_ALL
|
SYSPROF_AVAILABLE_IN_ALL
|
||||||
SysprofChartLayer *sysprof_xy_layer_new (void);
|
SysprofChartLayer *sysprof_xy_layer_new (void);
|
||||||
SYSPROF_AVAILABLE_IN_ALL
|
SYSPROF_AVAILABLE_IN_ALL
|
||||||
|
gboolean sysprof_xy_layer_get_flip_y (SysprofXYLayer *self);
|
||||||
|
SYSPROF_AVAILABLE_IN_ALL
|
||||||
|
void sysprof_xy_layer_set_flip_y (SysprofXYLayer *self,
|
||||||
|
gboolean flip_y);
|
||||||
|
SYSPROF_AVAILABLE_IN_ALL
|
||||||
SysprofXYSeries *sysprof_xy_layer_get_series (SysprofXYLayer *self);
|
SysprofXYSeries *sysprof_xy_layer_get_series (SysprofXYLayer *self);
|
||||||
SYSPROF_AVAILABLE_IN_ALL
|
SYSPROF_AVAILABLE_IN_ALL
|
||||||
void sysprof_xy_layer_set_series (SysprofXYLayer *self,
|
void sysprof_xy_layer_set_series (SysprofXYLayer *self,
|
||||||
|
|||||||
Reference in New Issue
Block a user