Select Git revision
functions-21.c
wurf-11.c 1.85 KiB
#include <gtk/gtk.h>
#define WIDTH 1024
#define HEIGHT 768
double x = 0.0;
double y = 6.0;
double vx = 1.5;
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;
}