diff --git a/20191128/hp-20191128.pdf b/20191128/hp-20191128.pdf index 1a516387207ea82b85a05d92696d9e364f0cf1f7..563b9a13967299971a69b572711f8473dee7c7d3 100644 Binary files a/20191128/hp-20191128.pdf and b/20191128/hp-20191128.pdf differ diff --git a/20191128/hp-20191128.tex b/20191128/hp-20191128.tex index a64d527716f8eb38f57a3ee8148afde192ae2ab1..6bceba84fdcd51ebad1a256bb42d7d8a20c48ec5 100644 --- a/20191128/hp-20191128.tex +++ b/20191128/hp-20191128.tex @@ -634,7 +634,7 @@ ibpng16 -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux -gnu/glib-2.0/include -lgtk-3 -lgdk-3 -lpangocairo-1.0 -lpango-1.0 -latk-1.0 -lcairo-gobject -lcairo -lgdk_pix - buf-2.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0-o hello-gtk¿ + buf-2.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0 -o hello-gtk¿ \end{lstlisting} \vspace*{-1cm} \end{onlyenv} diff --git a/20191205/gtk-10.c b/20191205/gtk-10.c index 928f80f9331b86af1e431385e32691dbd1591b60..f7fb2d5b1c4d3f1082a15b8f3a23fb5480fdd4f1 100644 --- a/20191205/gtk-10.c +++ b/20191205/gtk-10.c @@ -3,29 +3,28 @@ #define WIDTH 320 #define HEIGHT 240 -double t = 0.0; - -double x = 10; -double y = 200; -double vx = 20; -double vy = -60; +double x = 5; +double y = 95; +double vx = 0.5; +double vy = 0.7; +double dt = 0.05; double g = 9.81; gboolean draw (GtkWidget *widget, cairo_t *c, gpointer data) { GdkRGBA blue = { 0.0, 0.5, 1.0, 1.0 }; - gdk_cairo_set_source_rgba (c, &blue); - cairo_rectangle (c, x + vx * t, y + vy * t + 0.5 * g * t * t, 10, 10); + cairo_arc (c, x, HEIGHT - y, 5, 0, 2 * G_PI); cairo_fill (c); - - return FALSE; /* TRUE to stop other handlers from being invoked for the event. - FALSE to propagate the event further. */ + return FALSE; } gboolean timer (GtkWidget *widget) { - t += 0.05; + x += vx * dt; + y += vy * dt; + vx += 0.0 * dt; + vy += (-g) * dt; gtk_widget_queue_draw_area (widget, 0, 0, WIDTH, HEIGHT); g_timeout_add (50, (GSourceFunc) timer, widget); return FALSE; @@ -34,20 +33,28 @@ gboolean timer (GtkWidget *widget) int main (int argc, char **argv) { gtk_init (&argc, &argv); - GtkWidget *window = gtk_window_new (GTK_WINDOW_TOPLEVEL); - gtk_widget_show (window); 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_widget_show (drawing_area); - gtk_container_add (GTK_CONTAINER (window), drawing_area); - gtk_widget_set_size_request (drawing_area, WIDTH, HEIGHT); + 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, WIDTH, HEIGHT); g_timeout_add (50, (GSourceFunc) timer, drawing_area); + gtk_widget_show (drawing_area); + gtk_widget_show (button); + gtk_widget_show (vbox); + gtk_widget_show (window); gtk_main (); return 0; } diff --git a/20191205/gtk-11.c b/20191205/gtk-11.c index 303627b49953e1d37761213505b48fb7a0ff2c02..1fa3d7169dc09ed0a5e89abffdce3cb297509842 100644 --- a/20191205/gtk-11.c +++ b/20191205/gtk-11.c @@ -1,35 +1,30 @@ #include <gtk/gtk.h> -#define WIDTH 320 -#define HEIGHT 240 +#define WIDTH 640 +#define HEIGHT 480 -double t = 0.0; +double x = 5; +double y = 95; +double vx = 0.5; +double vy = 0.7; double dt = 0.05; - -double x = 10; -double y = 200; -double vx = 20; -double vy = -60; double g = 9.81; gboolean draw (GtkWidget *widget, cairo_t *c, gpointer data) { GdkRGBA blue = { 0.0, 0.5, 1.0, 1.0 }; - gdk_cairo_set_source_rgba (c, &blue); - cairo_rectangle (c, x, y, 10, 10); + cairo_arc (c, x, HEIGHT - y, 5, 0, 2 * G_PI); cairo_fill (c); - - return FALSE; /* TRUE to stop other handlers from being invoked for the event. - FALSE to propagate the event further. */ + return FALSE; } gboolean timer (GtkWidget *widget) { - t += dt; x += vx * dt; y += vy * dt; - vy += g * dt; + vx += 0.0 * dt; + vy += (-g) * dt; gtk_widget_queue_draw_area (widget, 0, 0, WIDTH, HEIGHT); g_timeout_add (50, (GSourceFunc) timer, widget); return FALSE; @@ -38,20 +33,28 @@ gboolean timer (GtkWidget *widget) int main (int argc, char **argv) { gtk_init (&argc, &argv); - GtkWidget *window = gtk_window_new (GTK_WINDOW_TOPLEVEL); - gtk_widget_show (window); 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_widget_show (drawing_area); - gtk_container_add (GTK_CONTAINER (window), drawing_area); - gtk_widget_set_size_request (drawing_area, WIDTH, HEIGHT); + 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, WIDTH, HEIGHT); g_timeout_add (50, (GSourceFunc) timer, drawing_area); + gtk_widget_show (drawing_area); + gtk_widget_show (button); + gtk_widget_show (vbox); + gtk_widget_show (window); gtk_main (); return 0; } diff --git a/20191205/gtk-12.c b/20191205/gtk-12.c index d551f7a760c7aad6b7146094de6dfe7152eece6f..e0c274336e1ea7a21983daaa95a563796b532e25 100644 --- a/20191205/gtk-12.c +++ b/20191205/gtk-12.c @@ -1,41 +1,30 @@ #include <gtk/gtk.h> -#define WIDTH 320 -#define HEIGHT 240 +#define WIDTH 640 +#define HEIGHT 480 -double t = 0.0; +double x = 5; +double y = 95; +double vx = 5.0; +double vy = 0.7; double dt = 0.05; - -double x = 10; -double y = 200; -double vx = 20; -double vy = -60; double g = 9.81; gboolean draw (GtkWidget *widget, cairo_t *c, gpointer data) { GdkRGBA blue = { 0.0, 0.5, 1.0, 1.0 }; - gdk_cairo_set_source_rgba (c, &blue); - cairo_rectangle (c, x, y, 10, 10); + cairo_arc (c, x, HEIGHT - y, 5, 0, 2 * G_PI); cairo_fill (c); - - return FALSE; /* TRUE to stop other handlers from being invoked for the event. - FALSE to propagate the event further. */ + return FALSE; } gboolean timer (GtkWidget *widget) { - t += dt; x += vx * dt; y += vy * dt; - vy += g * dt; - if (y >= HEIGHT) - vy = -vy; - if (x >= WIDTH) - vx = -vx; - if (x <= 0) - vx = -vx; + vx += 0.0 * dt; + vy += (-g) * dt; gtk_widget_queue_draw_area (widget, 0, 0, WIDTH, HEIGHT); g_timeout_add (50, (GSourceFunc) timer, widget); return FALSE; @@ -44,20 +33,28 @@ gboolean timer (GtkWidget *widget) int main (int argc, char **argv) { gtk_init (&argc, &argv); - GtkWidget *window = gtk_window_new (GTK_WINDOW_TOPLEVEL); - gtk_widget_show (window); 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_widget_show (drawing_area); - gtk_container_add (GTK_CONTAINER (window), drawing_area); - gtk_widget_set_size_request (drawing_area, WIDTH, HEIGHT); + 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, WIDTH, HEIGHT); g_timeout_add (50, (GSourceFunc) timer, drawing_area); + gtk_widget_show (drawing_area); + gtk_widget_show (button); + gtk_widget_show (vbox); + gtk_widget_show (window); gtk_main (); return 0; } diff --git a/20191205/gtk-13.c b/20191205/gtk-13.c index 1b7c4dbf2434f88fa3e6ae838b8911e58447a2d9..a91d9abf14066d773103a8fca1e2c41abad40be3 100644 --- a/20191205/gtk-13.c +++ b/20191205/gtk-13.c @@ -1,43 +1,30 @@ #include <gtk/gtk.h> -#define WIDTH 320 -#define HEIGHT 240 - -double t = 0.0; -double dt = 0.2; - -int r = 5; - -double x = 10; -double y = 200; -double vx = 20; -double vy = -60; +#define WIDTH 640 +#define HEIGHT 480 + +double x = 5; +double y = 95; +double vx = 50.0; +double vy = 0.7; +double dt = 0.05; double g = 9.81; gboolean draw (GtkWidget *widget, cairo_t *c, gpointer data) { GdkRGBA blue = { 0.0, 0.5, 1.0, 1.0 }; - gdk_cairo_set_source_rgba (c, &blue); - cairo_arc (c, x, y, r, 0, 2 * G_PI); + cairo_arc (c, x, HEIGHT - y, 5, 0, 2 * G_PI); cairo_fill (c); - - return FALSE; /* TRUE to stop other handlers from being invoked for the event. - FALSE to propagate the event further. */ + return FALSE; } gboolean timer (GtkWidget *widget) { - t += dt; x += vx * dt; y += vy * dt; - vy += g * dt; - if (y + r >= HEIGHT) - vy = -vy * 0.9; - if (x + r >= WIDTH) - vx = -vx * 0.9; - if (x - r <= 0) - vx = -vx * 0.9; + vx += 0.0 * dt; + vy += (-g) * dt; gtk_widget_queue_draw_area (widget, 0, 0, WIDTH, HEIGHT); g_timeout_add (50, (GSourceFunc) timer, widget); return FALSE; @@ -46,20 +33,28 @@ gboolean timer (GtkWidget *widget) int main (int argc, char **argv) { gtk_init (&argc, &argv); - GtkWidget *window = gtk_window_new (GTK_WINDOW_TOPLEVEL); - gtk_widget_show (window); 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_widget_show (drawing_area); - gtk_container_add (GTK_CONTAINER (window), drawing_area); - gtk_widget_set_size_request (drawing_area, WIDTH, HEIGHT); + 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, WIDTH, HEIGHT); g_timeout_add (50, (GSourceFunc) timer, drawing_area); + gtk_widget_show (drawing_area); + gtk_widget_show (button); + gtk_widget_show (vbox); + gtk_widget_show (window); gtk_main (); return 0; } diff --git a/20191205/gtk-14.c b/20191205/gtk-14.c new file mode 100644 index 0000000000000000000000000000000000000000..47095bb576288741f0753f63966ba853cbc3ad4e --- /dev/null +++ b/20191205/gtk-14.c @@ -0,0 +1,60 @@ +#include <gtk/gtk.h> + +#define WIDTH 640 +#define HEIGHT 480 + +double x = 5; +double y = 95; +double vx = 50.0; +double vy = 70.0; +double dt = 0.05; +double g = 9.81; + +gboolean draw (GtkWidget *widget, cairo_t *c, gpointer data) +{ + GdkRGBA blue = { 0.0, 0.5, 1.0, 1.0 }; + gdk_cairo_set_source_rgba (c, &blue); + cairo_arc (c, x, HEIGHT - y, 5, 0, 2 * G_PI); + cairo_fill (c); + return FALSE; +} + +gboolean timer (GtkWidget *widget) +{ + x += vx * dt; + y += vy * dt; + vx += 0.0 * dt; + vy += (-g) * dt; + gtk_widget_queue_draw_area (widget, 0, 0, WIDTH, HEIGHT); + g_timeout_add (50, (GSourceFunc) timer, widget); + 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, WIDTH, HEIGHT); + + g_timeout_add (50, (GSourceFunc) timer, drawing_area); + + gtk_widget_show (drawing_area); + gtk_widget_show (button); + gtk_widget_show (vbox); + gtk_widget_show (window); + gtk_main (); + return 0; +} diff --git a/20191205/gtk-15.c b/20191205/gtk-15.c new file mode 100644 index 0000000000000000000000000000000000000000..8c93bc8ce1f7e09b7b58ab36732abfebb99d5b51 --- /dev/null +++ b/20191205/gtk-15.c @@ -0,0 +1,62 @@ +#include <gtk/gtk.h> + +#define WIDTH 640 +#define HEIGHT 480 + +double x = 5; +double y = 95; +double vx = 50.0; +double vy = 70.0; +double dt = 0.05; +double g = 9.81; + +gboolean draw (GtkWidget *widget, cairo_t *c, gpointer data) +{ + GdkRGBA blue = { 0.0, 0.5, 1.0, 1.0 }; + gdk_cairo_set_source_rgba (c, &blue); + cairo_arc (c, x, HEIGHT - y, 5, 0, 2 * G_PI); + cairo_fill (c); + return FALSE; +} + +gboolean timer (GtkWidget *widget) +{ + x += vx * dt; + y += vy * dt; + vx += 0.0 * dt; + vy += (-g) * dt; + if (x + 5 >= WIDTH) + vx = -vx; + gtk_widget_queue_draw_area (widget, 0, 0, WIDTH, HEIGHT); + g_timeout_add (50, (GSourceFunc) timer, widget); + 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, WIDTH, HEIGHT); + + g_timeout_add (50, (GSourceFunc) timer, drawing_area); + + gtk_widget_show (drawing_area); + gtk_widget_show (button); + gtk_widget_show (vbox); + gtk_widget_show (window); + gtk_main (); + return 0; +} diff --git a/20191205/gtk-16.c b/20191205/gtk-16.c new file mode 100644 index 0000000000000000000000000000000000000000..0901dd7f491ca219cceb6c1f344291de0c154f38 --- /dev/null +++ b/20191205/gtk-16.c @@ -0,0 +1,63 @@ +#include <gtk/gtk.h> + +#define WIDTH 640 +#define HEIGHT 480 +#define RADIUS 5 + +double x = 5; +double y = 95; +double vx = 50.0; +double vy = 70.0; +double dt = 0.05; +double g = 9.81; + +gboolean draw (GtkWidget *widget, cairo_t *c, gpointer data) +{ + GdkRGBA blue = { 0.0, 0.5, 1.0, 1.0 }; + gdk_cairo_set_source_rgba (c, &blue); + cairo_arc (c, x, HEIGHT - y, RADIUS, 0, 2 * G_PI); + cairo_fill (c); + return FALSE; +} + +gboolean timer (GtkWidget *widget) +{ + x += vx * dt; + y += vy * dt; + vx += 0.0 * dt; + vy += (-g) * dt; + if (x + RADIUS >= WIDTH) + vx = -vx; + gtk_widget_queue_draw_area (widget, 0, 0, WIDTH, HEIGHT); + g_timeout_add (50, (GSourceFunc) timer, widget); + 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, WIDTH, HEIGHT); + + g_timeout_add (50, (GSourceFunc) timer, drawing_area); + + gtk_widget_show (drawing_area); + gtk_widget_show (button); + gtk_widget_show (vbox); + gtk_widget_show (window); + gtk_main (); + return 0; +} diff --git a/20191205/gtk-17.c b/20191205/gtk-17.c new file mode 100644 index 0000000000000000000000000000000000000000..978156ac66b448bf164108a7900b18041428bb0c --- /dev/null +++ b/20191205/gtk-17.c @@ -0,0 +1,64 @@ +#include <gtk/gtk.h> + +#define WIDTH 640 +#define HEIGHT 480 +#define RADIUS 5 + +double x = 5; +double y = 95; +double vx = 50.0; +double vy = 70.0; +double dt = 0.05; +double g = 9.81; +double k = 0.1; + +gboolean draw (GtkWidget *widget, cairo_t *c, gpointer data) +{ + GdkRGBA blue = { 0.0, 0.5, 1.0, 1.0 }; + gdk_cairo_set_source_rgba (c, &blue); + cairo_arc (c, x, HEIGHT - y, RADIUS, 0, 2 * G_PI); + cairo_fill (c); + return FALSE; +} + +gboolean timer (GtkWidget *widget) +{ + x += vx * dt; + y += vy * dt; + vx += (-k * vx) * dt; + vy += (-g - k * vy) * dt; + if (x + RADIUS >= WIDTH) + vx = -vx; + gtk_widget_queue_draw_area (widget, 0, 0, WIDTH, HEIGHT); + g_timeout_add (50, (GSourceFunc) timer, widget); + 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, WIDTH, HEIGHT); + + g_timeout_add (50, (GSourceFunc) timer, drawing_area); + + gtk_widget_show (drawing_area); + gtk_widget_show (button); + gtk_widget_show (vbox); + gtk_widget_show (window); + gtk_main (); + return 0; +} diff --git a/20191205/gtk-18.c b/20191205/gtk-18.c new file mode 100644 index 0000000000000000000000000000000000000000..a26e54921f6106789e9ded8c34b2bb2028f7e943 --- /dev/null +++ b/20191205/gtk-18.c @@ -0,0 +1,64 @@ +#include <gtk/gtk.h> + +#define WIDTH 640 +#define HEIGHT 480 +#define RADIUS 5 + +double x = 5; +double y = 95; +double vx = 50.0; +double vy = 70.0; +double dt = 0.05; +double g = 9.81; +double k = 0.3; + +gboolean draw (GtkWidget *widget, cairo_t *c, gpointer data) +{ + GdkRGBA blue = { 0.0, 0.5, 1.0, 1.0 }; + gdk_cairo_set_source_rgba (c, &blue); + cairo_arc (c, x, HEIGHT - y, RADIUS, 0, 2 * G_PI); + cairo_fill (c); + return FALSE; +} + +gboolean timer (GtkWidget *widget) +{ + x += vx * dt; + y += vy * dt; + vx += (-k * vx) * dt; + vy += (-g - k * vy) * dt; + if (x + RADIUS >= WIDTH) + vx = -vx; + gtk_widget_queue_draw_area (widget, 0, 0, WIDTH, HEIGHT); + g_timeout_add (50, (GSourceFunc) timer, widget); + 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, WIDTH, HEIGHT); + + g_timeout_add (50, (GSourceFunc) timer, drawing_area); + + gtk_widget_show (drawing_area); + gtk_widget_show (button); + gtk_widget_show (vbox); + gtk_widget_show (window); + gtk_main (); + return 0; +} diff --git a/20191205/gtk-8.c b/20191205/gtk-8.c index 35edb31368161671917a1523845e73c6d944c8a4..80e5747c13d94699d4883018a5b2457fed9885cb 100644 --- a/20191205/gtk-8.c +++ b/20191205/gtk-8.c @@ -3,26 +3,22 @@ #define WIDTH 320 #define HEIGHT 240 -double t = 0.0; - -double vx = 40; -double vy = 30; +double x = 5; +double y = 95; gboolean draw (GtkWidget *widget, cairo_t *c, gpointer data) { GdkRGBA blue = { 0.0, 0.5, 1.0, 1.0 }; - gdk_cairo_set_source_rgba (c, &blue); - cairo_rectangle (c, 10 + vx * t, 10 + vy * t, 10, 10); + cairo_arc (c, x, y, 5, 0, 2 * G_PI); cairo_fill (c); - - return FALSE; /* TRUE to stop other handlers from being invoked for the event. - FALSE to propagate the event further. */ + return FALSE; } gboolean timer (GtkWidget *widget) { - t += 0.05; + x += 0.5; + y -= 0.7; gtk_widget_queue_draw_area (widget, 0, 0, WIDTH, HEIGHT); g_timeout_add (50, (GSourceFunc) timer, widget); return FALSE; @@ -31,20 +27,28 @@ gboolean timer (GtkWidget *widget) int main (int argc, char **argv) { gtk_init (&argc, &argv); - GtkWidget *window = gtk_window_new (GTK_WINDOW_TOPLEVEL); - gtk_widget_show (window); 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_widget_show (drawing_area); - gtk_container_add (GTK_CONTAINER (window), drawing_area); - gtk_widget_set_size_request (drawing_area, WIDTH, HEIGHT); + 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); g_timeout_add (50, (GSourceFunc) timer, drawing_area); + gtk_widget_show (drawing_area); + gtk_widget_show (button); + gtk_widget_show (vbox); + gtk_widget_show (window); gtk_main (); return 0; } diff --git a/20191205/gtk-9.c b/20191205/gtk-9.c index af68170dc104db075df0b609a2878d7256050074..7beb24ccbed561b4f7451838ea1120fe71cf8b1c 100644 --- a/20191205/gtk-9.c +++ b/20191205/gtk-9.c @@ -3,29 +3,28 @@ #define WIDTH 320 #define HEIGHT 240 -double t = 0.0; - -double x = 10; -double y = 10; -double vx = 40; -double vy = 30; +double x = 5; +double y = 95; +double vx = 0.5; +double vy = 0.7; +double dt = 0.05; double g = 9.81; gboolean draw (GtkWidget *widget, cairo_t *c, gpointer data) { GdkRGBA blue = { 0.0, 0.5, 1.0, 1.0 }; - gdk_cairo_set_source_rgba (c, &blue); - cairo_rectangle (c, x + vx * t, y + vy * t - 0.5 * g * t * t, 10, 10); + cairo_arc (c, x, y, 5, 0, 2 * G_PI); cairo_fill (c); - - return FALSE; /* TRUE to stop other handlers from being invoked for the event. - FALSE to propagate the event further. */ + return FALSE; } gboolean timer (GtkWidget *widget) { - t += 0.05; + x += vx * dt; + y += vy * dt; + vx += 0.0 * dt; + vy += (-g) * dt; gtk_widget_queue_draw_area (widget, 0, 0, WIDTH, HEIGHT); g_timeout_add (50, (GSourceFunc) timer, widget); return FALSE; @@ -34,20 +33,28 @@ gboolean timer (GtkWidget *widget) int main (int argc, char **argv) { gtk_init (&argc, &argv); - GtkWidget *window = gtk_window_new (GTK_WINDOW_TOPLEVEL); - gtk_widget_show (window); 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_widget_show (drawing_area); - gtk_container_add (GTK_CONTAINER (window), drawing_area); - gtk_widget_set_size_request (drawing_area, WIDTH, HEIGHT); + 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); g_timeout_add (50, (GSourceFunc) timer, drawing_area); + gtk_widget_show (drawing_area); + gtk_widget_show (button); + gtk_widget_show (vbox); + gtk_widget_show (window); gtk_main (); return 0; } diff --git a/20191205/hp-20191205.pdf b/20191205/hp-20191205.pdf index 4086393f57e295c46c0cb1618cec58fd032907f7..d3cb9e3cf0c36c35101d1c56096155b99db8bd70 100644 Binary files a/20191205/hp-20191205.pdf and b/20191205/hp-20191205.pdf differ diff --git a/20191205/hp-20191205.tex b/20191205/hp-20191205.tex index 0e88f1319a2e8850a56bcfbe299c7533ccabe6d8..00aba63404fa43e5db265a2a66163dbf9b010ad3 100644 --- a/20191205/hp-20191205.tex +++ b/20191205/hp-20191205.tex @@ -119,6 +119,14 @@ Konvention: Großbuchstaben \end{itemize} +% \pause + \bigskip + + Nur Präprozessor laufen lassen: + \begin{lstlisting}[style=terminal] + $ ¡gcc -E hello-6.c¿ + \end{lstlisting} + \end{frame} \subsection{Bibliotheken einbinden} @@ -155,6 +163,16 @@ = Datei \file{libfoo.a} in Standard-Verzeichnis \end{itemize} +% \pause + \bigskip + + Quelltexte separat compilieren: + \begin{lstlisting}[style=terminal] + $ ¡gcc -Wall -O hello-6.c -c¿ + $ ¡gcc -Wall -O pruzzel.c -c¿ + $ ¡gcc hello-6.o pruzzel.o -o hello-6.c¿ + \end{lstlisting} + \end{frame} \subsection{Bibliothek verwenden (Beispiel: GTK+)} @@ -209,7 +227,7 @@ ibpng16 -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux -gnu/glib-2.0/include -lgtk-3 -lgdk-3 -lpangocairo-1.0 -lpango-1.0 -latk-1.0 -lcairo-gobject -lcairo -lgdk_pix - buf-2.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0-o hello-gtk¿ + buf-2.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0 -o hello-gtk¿ \end{lstlisting} \vspace*{-1cm} \end{onlyenv} @@ -339,7 +357,7 @@ \showsection \showsubsection - \textbf{Beispiel 1: Gleichmäßig beschleunigte Bewegung} (Schräger Wurf) + \textbf{Beispiel 1: Gleichmäßig beschleunigte Bewegung} -- Schräger Wurf \strut\hfill \begin{minipage}{2.5cm} @@ -391,7 +409,7 @@ \end{lstlisting} \end{minipage}% \begin{minipage}{5.13cm} - Siehe: \file{gtk-13.c} + Siehe: \file{gtk-16.c} \end{minipage} \end{onlyenv}% \hfill\strut diff --git a/20191205/photo-20191205-171706.jpg b/20191205/photo-20191205-171706.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b9783584460a8f8d659c4eea2b0e676268cd83e0 Binary files /dev/null and b/20191205/photo-20191205-171706.jpg differ diff --git a/20191205/photo-20191205-171706.txt b/20191205/photo-20191205-171706.txt new file mode 100644 index 0000000000000000000000000000000000000000..db0f9c7de8cc180ed7ebd4bc5527c9ac20da0bb8 --- /dev/null +++ b/20191205/photo-20191205-171706.txt @@ -0,0 +1 @@ +README: Schräger Wurf diff --git a/README.md b/README.md index 91c8cc3ffd35160552c8cbfea2cd9006bb2f9523..d82dab87c7e8845b056af0e65c499ba36591dcd1 100644 --- a/README.md +++ b/README.md @@ -56,6 +56,7 @@ Tafelbilder: * [14.11.2019: Logische und bitweise Und-Verknüpfung (rechts), einzelnes Bit auf 1 setzen (links)](https://gitlab.cvh-server.de/pgerwinski/hp/raw/master/20191114/photo-20191114-172339.jpg) * [14.11.2019: Einzelnes Bit auf 1 (rechts) bzw. auf 0 (links) setzen](https://gitlab.cvh-server.de/pgerwinski/hp/raw/master/20191114/photo-20191114-172358.jpg) * [14.11.2019: Einzelnes Bit auf 0 setzen (rechts) bzw. umklappen (Mitte) bzw. abfragen (links)](https://gitlab.cvh-server.de/pgerwinski/hp/raw/master/20191114/photo-20191114-172434.jpg) + * [05.12.2019: Schräger Wurf](https://gitlab.cvh-server.de/pgerwinski/hp/raw/master/20191205/photo-20191205-171706.jpg) Praktikumsunterlagen: --------------------- diff --git a/hp-slides-2019ws.pdf b/hp-slides-2019ws.pdf index 7fd1a30e5988165401bb850f69ff774e23e16761..22b56fe4981b07e15d49d4c585d8857fc98a2961 100644 Binary files a/hp-slides-2019ws.pdf and b/hp-slides-2019ws.pdf differ