about summary refs log tree commit diff
diff options
context:
space:
mode:
authorDMaroo <dhruvmaru007@gmail.com>2021-08-08 14:52:25 +0530
committerDMaroo <dhruvmaru007@gmail.com>2021-08-08 14:52:25 +0530
commita92952fa03e7aeed5f47c24e295dfbe49851bc98 (patch)
treecace23c38036ba52ffee836066de7aa5a277b5a5
parentdf74625df0324e17178dbf3c7c03484719ef6dd0 (diff)
downloadafl++-a92952fa03e7aeed5f47c24e295dfbe49851bc98.tar.gz
Added resizable panes instead of static separators in afl-plot-ui
The different plots can now be resized using dragging the panes.
The resizing isn't completely smooth from the visual POV (I'm guessing
this is because of embedding GNUplot), but once the position of the
panels are set, the rest of the visual experience is as smooth as it was
before.
-rw-r--r--utils/plot_ui/afl-plot-ui.c43
1 files changed, 26 insertions, 17 deletions
diff --git a/utils/plot_ui/afl-plot-ui.c b/utils/plot_ui/afl-plot-ui.c
index 1a1eb0ed..9e96ad5b 100644
--- a/utils/plot_ui/afl-plot-ui.c
+++ b/utils/plot_ui/afl-plot-ui.c
@@ -32,7 +32,8 @@ int main(int argc, char **argv) {
   GtkWidget *cbuttons_frame;
   GtkWidget *cbuttons_hbox;
 
-  GtkWidget *separator_maj, *separator_min1, *separator_min2, *separator_min3;
+  GtkWidget *separator_top;
+  GtkWidget *pane1, *pane2, *pane3;
 
   GtkWidget *plots_vbox;
   GtkWidget *plot_edges_frame, *plot_exec_speed_frame, *plot_high_freq_frame,
@@ -84,45 +85,53 @@ int main(int argc, char **argv) {
   gtk_container_add(GTK_CONTAINER(cbuttons_frame), cbuttons_hbox);
   gtk_box_pack_start(GTK_BOX(main_vbox), cbuttons_frame, FALSE, TRUE, 1);
 
-  separator_maj = gtk_separator_new(GTK_ORIENTATION_HORIZONTAL);
-  gtk_box_pack_start(GTK_BOX(main_vbox), separator_maj, FALSE, TRUE, 1);
+  separator_top = gtk_separator_new(GTK_ORIENTATION_HORIZONTAL);
+  gtk_box_pack_start(GTK_BOX(main_vbox), separator_top, FALSE, TRUE, 1);
 
   plots_vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 5);
 
   plot_edges_frame = gtk_frame_new("Edges");
-  gtk_container_set_border_width(GTK_CONTAINER(plot_edges_frame), 5);
+  gtk_frame_set_shadow_type(GTK_FRAME(plot_edges_frame), GTK_SHADOW_IN);
+  gtk_container_set_border_width(GTK_CONTAINER(plot_edges_frame), 10);
   plot_edges = gtk_socket_new();
+  gtk_widget_set_size_request(plot_edges, -1, 100);
   gtk_container_add(GTK_CONTAINER(plot_edges_frame), plot_edges);
 
   plot_exec_speed_frame = gtk_frame_new("Exec Speed");
-  gtk_container_set_border_width(GTK_CONTAINER(plot_exec_speed_frame), 5);
+  gtk_frame_set_shadow_type(GTK_FRAME(plot_exec_speed_frame), GTK_SHADOW_IN);
+  gtk_container_set_border_width(GTK_CONTAINER(plot_exec_speed_frame), 10);
   plot_exec_speed = gtk_socket_new();
+  gtk_widget_set_size_request(plot_exec_speed, -1, 100);
   gtk_container_add(GTK_CONTAINER(plot_exec_speed_frame), plot_exec_speed);
 
   plot_high_freq_frame = gtk_frame_new("High Frequency");
-  gtk_container_set_border_width(GTK_CONTAINER(plot_high_freq_frame), 5);
+  gtk_frame_set_shadow_type(GTK_FRAME(plot_high_freq_frame), GTK_SHADOW_IN);
+  gtk_container_set_border_width(GTK_CONTAINER(plot_high_freq_frame), 10);
   plot_high_freq = gtk_socket_new();
+  gtk_widget_set_size_request(plot_high_freq, -1, 100);
   gtk_container_add(GTK_CONTAINER(plot_high_freq_frame), plot_high_freq);
 
   plot_low_freq_frame = gtk_frame_new("Low Frequency");
-  gtk_container_set_border_width(GTK_CONTAINER(plot_low_freq_frame), 5);
+  gtk_frame_set_shadow_type(GTK_FRAME(plot_low_freq_frame), GTK_SHADOW_IN);
+  gtk_container_set_border_width(GTK_CONTAINER(plot_low_freq_frame), 10);
   plot_low_freq = gtk_socket_new();
+  gtk_widget_set_size_request(plot_low_freq, -1, 100);
   gtk_container_add(GTK_CONTAINER(plot_low_freq_frame), plot_low_freq);
 
-  separator_min1 = gtk_separator_new(GTK_ORIENTATION_HORIZONTAL);
-  separator_min2 = gtk_separator_new(GTK_ORIENTATION_HORIZONTAL);
-  separator_min3 = gtk_separator_new(GTK_ORIENTATION_HORIZONTAL);
+  pane1 = gtk_paned_new(GTK_ORIENTATION_VERTICAL);
+  pane2 = gtk_paned_new(GTK_ORIENTATION_VERTICAL);
+  pane3 = gtk_paned_new(GTK_ORIENTATION_VERTICAL);
 
-  gtk_box_pack_start(GTK_BOX(plots_vbox), plot_edges_frame, TRUE, TRUE, 1);
-  gtk_box_pack_start(GTK_BOX(plots_vbox), separator_min1, FALSE, TRUE, 1);
+  gtk_paned_pack1(GTK_PANED(pane1), plot_edges_frame, TRUE, FALSE);
+  gtk_paned_pack2(GTK_PANED(pane1), plot_exec_speed_frame, TRUE, FALSE);
 
-  gtk_box_pack_start(GTK_BOX(plots_vbox), plot_exec_speed_frame, TRUE, TRUE, 1);
-  gtk_box_pack_start(GTK_BOX(plots_vbox), separator_min2, FALSE, TRUE, 1);
+  gtk_paned_pack1(GTK_PANED(pane2), pane1, TRUE, FALSE);
+  gtk_paned_pack2(GTK_PANED(pane2), plot_high_freq_frame, TRUE, FALSE);
 
-  gtk_box_pack_start(GTK_BOX(plots_vbox), plot_high_freq_frame, TRUE, TRUE, 1);
-  gtk_box_pack_start(GTK_BOX(plots_vbox), separator_min3, FALSE, TRUE, 1);
+  gtk_paned_pack1(GTK_PANED(pane3), pane2, TRUE, FALSE);
+  gtk_paned_pack2(GTK_PANED(pane3), plot_low_freq_frame, TRUE, FALSE);
 
-  gtk_box_pack_start(GTK_BOX(plots_vbox), plot_low_freq_frame, TRUE, TRUE, 1);
+  gtk_box_pack_start(GTK_BOX(plots_vbox), pane3, TRUE, TRUE, 0);
 
   gtk_box_pack_start(GTK_BOX(main_vbox), plots_vbox, TRUE, TRUE, 1);