libxputty 0.1
Loading...
Searching...
No Matches
Functions
xmidi_keyboard.c File Reference

Go to the source code of this file.

Functions

void mk_keysym_azerty_to_midi_key (long inkey, float *midi_key)
 
void mk_keysym_qwertz_to_midi_key (long inkey, float *midi_key)
 
void mk_keysym_qwerty_to_midi_key (unsigned int inkey, float *midi_key)
 
bool mk_is_key_in_matrix (unsigned long *key_matrix, int key)
 
bool mk_have_key_in_matrix (unsigned long *key_matrix)
 
void mk_clear_key_matrix (unsigned long *key_matrix)
 
void mk_draw_knob (void *w_, void *user_data)
 
Widget_tadd_keyboard_knob (Widget_t *parent, const char *label, int x, int y, int width, int height)
 
Widget_tmk_open_midi_keyboard (Widget_t *w)
 

Function Documentation

◆ add_keyboard_knob()

Widget_t * add_keyboard_knob ( Widget_t parent,
const char *  label,
int  x,
int  y,
int  width,
int  height 
)

Definition at line 789 of file xmidi_keyboard.c.

790 {
791 Widget_t *wid = add_knob(parent,label, x, y, width, height);
792 wid->flags |= NO_AUTOREPEAT;
793 set_adjustment(wid->adj,64.0, 64.0, 0.0, 127.0, 1.0, CL_CONTINUOS);
795 wid->func.key_press_callback = wheel_key_press;
796 wid->func.key_release_callback = wheel_key_release;
797 return wid;
798}
xevfunc expose_callback
Definition xwidget.h:85
evfunc key_release_callback
Definition xwidget.h:105
evfunc key_press_callback
Definition xwidget.h:104
Widget_t - struct to hold the basic Widget_t info.
Definition xwidget.h:457
Adjustment_t * adj
Definition xwidget.h:497
long long flags
Definition xwidget.h:461
Func_t func
Definition xwidget.h:481
void set_adjustment(Adjustment_t *adj, float std_value, float value, float min_value, float max_value, float step, CL_type type)
*set_adjustment - set a new range to a existing Adjustment_t or create if it not exists yet
Definition xadjustment.c:80
@ CL_CONTINUOS
Definition xadjustment.h:49
Widget_t * add_knob(Widget_t *parent, const char *label, int x, int y, int width, int height)
add_knob - add a knob to a Widget_t connect to func.value_changed_callback to implement your actions ...
Definition xknob.c:26
void mk_draw_knob(void *w_, void *user_data)
@ NO_AUTOREPEAT
Definition xwidget.h:408

References add_knob(), Widget_t::adj, CL_CONTINUOS, Func_t::expose_callback, Widget_t::flags, Widget_t::func, Func_t::key_press_callback, Func_t::key_release_callback, mk_draw_knob(), NO_AUTOREPEAT, and set_adjustment().

Referenced by mk_open_midi_keyboard().

◆ mk_clear_key_matrix()

void mk_clear_key_matrix ( unsigned long *  key_matrix)

Definition at line 221 of file xmidi_keyboard.c.

221 {
222 int i = 0;
223 int j = 0;
224 for(;j<4;j++) {
225 for(;i<32;i++) {
226 key_matrix[j] &= (~(1 << i));
227 }
228 i = 0;
229 }
230}

◆ mk_draw_knob()

void mk_draw_knob ( void *  w_,
void *  user_data 
)

get values for the knob

create a rotating pointer on the kob

show value on the kob

show label below the knob

Definition at line 231 of file xmidi_keyboard.c.

