Skip to content
Snippets Groups Projects
Commit 452b1a93 authored by Peter Gerwinski's avatar Peter Gerwinski
Browse files

Beispiele und "Screenshots" 31.10.2022

parent 015619ed
Branches
No related tags found
No related merge requests found
Showing with 612 additions and 0 deletions
cassini/home/peter/bo/2022ws/hp/20221024> gcc -Wall -O $(pkg-config --cflags gtk+-3.0) gtk-01.c -o gtk-01
/usr/bin/ld: /tmp/ccgTelwD.o: in function `main':
gtk-01.c:(.text+0x16): undefined reference to `gtk_init'
/usr/bin/ld: gtk-01.c:(.text+0x20): undefined reference to `gtk_window_new'
/usr/bin/ld: gtk-01.c:(.text+0x28): undefined reference to `gtk_window_get_type'
/usr/bin/ld: gtk-01.c:(.text+0x33): undefined reference to `g_type_check_instance_cast'
/usr/bin/ld: gtk-01.c:(.text+0x42): undefined reference to `gtk_window_set_title'
/usr/bin/ld: gtk-01.c:(.text+0x4a): undefined reference to `gtk_widget_show'
/usr/bin/ld: gtk-01.c:(.text+0x4f): undefined reference to `gtk_main'
collect2: error: ld returned 1 exit status
cassini/home/peter/bo/2022ws/hp/20221024> gcc -Wall -O $(pkg-config --cflags gtk+-3.0) gtk-01.c -c
cassini/home/peter/bo/2022ws/hp/20221024> ./gtk-01
bash: ./gtk-01: Datei oder Verzeichnis nicht gefunden
cassini/home/peter/bo/2022ws/hp/20221024> ls -l gtk-01*
-rw-r--r-- 1 peter peter 256 Jan 4 2021 gtk-01.c
-rw-r--r-- 1 peter peter 2024 Okt 31 11:43 gtk-01.o
cassini/home/peter/bo/2022ws/hp/20221024> gcc gtk-01.o -o gtek-01
/usr/bin/ld: gtk-01.o: in function `main':
gtk-01.c:(.text+0x16): undefined reference to `gtk_init'
/usr/bin/ld: gtk-01.c:(.text+0x20): undefined reference to `gtk_window_new'
/usr/bin/ld: gtk-01.c:(.text+0x28): undefined reference to `gtk_window_get_type'
/usr/bin/ld: gtk-01.c:(.text+0x33): undefined reference to `g_type_check_instance_cast'
/usr/bin/ld: gtk-01.c:(.text+0x42): undefined reference to `gtk_window_set_title'
/usr/bin/ld: gtk-01.c:(.text+0x4a): undefined reference to `gtk_widget_show'
/usr/bin/ld: gtk-01.c:(.text+0x4f): undefined reference to `gtk_main'
collect2: error: ld returned 1 exit status
cassini/home/peter/bo/2022ws/hp/20221024> gcc gtk-01.o $(pkg-config --libs gtk+-3.0) -o gtk-01
cassini/home/peter/bo/2022ws/hp/20221024> ./gtk-01
\ No newline at end of file
%.elf: %.c
avr-gcc -Wall -Os -mmcu=atmega328p $< -o $@
%.hex: %.elf
avr-objcopy -O ihex $< $@
download:
./download.sh
philosophy: philosophy.o answer.o
gcc philosophy.o answer.o -o philosophy
answer.o: answer.c answer.h
gcc -Wall -O answer.c -c
philosophy.o: philosophy.c answer.h
gcc -Wall -O philosophy.c -c
TARGET = philosophy
OBJECTS = philosophy.o answer.o
HEADERS = answer.h
CFLAGS = -Wall -O
$(TARGET): $(OBJECTS)
gcc $(OBJECTS) -o $(TARGET)
answer.o: answer.c $(HEADERS)
gcc $(CFLAGS) answer.c -c
philosophy.o: philosophy.c $(HEADERS)
gcc $(CFLAGS) philosophy.c -c
clean:
rm -f $(OBJECTS) $(TARGET)
TARGET = philosophy
OBJECTS = philosophy.o answer.o
HEADERS = answer.h
CFLAGS = -Wall -O
$(TARGET): $(OBJECTS)
gcc $(OBJECTS) -o $(TARGET)
%.o: %.c $(HEADERS)
gcc $(CFLAGS) $< -c
clean:
rm -f $(OBJECTS) $(TARGET)
#include "answer.h"
int answer (void)
{
return 23;
}
extern int answer (void);
A = 0011 1010 ein Bit auf 1 setzen
| 0000 0100 bitweise Oder-Verknüpfung mit "Maske" (oder "Bitmaske")
---------
0011 1110
A = 0011 1010 ein Bit auf 1 setzen
| 0000 1000 bitweise Oder-Verknüpfung mit "Maske" (oder "Bitmaske")
---------
0011 1010
A = 0011 1010 ein Bit auf 0 setzen
& 1111 0111 bitweise Und-Verknüpfung mit "Maske" (oder "Bitmaske")
---------
0011 0010
Maske für Und = Einerkomplement der Maske für Oder (und umgekehrt)
In C:
Oder-Verknüpfung: C = A | B A |= B
Und-Verknüpfung: C = A & B A &= B
Einerkomplement: C = ~A
Erzeugen einer Oder-Maske: Bit-Verschiebung einer 1 nach links
0000 0001 << 2 = 0000 0100 Sprechweise: "Bit 2"
0000 0001 << 0 = 0000 0001 Sprechweise: "Bit 0"
Durchnumerierung der Bits: von rechts, beginnend mit 0
Erzeugen einer Und-Maske: Einerkomplement einer Oder-Maske
~(0000 0001 << 2) = 1111 1011 Sprechweise: "Bit 2"
~(0000 0001 << 0) = 1111 1110 Sprechweise: "Bit 0"
A = 0011 1010 ein Bit umklappen
^ 0000 1000 bitweise Exklusiv-Oder-Verknüpfung mit "Maske" (oder "Bitmaske")
---------
0011 0010
A = 0011 1010 ein Bit abfragen
& 0000 1000 bitweise Und-Verknüpfung mit Oder-Maske
---------
0000 1000 != 0 Ergebnis ungleich 0 bedeutet: Bit ist gesetzt
#include <avr/io.h>
int main (void)
{
DDRD = 0x40; /* binär: 0100 0000 */
PORTD = 0x40; /* binär: 0100 0000 */
while (1);
return 0;
}
:100000000C9434000C943E000C943E000C943E0082
:100010000C943E000C943E000C943E000C943E0068
:100020000C943E000C943E000C943E000C943E0058
:100030000C943E000C943E000C943E000C943E0048
:100040000C943E000C943E000C943E000C943E0038
:100050000C943E000C943E000C943E000C943E0028
:100060000C943E000C943E0011241FBECFEFD8E04C
:10007000DEBFCDBF0E9440000C9444000C940000F1
:0C00800080E48AB98BB9FFCFF894FFCF61
:00000001FF
cassini/home/peter/bo/2022ws/hp/20221031> cat blink-0.c
#include <avr/io.h>
int main (void)
{
DDRD = 0x40; /* binär: 0100 0000 */
PORTD = 0x40; /* binär: 0100 0000 */
while (1);
return 0;
}
cassini/home/peter/bo/2022ws/hp/20221031> gcc -Wall -O blink-0.c -o blink-0
blink-0.c:1:10: fatal error: avr/io.h: Datei oder Verzeichnis nicht gefunden
#include <avr/io.h>
^~~~~~~~~~
compilation terminated.
cassini/home/peter/bo/2022ws/hp/20221031> cat Makefile
%.elf: %.c
avr-gcc -Wall -Os -mmcu=atmega328p $< -o $@
%.hex: %.elf
avr-objcopy -O ihex $< $@
download:
./download.sh
cassini/home/peter/bo/2022ws/hp/20221031> avr-gcc -Wall -Os -mmcu=atmega328p blink-0.c -o blink-0.elf
cassini/home/peter/bo/2022ws/hp/20221031> ls -l blink-0.*
-rw-r--r-- 1 peter peter 148 Jan 4 2021 blink-0.c
-rwxr-xr-x 1 peter peter 6360 Okt 31 15:01 blink-0.elf
cassini/home/peter/bo/2022ws/hp/20221031> ./blink-0.elf
bash: ./blink-0.elf: Kann die Binärdatei nicht ausführen: Fehler im Format der Programmdatei
cassini/home/peter/bo/2022ws/hp/20221031> avr-objcopy -O ihex blink-0.elf blink-0.hex
cassini/home/peter/bo/2022ws/hp/20221031> cat blink-0.hex
:100000000C9434000C943E000C943E000C943E0082
:100010000C943E000C943E000C943E000C943E0068
:100020000C943E000C943E000C943E000C943E0058
:100030000C943E000C943E000C943E000C943E0048
:100040000C943E000C943E000C943E000C943E0038
:100050000C943E000C943E000C943E000C943E0028
:100060000C943E000C943E0011241FBECFEFD8E04C
:10007000DEBFCDBF0E9440000C9444000C940000F1
:0C00800080E48AB98BB9FFCFF894FFCF61
:00000001FF
cassini/home/peter/bo/2022ws/hp/20221031> cat download.sh
port=$(ls -rt /dev/ttyACM* | tail -1)
echo avrdude -P $port -c arduino -p m328p -U flash:w:$(ls -rt *.hex | tail -1)
avrdude -P $port -c arduino -p m328p -U flash:w:$(ls -rt *.hex | tail -1) 2>/dev/null
cassini/home/peter/bo/2022ws/hp/20221031> avrdude -P /dev/ttyACM0 -c arduino -p m328p -U flash:w:blink-0.hex
avrdude: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.00s
avrdude: Device signature = 0x1e950f (probably m328p)
avrdude: NOTE: "flash" memory has been specified, an erase cycle will be performed
To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: reading input file "blink-0.hex"
avrdude: input file blink-0.hex auto detected as Intel Hex
avrdude: writing flash (140 bytes):
Writing | ################################################## | 100% 0.04s
avrdude: 140 bytes of flash written
avrdude: verifying flash memory against blink-0.hex:
avrdude: load data flash data from input file blink-0.hex:
avrdude: input file blink-0.hex auto detected as Intel Hex
avrdude: input file blink-0.hex contains 140 bytes
avrdude: reading on-chip flash data:
Reading | ################################################## | 100% 0.03s
avrdude: verifying ...
avrdude: 140 bytes of flash verified
avrdude: safemode: Fuses OK (E:00, H:00, L:00)
avrdude done. Thank you.
cassini/home/peter/bo/2022ws/hp/20221031>
port=$(ls -rt /dev/ttyACM* | tail -1)
echo avrdude -P $port -c arduino -p m328p -U flash:w:$(ls -rt *.hex | tail -1)
avrdude -P $port -c arduino -p m328p -U flash:w:$(ls -rt *.hex | tail -1) 2>/dev/null
File moved
#include <gtk/gtk.h>
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);
gtk_widget_set_size_request (drawing_area, 100, 100);
gtk_widget_show (drawing_area);
gtk_widget_show (button);
gtk_widget_show (vbox);
gtk_widget_show (window);
gtk_main ();
return 0;
}
#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. */
}
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_show (drawing_area);
gtk_widget_show (button);
gtk_widget_show (vbox);
gtk_widget_show (window);
gtk_main ();
return 0;
}
#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;
}
#include <gtk/gtk.h>
#define WIDTH 320
#define HEIGHT 240
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_arc (c, x, y, 5, 0, 2 * G_PI);
cairo_fill (c);
return FALSE;
}
gboolean timer (GtkWidget *widget)
{
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;
}
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;
}
#include <gtk/gtk.h>
#define WIDTH 320
#define HEIGHT 240
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_arc (c, x, 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;
}
#include <gtk/gtk.h>
#define WIDTH 320
#define HEIGHT 240
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_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;
}
#include <gtk/gtk.h>
#define WIDTH 640
#define HEIGHT 480
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_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;
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment