annotate main.c @ 24:bebd95177e96

add images
author Dennis C. M. <dennis@denniscm.com>
date Tue, 27 Jun 2023 20:13:25 +0100
parents 8a5a7aee69ce
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
8
f7af7255705e text flickering fixed
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
1 #include <stdio.h>
9
b7da0083b706 removing struct?
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
2 #include <stdlib.h>
7
f159eec07daf refactor
Dennis C. M. <dennis@denniscm.com>
parents: 6
diff changeset
3 #include <GL/glut.h>
9
b7da0083b706 removing struct?
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
4 #include <math.h>
10
f4e0c266321a bubble sort
Dennis C. M. <dennis@denniscm.com>
parents: 9
diff changeset
5 #include <time.h>
12
9ba546527bc2 fixing algo speed
Dennis C. M. <dennis@denniscm.com>
parents: 11
diff changeset
6 #include <stdbool.h>
13
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
7 #include <ft2build.h>
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
8 #include FT_FREETYPE_H
0
6882194679b5 draw a point
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
9
6882194679b5 draw a point
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
10
21
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
11 #define WINDOW_WIDTH 1920
6
40a8bdbe2005 Refactor to array of structures
Dennis C. M. <dennis@denniscm.com>
parents: 5
diff changeset
12 #define WINDOW_HEIGHT 1080
16
2ded5f1f544a refactor variable name
Dennis C. M. <dennis@denniscm.com>
parents: 15
diff changeset
13 #define VPADDING 150
7
f159eec07daf refactor
Dennis C. M. <dennis@denniscm.com>
parents: 6
diff changeset
14 #define RECT_WIDTH 5
10
f4e0c266321a bubble sort
Dennis C. M. <dennis@denniscm.com>
parents: 9
diff changeset
15 #define SPACE 1
7
f159eec07daf refactor
Dennis C. M. <dennis@denniscm.com>
parents: 6
diff changeset
16
f159eec07daf refactor
Dennis C. M. <dennis@denniscm.com>
parents: 6
diff changeset
17
21
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
18 /* Helper functions */
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
19
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
20 struct Element {
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
21 float value;
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
22 bool current;
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
23 };
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
24
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
25 struct Element *arr;
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
26 int arr_size;
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
27
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
28 void create_array() {
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
29 arr_size = WINDOW_WIDTH / (RECT_WIDTH + SPACE);
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
30 arr = malloc(arr_size * sizeof(struct Element));
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
31
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
32 float rect_increase = (WINDOW_HEIGHT - VPADDING * 2) / (float)(arr_size - 1);
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
33
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
34 for (int i = 1; i <= arr_size; i++) {
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
35 arr[i - 1].value = i * rect_increase;
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
36 arr[i - 1].current = false;
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
37 }
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
38 }
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
39
13
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
40
21
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
41 void swap_elements(int x, int y) {
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
42 struct Element temp = arr[x];
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
43 arr[x] = arr[y];
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
44 arr[y] = temp;
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
45 }
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
46
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
47
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
48 void randomize_array() {
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
49 srand(time(NULL));
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
50
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
51 // Fisher-Yates shuffle
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
52 for (int i = arr_size - 1; i > 0; i--) {
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
53 int j = rand() % (i + 1);
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
54
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
55 // Swap
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
56 swap_elements(i, j);
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
57 }
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
58 }
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
59
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
60
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
61 bool array_sorted() {
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
62 for (int i = 0; i < arr_size - 1; i++) {
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
63 if (arr[i].value > arr[i + 1].value) {
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
64 return false;
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
65 }
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
66 }
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
67
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
68 return true;
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
69 }
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
70
13
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
71
18
6a5c5b137348 implement method to run the algo function given the selected algo
Dennis C. M. <dennis@denniscm.com>
parents: 17
diff changeset
72 struct Algo {
6a5c5b137348 implement method to run the algo function given the selected algo
Dennis C. M. <dennis@denniscm.com>
parents: 17
diff changeset
73 char name[50];
6a5c5b137348 implement method to run the algo function given the selected algo
Dennis C. M. <dennis@denniscm.com>
parents: 17
diff changeset
74 void (*function)();
12
9ba546527bc2 fixing algo speed
Dennis C. M. <dennis@denniscm.com>
parents: 11
diff changeset
75 };
9ba546527bc2 fixing algo speed
Dennis C. M. <dennis@denniscm.com>
parents: 11
diff changeset
76
19
a027304ec75d implement selection sort
Dennis C. M. <dennis@denniscm.com>
parents: 18
diff changeset
77 struct Algo algos[2];
9
b7da0083b706 removing struct?
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
78 int selected_algo = 0;
20
fc44102980fb change rectangle color to white when algorithm is selecting it
Dennis C. M. <dennis@denniscm.com>
parents: 19
diff changeset
79
21
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
80 void algo_selector(int direction) {
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
81 int selection = selected_algo + direction;
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
82 int lower = 0;
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
83 int upper = (sizeof(algos) / sizeof(algos[0])) - 1;
20
fc44102980fb change rectangle color to white when algorithm is selecting it
Dennis C. M. <dennis@denniscm.com>
parents: 19
diff changeset
84
21
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
85 if (selection >= lower && selection <= upper) {
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
86 selected_algo = selection;
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
87 }
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
88 }
0
6882194679b5 draw a point
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
89
6882194679b5 draw a point
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
90
13
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
91 /* Algorithms */
12
9ba546527bc2 fixing algo speed
Dennis C. M. <dennis@denniscm.com>
parents: 11
diff changeset
92
19
a027304ec75d implement selection sort
Dennis C. M. <dennis@denniscm.com>
parents: 18
diff changeset
93 // Just some variables to store the state of the running algorithm
a027304ec75d implement selection sort
Dennis C. M. <dennis@denniscm.com>
parents: 18
diff changeset
94 struct AlgoState {
a027304ec75d implement selection sort
Dennis C. M. <dennis@denniscm.com>
parents: 18
diff changeset
95 int a;
a027304ec75d implement selection sort
Dennis C. M. <dennis@denniscm.com>
parents: 18
diff changeset
96 int b;
a027304ec75d implement selection sort
Dennis C. M. <dennis@denniscm.com>
parents: 18
diff changeset
97 int c;
12
9ba546527bc2 fixing algo speed
Dennis C. M. <dennis@denniscm.com>
parents: 11
diff changeset
98 };
9ba546527bc2 fixing algo speed
Dennis C. M. <dennis@denniscm.com>
parents: 11
diff changeset
99
21
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
100 struct AlgoState as;
19
a027304ec75d implement selection sort
Dennis C. M. <dennis@denniscm.com>
parents: 18
diff changeset
101
21
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
102 void reset_state() {
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
103 as.a = 0;
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
104 as.b = 0;
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
105 as.c = 0;
19
a027304ec75d implement selection sort
Dennis C. M. <dennis@denniscm.com>
parents: 18
diff changeset
106 }
a027304ec75d implement selection sort
Dennis C. M. <dennis@denniscm.com>
parents: 18
diff changeset
107
12
9ba546527bc2 fixing algo speed
Dennis C. M. <dennis@denniscm.com>
parents: 11
diff changeset
108
9
b7da0083b706 removing struct?
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
109 void bubble_sort() {
b7da0083b706 removing struct?
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
110
19
a027304ec75d implement selection sort
Dennis C. M. <dennis@denniscm.com>
parents: 18
diff changeset
111 /*
a027304ec75d implement selection sort
Dennis C. M. <dennis@denniscm.com>
parents: 18
diff changeset
112 * a: Index of the current selection
a027304ec75d implement selection sort
Dennis C. M. <dennis@denniscm.com>
parents: 18
diff changeset
113 * b: Index boundary of the sorted array
a027304ec75d implement selection sort
Dennis C. M. <dennis@denniscm.com>
parents: 18
diff changeset
114 */
a027304ec75d implement selection sort
Dennis C. M. <dennis@denniscm.com>
parents: 18
diff changeset
115
a027304ec75d implement selection sort
Dennis C. M. <dennis@denniscm.com>
parents: 18
diff changeset
116 if (as.a < arr_size - 1 - as.b) {
20
fc44102980fb change rectangle color to white when algorithm is selecting it
Dennis C. M. <dennis@denniscm.com>
parents: 19
diff changeset
117 arr[as.a].current = true;
fc44102980fb change rectangle color to white when algorithm is selecting it
Dennis C. M. <dennis@denniscm.com>
parents: 19
diff changeset
118
fc44102980fb change rectangle color to white when algorithm is selecting it
Dennis C. M. <dennis@denniscm.com>
parents: 19
diff changeset
119 if (arr[as.a].value > arr[as.a + 1].value) {
19
a027304ec75d implement selection sort
Dennis C. M. <dennis@denniscm.com>
parents: 18
diff changeset
120 swap_elements(as.a + 1, as.a);
11
aaecc9b7ca9c testing glutTimerFunc
Dennis C. M. <dennis@denniscm.com>
parents: 10
diff changeset
121 }
9
b7da0083b706 removing struct?
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
122
19
a027304ec75d implement selection sort
Dennis C. M. <dennis@denniscm.com>
parents: 18
diff changeset
123 as.a++;
11
aaecc9b7ca9c testing glutTimerFunc
Dennis C. M. <dennis@denniscm.com>
parents: 10
diff changeset
124 } else {
19
a027304ec75d implement selection sort
Dennis C. M. <dennis@denniscm.com>
parents: 18
diff changeset
125 as.b++;
a027304ec75d implement selection sort
Dennis C. M. <dennis@denniscm.com>
parents: 18
diff changeset
126 as.a = 0;
a027304ec75d implement selection sort
Dennis C. M. <dennis@denniscm.com>
parents: 18
diff changeset
127 }
a027304ec75d implement selection sort
Dennis C. M. <dennis@denniscm.com>
parents: 18
diff changeset
128 }
a027304ec75d implement selection sort
Dennis C. M. <dennis@denniscm.com>
parents: 18
diff changeset
129
a027304ec75d implement selection sort
Dennis C. M. <dennis@denniscm.com>
parents: 18
diff changeset
130
a027304ec75d implement selection sort
Dennis C. M. <dennis@denniscm.com>
parents: 18
diff changeset
131 void selection_sort() {
a027304ec75d implement selection sort
Dennis C. M. <dennis@denniscm.com>
parents: 18
diff changeset
132
a027304ec75d implement selection sort
Dennis C. M. <dennis@denniscm.com>
parents: 18
diff changeset
133 /*
a027304ec75d implement selection sort
Dennis C. M. <dennis@denniscm.com>
parents: 18
diff changeset
134 * a: Index of current selection
a027304ec75d implement selection sort
Dennis C. M. <dennis@denniscm.com>
parents: 18
diff changeset
135 * b: Index of boundary of sorted array
a027304ec75d implement selection sort
Dennis C. M. <dennis@denniscm.com>
parents: 18
diff changeset
136 * c: Index of the minimum element
a027304ec75d implement selection sort
Dennis C. M. <dennis@denniscm.com>
parents: 18
diff changeset
137 */
21
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
138
19
a027304ec75d implement selection sort
Dennis C. M. <dennis@denniscm.com>
parents: 18
diff changeset
139
a027304ec75d implement selection sort
Dennis C. M. <dennis@denniscm.com>
parents: 18
diff changeset
140 if (as.a < arr_size) {
20
fc44102980fb change rectangle color to white when algorithm is selecting it
Dennis C. M. <dennis@denniscm.com>
parents: 19
diff changeset
141 arr[as.a].current = true;
fc44102980fb change rectangle color to white when algorithm is selecting it
Dennis C. M. <dennis@denniscm.com>
parents: 19
diff changeset
142
fc44102980fb change rectangle color to white when algorithm is selecting it
Dennis C. M. <dennis@denniscm.com>
parents: 19
diff changeset
143 if (arr[as.a].value < arr[as.c].value) {
21
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
144
19
a027304ec75d implement selection sort
Dennis C. M. <dennis@denniscm.com>
parents: 18
diff changeset
145 // Save new minimum
a027304ec75d implement selection sort
Dennis C. M. <dennis@denniscm.com>
parents: 18
diff changeset
146 as.c = as.a;
a027304ec75d implement selection sort
Dennis C. M. <dennis@denniscm.com>
parents: 18
diff changeset
147 }
a027304ec75d implement selection sort
Dennis C. M. <dennis@denniscm.com>
parents: 18
diff changeset
148
a027304ec75d implement selection sort
Dennis C. M. <dennis@denniscm.com>
parents: 18
diff changeset
149 as.a++;
a027304ec75d implement selection sort
Dennis C. M. <dennis@denniscm.com>
parents: 18
diff changeset
150 } else {
a027304ec75d implement selection sort
Dennis C. M. <dennis@denniscm.com>
parents: 18
diff changeset
151 swap_elements(as.b, as.c);
a027304ec75d implement selection sort
Dennis C. M. <dennis@denniscm.com>
parents: 18
diff changeset
152
a027304ec75d implement selection sort
Dennis C. M. <dennis@denniscm.com>
parents: 18
diff changeset
153 as.b++;
a027304ec75d implement selection sort
Dennis C. M. <dennis@denniscm.com>
parents: 18
diff changeset
154 as.a = as.b;
a027304ec75d implement selection sort
Dennis C. M. <dennis@denniscm.com>
parents: 18
diff changeset
155 as.c = as.a;
9
b7da0083b706 removing struct?
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
156 }
b7da0083b706 removing struct?
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
157 }
b7da0083b706 removing struct?
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
158
b7da0083b706 removing struct?
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
159
21
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
160 void quick_sort() {
17
fba66d02f1cf add randomize func and refactor UI
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
161
fba66d02f1cf add randomize func and refactor UI
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
162 }
fba66d02f1cf add randomize func and refactor UI
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
163
fba66d02f1cf add randomize func and refactor UI
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
164
21
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
165 void insertion_sort() {
10
f4e0c266321a bubble sort
Dennis C. M. <dennis@denniscm.com>
parents: 9
diff changeset
166
f4e0c266321a bubble sort
Dennis C. M. <dennis@denniscm.com>
parents: 9
diff changeset
167 }
f4e0c266321a bubble sort
Dennis C. M. <dennis@denniscm.com>
parents: 9
diff changeset
168
f4e0c266321a bubble sort
Dennis C. M. <dennis@denniscm.com>
parents: 9
diff changeset
169
21
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
170 void merge_sort() {
9
b7da0083b706 removing struct?
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
171
b7da0083b706 removing struct?
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
172 }
b7da0083b706 removing struct?
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
173
2
ea3c427d922d draw a weird filled rectangle
Dennis C. M. <dennis@denniscm.com>
parents: 0
diff changeset
174
13
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
175 /* Render functions */
8
f7af7255705e text flickering fixed
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
176
21
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
177 FT_Library ft_library;
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
178 FT_Face ft_face;
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
179
15
e2fcfcb43fee fix vertical character alignment
Dennis C. M. <dennis@denniscm.com>
parents: 14
diff changeset
180 void render_text(int x, int y, char* text) {
e2fcfcb43fee fix vertical character alignment
Dennis C. M. <dennis@denniscm.com>
parents: 14
diff changeset
181 for (const char *c = text; *c; c++) {
21
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
182
15
e2fcfcb43fee fix vertical character alignment
Dennis C. M. <dennis@denniscm.com>
parents: 14
diff changeset
183 // Get glyph index from character code
e2fcfcb43fee fix vertical character alignment
Dennis C. M. <dennis@denniscm.com>
parents: 14
diff changeset
184 FT_UInt glyph_index = FT_Get_Char_Index(ft_face, *c);
e2fcfcb43fee fix vertical character alignment
Dennis C. M. <dennis@denniscm.com>
parents: 14
diff changeset
185
e2fcfcb43fee fix vertical character alignment
Dennis C. M. <dennis@denniscm.com>
parents: 14
diff changeset
186 if (glyph_index == 0) {
e2fcfcb43fee fix vertical character alignment
Dennis C. M. <dennis@denniscm.com>
parents: 14
diff changeset
187 fprintf(stderr, "Given character code has no glyph image in the face\n");
e2fcfcb43fee fix vertical character alignment
Dennis C. M. <dennis@denniscm.com>
parents: 14
diff changeset
188 exit(1);
e2fcfcb43fee fix vertical character alignment
Dennis C. M. <dennis@denniscm.com>
parents: 14
diff changeset
189 }
13
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
190
15
e2fcfcb43fee fix vertical character alignment
Dennis C. M. <dennis@denniscm.com>
parents: 14
diff changeset
191 // Load glyph image
e2fcfcb43fee fix vertical character alignment
Dennis C. M. <dennis@denniscm.com>
parents: 14
diff changeset
192 if (FT_Load_Glyph(ft_face, glyph_index, FT_LOAD_DEFAULT)) {
e2fcfcb43fee fix vertical character alignment
Dennis C. M. <dennis@denniscm.com>
parents: 14
diff changeset
193 fprintf(stderr, "Failed to load glyph.\n");
e2fcfcb43fee fix vertical character alignment
Dennis C. M. <dennis@denniscm.com>
parents: 14
diff changeset
194 exit(1);
e2fcfcb43fee fix vertical character alignment
Dennis C. M. <dennis@denniscm.com>
parents: 14
diff changeset
195 }
13
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
196
15
e2fcfcb43fee fix vertical character alignment
Dennis C. M. <dennis@denniscm.com>
parents: 14
diff changeset
197 // Render glyph
e2fcfcb43fee fix vertical character alignment
Dennis C. M. <dennis@denniscm.com>
parents: 14
diff changeset
198 if (FT_Render_Glyph(ft_face->glyph, FT_RENDER_MODE_NORMAL)) {
e2fcfcb43fee fix vertical character alignment
Dennis C. M. <dennis@denniscm.com>
parents: 14
diff changeset
199 fprintf(stderr, "Failed to render glyph.\n");
e2fcfcb43fee fix vertical character alignment
Dennis C. M. <dennis@denniscm.com>
parents: 14
diff changeset
200 exit(1);
e2fcfcb43fee fix vertical character alignment
Dennis C. M. <dennis@denniscm.com>
parents: 14
diff changeset
201 }
e2fcfcb43fee fix vertical character alignment
Dennis C. M. <dennis@denniscm.com>
parents: 14
diff changeset
202
e2fcfcb43fee fix vertical character alignment
Dennis C. M. <dennis@denniscm.com>
parents: 14
diff changeset
203 FT_GlyphSlot slot = ft_face->glyph;
e2fcfcb43fee fix vertical character alignment
Dennis C. M. <dennis@denniscm.com>
parents: 14
diff changeset
204 FT_Bitmap* glyph_bitmap = &slot->bitmap;
14
d055228ca9a6 printing text with custom font
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
205
15
e2fcfcb43fee fix vertical character alignment
Dennis C. M. <dennis@denniscm.com>
parents: 14
diff changeset
206 // Flip the bitmap vertically
e2fcfcb43fee fix vertical character alignment
Dennis C. M. <dennis@denniscm.com>
parents: 14
diff changeset
207 unsigned char* flipped_bitmap = (unsigned char*)malloc(glyph_bitmap->width * glyph_bitmap->rows);
e2fcfcb43fee fix vertical character alignment
Dennis C. M. <dennis@denniscm.com>
parents: 14
diff changeset
208
e2fcfcb43fee fix vertical character alignment
Dennis C. M. <dennis@denniscm.com>
parents: 14
diff changeset
209 for (int row = 0; row < glyph_bitmap->rows; row++) {
e2fcfcb43fee fix vertical character alignment
Dennis C. M. <dennis@denniscm.com>
parents: 14
diff changeset
210 unsigned char* src_row = glyph_bitmap->buffer + (row * glyph_bitmap->width);
e2fcfcb43fee fix vertical character alignment
Dennis C. M. <dennis@denniscm.com>
parents: 14
diff changeset
211 unsigned char* dest_row = flipped_bitmap + ((glyph_bitmap->rows - row - 1) * glyph_bitmap->width);
e2fcfcb43fee fix vertical character alignment
Dennis C. M. <dennis@denniscm.com>
parents: 14
diff changeset
212 memcpy(dest_row, src_row, glyph_bitmap->width);
e2fcfcb43fee fix vertical character alignment
Dennis C. M. <dennis@denniscm.com>
parents: 14
diff changeset
213 }
e2fcfcb43fee fix vertical character alignment
Dennis C. M. <dennis@denniscm.com>
parents: 14
diff changeset
214
21
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
215 glyph_bitmap->buffer = flipped_bitmap;
15
e2fcfcb43fee fix vertical character alignment
Dennis C. M. <dennis@denniscm.com>
parents: 14
diff changeset
216
21
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
217 // Calculate the adjusted y position based on the glyph's bearing
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
218 int adjusted_y = y + (slot->bitmap_top - glyph_bitmap->rows);
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
219
15
e2fcfcb43fee fix vertical character alignment
Dennis C. M. <dennis@denniscm.com>
parents: 14
diff changeset
220 glRasterPos2f(x, adjusted_y);
e2fcfcb43fee fix vertical character alignment
Dennis C. M. <dennis@denniscm.com>
parents: 14
diff changeset
221 glDrawPixels(glyph_bitmap->width, glyph_bitmap->rows, GL_LUMINANCE, GL_UNSIGNED_BYTE, glyph_bitmap->buffer);
e2fcfcb43fee fix vertical character alignment
Dennis C. M. <dennis@denniscm.com>
parents: 14
diff changeset
222
18
6a5c5b137348 implement method to run the algo function given the selected algo
Dennis C. M. <dennis@denniscm.com>
parents: 17
diff changeset
223 x += slot->advance.x / 64;
15
e2fcfcb43fee fix vertical character alignment
Dennis C. M. <dennis@denniscm.com>
parents: 14
diff changeset
224 }
0
6882194679b5 draw a point
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
225 }
6882194679b5 draw a point
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
226
6882194679b5 draw a point
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
227
21
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
228 int speed = 50;
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
229 int iter_counter = 0;
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
230
0
6882194679b5 draw a point
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
231 void display() {
6882194679b5 draw a point
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
232 glClear(GL_COLOR_BUFFER_BIT);
14
d055228ca9a6 printing text with custom font
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
233
3
e4003f606e07 draw multiple rectangles with loop
Dennis C. M. <dennis@denniscm.com>
parents: 2
diff changeset
234 glBegin(GL_QUADS);
e4003f606e07 draw multiple rectangles with loop
Dennis C. M. <dennis@denniscm.com>
parents: 2
diff changeset
235
10
f4e0c266321a bubble sort
Dennis C. M. <dennis@denniscm.com>
parents: 9
diff changeset
236 int x = 0;
f4e0c266321a bubble sort
Dennis C. M. <dennis@denniscm.com>
parents: 9
diff changeset
237 for (int i = 0; i < arr_size; i++) {
21
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
238
20
fc44102980fb change rectangle color to white when algorithm is selecting it
Dennis C. M. <dennis@denniscm.com>
parents: 19
diff changeset
239 if (arr[i].current) {
fc44102980fb change rectangle color to white when algorithm is selecting it
Dennis C. M. <dennis@denniscm.com>
parents: 19
diff changeset
240 glColor3f(1.0, 1.0, 1.0);
fc44102980fb change rectangle color to white when algorithm is selecting it
Dennis C. M. <dennis@denniscm.com>
parents: 19
diff changeset
241 } else {
fc44102980fb change rectangle color to white when algorithm is selecting it
Dennis C. M. <dennis@denniscm.com>
parents: 19
diff changeset
242 glColor3f(1.0, 0.7569, 0.0);
fc44102980fb change rectangle color to white when algorithm is selecting it
Dennis C. M. <dennis@denniscm.com>
parents: 19
diff changeset
243 }
10
f4e0c266321a bubble sort
Dennis C. M. <dennis@denniscm.com>
parents: 9
diff changeset
244
f4e0c266321a bubble sort
Dennis C. M. <dennis@denniscm.com>
parents: 9
diff changeset
245 // Bottom left
16
2ded5f1f544a refactor variable name
Dennis C. M. <dennis@denniscm.com>
parents: 15
diff changeset
246 glVertex2f(x, VPADDING);
10
f4e0c266321a bubble sort
Dennis C. M. <dennis@denniscm.com>
parents: 9
diff changeset
247
f4e0c266321a bubble sort
Dennis C. M. <dennis@denniscm.com>
parents: 9
diff changeset
248 // Top left
20
fc44102980fb change rectangle color to white when algorithm is selecting it
Dennis C. M. <dennis@denniscm.com>
parents: 19
diff changeset
249 glVertex2f(x, VPADDING + arr[i].value);
10
f4e0c266321a bubble sort
Dennis C. M. <dennis@denniscm.com>
parents: 9
diff changeset
250
f4e0c266321a bubble sort
Dennis C. M. <dennis@denniscm.com>
parents: 9
diff changeset
251 // Top right
20
fc44102980fb change rectangle color to white when algorithm is selecting it
Dennis C. M. <dennis@denniscm.com>
parents: 19
diff changeset
252 glVertex2f(x + RECT_WIDTH, VPADDING + arr[i].value);
10
f4e0c266321a bubble sort
Dennis C. M. <dennis@denniscm.com>
parents: 9
diff changeset
253
f4e0c266321a bubble sort
Dennis C. M. <dennis@denniscm.com>
parents: 9
diff changeset
254 // Bottom right
16
2ded5f1f544a refactor variable name
Dennis C. M. <dennis@denniscm.com>
parents: 15
diff changeset
255 glVertex2f(x + RECT_WIDTH, VPADDING);
10
f4e0c266321a bubble sort
Dennis C. M. <dennis@denniscm.com>
parents: 9
diff changeset
256
f4e0c266321a bubble sort
Dennis C. M. <dennis@denniscm.com>
parents: 9
diff changeset
257 x += RECT_WIDTH + SPACE;
20
fc44102980fb change rectangle color to white when algorithm is selecting it
Dennis C. M. <dennis@denniscm.com>
parents: 19
diff changeset
258
fc44102980fb change rectangle color to white when algorithm is selecting it
Dennis C. M. <dennis@denniscm.com>
parents: 19
diff changeset
259 arr[i].current = false;
3
e4003f606e07 draw multiple rectangles with loop
Dennis C. M. <dennis@denniscm.com>
parents: 2
diff changeset
260 }
e4003f606e07 draw multiple rectangles with loop
Dennis C. M. <dennis@denniscm.com>
parents: 2
diff changeset
261
e4003f606e07 draw multiple rectangles with loop
Dennis C. M. <dennis@denniscm.com>
parents: 2
diff changeset
262 glEnd();
6
40a8bdbe2005 Refactor to array of structures
Dennis C. M. <dennis@denniscm.com>
parents: 5
diff changeset
263
7
f159eec07daf refactor
Dennis C. M. <dennis@denniscm.com>
parents: 6
diff changeset
264 // Render text
4
035d3880da04 render text with number of elements on screen
Dennis C. M. <dennis@denniscm.com>
parents: 3
diff changeset
265 char text[256];
9
b7da0083b706 removing struct?
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
266
17
fba66d02f1cf add randomize func and refactor UI
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
267 // Top: Column 1
18
6a5c5b137348 implement method to run the algo function given the selected algo
Dennis C. M. <dennis@denniscm.com>
parents: 17
diff changeset
268 sprintf(text, "Algorithm: %s", algos[selected_algo].name);
13
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
269 render_text(20, WINDOW_HEIGHT - 50, text);
21
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
270
17
fba66d02f1cf add randomize func and refactor UI
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
271 sprintf(text, "Speed: %i", speed);
fba66d02f1cf add randomize func and refactor UI
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
272 render_text(20, WINDOW_HEIGHT - 80, text);
21
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
273
17
fba66d02f1cf add randomize func and refactor UI
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
274 // Top: Column 2
10
f4e0c266321a bubble sort
Dennis C. M. <dennis@denniscm.com>
parents: 9
diff changeset
275 sprintf(text, "Number of elements: %i", arr_size);
17
fba66d02f1cf add randomize func and refactor UI
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
276 render_text(500, WINDOW_HEIGHT - 50, text);
9
b7da0083b706 removing struct?
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
277
12
9ba546527bc2 fixing algo speed
Dennis C. M. <dennis@denniscm.com>
parents: 11
diff changeset
278 sprintf(text, "Iterations: %i", iter_counter);
17
fba66d02f1cf add randomize func and refactor UI
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
279 render_text(500, WINDOW_HEIGHT - 80, text);
fba66d02f1cf add randomize func and refactor UI
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
280
12
9ba546527bc2 fixing algo speed
Dennis C. M. <dennis@denniscm.com>
parents: 11
diff changeset
281
17
fba66d02f1cf add randomize func and refactor UI
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
282 // Bottom: Column 1
fba66d02f1cf add randomize func and refactor UI
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
283 render_text(20, VPADDING - 50, "Press a or s to select an algorithm.");
fba66d02f1cf add randomize func and refactor UI
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
284 render_text(20, VPADDING - 80, "Press u or d to modify speed.");
fba66d02f1cf add randomize func and refactor UI
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
285 render_text(20, VPADDING - 110, "Press r to randomize the array.");
fba66d02f1cf add randomize func and refactor UI
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
286
fba66d02f1cf add randomize func and refactor UI
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
287 // Bottom: Column 2
fba66d02f1cf add randomize func and refactor UI
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
288 render_text(800, VPADDING - 50, "Press enter to run the algorithm.");
21
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
289 render_text(800, VPADDING - 80, "Press p to pause the algorithm.");
8
f7af7255705e text flickering fixed
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
290
f7af7255705e text flickering fixed
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
291 glutSwapBuffers();
f7af7255705e text flickering fixed
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
292 }
f7af7255705e text flickering fixed
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
293
6
40a8bdbe2005 Refactor to array of structures
Dennis C. M. <dennis@denniscm.com>
parents: 5
diff changeset
294
13
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
295 /* Refresh function */
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
296
21
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
297
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
298 bool run;
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
299 int refresh_counter = 0;
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
300
12
9ba546527bc2 fixing algo speed
Dennis C. M. <dennis@denniscm.com>
parents: 11
diff changeset
301 void idle() {
9ba546527bc2 fixing algo speed
Dennis C. M. <dennis@denniscm.com>
parents: 11
diff changeset
302 if (run) {
18
6a5c5b137348 implement method to run the algo function given the selected algo
Dennis C. M. <dennis@denniscm.com>
parents: 17
diff changeset
303 algos[selected_algo].function();
12
9ba546527bc2 fixing algo speed
Dennis C. M. <dennis@denniscm.com>
parents: 11
diff changeset
304 refresh_counter++;
9ba546527bc2 fixing algo speed
Dennis C. M. <dennis@denniscm.com>
parents: 11
diff changeset
305 iter_counter++;
9ba546527bc2 fixing algo speed
Dennis C. M. <dennis@denniscm.com>
parents: 11
diff changeset
306
17
fba66d02f1cf add randomize func and refactor UI
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
307 if (refresh_counter == speed) {
12
9ba546527bc2 fixing algo speed
Dennis C. M. <dennis@denniscm.com>
parents: 11
diff changeset
308 glutPostRedisplay();
9ba546527bc2 fixing algo speed
Dennis C. M. <dennis@denniscm.com>
parents: 11
diff changeset
309 refresh_counter = 0;
9ba546527bc2 fixing algo speed
Dennis C. M. <dennis@denniscm.com>
parents: 11
diff changeset
310 }
9ba546527bc2 fixing algo speed
Dennis C. M. <dennis@denniscm.com>
parents: 11
diff changeset
311
9ba546527bc2 fixing algo speed
Dennis C. M. <dennis@denniscm.com>
parents: 11
diff changeset
312 } else {
9ba546527bc2 fixing algo speed
Dennis C. M. <dennis@denniscm.com>
parents: 11
diff changeset
313 glutPostRedisplay();
9ba546527bc2 fixing algo speed
Dennis C. M. <dennis@denniscm.com>
parents: 11
diff changeset
314 }
9ba546527bc2 fixing algo speed
Dennis C. M. <dennis@denniscm.com>
parents: 11
diff changeset
315
9ba546527bc2 fixing algo speed
Dennis C. M. <dennis@denniscm.com>
parents: 11
diff changeset
316 if (array_sorted()) {
9ba546527bc2 fixing algo speed
Dennis C. M. <dennis@denniscm.com>
parents: 11
diff changeset
317 run = false;
9ba546527bc2 fixing algo speed
Dennis C. M. <dennis@denniscm.com>
parents: 11
diff changeset
318 }
8
f7af7255705e text flickering fixed
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
319 }
f7af7255705e text flickering fixed
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
320
f7af7255705e text flickering fixed
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
321
13
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
322 /* User input handler */
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
323
8
f7af7255705e text flickering fixed
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
324 void keyboard(unsigned char key, int x, int y) {
f7af7255705e text flickering fixed
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
325
17
fba66d02f1cf add randomize func and refactor UI
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
326 // s: Next algorithm
9
b7da0083b706 removing struct?
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
327 if (key == 115) {
b7da0083b706 removing struct?
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
328 algo_selector(1);
b7da0083b706 removing struct?
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
329 }
b7da0083b706 removing struct?
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
330
17
fba66d02f1cf add randomize func and refactor UI
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
331 // a: Previous algorithm
9
b7da0083b706 removing struct?
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
332 if (key == 97) {
b7da0083b706 removing struct?
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
333 algo_selector(-1);
b7da0083b706 removing struct?
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
334 }
b7da0083b706 removing struct?
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
335
17
fba66d02f1cf add randomize func and refactor UI
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
336 // r: Reset state
12
9ba546527bc2 fixing algo speed
Dennis C. M. <dennis@denniscm.com>
parents: 11
diff changeset
337 if (key == 114) {
17
fba66d02f1cf add randomize func and refactor UI
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
338 randomize_array();
16
2ded5f1f544a refactor variable name
Dennis C. M. <dennis@denniscm.com>
parents: 15
diff changeset
339
2ded5f1f544a refactor variable name
Dennis C. M. <dennis@denniscm.com>
parents: 15
diff changeset
340 // Reset state
12
9ba546527bc2 fixing algo speed
Dennis C. M. <dennis@denniscm.com>
parents: 11
diff changeset
341 iter_counter = 0;
9ba546527bc2 fixing algo speed
Dennis C. M. <dennis@denniscm.com>
parents: 11
diff changeset
342 refresh_counter = 0;
9ba546527bc2 fixing algo speed
Dennis C. M. <dennis@denniscm.com>
parents: 11
diff changeset
343 run = false;
16
2ded5f1f544a refactor variable name
Dennis C. M. <dennis@denniscm.com>
parents: 15
diff changeset
344
2ded5f1f544a refactor variable name
Dennis C. M. <dennis@denniscm.com>
parents: 15
diff changeset
345 // Reset algo steps
21
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
346 reset_state();
12
9ba546527bc2 fixing algo speed
Dennis C. M. <dennis@denniscm.com>
parents: 11
diff changeset
347 }
21
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
348
17
fba66d02f1cf add randomize func and refactor UI
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
349 // u: Increase speed
fba66d02f1cf add randomize func and refactor UI
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
350 if (key == 117) {
fba66d02f1cf add randomize func and refactor UI
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
351 speed++;
fba66d02f1cf add randomize func and refactor UI
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
352 }
fba66d02f1cf add randomize func and refactor UI
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
353
fba66d02f1cf add randomize func and refactor UI
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
354 // d: reduce speed
fba66d02f1cf add randomize func and refactor UI
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
355 if (key == 100) {
19
a027304ec75d implement selection sort
Dennis C. M. <dennis@denniscm.com>
parents: 18
diff changeset
356 if (speed > 1) {
a027304ec75d implement selection sort
Dennis C. M. <dennis@denniscm.com>
parents: 18
diff changeset
357 speed--;
a027304ec75d implement selection sort
Dennis C. M. <dennis@denniscm.com>
parents: 18
diff changeset
358 }
17
fba66d02f1cf add randomize func and refactor UI
Dennis C. M. <dennis@denniscm.com>
parents: 16
diff changeset
359 }
21
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
360
18
6a5c5b137348 implement method to run the algo function given the selected algo
Dennis C. M. <dennis@denniscm.com>
parents: 17
diff changeset
361 // enter: Run program
6a5c5b137348 implement method to run the algo function given the selected algo
Dennis C. M. <dennis@denniscm.com>
parents: 17
diff changeset
362 if (key == 13) {
6a5c5b137348 implement method to run the algo function given the selected algo
Dennis C. M. <dennis@denniscm.com>
parents: 17
diff changeset
363 run = true;
6a5c5b137348 implement method to run the algo function given the selected algo
Dennis C. M. <dennis@denniscm.com>
parents: 17
diff changeset
364 }
6a5c5b137348 implement method to run the algo function given the selected algo
Dennis C. M. <dennis@denniscm.com>
parents: 17
diff changeset
365
19
a027304ec75d implement selection sort
Dennis C. M. <dennis@denniscm.com>
parents: 18
diff changeset
366 // p: Pause program
a027304ec75d implement selection sort
Dennis C. M. <dennis@denniscm.com>
parents: 18
diff changeset
367 if (key == 112) {
a027304ec75d implement selection sort
Dennis C. M. <dennis@denniscm.com>
parents: 18
diff changeset
368 run = false;
a027304ec75d implement selection sort
Dennis C. M. <dennis@denniscm.com>
parents: 18
diff changeset
369 }
0
6882194679b5 draw a point
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
370 }
6882194679b5 draw a point
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
371
6882194679b5 draw a point
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
372
13
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
373 /* Set up functions */
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
374
14
d055228ca9a6 printing text with custom font
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
375 void setup_gl() {
13
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
376
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
377 // Set background dark
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
378 glClearColor(0.0, 0.0, 0.0, 1.0);
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
379
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
380 // Set point color and size to 1 pixel
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
381 glColor3f(1.0, 0.7569, 0.0);
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
382 glPointSize(5.0);
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
383
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
384 // Matrix projection and reset with identity
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
385 glMatrixMode(GL_PROJECTION);
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
386 glLoadIdentity();
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
387
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
388 /*
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
389 * Creates projection matrix
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
390 * x increases from left to right (0 to WINDOW_WIDTH)
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
391 * y increases from bottom to top (0 to WINDOW_HEIGHT)
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
392 */
15
e2fcfcb43fee fix vertical character alignment
Dennis C. M. <dennis@denniscm.com>
parents: 14
diff changeset
393
13
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
394 gluOrtho2D(0, WINDOW_WIDTH, 0, WINDOW_HEIGHT);
14
d055228ca9a6 printing text with custom font
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
395
d055228ca9a6 printing text with custom font
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
396 /*
15
e2fcfcb43fee fix vertical character alignment
Dennis C. M. <dennis@denniscm.com>
parents: 14
diff changeset
397 * This fucking line... I spent a day rendering weird symbols
14
d055228ca9a6 printing text with custom font
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
398 * because the padding that adds FreeType to each row of the bitmap
d055228ca9a6 printing text with custom font
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
399 * does not match the padding expected by GL.
d055228ca9a6 printing text with custom font
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
400 */
d055228ca9a6 printing text with custom font
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
401
d055228ca9a6 printing text with custom font
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
402 glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
13
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
403 }
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
404
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
405
14
d055228ca9a6 printing text with custom font
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
406 void setup_freetype() {
13
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
407
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
408 // Init library
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
409 if (FT_Init_FreeType(&ft_library)) {
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
410 fprintf(stderr, "Failed to initialize FreeType library\n");
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
411 exit(1);
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
412 }
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
413
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
414 // Load font
14
d055228ca9a6 printing text with custom font
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
415 if (FT_New_Face(ft_library, "fonts/JetBrainsMono-Regular.ttf", 0, &ft_face)) {
13
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
416 fprintf(stderr, "Failed to load font\n");
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
417 exit(1);
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
418 }
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
419
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
420 // Set font size
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
421 if (FT_Set_Pixel_Sizes(ft_face, 0, 24)) {
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
422 fprintf(stderr, "Failed to set font size.\n");
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
423 FT_Done_Face(ft_face);
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
424 FT_Done_FreeType(ft_library);
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
425
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
426 exit(1);
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
427 }
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
428 }
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
429
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
430
0
6882194679b5 draw a point
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
431 int main(int argc, char** argv) {
18
6a5c5b137348 implement method to run the algo function given the selected algo
Dennis C. M. <dennis@denniscm.com>
parents: 17
diff changeset
432 strcpy(algos[0].name, "Bubble sort");
6a5c5b137348 implement method to run the algo function given the selected algo
Dennis C. M. <dennis@denniscm.com>
parents: 17
diff changeset
433 algos[0].function = &bubble_sort;
6a5c5b137348 implement method to run the algo function given the selected algo
Dennis C. M. <dennis@denniscm.com>
parents: 17
diff changeset
434
19
a027304ec75d implement selection sort
Dennis C. M. <dennis@denniscm.com>
parents: 18
diff changeset
435 strcpy(algos[1].name, "Selection sort");
a027304ec75d implement selection sort
Dennis C. M. <dennis@denniscm.com>
parents: 18
diff changeset
436 algos[1].function = &selection_sort;
21
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
437
10
f4e0c266321a bubble sort
Dennis C. M. <dennis@denniscm.com>
parents: 9
diff changeset
438 create_array();
7
f159eec07daf refactor
Dennis C. M. <dennis@denniscm.com>
parents: 6
diff changeset
439
0
6882194679b5 draw a point
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
440 glutInit(&argc, argv);
8
f7af7255705e text flickering fixed
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
441 glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
6
40a8bdbe2005 Refactor to array of structures
Dennis C. M. <dennis@denniscm.com>
parents: 5
diff changeset
442 glutInitWindowSize(WINDOW_WIDTH, WINDOW_HEIGHT);
13
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
443 glutCreateWindow("Algorithm animator");
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
444
14
d055228ca9a6 printing text with custom font
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
445 setup_gl();
d055228ca9a6 printing text with custom font
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
446 setup_freetype();
13
074bde2db09a printing text with custom font but incorrect letters
Dennis C. M. <dennis@denniscm.com>
parents: 12
diff changeset
447
0
6882194679b5 draw a point
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
448 glutDisplayFunc(display);
8
f7af7255705e text flickering fixed
Dennis C. M. <dennis@denniscm.com>
parents: 7
diff changeset
449 glutKeyboardFunc(keyboard);
12
9ba546527bc2 fixing algo speed
Dennis C. M. <dennis@denniscm.com>
parents: 11
diff changeset
450 glutIdleFunc(idle);
0
6882194679b5 draw a point
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
451 glutMainLoop();
6882194679b5 draw a point
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
452
10
f4e0c266321a bubble sort
Dennis C. M. <dennis@denniscm.com>
parents: 9
diff changeset
453 free(arr);
7
f159eec07daf refactor
Dennis C. M. <dennis@denniscm.com>
parents: 6
diff changeset
454
15
e2fcfcb43fee fix vertical character alignment
Dennis C. M. <dennis@denniscm.com>
parents: 14
diff changeset
455 FT_Done_Face(ft_face);
21
8a5a7aee69ce add description
Dennis C. M. <dennis@denniscm.com>
parents: 20
diff changeset
456 FT_Done_FreeType(ft_library);
15
e2fcfcb43fee fix vertical character alignment
Dennis C. M. <dennis@denniscm.com>
parents: 14
diff changeset
457
0
6882194679b5 draw a point
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
458 return 0;
6882194679b5 draw a point
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
459 }