231 {
232 Widget_t *w = (Widget_t*)w_;
233 Metrics_t metrics;
234 os_get_window_metrics(w, &metrics);
235 int width = metrics.width-2;
236 int height = metrics.height-2;
237 if (!metrics.visible) return;
238
239 const double scale_zero = 20 * (M_PI/180); // defines "dead zone" for knobs
240 int arc_offset = 2;
241 int knob_x = 0;
242 int knob_y = 0;
243
244 int grow = (width > height) ? height:width;
245 knob_x = grow-1;
246 knob_y = grow-1;
249 int knobx = (width - knob_x) * 0.5;
250 int knobx1 = width* 0.5;
251
252 int knoby = (height - knob_y) * 0.5;
253 int knoby1 = height * 0.5;
254
255 double knobstate = adj_get_state(w->adj_y);
256 double angle = scale_zero + knobstate * 2 * (M_PI - scale_zero);
257
258 double pointer_off =knob_x/3.5;
259 double radius = min(knob_x-pointer_off, knob_y-pointer_off) / 2;
260 double lengh_x = (knobx+radius+pointer_off/2) - radius * sin(angle);
261 double lengh_y = (knoby+radius+pointer_off/2) + radius * cos(angle);
262 double radius_x = (knobx+radius+pointer_off/2) - radius/ 1.18 * sin(angle);
263 double radius_y = (knoby+radius+pointer_off/2) + radius/ 1.18 * cos(angle);
264 cairo_pattern_t* pat;
265 cairo_new_path (w->crb);
266
267 pat = cairo_pattern_create_linear (0, 0, 0, knob_y);
268 cairo_pattern_add_color_stop_rgba (pat, 1, 0.3, 0.3, 0.3, 1.0);
269 cairo_pattern_add_color_stop_rgba (pat, 0.75, 0.2, 0.2, 0.2, 1.0);
270 cairo_pattern_add_color_stop_rgba (pat, 0.5, 0.15, 0.15, 0.15, 1.0);
271 cairo_pattern_add_color_stop_rgba (pat, 0.25, 0.1, 0.1, 0.1, 1.0);
272 cairo_pattern_add_color_stop_rgba (pat, 0, 0.05, 0.05, 0.05, 1.0);
273
274 cairo_scale (w->crb, 0.95, 1.05);
275 cairo_arc(w->crb,knobx1+arc_offset/2, knoby1-arc_offset, knob_x/2.2, 0, 2 * M_PI );
276 cairo_set_source (w->crb, pat);
277 cairo_fill_preserve (w->crb);
278 cairo_set_source_rgb (w->crb, 0.1, 0.1, 0.1);
279 cairo_set_line_width(w->crb,1);
280 cairo_stroke(w->crb);
281 cairo_scale (w->crb, 1.05, 0.95);
282 cairo_new_path (w->crb);
283 cairo_pattern_destroy (pat);
284 pat = NULL;
285
286 pat = cairo_pattern_create_linear (0, 0, 0, knob_y);
287 cairo_pattern_add_color_stop_rgba (pat, 0, 0.3, 0.3, 0.3, 1.0);
288 cairo_pattern_add_color_stop_rgba (pat, 0.25, 0.2, 0.2, 0.2, 1.0);
289 cairo_pattern_add_color_stop_rgba (pat, 0.5, 0.15, 0.15, 0.15, 1.0);
290 cairo_pattern_add_color_stop_rgba (pat, 0.75, 0.1, 0.1, 0.1, 1.0);
291 cairo_pattern_add_color_stop_rgba (pat, 1, 0.05, 0.05, 0.05, 1.0);
292
293 cairo_arc(w->crb,knobx1, knoby1, knob_x/2.6, 0, 2 * M_PI );
294 cairo_set_source (w->crb, pat);
295 cairo_fill_preserve (w->crb);
296 cairo_set_source_rgb (w->crb, 0.1, 0.1, 0.1);
297 cairo_set_line_width(w->crb,1);
298 cairo_stroke(w->crb);
299 cairo_new_path (w->crb);
300 cairo_pattern_destroy (pat);
301
303 cairo_set_line_cap(w->crb, CAIRO_LINE_CAP_ROUND);
304 cairo_set_line_join(w->crb, CAIRO_LINE_JOIN_BEVEL);
305 cairo_move_to(w->crb, radius_x, radius_y);
306 cairo_line_to(w->crb,lengh_x,lengh_y);
307 cairo_set_line_width(w->crb,3);
308 cairo_set_source_rgb (w->crb,0.63,0.63,0.63);
309 cairo_stroke(w->crb);
310 cairo_new_path (w->crb);
311
312 cairo_text_extents_t extents;
314 if (w->state) {
315 char s[64];
316 snprintf(s, 63,"%d", (int) w->adj_y->value);
317 cairo_set_source_rgb (w->crb, 0.6, 0.6, 0.6);
318 cairo_set_font_size (w->crb, knobx1/3);
319 cairo_text_extents(w->crb, s, &extents);
320 cairo_move_to (w->crb, knobx1-extents.width/2, knoby1+extents.height/2);
321 cairo_show_text(w->crb, s);
322 cairo_new_path (w->crb);
323 }
324
327 float font_size = ((height/2.2 < (width*0.5)/3) ? height/2.2 : (width*0.5)/3);
328 cairo_set_font_size (w->crb, font_size);
329 cairo_text_extents(w->crb,w->label , &extents);
330
331 cairo_move_to (w->crb, knobx1-extents.width/2, height );
332 cairo_show_text(w->crb, w->label);
333 cairo_new_path (w->crb);
334}
Metrics_t - struct to receive window size, position & visibility Pass this struct to os_get_window_...
Adjustment_t * adj_y
Definition xwidget.h:495
cairo_t * crb
Definition xwidget.h:489
int state
Definition xwidget.h:511
const char * label
Definition xwidget.h:463
float adj_get_state(Adjustment_t *adj)
adj_get_state - get the current state of the Adjustment_t
Color_state get_color_state(Widget_t *wid)
get_color_state - get the Color_state to use in relation to the Widget_t state
Definition xcolor.c:222
void use_text_color_scheme(Widget_t *w, Color_state st)
use_text_color_scheme - use text Colors to paint on Widget_t
Definition xcolor.c:266
void os_get_window_metrics(Widget_t *w, Metrics_t *metrics)
os_get_window_metrics - Get the Merics_t struct related to a Widget_t

