18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0 28c2ecf20Sopenharmony_ci#include "../evsel.h" 38c2ecf20Sopenharmony_ci#include "../sort.h" 48c2ecf20Sopenharmony_ci#include "../hist.h" 58c2ecf20Sopenharmony_ci#include "../helpline.h" 68c2ecf20Sopenharmony_ci#include "gtk.h" 78c2ecf20Sopenharmony_ci 88c2ecf20Sopenharmony_ci#include <signal.h> 98c2ecf20Sopenharmony_ci 108c2ecf20Sopenharmony_civoid perf_gtk__signal(int sig) 118c2ecf20Sopenharmony_ci{ 128c2ecf20Sopenharmony_ci perf_gtk__exit(false); 138c2ecf20Sopenharmony_ci psignal(sig, "perf"); 148c2ecf20Sopenharmony_ci} 158c2ecf20Sopenharmony_ci 168c2ecf20Sopenharmony_civoid perf_gtk__resize_window(GtkWidget *window) 178c2ecf20Sopenharmony_ci{ 188c2ecf20Sopenharmony_ci GdkRectangle rect; 198c2ecf20Sopenharmony_ci GdkScreen *screen; 208c2ecf20Sopenharmony_ci int monitor; 218c2ecf20Sopenharmony_ci int height; 228c2ecf20Sopenharmony_ci int width; 238c2ecf20Sopenharmony_ci 248c2ecf20Sopenharmony_ci screen = gtk_widget_get_screen(window); 258c2ecf20Sopenharmony_ci 268c2ecf20Sopenharmony_ci monitor = gdk_screen_get_monitor_at_window(screen, window->window); 278c2ecf20Sopenharmony_ci 288c2ecf20Sopenharmony_ci gdk_screen_get_monitor_geometry(screen, monitor, &rect); 298c2ecf20Sopenharmony_ci 308c2ecf20Sopenharmony_ci width = rect.width * 3 / 4; 318c2ecf20Sopenharmony_ci height = rect.height * 3 / 4; 328c2ecf20Sopenharmony_ci 338c2ecf20Sopenharmony_ci gtk_window_resize(GTK_WINDOW(window), width, height); 348c2ecf20Sopenharmony_ci} 358c2ecf20Sopenharmony_ci 368c2ecf20Sopenharmony_ciconst char *perf_gtk__get_percent_color(double percent) 378c2ecf20Sopenharmony_ci{ 388c2ecf20Sopenharmony_ci if (percent >= MIN_RED) 398c2ecf20Sopenharmony_ci return "<span fgcolor='red'>"; 408c2ecf20Sopenharmony_ci if (percent >= MIN_GREEN) 418c2ecf20Sopenharmony_ci return "<span fgcolor='dark green'>"; 428c2ecf20Sopenharmony_ci return NULL; 438c2ecf20Sopenharmony_ci} 448c2ecf20Sopenharmony_ci 458c2ecf20Sopenharmony_ci#ifdef HAVE_GTK_INFO_BAR_SUPPORT 468c2ecf20Sopenharmony_ciGtkWidget *perf_gtk__setup_info_bar(void) 478c2ecf20Sopenharmony_ci{ 488c2ecf20Sopenharmony_ci GtkWidget *info_bar; 498c2ecf20Sopenharmony_ci GtkWidget *label; 508c2ecf20Sopenharmony_ci GtkWidget *content_area; 518c2ecf20Sopenharmony_ci 528c2ecf20Sopenharmony_ci info_bar = gtk_info_bar_new(); 538c2ecf20Sopenharmony_ci gtk_widget_set_no_show_all(info_bar, TRUE); 548c2ecf20Sopenharmony_ci 558c2ecf20Sopenharmony_ci label = gtk_label_new(""); 568c2ecf20Sopenharmony_ci gtk_widget_show(label); 578c2ecf20Sopenharmony_ci 588c2ecf20Sopenharmony_ci content_area = gtk_info_bar_get_content_area(GTK_INFO_BAR(info_bar)); 598c2ecf20Sopenharmony_ci gtk_container_add(GTK_CONTAINER(content_area), label); 608c2ecf20Sopenharmony_ci 618c2ecf20Sopenharmony_ci gtk_info_bar_add_button(GTK_INFO_BAR(info_bar), GTK_STOCK_OK, 628c2ecf20Sopenharmony_ci GTK_RESPONSE_OK); 638c2ecf20Sopenharmony_ci g_signal_connect(info_bar, "response", 648c2ecf20Sopenharmony_ci G_CALLBACK(gtk_widget_hide), NULL); 658c2ecf20Sopenharmony_ci 668c2ecf20Sopenharmony_ci pgctx->info_bar = info_bar; 678c2ecf20Sopenharmony_ci pgctx->message_label = label; 688c2ecf20Sopenharmony_ci 698c2ecf20Sopenharmony_ci return info_bar; 708c2ecf20Sopenharmony_ci} 718c2ecf20Sopenharmony_ci#endif 728c2ecf20Sopenharmony_ci 738c2ecf20Sopenharmony_ciGtkWidget *perf_gtk__setup_statusbar(void) 748c2ecf20Sopenharmony_ci{ 758c2ecf20Sopenharmony_ci GtkWidget *stbar; 768c2ecf20Sopenharmony_ci unsigned ctxid; 778c2ecf20Sopenharmony_ci 788c2ecf20Sopenharmony_ci stbar = gtk_statusbar_new(); 798c2ecf20Sopenharmony_ci 808c2ecf20Sopenharmony_ci ctxid = gtk_statusbar_get_context_id(GTK_STATUSBAR(stbar), 818c2ecf20Sopenharmony_ci "perf report"); 828c2ecf20Sopenharmony_ci pgctx->statbar = stbar; 838c2ecf20Sopenharmony_ci pgctx->statbar_ctx_id = ctxid; 848c2ecf20Sopenharmony_ci 858c2ecf20Sopenharmony_ci return stbar; 868c2ecf20Sopenharmony_ci} 87