xref: /kernel/linux/linux-6.6/tools/perf/ui/gtk/browser.c (revision 62306a36)
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