References adj_get_state(), Widget_t::adj_y, Widget_t::crb, get_color_state(), Metrics_t::height, Widget_t::label, os_get_window_metrics(), Widget_t::state, use_text_color_scheme(), Adjustment_t::value, Metrics_t::visible, and Metrics_t::width.

Referenced by add_keyboard_knob().

◆ mk_have_key_in_matrix()

bool mk_have_key_in_matrix ( unsigned long *  key_matrix)

Definition at line 204 of file xmidi_keyboard.c.

204 {
205
206 bool ret = false;
207 int i = 0;
208 int j = 0;
209 for(;j<4;j++) {
210 for(;i<32;i++) {
211 if(key_matrix[j] & (1<<i)) {
212 ret = true;
213 break;
214 }
215 }
216 i = 0;
217 }
218 return ret;
219}

◆ mk_is_key_in_matrix()

bool mk_is_key_in_matrix ( unsigned long *  key_matrix,
int  key 
)

Definition at line 183 of file xmidi_keyboard.c.

183 {
184 unsigned long *use_matrix = &key_matrix[0];
185
186
187 if(key>94) {
188 use_matrix = &key_matrix[3];
189 key -=94;
190 } else if(key>62) {
191 use_matrix = &key_matrix[2];
192 key -=62;
193 } else if(key>31) {
194 use_matrix = &key_matrix[1];
195 key -= 31;
196 }
197 bool ret = false;
198 if((*use_matrix) & (1<<key)) {
199 ret = true;
200 }
201 return ret;
202}

◆ mk_keysym_azerty_to_midi_key()

void mk_keysym_azerty_to_midi_key ( long  inkey,
float *  midi_key 
)

Definition at line 24 of file xmidi_keyboard.c.

