123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541 |
- #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) {
-
- double center_x = 341;
- double center_y = 384;
- double radius = 194;
-
- cairo_set_source_rgb(cr, 0.68, 0.93, 0.93);
- 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);
-
- 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);
- }
-
- 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);
- }
-
- 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);
- }
- cairo_set_source_rgb(cr, 0.68, 0.93, 0.93);
- cairo_set_line_width(cr, 1.0);
- cairo_move_to(cr, 454, 160);
- cairo_line_to(cr, 454, 191);
- cairo_stroke(cr);
- cairo_set_source_rgb(cr, 0.68, 0.93, 0.93);
- cairo_set_line_width(cr, 1.0);
- cairo_move_to(cr, 535, 244);
- cairo_line_to(cr, 535, 301);
- cairo_stroke(cr);
- cairo_set_source_rgb(cr, 0.68, 0.93, 0.93);
- 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);
- }
- cairo_set_source_rgb(cr, 0.68, 0.93, 0.93);
- 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;
- 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);
- }
- cairo_set_source_rgb(cr, 0.68, 0.93, 0.93);
- 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;
- 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);
- }
- cairo_set_source_rgb(cr, 0.68, 0.93, 0.93);
- 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);
- }
- cairo_set_source_rgb(cr, 0.68, 0.93, 0.93);
- 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);
- }
- cairo_set_source_rgb(cr, 0.68, 0.93, 0.93);
- 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);
- cairo_set_source_rgb(cr, 0.68, 0.93, 0.93);
- 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;
- 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);
- }
- cairo_set_source_rgb(cr, 0.68, 0.93, 0.93);
- cairo_set_line_width(cr, 1.0);
- double center_x_8 = 147;
- double center_y_8 = 496;
- double radius_8 = 28;
- 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);
- }
- 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);
- }
- cairo_set_source_rgb(cr, 0.68, 0.93, 0.93);
- cairo_set_line_width(cr, 1.0);
- double center_x_9 = 118;
- double center_y_9 = 384;
- double radius_9 = 28;
- 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);
- }
- 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);
- }
- 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);
- }
- cairo_set_source_rgb(cr, 0.68, 0.93, 0.93);
- cairo_set_line_width(cr, 1.0);
- double center_x_10 = 147;
- double center_y_10 = 272;
- 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);
- }
- cairo_set_source_rgb(cr, 0.68, 0.93, 0.93);
- cairo_set_line_width(cr, 1.0);
- double center_x_11 = 230;
- double center_y_11 = 189;
- 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;
- 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);
- }
- cairo_set_source_rgb(cr, 0.68, 0.93, 0.93);
- cairo_set_line_width(cr, 1.0);
- cairo_move_to(cr, 326, 159);
- cairo_line_to(cr, 359, 159);
- cairo_stroke(cr);
- cairo_move_to(cr, 333, 145);
- cairo_line_to(cr, 350, 174);
- cairo_stroke(cr);
- cairo_move_to(cr, 350, 145);
- cairo_line_to(cr, 333, 173);
- cairo_stroke(cr);
- double center_x_12 = 341;
- double center_y_12 = 159;
- 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;
- 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);
- cairo_line_to(cr, 334, 147);
- cairo_stroke(cr);
- cairo_move_to(cr, 349, 132);
- cairo_line_to(cr, 349, 147);
- cairo_stroke(cr);
- cairo_move_to(cr, 363, 139);
- cairo_line_to(cr, 349, 147);
- cairo_stroke(cr);
- cairo_move_to(cr, 367, 152);
- cairo_line_to(cr, 355, 159);
- cairo_stroke(cr);
- cairo_move_to(cr, 320, 139);
- cairo_line_to(cr, 334, 147);
- cairo_stroke(cr);
- cairo_move_to(cr, 316, 152);
- cairo_line_to(cr, 327, 159);
- cairo_stroke(cr);
- cairo_move_to(cr, 349, 170);
- cairo_line_to(cr, 349, 187);
- cairo_stroke(cr);
- cairo_move_to(cr, 334, 170);
- cairo_line_to(cr, 334, 187);
- cairo_stroke(cr);
- cairo_move_to(cr, 327, 160);
- cairo_line_to(cr, 313, 167);
- cairo_stroke(cr);
- cairo_move_to(cr, 333, 172);
- cairo_line_to(cr, 318, 179);
- cairo_stroke(cr);
- cairo_move_to(cr, 353, 159);
- cairo_line_to(cr, 370, 167);
- cairo_stroke(cr);
- cairo_move_to(cr, 350, 171);
- cairo_line_to(cr, 364, 180);
- 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;
- 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);
- }
-
- 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;
-
- 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);
- 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);
- 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);
-
- 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;
- }
|