-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgraphic.h
133 lines (110 loc) · 4.27 KB
/
graphic.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
/* BOF GRAPHIC_H
Praktikumsversuch: Einführung in die Sprache C
Programm-Modul "Grafische Darstellung"
*/
#ifndef GRAFIK__H
#define GRAFIK__H
/** dieses Programmmodul benutzt die Grafikbibliothek `libSDL2`
* Homepage: https://www.libsdl.org
*
* zum Installieren der benötigten Dateien innerhalb der MRT-VM,
* folgenden Kommandozeilenbefehl nutzen:
sudo apt-get install libsdl2-dev
*/
#include <SDL2/SDL.h>
/** limits.h definiert Eigenschaften verschiedener Datentypen
*/
#include <limits.h>
/*--- Typdefinitionen ------------------------------------------------------*/
/** Farbnamen der 32 vorgegebenen Farben
*/
typedef enum { Black = 0,
Valhalla,
Loulou,
Oiled_Cedar,
Rope,
Tahiti_Gold,
Twine,
Pancho,
Golden_Fizz,
Atlantis,
Christi,
Elf_Green,
Dell,
Verdigris,
Opal,
Deep_Koamaru,
Venice_Blue,
Royal_Blue,
Cornflower,
Viking,
Light_Steel_Blu,
White,
Heather,
Topaz,
Dim_Gray,
Smokey_Ash,
Clairvoyant,
Brown,
Mandy,
Plum,
Rainforest,
Stinger
} color_name_t;
typedef enum {
Nichts = 0, // keine relevante Nutzereingabe
Fehler, // SDL-Problem
Beenden, // Fenster schließen oder Taste `q`
Pause, // Leertaste
Schritt, // Punkt-Taste `.`
} user_input_t;
/*--------------------------------------------------------------------------*/
/* Funktionen */
/*--------------------------------------------------------------------------*/
/*--- Grafik initialisieren und schließen ----------------------------------*/
/** Initialisiere das Grafikfenster zum Start des Programms.
*/
void grafik_init_window(void);
/** Schließe das Grafikfenster und beende SDL.
* wird auch im Fehlerfall ausgeführt.
*/
void grafik_close_window(void);
/** erzeugt neuen Speicherbereich zum Zeichnen.
* entfernt den alten Speicherbereich aus dem RAM vor dem Neuanlegen
* Benutze diese Funktion um die Auflösung oder die Bereichsgrenzen zu ändern
* skaliert automatisch delta(x_max-x_min) auf die Pixelanzahl x_points und
* skaliert automatisch delta(y_max-y_min) auf die Pixelanzahl y_points
* Dieses komplexe Interface ist nützlich um die `cosinus`-Funktion zu zeichnen.
*/
void grafik_create_paint_area(const double x_min, const double x_max,
const double y_min, const double y_max,
const unsigned x_points, const unsigned y_points);
/*--- Ausgabefenster sperren und entsperren --------------------------------*/
/** Ausgabefenster sperren um zu zeichnen.
*/
void grafik_lock_for_painting();
/** Ausgabefenster entsperren und gepufferte Daten ausgeben.
*/
void grafik_unlock_and_show();
/*--- Zeichenfunktionen ----------------------------------------------------*/
/** setze einen einzelnen Grafikpunkt.
* an den Koordinaten der Berechnung,
* die Umrechnung in Bildschirmpixel erfolgt automatisch.
* Angebe des Farbwertes mittels der oben definierten Farbnamen.
*/
int grafik_paint_point(double x, double y,
color_name_t colorname);
/*--- Hilfsfunktionen ------------------------------------------------------*/
/** Wartet auf eine Nutzereingabe für `timeout` Millisekunden.
* Wartet auf Nutzereingaben, wie Fenster schließen und Tasten: `q`, `Leertaste`und `.`.
* Liefert die Art der erkannten Nutzereingabe zurück, sobald der Nutzer diese eingegeben hat
* wenn keine, oder keine der gewünschten Nutzereingaben erfolgen, wird gewartet bis timeout Millisekunden verstrichen sind
* Nutzereingaben, und System-Ereignisse welche nicht gebraucht werden, werden entfernt und ignoriert
* ein timeout-Wert von `0` wartet unendlich, bis einer der gewünschter Nutzereingaben eintrifft
*/
user_input_t grafik_user_input(int timeout);
/*--- Demonstration für den Einstieg in die Praktikumsaufgabe --------------*/
// Demonstrationsfunktion, bitte nicht im eigenen Projekt verwenden.
void farb_demonstration(void);
#endif /* GRAFIK__H */
/* EOF GRAFIK__H */