24 {
25 switch(inkey) {
26 case(XK_w) : (*midi_key) = 12.0; /* w = C0 */
27 break;
28 case(XK_s) : (*midi_key) = 13.0; /* s */
29 break;
30 case(XK_x) : (*midi_key) = 14.0; /* x */
31 break;
32 case(XK_d) : (*midi_key) = 15.0; /* d */
33 break;
34 case(XK_c) : (*midi_key) = 16.0; /* c */
35 break;
36 case(XK_v) : (*midi_key) = 17.0; /* v */
37 break;
38 case(XK_g) : (*midi_key) = 18.0; /* g */
39 break;
40 case(XK_b) : (*midi_key) = 19.0; /* b */
41 break;
42 case(XK_h) : (*midi_key) = 20.0; /* h */
43 break;
44 case(XK_n) : (*midi_key) = 21.0; /* n */
45 break;
46 case(XK_j) : (*midi_key) = 22.0; /* j */
47 break;
48 case(XK_comma) : (*midi_key) = 23.0; /* , */
49 break;
50 case(XK_a) : (*midi_key) = 24.0; /* a */
51 break;
52 case(XK_eacute) : (*midi_key) = 25.0; /* eacute */
53 break;
54 case(XK_z) : (*midi_key) = 26.0; /* z */
55 break;
56 case(XK_quotedbl) : (*midi_key) = 27.0; /* quotedbl */
57 break;
58 case(XK_e) : (*midi_key) = 28.0; /* e */
59 break;
60 case(XK_r) : (*midi_key) = 29.0; /* r */
61 break;
62 case(XK_parenleft) : (*midi_key) = 30.0; /* parenleft */
63 break;
64 case(XK_t) : (*midi_key) = 31.0; /* t */
65 break;
66 case(XK_minus) : (*midi_key) = 32.0; /* minus */
67 break;
68 case(XK_y) : (*midi_key) = 33.0; /* y */
69 break;
70 case(XK_egrave) : (*midi_key) = 34.0; /* egrave */
71 break;
72 case(XK_u) : (*midi_key) = 35.0; /* u */
73 break;
74 case(XK_i) : (*midi_key) = 36.0; /* i */
75 break;
76 case(XK_ccedilla) : (*midi_key) = 37.0; /* ccedilla */
77 break;
78 case(XK_o) : (*midi_key) = 38.0; /* o */
79 break;
80 case(XK_agrave) : (*midi_key) = 39.0; /* agrave */
81 break;
82 case(XK_p) : (*midi_key) = 40.0; /* p */
83 break;
84 case(XK_dead_diaeresis) :
85 case(XK_dead_circumflex) : (*midi_key) = 41.0; /* dead circumflex */
86 break;
87 }
88}

◆ mk_keysym_qwerty_to_midi_key()

void mk_keysym_qwerty_to_midi_key ( unsigned int  inkey,
float *  midi_key 
)

Definition at line 157 of file xmidi_keyboard.c.

157 {
158 mk_keysym_qwertz_to_midi_key(inkey,midi_key);
159 if ((*midi_key) == 12) (*midi_key) = 33;
160 else if ((*midi_key) == 33) (*midi_key) = 12;
161}
void mk_keysym_qwertz_to_midi_key(long inkey, float *midi_key)

References mk_keysym_qwertz_to_midi_key().

◆ mk_keysym_qwertz_to_midi_key()

void mk_keysym_qwertz_to_midi_key ( long  inkey,
float *  midi_key 
)

Definition at line 90 of file xmidi_keyboard.c.

