mirror of
https://github.com/varun-r-mallya/sysprof.git
synced 2025-12-31 20:36:25 +00:00
rectangles: cycle colors
We will still probably want something smarter here, but this gets things to be more distinguished than black.
This commit is contained in:
@ -19,6 +19,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "util/rectangles.h"
|
#include "util/rectangles.h"
|
||||||
|
#include "util/sp-color-cycle.h"
|
||||||
#include "visualizers/sp-visualizer-row.h"
|
#include "visualizers/sp-visualizer-row.h"
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
@ -35,6 +36,8 @@ struct _Rectangles
|
|||||||
GStringChunk *strings;
|
GStringChunk *strings;
|
||||||
GArray *rectangles;
|
GArray *rectangles;
|
||||||
GHashTable *y_indexes;
|
GHashTable *y_indexes;
|
||||||
|
GHashTable *colors;
|
||||||
|
SpColorCycle *cycle;
|
||||||
gint64 begin_time;
|
gint64 begin_time;
|
||||||
gint64 end_time;
|
gint64 end_time;
|
||||||
guint sorted : 1;
|
guint sorted : 1;
|
||||||
@ -50,6 +53,8 @@ rectangles_new (gint64 begin_time,
|
|||||||
self->strings = g_string_chunk_new (4096);
|
self->strings = g_string_chunk_new (4096);
|
||||||
self->rectangles = g_array_new (FALSE, FALSE, sizeof (Rectangle));
|
self->rectangles = g_array_new (FALSE, FALSE, sizeof (Rectangle));
|
||||||
self->y_indexes = g_hash_table_new (g_str_hash, g_str_equal);
|
self->y_indexes = g_hash_table_new (g_str_hash, g_str_equal);
|
||||||
|
self->colors = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, g_free);
|
||||||
|
self->cycle = sp_color_cycle_new ();
|
||||||
self->begin_time = begin_time;
|
self->begin_time = begin_time;
|
||||||
self->end_time = end_time;
|
self->end_time = end_time;
|
||||||
self->sorted = FALSE;
|
self->sorted = FALSE;
|
||||||
@ -90,6 +95,9 @@ rectangles_free (Rectangles *self)
|
|||||||
{
|
{
|
||||||
g_string_chunk_free (self->strings);
|
g_string_chunk_free (self->strings);
|
||||||
g_array_unref (self->rectangles);
|
g_array_unref (self->rectangles);
|
||||||
|
g_hash_table_unref (self->colors);
|
||||||
|
g_hash_table_unref (self->y_indexes);
|
||||||
|
sp_color_cycle_unref (self->cycle);
|
||||||
g_slice_free (Rectangles, self);
|
g_slice_free (Rectangles, self);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -126,7 +134,13 @@ rectangles_sort (Rectangles *self)
|
|||||||
const Rectangle *rect = &g_array_index (self->rectangles, Rectangle, i);
|
const Rectangle *rect = &g_array_index (self->rectangles, Rectangle, i);
|
||||||
|
|
||||||
if (!g_hash_table_contains (self->y_indexes, rect->name))
|
if (!g_hash_table_contains (self->y_indexes, rect->name))
|
||||||
g_hash_table_insert (self->y_indexes, (gchar *)rect->name, GUINT_TO_POINTER (++sequence));
|
{
|
||||||
|
GdkRGBA rgba;
|
||||||
|
|
||||||
|
sp_color_cycle_next (self->cycle, &rgba);
|
||||||
|
g_hash_table_insert (self->y_indexes, (gchar *)rect->name, GUINT_TO_POINTER (++sequence));
|
||||||
|
g_hash_table_insert (self->colors, (gchar *)rect->name, g_memdup (&rgba, sizeof rgba));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
self->sorted = TRUE;
|
self->sorted = TRUE;
|
||||||
@ -162,6 +176,7 @@ rectangles_draw (Rectangles *self,
|
|||||||
SpVisualizerRowRelativePoint in_points[2];
|
SpVisualizerRowRelativePoint in_points[2];
|
||||||
SpVisualizerRowAbsolutePoint out_points[2];
|
SpVisualizerRowAbsolutePoint out_points[2];
|
||||||
GdkRectangle r;
|
GdkRectangle r;
|
||||||
|
GdkRGBA *rgba;
|
||||||
|
|
||||||
g_assert (y_index > 0);
|
g_assert (y_index > 0);
|
||||||
g_assert (y_index <= n_rows);
|
g_assert (y_index <= n_rows);
|
||||||
@ -186,11 +201,12 @@ rectangles_draw (Rectangles *self,
|
|||||||
|
|
||||||
rect->area = r;
|
rect->area = r;
|
||||||
|
|
||||||
gdk_cairo_rectangle (cr, &r);
|
rgba = g_hash_table_lookup (self->colors, rect->name);
|
||||||
}
|
|
||||||
|
|
||||||
cairo_set_source_rgb (cr, 0, 0, 0);
|
gdk_cairo_rectangle (cr, &r);
|
||||||
cairo_fill (cr);
|
gdk_cairo_set_source_rgba (cr, rgba);
|
||||||
|
cairo_fill (cr);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|||||||
Reference in New Issue
Block a user