Skip to content
Snippets Groups Projects
Select Git revision
  • master default
1 result

gtk-7.c

Blame
  • Forked from Peter Gerwinski / hp
    343 commits behind the upstream repository.
    gtk-7.c 2.23 KiB
    #include <stdio.h>
    #include <gtk/gtk.h>
    
    gboolean draw (GtkWidget *widget, cairo_t *c, gpointer data)
    {
      GdkRGBA red = { 1.0, 0.0, 0.0, 0.8 };
      GdkRGBA yellow = { 1.0, 1.0, 0.0, 0.6 };
      GdkRGBA blue = { 0.0, 0.5, 1.0, 0.4 };
    
      gdk_cairo_set_source_rgba (c, &red);
      cairo_rectangle (c, 10, 10, 60, 40);
      cairo_fill (c);
    
      gdk_cairo_set_source_rgba (c, &yellow);
      cairo_arc (c, 65, 50, 30, 0, 2 * G_PI);
      cairo_fill (c);
    
      gdk_cairo_set_source_rgba (c, &blue);
      cairo_move_to (c, 10, 70);
      cairo_line_to (c, 70, 70);
      cairo_line_to (c, 40, 18);
      cairo_close_path (c);
      cairo_fill (c);
    
      return FALSE;  /* TRUE to stop other handlers from being invoked for the event.
                        FALSE to propagate the event further. */
    }
    
    gboolean button_press (GtkWidget *widget, GdkEventButton *e, gpointer data)
    {
      printf ("button %d pressed at (%lf, %lf)\n", e->button, e->x, e->y);
      return FALSE;
    }
    
    gboolean key_press (GtkWidget *widget, GdkEventKey *e, gpointer data)
    {
      printf ("key '%c' (%d) pressed\n", e->keyval, e->keyval);
      return FALSE;
    }
    
    int main (int argc, char **argv)
    {
      gtk_init (&argc, &argv);
      GtkWidget *window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
      gtk_window_set_title (GTK_WINDOW (window), "Hello");
      g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL);
    
      GtkWidget *vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 5);
      gtk_container_add (GTK_CONTAINER (window), vbox);
    
      GtkWidget *button = gtk_button_new_with_label ("Quit");
      g_signal_connect (button, "clicked", G_CALLBACK (gtk_main_quit), NULL);
      gtk_container_add (GTK_CONTAINER (vbox), button);
    
      GtkWidget *drawing_area = gtk_drawing_area_new ();
      gtk_container_add (GTK_CONTAINER (vbox), drawing_area);
      g_signal_connect (drawing_area, "draw", G_CALLBACK (draw), NULL);
      gtk_widget_set_size_request (drawing_area, 100, 100);
      gtk_widget_add_events (drawing_area, GDK_BUTTON_PRESS_MASK);
      g_signal_connect (drawing_area, "button_press_event", G_CALLBACK (button_press), NULL);
    
      gtk_widget_add_events (window, GDK_KEY_PRESS_MASK);
      g_signal_connect (window, "key_press_event", G_CALLBACK (key_press), NULL);
    
      gtk_widget_show (drawing_area);
      gtk_widget_show (button);
      gtk_widget_show (vbox);
      gtk_widget_show (window);
      gtk_main ();
      return 0;