1 #pragma once
2 
3 #include <stdint.h>
4 #include <stdbool.h>
5 #include <SDL2/SDL.h>
6 
7 // taken from the ptplay project and modified
8 enum ptbuttons
9 {
10 	PTB_DUMMY,
11 
12 	// ALL SCREENS
13 	PTB_SONGNAME,
14 	PTB_SAMPLENAME,
15 	PTB_LOADSAMPLE,
16 
17 	// ASK DIALOG
18 	PTB_SUREY,
19 	PTB_SUREN,
20 
21 	// PAT2SMP ASK DIALOG
22 	PTB_PAT2SMP_HI,
23 	PTB_PAT2SMP_LO,
24 	PTB_PAT2SMP_ABORT,
25 
26 	// POS ED. SCREEN
27 	PTB_PE_BADGE,
28 	PTB_PE_PATT,
29 	PTB_PE_SCROLLTOP,
30 	PTB_PE_SCROLLUP,
31 	PTB_PE_EXIT,
32 	PTB_PE_SCROLLDOWN,
33 	PTB_PE_SCROLLBOT,
34 
35 	// EDIT OP. SCREEN
36 	PTB_EO_TITLEBAR,
37 	PTB_EO_1,
38 	PTB_EO_2,
39 	PTB_EO_3,
40 	PTB_EO_EXIT,
41 
42 	// EDIT OP. SCREEN #1
43 	PTB_EO_TRACK_NOTE_UP,
44 	PTB_EO_PATT_NOTE_UP,
45 	PTB_EO_TRACK_NOTE_DOWN,
46 	PTB_EO_PATT_NOTE_DOWN,
47 	PTB_EO_TRACK_OCTA_UP,
48 	PTB_EO_PATT_OCTA_UP,
49 	PTB_EO_TRACK_OCTA_DOWN,
50 	PTB_EO_PATT_OCTA_DOWN,
51 
52 	// EDIT OP. SCREEN #2
53 	PTB_EO_RECORD,
54 	PTB_EO_DELETE,
55 	PTB_EO_KILL,
56 	PTB_EO_QUANTIZE,
57 	PTB_EO_EXCHGE,
58 	PTB_EO_COPY,
59 	PTB_EO_METRO_1,
60 	PTB_EO_METRO_2,
61 	PTB_EO_FROM,
62 	PTB_EO_FROM_NUM,
63 	PTB_EO_FROM_UP,
64 	PTB_EO_FROM_DOWN,
65 	PTB_EO_KEYS,
66 	PTB_EO_TO,
67 	PTB_EO_TO_NUM,
68 	PTB_EO_TO_UP,
69 	PTB_EO_TO_DOWN,
70 
71 	// EDIT OP. SCREEN #3
72 	PTB_EO_MIX,
73 	PTB_EO_ECHO,
74 	PTB_EO_POS,
75 	PTB_EO_POS_NUM,
76 	PTB_EO_POS_UP,
77 	PTB_EO_POS_DOWN,
78 	PTB_EO_BOOST,
79 	PTB_EO_FILTER,
80 	PTB_EO_MOD,
81 	PTB_EO_MOD_NUM,
82 	PTB_EO_MOD_UP,
83 	PTB_EO_MOD_DOWN,
84 	PTB_EO_X_FADE,
85 	PTB_EO_BACKWD,
86 	PTB_EO_CB,
87 	PTB_EO_CHORD,
88 	PTB_EO_FU,
89 	PTB_EO_FD,
90 	PTB_EO_UPSAMP,
91 	PTB_EO_DNSAMP,
92 	PTB_EO_VOL,
93 	PTB_EO_VOL_NUM,
94 	PTB_EO_VOL_UP,
95 	PTB_EO_VOL_DOWN,
96 
97 	// EDIT OP. SCREEN #4
98 	PTB_EO_DOCHORD,
99 	PTB_EO_MAJOR,
100 	PTB_EO_MAJOR7,
101 	PTB_EO_NOTE1,
102 	PTB_EO_NOTE1_UP,
103 	PTB_EO_NOTE1_DOWN,
104 	PTB_EO_RESET,
105 	PTB_EO_MINOR,
106 	PTB_EO_MINOR7,
107 	PTB_EO_NOTE2,
108 	PTB_EO_NOTE2_UP,
109 	PTB_EO_NOTE2_DOWN,
110 	PTB_EO_UNDO,
111 	PTB_EO_SUS4,
112 	PTB_EO_MAJOR6,
113 	PTB_EO_NOTE3,
114 	PTB_EO_NOTE3_UP,
115 	PTB_EO_NOTE3_DOWN,
116 	PTB_EO_LENGTH,
117 	PTB_EO_MINOR6,
118 	PTB_EO_NOTE4,
119 	PTB_EO_NOTE4_UP,
120 	PTB_EO_NOTE4_DOWN,
121 
122 	// DISK OP. SCREEN
123 	PTB_DO_PACKMOD,
124 	PTB_DO_MODARROW,
125 	PTB_DO_LOADMODULE,
126 	PTB_DO_SAVEMODULE,
127 	PTB_DO_SAMPLEFORMAT,
128 	PTB_DO_SAMPLEARROW,
129 	PTB_DO_LOADSAMPLE,
130 	PTB_DO_SAVESAMPLE,
131 	PTB_DO_DATAPATH,
132 	PTB_DO_PARENT,
133 	PTB_DO_REFRESH,
134 	PTB_DO_SCROLLTOP,
135 	PTB_DO_SCROLLUP,
136 	PTB_DO_EXIT,
137 	PTB_DO_SCROLLDOWN,
138 	PTB_DO_SCROLLBOT,
139 	PTB_DO_FILEAREA,
140 
141 	// CLEAR
142 	PTB_CLEARSONG,
143 	PTB_CLEARSAMPLES,
144 	PTB_CLEARALL,
145 	PTB_CLEARCANCEL,
146 
147 	// MAIN SCREEN
148 	PTB_QUIT,
149 	PTB_PLAY,
150 	PTB_PATTERN,
151 	PTB_EDIT,
152 	PTB_RECORD,
153 	PTB_STOP,
154 	PTB_CLEAR,
155 	PTB_EDITOP,
156 	PTB_DISKOP,
157 	PTB_MOD2WAV,
158 	PTB_POSED,
159 	PTB_PAT2SMP,
160 	PTB_SAMPLER,
161 	PTB_CHAN1,
162 	PTB_CHAN2,
163 	PTB_CHAN3,
164 	PTB_CHAN4,
165 	PTB_ABOUT,
166 	PTB_POSS,
167 	PTB_POSU,
168 	PTB_POSD,
169 	PTB_PATTERNS,
170 	PTB_PATTERNU,
171 	PTB_PATTERND,
172 	PTB_LENGTHS,
173 	PTB_LENGTHU,
174 	PTB_LENGTHD,
175 	PTB_FTUNEU,
176 	PTB_FTUNED,
177 	PTB_SAMPLES,
178 	PTB_SAMPLEU,
179 	PTB_SAMPLED,
180 	PTB_SVOLUMES,
181 	PTB_SVOLUMEU,
182 	PTB_SVOLUMED,
183 	PTB_SLENGTHS,
184 	PTB_SLENGTHU,
185 	PTB_SLENGTHD,
186 	PTB_SREPEATS,
187 	PTB_SREPEATU,
188 	PTB_SREPEATD,
189 	PTB_SREPLENS,
190 	PTB_SREPLENU,
191 	PTB_SREPLEND,
192 	PTB_TEMPOU,
193 	PTB_TEMPOD,
194 	PTB_POS,
195 	PTB_POSINS,
196 	PTB_POSDEL,
197 	PTB_VISUALS,
198 	PTB_PATTBOX,
199 	PTB_PATTDATA,
200 
201 	// SAMPLER SCREEN
202 	PTB_SA_EXIT,
203 	PTB_SA_PLAYWAVE,
204 	PTB_SA_SHOWRANGE,
205 	PTB_SA_ZOOMOUT,
206 	PTB_SA_STOP,
207 	PTB_SA_PLAYDISPLAY,
208 	PTB_SA_SHOWALL,
209 	PTB_SA_RANGEALL,
210 	PTB_SA_LOOP,
211 	PTB_SA_PLAYRANGE,
212 	PTB_SA_RANGECENTER,
213 	PTB_SA_RANGEBEG,
214 	PTB_SA_RANGEEND,
215 	PTB_SA_CUT,
216 	PTB_SA_COPY,
217 	PTB_SA_PASTE,
218 	PTB_SA_VOLUME,
219 	PTB_SA_TUNETONE,
220 	PTB_SA_FIXDC,
221 	PTB_SA_FILTERS,
222 	PTB_SA_SAMPLE,
223 	PTB_SA_RESAMPLE,
224 	PTB_SA_RESAMPLENOTE,
225 	PTB_SA_SAMPLEAREA,
226 	PTB_SA_ZOOMBARAREA,
227 	PTB_SA_VOL_FROM_NUM,
228 	PTB_SA_VOL_TO_NUM,
229 	PTB_SA_FIL_LP_CUTOFF,
230 	PTB_SA_FIL_HP_CUTOFF
231 };
232 
233 typedef struct guiButton_t
234 {
235 	int32_t x1, y1, x2, y2, b;
236 } guiButton_t;
237 
238 enum
239 {
240 	POINTER_W = 16,
241 	POINTER_H = 16,
242 
243 	POINTER_MODE_IDLE = 0,
244 	POINTER_MODE_EDIT = 1,
245 	POINTER_MODE_PLAY = 2,
246 	POINTER_MODE_MSG1 = 3,
247 	POINTER_MODE_RECORD = 4,
248 	POINTER_MODE_MSG2 = 5,
249 
250 	POINTER_GRAY = 0,
251 	POINTER_YELLOW = 1,
252 	POINTER_BLUE = 2,
253 	POINTER_PURPLE = 3,
254 	POINTER_GREEN = 4,
255 	POINTER_RED = 5
256 };
257 
258 #define NUM_CURSORS 6
259 
260 extern SDL_Cursor *cursors[NUM_CURSORS];
261 
262 void setMsgPointer(void);
263 void setErrPointer(void);
264 void pointerSetMode(uint8_t pointerMode, bool carry);
265 void pointerResetThreadSafe(void); // used for effect F00 in replayer (stop song)
266 void pointerSetPreviousMode(void);
267 bool setSystemCursor(SDL_Cursor *cur);
268 void freeMouseCursors(void);
269 bool createMouseCursors(void);
270 
271 void readMouseXY(void);
272 void updateMouseScaling(void);
273 void mouseWheelUpHandler(void);
274 void mouseWheelDownHandler(void);
275 void mouseButtonUpHandler(uint8_t mouseButton);
276 void mouseButtonDownHandler(uint8_t mouseButton);
277 void handleGUIButtonRepeat(void);
278 void updateMouseCounters(void);
279