Skip to content
Snippets Groups Projects
Select Git revision
  • e5f77dbed1659b17ede018639a06063bc5dea51f
  • 2024ws default
  • 2023ws
  • 2022ws
  • 2021ws
  • 2020ws
  • 2018ws
  • 2019ws
  • 2017ws
  • 2016ws
10 results

hello-03.c

Blame
  • wurf-12.c 1.85 KiB
    #include <gtk/gtk.h>
    
    #define WIDTH 1024
    #define HEIGHT 768
    
    double x = 0.0;
    double y = 6.0;
    double vx = 3.0;
    double vy = 4.0;
    double cw = 0.02;
    double dt = 0.5;
    double g = 0.2;
    
    static void draw (GtkDrawingArea *drawing_area, cairo_t *c,
                      int width, int height, gpointer user_data)
    {
      GdkRGBA blue = { 0.0, 0.5, 1.0, 1.0 };
    
      gdk_cairo_set_source_rgba (c, &blue);
      cairo_arc (c, x * 10.0, HEIGHT - y * 10, 10, 0, 2 * G_PI);
      cairo_fill (c);
    }
    
    gboolean timer (GtkWidget *widget)
    {
      x += vx * dt;
      y += vy * dt;
      if (y <= 0)
        vy = -vy;
      if (x * 10.0 >= WIDTH)
        vx = -vx;
      vx += - cw * vx * vx * dt;
      vy += -g * dt - cw * vy * vy * dt;
      gtk_widget_queue_draw (widget);
      return TRUE;
    }
    
    static void activate (GtkApplication *app, gpointer user_data)
    {
      GtkWidget *window = gtk_application_window_new (app);
      gtk_window_set_title (GTK_WINDOW (window), "Hello");
    
      GtkWidget *vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 5);
      gtk_window_set_child (GTK_WINDOW (window), vbox);
    
      GtkWidget *drawing_area = gtk_drawing_area_new ();
      gtk_widget_set_size_request (drawing_area, WIDTH, HEIGHT);
      gtk_drawing_area_set_draw_func (GTK_DRAWING_AREA (drawing_area), draw, NULL, NULL);
      gtk_box_append (GTK_BOX (vbox), drawing_area);
    
      GtkWidget *quit_button = gtk_button_new_with_label ("Quit");
      g_signal_connect_swapped (quit_button, "clicked", G_CALLBACK (gtk_window_destroy), window);
      gtk_box_append (GTK_BOX (vbox), quit_button);
    
      g_timeout_add (50, (GSourceFunc) timer, drawing_area);
    
      gtk_window_present (GTK_WINDOW (window));
    }
    
    int main (int argc, char **argv)
    {
      GtkApplication *app = gtk_application_new ("de.hs-bochum.cvh.hp.hello-gtk", G_APPLICATION_DEFAULT_FLAGS);
      g_signal_connect (app, "activate", G_CALLBACK (activate), NULL);
      int status = g_application_run (G_APPLICATION (app), argc, argv);
      g_object_unref (app);
      return status;
    }