90 {
91 switch(inkey) {
92 case(XK_y) : (*midi_key) = 12.0; /* y = C0 */
93 break;
94 case(XK_s) : (*midi_key) = 13.0; /* s */
95 break;
96 case(XK_x) : (*midi_key) = 14.0; /* x */
97 break;
98 case(XK_d) : (*midi_key) = 15.0; /* d */
99 break;
100 case(XK_c) : (*midi_key) = 16.0; /* c */
101 break;
102 case(XK_v) : (*midi_key) = 17.0; /* v */
103 break;
104 case(XK_g) : (*midi_key) = 18.0; /* g */
105 break;
106 case(XK_b) : (*midi_key) = 19.0; /* b */
107 break;
108 case(XK_h) : (*midi_key) = 20.0; /* h */
109 break;
110 case(XK_n) : (*midi_key) = 21.0; /* n */
111 break;
112 case(XK_j) : (*midi_key) = 22.0; /* j */
113 break;
114 case(XK_m) : (*midi_key) = 23.0; /* m */
115 break;
116 case(XK_q) : (*midi_key) = 24.0; /* q */
117 break;
118 case(XK_2) : (*midi_key) = 25.0; /* 2 */
119 break;
120 case(XK_w) : (*midi_key) = 26.0; /* w */
121 break;
122 case(XK_3) : (*midi_key) = 27.0; /* 3 */
123 break;
124 case(XK_e) : (*midi_key) = 28.0; /* e */
125 break;
126 case(XK_r) : (*midi_key) = 29.0; /* r */
127 break;
128 case(XK_5) : (*midi_key) = 30.0; /* 5 */
129 break;
130 case(XK_t) : (*midi_key) = 31.0; /* t */
131 break;
132 case(XK_6) : (*midi_key) = 32.0; /* 6 */
133 break;
134 case(XK_z) : (*midi_key) = 33.0; /* z */
135 break;
136 case(XK_7) : (*midi_key) = 34.0; /* 7 */
137 break;
138 case(XK_u) : (*midi_key) = 35.0; /* u */
139 break;
140 case(XK_i) : (*midi_key) = 36.0; /* i */
141 break;
142 case(XK_9) : (*midi_key) = 37.0; /* 9 */
143 break;
144 case(XK_o) : (*midi_key) = 38.0; /* o */
145 break;
146 case(XK_0) : (*midi_key) = 39.0; /* 0 */
147 break;
148 case(XK_p) : (*midi_key) = 40.0; /* p */
149 break;
150 case(XK_udiaeresis) : (*midi_key) = 41.0; /* ΓΌ */
151 break;
152 case(XK_plus) : (*midi_key) = 42.0; /* + */
153 break;
154 }
155}

Referenced by mk_keysym_qwerty_to_midi_key().

◆ mk_open_midi_keyboard()

Widget_t * mk_open_midi_keyboard ( Widget_t w)

Definition at line 800 of file xmidi_keyboard.c.

