Skip to content

Commit 60fb85c

Browse files
authored
Release XY Pad X v1.0 (#428)
Initial release (Based on XY Pad)
1 parent fa4ec20 commit 60fb85c

File tree

1 file changed

+399
-0
lines changed

1 file changed

+399
-0
lines changed

MIDI/mschnellsid_XY Pad X.jsfx

Lines changed: 399 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,399 @@
1+
desc: XY Pad X
2+
author: mschnell & SID
3+
version: 1.0
4+
changelog: Initial release (Based on XY Pad)
5+
about:
6+
# XY Pad X
7+
Sends out high resolution CC messages when the circle is dragged.
8+
9+
Moreover DAW-Parameters (hidden sliders) "x" and "Y" are provided for being directly linked from other plugins.
10+
11+
12+
### [+] menu in the Reaper provided plugin frame:
13+
14+
show or hide faders
15+
16+
initial values (whenever loaded) for Wide/Narrow and Dragging modes.
17+
18+
### Right click "color Key menu" on the left border or hit key to select modes:
19+
20+
A red: single CC -> only vertical (to use multiple "thin" instances)
21+
22+
B green: dual CCs by X/Y pad
23+
24+
C blue: "drag" mode (left click and drag)
25+
26+
D dark gray: "auto mode 1a (see below)
27+
28+
E light gray: "auto mode 1b (see below)
29+
30+
F white: "auto mode 2" move by mouse over without clicking
31+
32+
#### auto mode 1:
33+
34+
green circle: passive
35+
36+
click on pad: start dragging (circle turns white -> active)
37+
38+
white circle: drag by mouse over
39+
40+
leave pad: circle turns green -> passive
41+
42+
right click: circle turns green -> passive
43+
44+
#### auto mode 1b:
45+
46+
also left click: circle turns green -> passive
47+
48+
49+
50+
// auto -> move :
51+
// 0 only with click
52+
// 1 enabled: wait for first click
53+
// 2 enabled until outside
54+
// 3 always
55+
56+
// auto_toggle (reset autop to passive with left-click)
57+
// 0 never
58+
// 1
59+
// 2
60+
61+
62+
63+
in_pin:none
64+
out_pin:none
65+
66+
config: conf "View Sliders" 0 0="No" 1="Yes"
67+
config: conf_width "Width" 0 0="A = wide" 1="B = narrow"
68+
config: conf_auto "Drag-Mode" 0 0="C = Left-Drag" 1="D = start Left-Drag, stop Right-Click" 2="E = start Left-Drag, stop Right-Click or left-Click" 3="F = Hover-Drag"
69+
70+
<?conf == 0 ? (
71+
show = "-";
72+
) : (
73+
show = "";
74+
);
75+
?>
76+
77+
<?conf_auto == 0 ? (
78+
init_auto = 0;
79+
init_auto_toggle = 0;
80+
) : conf_auto == 1 ? (
81+
init_auto = 1;
82+
init_auto_toggle = 0;
83+
) : conf_auto == 2 ? (
84+
init_auto = 1;
85+
init_auto_toggle = 1;
86+
) : conf_auto == 3 ? (
87+
init_auto = 3;
88+
init_auto_toggle = 0;
89+
);
90+
?>
91+
92+
slider1:0<0,16,1{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}><?printf(show)?>Channel
93+
slider2:16<0,31,1{0 Bank Sel,1 Mod Wheel,2 Breath,3,4 Foot P,5 Porta,6 Data Entry,7 Vol,8 Balance,9,10 Pan,11 Expression,12 Ctrl 1,13 Ctrl 2,14,15,16 GP Slider 1,17 GP Slider 2,18 GP Slider 3,19 GP Slider 4,20,21,22,23,24,25,26,27,28,29,30,31,}><?printf(show)?>X CC # (Hi Res)
94+
slider3:17<0,31,1{0 Bank Sel,1 Mod Wheel,2 Breath,3,4 Foot P,5 Porta,6 Data Entry,7 Vol,8 Balance,9,10 Pan,11 Expression,12 Ctrl 1,13 Ctrl 2,14,15,16 GP Slider 1,17 GP Slider 2,18 GP Slider 3,19 GP Slider 4,20,21,22,23,24,25,26,27,28,29,30,31,}><?printf(show)?>Y CC # (Hi Res)
95+
slider4:0<0,11,1{Off, On}><?printf(show)?>Hi Res CC
96+
slider10:0<0,1,0.0001><?printf(show)?>X
97+
slider11:0<0,1,0.0001><?printf(show)?>Y
98+
99+
100+
@init
101+
ext_noinit = 1;
102+
103+
xh = 0;
104+
xl = 0;
105+
yh = 0;
106+
yl = 0;
107+
xh_ = -1;
108+
xl_ = -1;
109+
yh_ = -1;
110+
yl_ = -1;
111+
x_ = -1;
112+
y_ = -1;
113+
border = 20;
114+
border2 = border / 2;
115+
last_gfx_w = -1;
116+
last_gfx_h = -1;
117+
118+
width = <?printf("%d", conf_width)?>;
119+
auto = <?printf("%d", init_auto)?>;
120+
auto_toggle = <?printf("%d", init_auto_toggle)?>;
121+
122+
123+
@slider
124+
mes1 = 0x0B0 + slider1;
125+
mes2xl = slider2 + 0x20;
126+
mes2xh = slider2;
127+
mes2yl = slider3 + 0x20;
128+
mes2yh = slider3;
129+
130+
@block
131+
!width ? (
132+
xh != xh_ ? (
133+
xh_ = xh;
134+
midisend(0, mes1, mes2xh, xh_);
135+
);
136+
slider4 ? (
137+
xl != xl_ ? (
138+
xl_ = xl;
139+
midisend(0, mes1, mes2xl, xl_);
140+
);
141+
);
142+
);
143+
yh != yh_ ? (
144+
yh_ = yh;
145+
midisend(0, mes1, mes2yh, yh_);
146+
);
147+
slider4 ? (
148+
yl != yl_ ? (
149+
yl_ = yl;
150+
midisend(0, mes1, mes2yl, yl_);
151+
);
152+
);
153+
154+
155+
@gfx 640 400
156+
redraw = 0;
157+
158+
width ? gfx_w = border * 2 + 1;
159+
gfx_h2 = gfx_h / 2;
160+
161+
last_gfx_w != gfx_w ? (
162+
last_gfx_w = gfx_w;
163+
redraw = 1;
164+
);
165+
166+
last_gfx_h != gfx_h ? (
167+
last_gfx_h = gfx_h;
168+
redraw = 1;
169+
);
170+
171+
c = gfx_getchar();
172+
c > 0 ? (
173+
c == 'a' ? (
174+
width = 1;
175+
redraw = 1;
176+
) : c == 'b' ? (
177+
width = 0;
178+
redraw = 1;
179+
) : c == 'c' ? (
180+
auto = 0;
181+
auto_toggle = 0;
182+
redraw = 1;
183+
) : c == 'd' ? (
184+
auto = 1;
185+
auto_toggle = 0;
186+
redraw = 1;
187+
) : c == 'e' ? (
188+
auto = 1;
189+
auto_toggle = 1;
190+
redraw = 1;
191+
) : c == 'f' ? (
192+
auto = 3;
193+
auto_toggle = 0;
194+
redraw = 1;
195+
);
196+
);
197+
198+
mouse_cap & 2 ? (
199+
mouse_x < border ? (
200+
(mouse_y > border) && (mouse_y < 3*border) ? (
201+
width = 1;
202+
redraw = 1;
203+
) : (mouse_y > 3*border) && (mouse_y < 5*border) ? (
204+
width = 0;
205+
redraw = 1;
206+
) : (mouse_y > 5*border) && (mouse_y < 7*border) ? (
207+
auto = 0;
208+
auto_toggle = 0;
209+
redraw = 1;
210+
) : (mouse_y > 7*border) && (mouse_y < 9*border) ? (
211+
auto = 1;
212+
auto_toggle = 0;
213+
redraw = 1;
214+
) : (mouse_y > 9*border) && (mouse_y < 11*border) ? (
215+
auto = 1;
216+
auto_toggle = 1;
217+
redraw = 1;
218+
) : (mouse_y > 11*border) && (mouse_y < 13*border) ? (
219+
auto = 3;
220+
auto_toggle = 0;
221+
redraw = 1;
222+
mouse_x = border; mouse_y = gfx_h-border-1;
223+
);
224+
) : (
225+
auto == 2 ? (
226+
auto = 1;
227+
redraw = 1;
228+
);
229+
);
230+
);
231+
232+
auto_do = 0;
233+
auto ?
234+
(mouse_x > 0) && (mouse_x < gfx_w) && (mouse_y > 0) && (mouse_y < gfx_h) ? (
235+
auto > 1 ? auto_do = 1;
236+
) : ( // outside
237+
auto == 2 ? (
238+
auto = 1;
239+
redraw = 1;
240+
);
241+
);
242+
243+
244+
(mouse_cap & 1) || auto_do ? (
245+
_x = mouse_x - border;
246+
_y = mouse_y - border;
247+
248+
_x < 0 ? _x = 0;
249+
_y < 0 ? _y = 0;
250+
251+
// Calculate normalized position within active area
252+
x = _x / active_w;
253+
y = _y / active_h;
254+
255+
x *= 16384;
256+
y *= 16384;
257+
y = 16383-y;
258+
x |= 0;
259+
y |= 0;
260+
261+
x < 0 ? (
262+
x = 0;
263+
_x = border;
264+
) : x > 16383 ? (
265+
x = 16383;
266+
_x = active_w;
267+
);
268+
y < 0 ? (
269+
y = 0;
270+
_y = active_h;
271+
) : y > 16383 ? (
272+
y = 16383;
273+
_y = border;
274+
);
275+
276+
xh = x / 128;
277+
xh |= 0;
278+
xl = x -xh * 128;
279+
yh = y / 128;
280+
yh |= 0;
281+
yl = y -yh * 128;
282+
283+
mouse_cap & 1 ? (
284+
auto_toggle == 1 ? (
285+
auto == 2 ? (
286+
auto = 1;
287+
redraw = 1;
288+
);
289+
);
290+
);
291+
292+
(x != x_) || (y!=y_) ? (
293+
auto == 1 ? (
294+
auto = 2; // enable hover-dragging
295+
auto_toggle ? auto_toggle = 2;
296+
);
297+
redraw = 1;
298+
) : (
299+
auto == 2 ? (
300+
mouse_cap & 1 ? (
301+
auto_toggle == 2 ? auto_toggle = 1;
302+
);
303+
);
304+
);
305+
);
306+
redraw ? (
307+
x_ = x;
308+
y_ = y;
309+
310+
// Calculate active area dimensions
311+
active_w = gfx_w - (border * 2);
312+
active_h = gfx_h - (border * 2);
313+
314+
315+
// Draw background
316+
gfx_r = gfx_g = gfx_b = 0.1;
317+
gfx_rect(0, 0, gfx_w, gfx_h);
318+
319+
// Draw active area
320+
gfx_r = gfx_g = gfx_b = 0.15;
321+
gfx_rect(border, border, active_w, active_h);
322+
width ? gfx_r = 1 : gfx_g = 1;
323+
gfx_line(border,gfx_h-border,gfx_w-border,border);
324+
325+
// Draw position indicator (offset by border)
326+
gfx_r = gfx_g = gfx_b = 1;
327+
auto == 0 ? (
328+
gfx_r = 0.1;
329+
) : auto == 1 ? (
330+
gfx_r = gfx_b = 0.1;
331+
);
332+
gfx_circle(_x + border, _y + border, 7);
333+
gfx_circle(_x + border, _y + border, 6);
334+
335+
//give x/y feedback
336+
gfx_r = gfx_g = gfx_b = 1;
337+
gfx_x = 5;
338+
gfx_y = 5;
339+
slider4 ? (
340+
sprintf(#textx, "CC %2d: %3d / CC %2d: %3d", slider3, yh, slider3+32, yl);
341+
) : (
342+
sprintf(#textx, "CC %2d: %3d", slider3, yh);
343+
);
344+
gfx_drawstr(#textx);
345+
!width ? (
346+
slider4 ? (
347+
gfx_x = gfx_w - 185;
348+
) : (
349+
gfx_x = gfx_w - 80;
350+
);
351+
gfx_y = gfx_h - border/2;
352+
slider4 ? (
353+
sprintf(#texty, "CC %2d: %3d / CC %2d: %3d", slider2, xh, slider2+32, xl);
354+
) : (
355+
sprintf(#texty, "CC %2d: %3d", slider2, xh);
356+
);
357+
gfx_drawstr(#texty);
358+
);
359+
360+
361+
// Show "menu"
362+
gfx_r = 1;
363+
gfx_g = gfx_b = 0.1;
364+
gfx_x = 7; gfx_y = border;
365+
gfx_drawstr("A");
366+
width ? gfx_circle(border2, 2*border, border/5, 1);
367+
368+
gfx_g = 1;
369+
gfx_r = gfx_b = 0.1;
370+
gfx_x = 7; gfx_y = 3*border;
371+
gfx_drawstr("B");
372+
!width ? gfx_circle(border2, 4*border, border/5, 1);
373+
374+
gfx_b = 1;
375+
gfx_g = gfx_r = 0.1;
376+
gfx_x = 7; gfx_y = 5*border;
377+
gfx_drawstr("C");
378+
auto == 0 ? gfx_circle(border2, 6*border, border/5, 1);
379+
380+
gfx_r = gfx_g = gfx_b = 0.33;
381+
gfx_x = 7; gfx_y = 7*border;
382+
gfx_drawstr("D");
383+
(auto > 0) && (auto < 3) && (auto_toggle == 0) ? gfx_circle(border2, 8*border, border/5, 1);
384+
385+
gfx_r = gfx_g = gfx_b = 0.66;
386+
gfx_x = 7; gfx_y = 9*border;
387+
gfx_drawstr("E");
388+
(auto > 0) && (auto_toggle > 0) ? gfx_circle(border2, 10*border, border/5, 1);
389+
390+
391+
gfx_r = gfx_g = gfx_b = 1;
392+
gfx_x = 7; gfx_y = 11*border;
393+
gfx_drawstr("F");
394+
(auto == 3) ? gfx_circle(border2, 12*border, border/5, 1);
395+
396+
397+
slider10 = x / 16383;
398+
slider11 = y / 16383;
399+
);

0 commit comments

Comments
 (0)