#include "graph.h"
static int gfio_server_running;
+static const char *gfio_graph_font;
static void gfio_update_thread_status(char *status_message, double perc);
if (ui->iops_graph)
graph_free(ui->iops_graph);
ui->iops_graph = graph_new(DRAWING_AREA_XDIM / 2.0,
- DRAWING_AREA_YDIM);
+ DRAWING_AREA_YDIM, gfio_graph_font);
graph_title(ui->iops_graph, "IOPS");
graph_x_title(ui->iops_graph, "Time");
graph_y_title(ui->iops_graph, "IOPS");
if (ui->bandwidth_graph)
graph_free(ui->bandwidth_graph);
ui->bandwidth_graph = graph_new(DRAWING_AREA_XDIM / 2.0,
- DRAWING_AREA_YDIM);
+ DRAWING_AREA_YDIM, gfio_graph_font);
graph_title(ui->bandwidth_graph, "Bandwidth");
graph_x_title(ui->bandwidth_graph, "Time");
graph_y_title(ui->bandwidth_graph, "Bandwidth");
static void preferences(GtkWidget *w, gpointer data)
{
- GtkWidget *dialog, *frame, *box, **buttons;
+ GtkWidget *dialog, *frame, *box, **buttons, *vbox, *font;
int i;
dialog = gtk_dialog_new_with_buttons("Preferences",
frame = gtk_frame_new("Debug logging");
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), frame, FALSE, FALSE, 5);
+
+ vbox = gtk_vbox_new(FALSE, 6);
+ gtk_container_add(GTK_CONTAINER(frame), vbox);
+
box = gtk_hbox_new(FALSE, 6);
- gtk_container_add(GTK_CONTAINER(frame), box);
+ gtk_container_add(GTK_CONTAINER(vbox), box);
buttons = malloc(sizeof(GtkWidget *) * FD_DEBUG_MAX);
for (i = 0; i < FD_DEBUG_MAX; i++) {
+ if (i == 7) {
+ box = gtk_hbox_new(FALSE, 6);
+ gtk_container_add(GTK_CONTAINER(vbox), box);
+ }
+
+
buttons[i] = gtk_check_button_new_with_label(debug_levels[i].name);
gtk_widget_set_tooltip_text(buttons[i], debug_levels[i].help);
gtk_box_pack_start(GTK_BOX(box), buttons[i], FALSE, FALSE, 6);
}
+ frame = gtk_frame_new("Graph font");
+ gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), frame, FALSE, FALSE, 5);
+ vbox = gtk_vbox_new(FALSE, 6);
+ gtk_container_add(GTK_CONTAINER(frame), vbox);
+
+ font = gtk_font_button_new();
+ gtk_box_pack_start(GTK_BOX(vbox), font, FALSE, FALSE, 5);
+
gtk_widget_show_all(dialog);
if (gtk_dialog_run(GTK_DIALOG(dialog)) != GTK_RESPONSE_ACCEPT) {
fio_debug |= (1UL << i);
}
+ gfio_graph_font = strdup(gtk_font_button_get_font_name(GTK_FONT_BUTTON(font)));
+ printf("got font %s\n", gfio_graph_font);
+
gtk_widget_destroy(dialog);
}
ui->window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(ui->window), "fio");
- gtk_window_set_default_size(GTK_WINDOW(ui->window), 700, 500);
+ gtk_window_set_default_size(GTK_WINDOW(ui->window), 700, 700);
g_signal_connect(ui->window, "delete-event", G_CALLBACK(quit_clicked), NULL);
g_signal_connect(ui->window, "destroy", G_CALLBACK(quit_clicked), NULL);
struct graph_label *labels;
struct graph_label *tail;
int per_label_limit;
+ const char *font;
};
-struct graph *graph_new(unsigned int xdim, unsigned int ydim)
+struct graph *graph_new(unsigned int xdim, unsigned int ydim, const char *font)
{
struct graph *g;
g->xdim = xdim;
g->ydim = ydim;
g->per_label_limit = -1;
+ g->font = font;
+ if (!g->font)
+ g->font = "Sans";
return g;
}
}
}
-static void draw_centered_text(cairo_t *cr, double x, double y,
- double fontsize, const char *text)
+static void draw_centered_text(struct graph *g, cairo_t *cr, double x, double y,
+ double fontsize, const char *text)
{
cairo_text_extents_t extents;
- cairo_select_font_face (cr, "Sans",
- CAIRO_FONT_SLANT_NORMAL,
- CAIRO_FONT_WEIGHT_NORMAL);
+ cairo_select_font_face (cr, g->font, CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL);
cairo_set_font_size(cr, fontsize);
cairo_text_extents(cr, text, &extents);
cairo_show_text(cr, text);
}
-static void draw_vertical_centered_text(cairo_t *cr, double x, double y,
- double fontsize, const char *text)
+static void draw_vertical_centered_text(struct graph *g, cairo_t *cr, double x,
+ double y, double fontsize,
+ const char *text)
{
double sx, sy;
cairo_text_extents_t extents;
- cairo_select_font_face (cr, "Sans",
- CAIRO_FONT_SLANT_NORMAL,
- CAIRO_FONT_WEIGHT_NORMAL);
+ cairo_select_font_face(cr, g->font, CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL);
cairo_set_font_size(cr, fontsize);
cairo_text_extents(cr, text, &extents);
double *x1, double *y1, double *x2, double *y2)
{
cairo_set_source_rgb(cr, 0, 0, 0);
- cairo_set_line_width (cr, 1.0);
+ cairo_set_line_width (cr, 0.8);
cairo_move_to(cr, 0, 0);
cairo_line_to(cr, 0, g->ydim);
/* for now just set margins at 10% of width. This is not very good. */
*x1 = g->xdim / 10.0;
- *x2 = 9.0 * *x1;
+ *x2 = 9.0 * *x1;
*y1 = g->ydim / 10.0;
- *y2 = 9.0 * *y1;
+ *y2 = 9.0 * *y1;
cairo_move_to(cr, *x1, *y1);
cairo_line_to(cr, *x1, *y2);
cairo_line_to(cr, *x1, *y1);
cairo_stroke(cr);
- draw_centered_text(cr, g->xdim / 2, g->ydim / 20, 20.0, g->title);
- draw_centered_text(cr, g->xdim / 2, g->ydim * 0.97, 14.0, g->xtitle);
- draw_vertical_centered_text(cr, g->xdim * 0.02, g->ydim / 2, 14.0, g->ytitle);
+ draw_centered_text(g, cr, g->xdim / 2, g->ydim / 20, 20.0, g->title);
+ draw_centered_text(g, cr, g->xdim / 2, g->ydim * 0.97, 14.0, g->xtitle);
+ draw_vertical_centered_text(g, cr, g->xdim * 0.02, g->ydim / 2, 14.0, g->ytitle);
cairo_stroke(cr);
}
continue;
/* Draw tick mark */
- cairo_set_line_width(cr, 1.0);
+ cairo_set_line_width(cr, 0.8);
cairo_move_to(cr, tx, y2);
cairo_line_to(cr, tx, y2 + (y2 - y1) * 0.03);
cairo_stroke(cr);
cairo_restore(cr);
/* draw tickmark label */
- draw_centered_text(cr, tx, y2 * 1.04, 12.0, tm[i].string);
+ draw_centered_text(g, cr, tx, y2 * 1.04, 12.0, tm[i].string);
cairo_stroke(cr);
}
cairo_restore(cr);
/* draw tickmark label */
- draw_centered_text(cr, x1 - (x2 - x1) * 0.04, ty, 12.0, tm[i].string);
+ draw_centered_text(g, cr, x1 - (x2 - x1) * 0.04, ty, 12.0, tm[i].string);
cairo_stroke(cr);
}
}
maxdata = find_max_data(bg->labels);
if (fabs(maxdata - mindata) < 1e-20) {
- draw_centered_text(cr,
+ draw_centered_text(bg, cr,
x1 + (x2 - x1) / 2.0,
y1 + (y2 - y1) / 2.0, 20.0, "No good data");
return;
label_offset = bg->xdim * 0.1 + space_per_label * (double) i + space_per_label * 0.1;
draw_bars(bg, cr, lb, label_offset, bar_width, mindata, maxdata);
// draw_centered_text(cr, label_offset + (bar_width / 2.0 + bar_width * 0.1), bg->ydim * 0.93,
- draw_centered_text(cr, x1 + space_per_label * (i + 0.5), bg->ydim * 0.93,
+ draw_centered_text(bg, cr, x1 + space_per_label * (i + 0.5), bg->ydim * 0.93,
12.0, lb->label);
i++;
}
maxy = find_xy_value(g, gety, maxdouble);
if (fabs(maxx - minx) < 1e-20 || fabs(maxy - miny) < 1e-20) {
- draw_centered_text(cr,
+ draw_centered_text(g, cr,
x1 + (x2 - x1) / 2.0,
y1 + (y2 - y1) / 2.0, 20.0, "No good Data");
return;
graph_draw_x_ticks(g, cr, x1, y1, x2, y2, minx, maxx, 10);
graph_draw_y_ticks(g, cr, x1, y1, x2, y2, miny, maxy, 10);
- cairo_set_line_width(cr, 2.5);
+ cairo_set_line_width(cr, 1.5);
for (i = g->labels; i; i = i->next) {
first = 1;
cairo_set_source_rgb(cr, i->r, i->g, i->b);