Files
grnWatch/grnWatch.c

541 lines
22 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#include <gtk/gtk.h>
#include <locale.h>
#include <time.h>
#include <math.h>
static gboolean on_key_press(GtkWidget *widget, GdkEventKey *event, gpointer data) {
if (event->keyval == GDK_KEY_q || event->keyval == GDK_KEY_Q) {
gtk_main_quit();
return TRUE;
}
return FALSE;
}
// Функция для рисования фигур и часов
static gboolean draw_callback(GtkWidget *widget, cairo_t *cr, gpointer data) {
// Рисование часов (аналогично Tkinter-коду)
double center_x = 341; // Центр часов
double center_y = 384; // Половина высоты окна (768/2)
double radius = 194; // Радиус для секундной стрелки
// Окружности циферблата (как в Tkinter)
cairo_set_source_rgb(cr, 0.68, 0.93, 0.93); // LightCyan
cairo_set_line_width(cr, 1.0);
cairo_arc(cr, center_x, center_y, 253, 0, 2 * G_PI); // Аналог первой окружности
cairo_stroke(cr);
cairo_set_line_width(cr, 3.0);
cairo_arc(cr, center_x, center_y, 195, 0, 2 * G_PI); // Аналог второй окружности
cairo_stroke(cr);
cairo_set_line_width(cr, 1.0);
cairo_arc(cr, center_x, center_y, 174, 0, 2 * G_PI); // Аналог третьей окружности
cairo_stroke(cr);
cairo_arc(cr, center_x, center_y, 166, 0, 2 * G_PI); // Аналог четвёртой окружности
cairo_stroke(cr);
// 60 маленьких кружков
for (int i = 0; i < 60; i++) {
double angle = -i * 6 * G_PI / 180 + G_PI / 2;
double x = center_x + 170 * cos(angle);
double y = center_y - 170 * sin(angle);
cairo_arc(cr, x, y, 4, 0, 2 * G_PI);
cairo_fill(cr);
}
// 12 больших кружков
for (int i = 0; i < 12; i++) {
double angle = -i * 30 * G_PI / 180 + G_PI / 2;
double x = center_x + 185 * cos(angle);
double y = center_y - 185 * sin(angle);
cairo_set_line_width(cr, 3.0);
cairo_arc(cr, x, y, 9, 0, 2 * G_PI);
cairo_stroke(cr);
}
// 12 внешних кружков
for (int i = 0; i < 12; i++) {
double angle = -i * 30 * G_PI / 180 + G_PI / 2;
double x = center_x + 225 * cos(angle);
double y = center_y - 225 * sin(angle);
cairo_set_line_width(cr, 1.0);
cairo_arc(cr, x, y, 28, 0, 2 * G_PI);
cairo_stroke(cr);
}
// Рисование линии для 1-го часа
cairo_set_source_rgb(cr, 0.68, 0.93, 0.93); // LightCyan
cairo_set_line_width(cr, 1.0);
cairo_move_to(cr, 454, 160); // Начальная точка линии
cairo_line_to(cr, 454, 191); // Конечная точка линии
cairo_stroke(cr);
// Рисование линии для 2-го часа
cairo_set_source_rgb(cr, 0.68, 0.93, 0.93); // LightCyan
cairo_set_line_width(cr, 1.0);
cairo_move_to(cr, 535, 244); // Начальная точка линии
cairo_line_to(cr, 535, 301); // Конечная точка линии
cairo_stroke(cr);
// Рисование треугольника для 3-го часа
cairo_set_source_rgb(cr, 0.68, 0.93, 0.93); // LightCyan
cairo_set_line_width(cr, 1.0);
double center_x_3 = 567; // Центр треугольника
double center_y_3 = 384;
double radius_3 = 28;
for (int i = 0; i < 3; i++) {
double angle = -i * 120 * G_PI / 180 + G_PI / 2;
double x1 = center_x_3 + radius_3 * cos(angle);
double y1 = center_y_3 - radius_3 * sin(angle);
int next_i = (i + 1) % 3;
double next_angle = -next_i * 120 * G_PI / 180 + G_PI / 2;
double x2 = center_x_3 + radius_3 * cos(next_angle);
double y2 = center_y_3 - radius_3 * sin(next_angle);
cairo_move_to(cr, x1, y1);
cairo_line_to(cr, x2, y2);
cairo_stroke(cr);
}
// Рисование квадрата для 4-го часа
cairo_set_source_rgb(cr, 0.68, 0.93, 0.93); // LightCyan
cairo_set_line_width(cr, 1.0);
double center_x_4 = 537; // Центр квадрата
double center_y_4 = 496;
double radius_4 = 28;
for (int i = 0; i < 4; i++) {
double angle = -i * 90 * G_PI / 180 + G_PI / 4; // Смещение на 45 градусов
double x1 = center_x_4 + radius_4 * cos(angle);
double y1 = center_y_4 - radius_4 * sin(angle);
int next_i = (i + 1) % 4;
double next_angle = -next_i * 90 * G_PI / 180 + G_PI / 4;
double x2 = center_x_4 + radius_4 * cos(next_angle);
double y2 = center_y_4 - radius_4 * sin(next_angle);
cairo_move_to(cr, x1, y1);
cairo_line_to(cr, x2, y2);
cairo_stroke(cr);
}
// Рисование пятиконечной звезды для 5-го часа
cairo_set_source_rgb(cr, 0.68, 0.93, 0.93); // LightCyan
cairo_set_line_width(cr, 1.0);
double center_x_5 = 454; // Центр звезды
double center_y_5 = 579;
double radius_5 = 28;
for (int i = 0; i < 5; i++) {
double angle = -i * 144 * G_PI / 180 + G_PI / 2; // Угол поворота на 144 градуса
double x1 = center_x_5 + radius_5 * cos(angle);
double y1 = center_y_5 - radius_5 * sin(angle);
int next_i = (i + 1) % 5;
double next_angle = -next_i * 144 * G_PI / 180 + G_PI / 2;
double x2 = center_x_5 + radius_5 * cos(next_angle);
double y2 = center_y_5 - radius_5 * sin(next_angle);
cairo_move_to(cr, x1, y1);
cairo_line_to(cr, x2, y2);
cairo_stroke(cr);
}
// Рисование треугольника для 6-го часа (первый треугольник)
cairo_set_source_rgb(cr, 0.68, 0.93, 0.93); // LightCyan
cairo_set_line_width(cr, 1.0);
double center_x_6 = 341; // Центр треугольника
double center_y_6 = 610;
double radius_6 = 28;
for (int i = 0; i < 3; i++) {
double angle = -i * 120 * G_PI / 180 + G_PI / 2;
double x1 = center_x_6 + radius_6 * cos(angle);
double y1 = center_y_6 - radius_6 * sin(angle);
int next_i = (i + 1) % 3;
double next_angle = -next_i * 120 * G_PI / 180 + G_PI / 2;
double x2 = center_x_6 + radius_6 * cos(next_angle);
double y2 = center_y_6 - radius_6 * sin(next_angle);
cairo_move_to(cr, x1, y1);
cairo_line_to(cr, x2, y2);
cairo_stroke(cr);
}
// Рисование второго треугольника для 6-го часа
cairo_set_source_rgb(cr, 0.68, 0.93, 0.93); // LightCyan
cairo_set_line_width(cr, 1.0);
for (int i = 0; i < 3; i++) {
double angle = -i * 120 * G_PI / 180 + G_PI / 6;
double x1 = center_x_6 + radius_6 * cos(angle);
double y1 = center_y_6 - radius_6 * sin(angle);
int next_i = (i + 1) % 3;
double next_angle = -next_i * 120 * G_PI / 180 + G_PI / 6;
double x2 = center_x_6 + radius_6 * cos(next_angle);
double y2 = center_y_6 - radius_6 * sin(next_angle);
cairo_move_to(cr, x1, y1);
cairo_line_to(cr, x2, y2);
cairo_stroke(cr);
}
// Дополнительные линии для 6-го часа
cairo_set_source_rgb(cr, 0.68, 0.93, 0.93); // LightCyan
cairo_set_line_width(cr, 1.0);
cairo_move_to(cr, 326, 609);
cairo_line_to(cr, 358, 609);
cairo_stroke(cr);
cairo_move_to(cr, 332, 595);
cairo_line_to(cr, 349, 624);
cairo_stroke(cr);
cairo_move_to(cr, 349, 595);
cairo_line_to(cr, 332, 624);
cairo_stroke(cr);
// Рисование семиконечной звезды для 7-го часа
cairo_set_source_rgb(cr, 0.68, 0.93, 0.93); // LightCyan
cairo_set_line_width(cr, 1.0);
double center_x_7 = 218; // Центр звезды
double center_y_7 = 579;
double radius_7 = 28;
for (int i = 0; i < 7; i++) {
double angle = -i * (360 / 7) * G_PI / 180 + G_PI / 2;
double x1 = center_x_7 + radius_7 * cos(angle) + 10;
double y1 = center_y_7 - radius_7 * sin(angle) - 1;
int next_i = (i + 3) % 7; // Смещение на 3 шага для семиконечной звезды
double next_angle = -next_i * (360 / 7) * G_PI / 180 + G_PI / 2;
double x2 = center_x_7 + radius_7 * cos(next_angle) + 10;
double y2 = center_y_7 - radius_7 * sin(next_angle) - 1;
cairo_move_to(cr, x1, y1);
cairo_line_to(cr, x2, y2);
cairo_stroke(cr);
}
/// --- *** 8 *** --------------------------------------
// Рисование двух квадратов для 8-го часа
cairo_set_source_rgb(cr, 0.68, 0.93, 0.93); // LightCyan
cairo_set_line_width(cr, 1.0);
double center_x_8 = 147; // Центр для 8-го часа
double center_y_8 = 496;
double radius_8 = 28;
// Первый квадрат (0°, 90°, 180°, 270°)
for (int i = 0; i < 4; i++) {
double angle = -i * 90 * G_PI / 180 + G_PI / 2;
double x1 = center_x_8 + radius_8 * cos(angle);
double y1 = center_y_8 - radius_8 * sin(angle);
int next_i = (i + 1) % 4;
double next_angle = -next_i * 90 * G_PI / 180 + G_PI / 2;
double x2 = center_x_8 + radius_8 * cos(next_angle);
double y2 = center_y_8 - radius_8 * sin(next_angle);
cairo_move_to(cr, x1, y1);
cairo_line_to(cr, x2, y2);
cairo_stroke(cr);
}
// Второй квадрат (45°, 135°, 225°, 315°)
for (int i = 0; i < 4; i++) {
double angle = -i * 90 * G_PI / 180 + G_PI / 4;
double x1 = center_x_8 + radius_8 * cos(angle);
double y1 = center_y_8 - radius_8 * sin(angle);
int next_i = (i + 1) % 4;
double next_angle = -next_i * 90 * G_PI / 180 + G_PI / 4;
double x2 = center_x_8 + radius_8 * cos(next_angle);
double y2 = center_y_8 - radius_8 * sin(next_angle);
cairo_move_to(cr, x1, y1);
cairo_line_to(cr, x2, y2);
cairo_stroke(cr);
}
/// --- *** 9 *** ---------------------------------------------
// Рисование трёх треугольников для 9-го часа
cairo_set_source_rgb(cr, 0.68, 0.93, 0.93); // LightCyan
cairo_set_line_width(cr, 1.0);
double center_x_9 = 118; // Центр для 9-го часа
double center_y_9 = 384;
double radius_9 = 28;
// Первый треугольник (0° поворот)
for (int i = 0; i < 3; i++) {
double angle = -i * 120 * G_PI / 180 + G_PI / 2;
double x1 = center_x_9 + radius_9 * cos(angle);
double y1 = center_y_9 - radius_9 * sin(angle);
int next_i = (i + 1) % 3;
double next_angle = -next_i * 120 * G_PI / 180 + G_PI / 2;
double x2 = center_x_9 + radius_9 * cos(next_angle);
double y2 = center_y_9 - radius_9 * sin(next_angle);
cairo_move_to(cr, x1, y1);
cairo_line_to(cr, x2, y2);
cairo_stroke(cr);
}
// Второй треугольник (поворот на 40° вправо)
for (int i = 0; i < 3; i++) {
double angle = -i * 120 * G_PI / 180 + G_PI / 2 + 2 * G_PI / 9;
double x1 = center_x_9 + radius_9 * cos(angle);
double y1 = center_y_9 - radius_9 * sin(angle);
int next_i = (i + 1) % 3;
double next_angle = -next_i * 120 * G_PI / 180 + G_PI / 2 + 2 * G_PI / 9;
double x2 = center_x_9 + radius_9 * cos(next_angle);
double y2 = center_y_9 - radius_9 * sin(next_angle);
cairo_move_to(cr, x1, y1);
cairo_line_to(cr, x2, y2);
cairo_stroke(cr);
}
// Третий треугольник (поворот на 40° влево)
for (int i = 0; i < 3; i++) {
double angle = -i * 120 * G_PI / 180 + G_PI / 2 - 2 * G_PI / 9;
double x1 = center_x_9 + radius_9 * cos(angle);
double y1 = center_y_9 - radius_9 * sin(angle);
int next_i = (i + 1) % 3;
double next_angle = -next_i * 120 * G_PI / 180 + G_PI / 2 - 2 * G_PI / 9;
double x2 = center_x_9 + radius_9 * cos(next_angle);
double y2 = center_y_9 - radius_9 * sin(next_angle);
cairo_move_to(cr, x1, y1);
cairo_line_to(cr, x2, y2);
cairo_stroke(cr);
}
/// --- *** 10 *** -----------------------------------------------------------
// Рисование двух пятиконечных звёзд для 10-го часа
cairo_set_source_rgb(cr, 0.68, 0.93, 0.93); // LightCyan
cairo_set_line_width(cr, 1.0);
double center_x_10 = 147; // Центр для 10-го часа
double center_y_10 = 272; // Скорректировано для позиции 10-го часа
double radius_10 = 28;
// Первая звезда (нормальная ориентация)
for (int i = 0; i < 5; i++) {
double angle = -i * 144 * G_PI / 180 + G_PI / 2;
double x1 = center_x_10 + radius_10 * cos(angle);
double y1 = center_y_10 - radius_10 * sin(angle);
int next_i = (i + 1) % 5;
double next_angle = -next_i * 144 * G_PI / 180 + G_PI / 2;
double x2 = center_x_10 + radius_10 * cos(next_angle);
double y2 = center_y_10 - radius_10 * sin(next_angle);
cairo_move_to(cr, x1, y1);
cairo_line_to(cr, x2, y2);
cairo_stroke(cr);
}
// Вторая звезда (перевёрнутая)
for (int i = 0; i < 5; i++) {
double angle = -i * 144 * G_PI / 180 + G_PI / 2;
double x1 = center_x_10 + radius_10 * cos(angle);
double y1 = center_y_10 + radius_10 * sin(angle); // Знак изменён для перевёрнутой звезды
int next_i = (i + 1) % 5;
double next_angle = -next_i * 144 * G_PI / 180 + G_PI / 2;
double x2 = center_x_10 + radius_10 * cos(next_angle);
double y2 = center_y_10 + radius_10 * sin(next_angle); // Знак изменён
cairo_move_to(cr, x1, y1);
cairo_line_to(cr, x2, y2);
cairo_stroke(cr);
}
/// --- *** 11 *** --------------------------------------------------------------------------
// Рисование одиннадцатиконечной звезды для 11-го часа
cairo_set_source_rgb(cr, 0.68, 0.93, 0.93); // LightCyan
cairo_set_line_width(cr, 1.0);
double center_x_11 = 230; // Центр для 11-го часа
double center_y_11 = 189; // Скорректировано для позиции 11-го часа
double radius_11 = 28;
for (int i = 0; i < 11; i++) {
double angle_increment = 360.0 / 11;
double angle = -i * angle_increment * G_PI / 180 + G_PI / 2;
double x1 = center_x_11 + radius_11 * cos(angle);
double y1 = center_y_11 - radius_11 * sin(angle);
int next_i = (i + 4) % 11; // Смещение на 4 шага для 11-конечной звезды
double next_angle = -next_i * angle_increment * G_PI / 180 + G_PI / 2;
double x2 = center_x_11 + radius_11 * cos(next_angle);
double y2 = center_y_11 - radius_11 * sin(next_angle);
cairo_move_to(cr, x1, y1);
cairo_line_to(cr, x2, y2);
cairo_stroke(cr);
}
/// --- *** 12 *** ---------------------------------------------------------------------------
// Рисование 12-го часа
cairo_set_source_rgb(cr, 0.68, 0.93, 0.93); // LightCyan
cairo_set_line_width(cr, 1.0);
// Снежинка
cairo_move_to(cr, 326, 159); // 327, 98
cairo_line_to(cr, 359, 159); // 360, 98
cairo_stroke(cr);
cairo_move_to(cr, 333, 145); // 334, 84
cairo_line_to(cr, 350, 174); // 351, 113
cairo_stroke(cr);
cairo_move_to(cr, 350, 145); // 351, 84
cairo_line_to(cr, 333, 173); // 334, 112
cairo_stroke(cr);
// 12-угольник
double center_x_12 = 341; // Центр для 12-го часа (смещён относительно Python)
double center_y_12 = 159; // Скорректировано: 98 + (384 - 323)
double radius_12 = 28;
for (int i = 0; i < 12; i++) {
double angle = -i * 30 * G_PI / 180 + G_PI / 2 + 2 * G_PI / 24; // Поворот на 15° (1/24 окружности)
double x1 = center_x_12 + radius_12 * cos(angle);
double y1 = center_y_12 - radius_12 * sin(angle);
int next_i = (i + 1) % 12;
double next_angle = -next_i * 30 * G_PI / 180 + G_PI / 2 + 2 * G_PI / 24;
double x2 = center_x_12 + radius_12 * cos(next_angle);
double y2 = center_y_12 - radius_12 * sin(next_angle);
cairo_move_to(cr, x1, y1);
cairo_line_to(cr, x2, y2);
cairo_stroke(cr);
}
// Первая группа линий
cairo_move_to(cr, 334, 132); // 335, 71 + (384 - 323)
cairo_line_to(cr, 334, 147); // 335, 86 + (384 - 323)
cairo_stroke(cr);
cairo_move_to(cr, 349, 132); // 350, 71
cairo_line_to(cr, 349, 147); // 350, 86
cairo_stroke(cr);
cairo_move_to(cr, 363, 139); // 364, 78
cairo_line_to(cr, 349, 147); // 350, 86
cairo_stroke(cr);
cairo_move_to(cr, 367, 152); // 368, 91
cairo_line_to(cr, 355, 159); // 356, 98
cairo_stroke(cr);
cairo_move_to(cr, 320, 139); // 321, 78
cairo_line_to(cr, 334, 147); // 335, 86
cairo_stroke(cr);
cairo_move_to(cr, 316, 152); // 317, 91
cairo_line_to(cr, 327, 159); // 328, 98
cairo_stroke(cr);
cairo_move_to(cr, 349, 170); // 350, 109
cairo_line_to(cr, 349, 187); // 350, 126
cairo_stroke(cr);
cairo_move_to(cr, 334, 170); // 335, 109
cairo_line_to(cr, 334, 187); // 335, 126
cairo_stroke(cr);
cairo_move_to(cr, 327, 160); // 328, 99
cairo_line_to(cr, 313, 167); // 314, 106
cairo_stroke(cr);
cairo_move_to(cr, 333, 172); // 334, 111
cairo_line_to(cr, 318, 179); // 319, 118
cairo_stroke(cr);
cairo_move_to(cr, 353, 159); // 354, 98
cairo_line_to(cr, 370, 167); // 371, 106
cairo_stroke(cr);
cairo_move_to(cr, 350, 171); // 351, 110
cairo_line_to(cr, 364, 180); // 365, 119
cairo_stroke(cr);
// Шестиконечная звезда
double radius_star = 16;
for (int i = 0; i < 6; i++) {
double angle = -i * 60 * G_PI / 180 + G_PI / 2 + 2 * G_PI / 12; // Поворот на 30° (1/12 окружности)
double x1 = center_x_12 + radius_star * cos(angle);
double y1 = center_y_12 - radius_star * sin(angle);
int next_i = (i + 1) % 6;
double next_angle = -next_i * 60 * G_PI / 180 + G_PI / 2 + 2 * G_PI / 12;
double x2 = center_x_12 + radius_star * cos(next_angle);
double y2 = center_y_12 - radius_star * sin(next_angle);
cairo_move_to(cr, x1, y1);
cairo_line_to(cr, x2, y2);
cairo_stroke(cr);
}
/// --- *** 12 конец *** ---------------------------------------------------------------------------
///------------------------------------------------------------------------------------------
// Получение текущего времени
time_t rawtime;
struct tm *timeinfo;
time(&rawtime);
timeinfo = localtime(&rawtime);
int time_sec = timeinfo->tm_sec;
int time_min = timeinfo->tm_min;
int time_hour = timeinfo->tm_hour % 12; // 12-часовой формат
// Углы стрелок
double sec_angle = 6 * time_sec;
double min_angle = 6 * (time_min + (1.0 / 60) * time_sec);
double hour_angle = 30 * (time_hour + (1.0 / 60) * time_min);
// Секундная стрелка
cairo_set_source_rgb(cr, 0.68, 0.93, 0.93); // LightCyan
cairo_set_line_width(cr, 2.0);
double x_end_sec = center_x - radius * cos(sec_angle * G_PI / 180 + G_PI / 2);
double y_end_sec = center_y - radius * sin(sec_angle * G_PI / 180 + G_PI / 2);
cairo_move_to(cr, center_x, center_y);
cairo_line_to(cr, x_end_sec, y_end_sec);
cairo_stroke(cr);
// Минутная стрелка
cairo_set_line_width(cr, 3.0);
double minute_hand_length = 173;
double x_end_min = center_x - minute_hand_length * cos(min_angle * G_PI / 180 + G_PI / 2);
double y_end_min = center_y - minute_hand_length * sin(min_angle * G_PI / 180 + G_PI / 2);
cairo_move_to(cr, center_x, center_y);
cairo_line_to(cr, x_end_min, y_end_min);
cairo_stroke(cr);
// Часовая стрелка
cairo_set_line_width(cr, 5.0);
double hour_hand_length = 167;
double x_end_hour = center_x - hour_hand_length * cos(hour_angle * G_PI / 180 + G_PI / 2);
double y_end_hour = center_y - hour_hand_length * sin(hour_angle * G_PI / 180 + G_PI / 2);
cairo_move_to(cr, center_x, center_y);
cairo_line_to(cr, x_end_hour, y_end_hour);
cairo_stroke(cr);
return FALSE;
}
// Функция обновления часов
static gboolean update_clock(gpointer data) {
GtkWidget *drawing_area = GTK_WIDGET(data);
gtk_widget_queue_draw(drawing_area); // Перерисовка области
return TRUE; // Продолжать вызов
}
int main(int argc, char *argv[]) {
setlocale(LC_ALL, "ru_RU.UTF-8");
if (!setlocale(LC_ALL, "")) {
printf("Ошибка установки локали\n");
return 1;
}
gtk_init(&argc, &argv);
GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(window), "acpi - Desktop Version");
gtk_window_set_default_size(GTK_WINDOW(window), 670, 716); // Размер как в Tkinter
gtk_window_set_resizable(GTK_WINDOW(window), FALSE);
gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
gtk_window_set_type_hint(GTK_WINDOW(window), GDK_WINDOW_TYPE_HINT_DIALOG);
// Контейнер и фон
GtkWidget *overlay = gtk_overlay_new();
gtk_container_add(GTK_CONTAINER(window), overlay);
GtkWidget *background = gtk_image_new_from_file("grnWatch.jpg");
gtk_overlay_add_overlay(GTK_OVERLAY(overlay), background);
gtk_widget_set_halign(background, GTK_ALIGN_FILL);
gtk_widget_set_valign(background, GTK_ALIGN_FILL);
// Область рисования
GtkWidget *drawing_area = gtk_drawing_area_new();
gtk_widget_set_size_request(drawing_area, 683, 768); // Полный размер окна
gtk_overlay_add_overlay(GTK_OVERLAY(overlay), drawing_area);
gtk_widget_set_halign(drawing_area, GTK_ALIGN_CENTER);
gtk_widget_set_valign(drawing_area, GTK_ALIGN_CENTER);
// Подключаем функцию рисования и обновления
g_signal_connect(drawing_area, "draw", G_CALLBACK(draw_callback), NULL);
g_timeout_add(1000, update_clock, drawing_area); // Обновление каждую секунду
// CSS для прозрачности фона виджета
GtkCssProvider *provider = gtk_css_provider_new();
gtk_css_provider_load_from_data(provider,
"drawing-area {"
" background-color: transparent;"
"}",
-1, NULL);
gtk_style_context_add_provider_for_screen(gdk_screen_get_default(),
GTK_STYLE_PROVIDER(provider),
GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
g_object_unref(provider);
// Сигналы
g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL);
g_signal_connect(window, "key-press-event", G_CALLBACK(on_key_press), NULL);
gtk_widget_show_all(window);
gtk_main();
return 0;
}
// gcc window.c -o window `pkg-config --cflags --libs gtk+-3.0` -lm