800 {
801 Widget_t *wid = create_window(w->app, os_get_root_window(w->app, IS_WINDOW), 0, 0, 700, 200);
803 MidiKeyboard_mk *keys = (MidiKeyboard_mk*)malloc(sizeof(MidiKeyboard_mk));
804 wid->parent_struct = keys;
805 wid->parent = w;
806 wid->flags |= HAS_MEM | NO_AUTOREPEAT;
807 keys->prelight_key = -1;
808 keys->active_key = -1;
809 keys->send_key = -1;
810 keys->octave = 12*2;
811 keys->layout = 0;
812 int j = 0;
813 for(;j<4;j++) {
814 keys->key_matrix[j] = 0;
815 }
816
817 wid->func.expose_callback = draw_keyboard;
818 wid->func.motion_callback = keyboard_motion;
819 wid->func.leave_callback = leave_keyboard;
820 wid->func.button_press_callback = button_pressed_keyboard;
821 wid->func.button_release_callback = button_released_keyboard;
822 wid->func.key_press_callback = key_press;
823 wid->func.key_release_callback = key_release;
824 wid->func.mem_free_callback = keyboard_mem_free;
825 wid->func.map_notify_callback = map_keyboard;
826 widget_set_icon_from_png(wid, LDVAR(midikeyboard_png));
827 widget_set_title(wid, "Midi Keyboard");
828 keys->mk_send_note = key_dummy;
829 keys->mk_send_pitch = wheel_dummy;
830 keys->mk_send_pitchsensity = wheel_dummy;
831 keys->mk_send_mod = wheel_dummy;
832 keys->mk_send_detune = wheel_dummy;
833 keys->mk_send_attack = wheel_dummy;
834 keys->mk_send_sustain = wheel_dummy;
835 keys->mk_send_release = wheel_dummy;
836 keys->mk_send_volume = wheel_dummy;
837 keys->mk_send_velocity = wheel_dummy;
838 keys->mk_send_all_sound_off = wheel_dummy;
839
840 Widget_t *p = add_keyboard_knob(wid, "PitchBend", 5, 0, 60, 75);
841 p->func.value_changed_callback = pitchwheel_callback;
842 keys->pitchwheel = (int)adj_get_value(p->adj);
843
844 Widget_t *s = add_keyboard_knob(wid, "P.Sensity", 65, 0, 60, 75);
845 s->func.value_changed_callback = pitchsensity_callback;
846 keys->pitchsensity = (int)adj_get_value(s->adj);
847
848 Widget_t *m = add_keyboard_knob(wid, "ModWheel", 125, 0, 60, 75);
849 m->func.value_changed_callback = modwheel_callback;
850 keys->modwheel = (int)adj_get_value(m->adj);
851
852 Widget_t *de = add_keyboard_knob(wid, "Detune", 185, 0, 60, 75);
853 de->func.value_changed_callback = detune_callback;
854 keys->detune = (int)adj_get_value(de->adj);
855
856 Widget_t *at = add_keyboard_knob(wid, "Attack", 245, 0, 60, 75);
857 at->func.value_changed_callback = attack_callback;
858 keys->attack = (int)adj_get_value(at->adj);
859
860 Widget_t *su = add_keyboard_knob(wid, "Sustain", 305, 0, 60, 75);
861 su->func.value_changed_callback = sustain_callback;
862 keys->sustain = (int)adj_get_value(su->adj);
863
864 Widget_t *re = add_keyboard_knob(wid, "Release", 365, 0, 60, 75);
865 re->func.value_changed_callback = release_callback;
866 keys->release = (int)adj_get_value(re->adj);
867
868 Widget_t *v = add_keyboard_knob(wid, "Volume", 425, 0, 60, 75);
869 v->func.value_changed_callback = volume_callback;
870 keys->volume = (int)adj_get_value(v->adj);
871
872 Widget_t *ve = add_keyboard_knob(wid, "Velocity", 485, 0, 60, 75);
873 set_adjustment(ve->adj,127.0, 127.0, 0.0, 127.0, 1.0, CL_CONTINUOS);
874 ve->func.value_changed_callback = velocity_callback;
875 keys->velocity = (int)adj_get_value(ve->adj);
876
877 Widget_t *b = add_hslider(wid, "Keyboard mapping", 540, 40, 160, 35);
878 b->flags |= NO_AUTOREPEAT;
879 set_adjustment(b->adj,2.0, 2.0, 0.0, 4.0, 1.0, CL_CONTINUOS);
880 adj_set_scale(b->adj, 0.05);
881 b->func.value_changed_callback = octave_callback;
882
883 Widget_t *layout = add_combobox(wid, "", 550, 2, 130, 30);
884 layout->flags |= NO_AUTOREPEAT;
885 layout->scale.gravity = ASPECT;
886 combobox_add_entry(layout,"qwertz");
887 combobox_add_entry(layout,"qwerty");
888 combobox_add_entry(layout,"azerty");
889 combobox_set_active_entry(layout, 0);
890 set_adjustment(layout->adj,0.0, 0.0, 0.0, 2.0, 1.0, CL_ENUM);
891 layout->func.value_changed_callback = layout_callback;
892
893 return wid;
894}
evfunc button_release_callback
Definition xwidget.h:101
xevfunc map_notify_callback
Definition xwidget.h:94
xevfunc leave_callback
Definition xwidget.h:88
xevfunc value_changed_callback
Definition xwidget.h:90
xevfunc mem_free_callback
Definition xwidget.h:92
evfunc motion_callback
Definition xwidget.h:103
evfunc button_press_callback
Definition xwidget.h:100
mk_midiwheelfunc mk_send_attack
mk_midiwheelfunc mk_send_sustain
mk_midiwheelfunc mk_send_detune
mk_midikeyfunc mk_send_note
mk_midiwheelfunc mk_send_volume
mk_midiwheelfunc mk_send_mod
mk_midiwheelfunc mk_send_pitchsensity
mk_midiwheelfunc mk_send_velocity
unsigned long key_matrix[4]
mk_midiwheelfunc mk_send_all_sound_off
mk_midiwheelfunc mk_send_release
mk_midiwheelfunc mk_send_pitch
Gravity gravity
Definition xwidget.h:347
Resize_t scale
Definition xwidget.h:525
void * parent
Definition xwidget.h:471
void * parent_struct
Definition xwidget.h:473
Xputty * app
Definition xwidget.h:465
float adj_get_value(Adjustment_t *adj)
adj_get_value - get the current value of the Adjustment_t
@ CL_ENUM
Definition xadjustment.h:55
void adj_set_scale(Adjustment_t *adj, float value)
adj_set_scale - internal use to scale the pointer movement (0.1 -1.0)
void combobox_set_active_entry(Widget_t *w, int active)
combobox_set_active_entry - set the active combobox entry
Definition xcombobox.c:27
void combobox_add_entry(Widget_t *wid, const char *label)
combobox_add_entry - add a entry to the combobox
Definition xcombobox.c:175
Widget_t * add_combobox(Widget_t *parent, const char *label, int x, int y, int width, int height)
add_combobox - add a combobox
Definition xcombobox.c:152
Widget_t * add_keyboard_knob(Widget_t *parent, const char *label, int x, int y, int width, int height)
void widget_set_icon_from_png(Widget_t *w, const unsigned char *name)
widget_set_icon_from_png - set icon image from png binary to Widget_t those icon will be used in the ...
Definition xpngloader.c:159
Widget_t * add_hslider(Widget_t *parent, const char *label, int x, int y, int width, int height)
add_hslider - add a horizontal slider to a Widget_t connect to func.value_changed_callback to impleme...
Definition xslider.c:51
Window os_get_root_window(Xputty *main, int flag)
os_get_root_window - get a pointer to the root window (desktop)
void os_set_input_mask(Widget_t *w)
os_set_input_mask - set the Event mask to a Widget_t only work on linux, stub on Windows
void widget_set_title(Widget_t *w, const char *title)
widget_set_title - set window title for a Widget_t
Definition xwidget.c:359
Widget_t * create_window(Xputty *app, Window win, int x, int y, int width, int height)
*create_window - create a Window You need to create as least minimun one Window to get started....
Definition xwidget.c:163
@ ASPECT
Definition xwidget.h:322
@ HAS_MEM
Definition xwidget.h:406
@ IS_WINDOW
Definition xwidget.h:390

