162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0 262306a36Sopenharmony_ci#include "gtk.h" 362306a36Sopenharmony_ci#include "../evsel.h" 462306a36Sopenharmony_ci#include "../sort.h" 562306a36Sopenharmony_ci#include "../hist.h" 662306a36Sopenharmony_ci#include "../helpline.h" 762306a36Sopenharmony_ci 862306a36Sopenharmony_ci#include <signal.h> 962306a36Sopenharmony_ci 1062306a36Sopenharmony_civoid perf_gtk__signal(int sig) 1162306a36Sopenharmony_ci{ 1262306a36Sopenharmony_ci perf_gtk__exit(false); 1362306a36Sopenharmony_ci psignal(sig, "perf"); 1462306a36Sopenharmony_ci} 1562306a36Sopenharmony_ci 1662306a36Sopenharmony_civoid perf_gtk__resize_window(GtkWidget *window) 1762306a36Sopenharmony_ci{ 1862306a36Sopenharmony_ci GdkRectangle rect; 1962306a36Sopenharmony_ci GdkScreen *screen; 2062306a36Sopenharmony_ci int monitor; 2162306a36Sopenharmony_ci int height; 2262306a36Sopenharmony_ci int width; 2362306a36Sopenharmony_ci 2462306a36Sopenharmony_ci screen = gtk_widget_get_screen(window); 2562306a36Sopenharmony_ci 2662306a36Sopenharmony_ci monitor = gdk_screen_get_monitor_at_window(screen, window->window); 2762306a36Sopenharmony_ci 2862306a36Sopenharmony_ci gdk_screen_get_monitor_geometry(screen, monitor, &rect); 2962306a36Sopenharmony_ci 3062306a36Sopenharmony_ci width = rect.width * 3 / 4; 3162306a36Sopenharmony_ci height = rect.height * 3 / 4; 3262306a36Sopenharmony_ci 3362306a36Sopenharmony_ci gtk_window_resize(GTK_WINDOW(window), width, height); 3462306a36Sopenharmony_ci} 3562306a36Sopenharmony_ci 3662306a36Sopenharmony_ciconst char *perf_gtk__get_percent_color(double percent) 3762306a36Sopenharmony_ci{ 3862306a36Sopenharmony_ci if (percent >= MIN_RED) 3962306a36Sopenharmony_ci return "<span fgcolor='red'>"; 4062306a36Sopenharmony_ci if (percent >= MIN_GREEN) 4162306a36Sopenharmony_ci return "<span fgcolor='dark green'>"; 4262306a36Sopenharmony_ci return NULL; 4362306a36Sopenharmony_ci} 4462306a36Sopenharmony_ci 4562306a36Sopenharmony_ci#ifdef HAVE_GTK_INFO_BAR_SUPPORT 4662306a36Sopenharmony_ciGtkWidget *perf_gtk__setup_info_bar(void) 4762306a36Sopenharmony_ci{ 4862306a36Sopenharmony_ci GtkWidget *info_bar; 4962306a36Sopenharmony_ci GtkWidget *label; 5062306a36Sopenharmony_ci GtkWidget *content_area; 5162306a36Sopenharmony_ci 5262306a36Sopenharmony_ci info_bar = gtk_info_bar_new(); 5362306a36Sopenharmony_ci gtk_widget_set_no_show_all(info_bar, TRUE); 5462306a36Sopenharmony_ci 5562306a36Sopenharmony_ci label = gtk_label_new(""); 5662306a36Sopenharmony_ci gtk_widget_show(label); 5762306a36Sopenharmony_ci 5862306a36Sopenharmony_ci content_area = gtk_info_bar_get_content_area(GTK_INFO_BAR(info_bar)); 5962306a36Sopenharmony_ci gtk_container_add(GTK_CONTAINER(content_area), label); 6062306a36Sopenharmony_ci 6162306a36Sopenharmony_ci gtk_info_bar_add_button(GTK_INFO_BAR(info_bar), GTK_STOCK_OK, 6262306a36Sopenharmony_ci GTK_RESPONSE_OK); 6362306a36Sopenharmony_ci g_signal_connect(info_bar, "response", 6462306a36Sopenharmony_ci G_CALLBACK(gtk_widget_hide), NULL); 6562306a36Sopenharmony_ci 6662306a36Sopenharmony_ci pgctx->info_bar = info_bar; 6762306a36Sopenharmony_ci pgctx->message_label = label; 6862306a36Sopenharmony_ci 6962306a36Sopenharmony_ci return info_bar; 7062306a36Sopenharmony_ci} 7162306a36Sopenharmony_ci#endif 7262306a36Sopenharmony_ci 7362306a36Sopenharmony_ciGtkWidget *perf_gtk__setup_statusbar(void) 7462306a36Sopenharmony_ci{ 7562306a36Sopenharmony_ci GtkWidget *stbar; 7662306a36Sopenharmony_ci unsigned ctxid; 7762306a36Sopenharmony_ci 7862306a36Sopenharmony_ci stbar = gtk_statusbar_new(); 7962306a36Sopenharmony_ci 8062306a36Sopenharmony_ci ctxid = gtk_statusbar_get_context_id(GTK_STATUSBAR(stbar), 8162306a36Sopenharmony_ci "perf report"); 8262306a36Sopenharmony_ci pgctx->statbar = stbar; 8362306a36Sopenharmony_ci pgctx->statbar_ctx_id = ctxid; 8462306a36Sopenharmony_ci 8562306a36Sopenharmony_ci return stbar; 8662306a36Sopenharmony_ci} 87