References MidiKeyboard_mk::active_key, add_combobox(), add_hslider(), add_keyboard_knob(), Widget_t::adj, adj_get_value(), adj_set_scale(), Widget_t::app, ASPECT, MidiKeyboard_mk::attack, Func_t::button_press_callback, Func_t::button_release_callback, CL_CONTINUOS, CL_ENUM, combobox_add_entry(), combobox_set_active_entry(), create_window(), MidiKeyboard_mk::detune, Func_t::expose_callback, Widget_t::flags, Widget_t::func, Resize_t::gravity, HAS_MEM, IS_WINDOW, MidiKeyboard_mk::key_matrix, Func_t::key_press_callback, Func_t::key_release_callback, MidiKeyboard_mk::layout, Func_t::leave_callback, Func_t::map_notify_callback, Func_t::mem_free_callback, MidiKeyboard_mk::mk_send_all_sound_off, MidiKeyboard_mk::mk_send_attack, MidiKeyboard_mk::mk_send_detune, MidiKeyboard_mk::mk_send_mod, MidiKeyboard_mk::mk_send_note, MidiKeyboard_mk::mk_send_pitch, MidiKeyboard_mk::mk_send_pitchsensity, MidiKeyboard_mk::mk_send_release, MidiKeyboard_mk::mk_send_sustain, MidiKeyboard_mk::mk_send_velocity, MidiKeyboard_mk::mk_send_volume, MidiKeyboard_mk::modwheel, Func_t::motion_callback, NO_AUTOREPEAT, MidiKeyboard_mk::octave, os_get_root_window(), os_set_input_mask(), Widget_t::parent, Widget_t::parent_struct, MidiKeyboard_mk::pitchsensity, MidiKeyboard_mk::pitchwheel, MidiKeyboard_mk::prelight_key, MidiKeyboard_mk::release, Widget_t::scale, MidiKeyboard_mk::send_key, set_adjustment(), MidiKeyboard_mk::sustain, Func_t::value_changed_callback, MidiKeyboard_mk::velocity, MidiKeyboard_mk::volume, widget_set_icon_from_png(), and widget_set_title().