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

Go to the source code of this file.

Functions

void keysym_azerty_to_midi_key (long inkey, float *midi_key)
 
void keysym_azerty_fr_to_midi_key (long inkey, float *midi_key)
 
void keysym_azerty_be_to_midi_key (long inkey, float *midi_key)
 
void keysym_azerty_afnor_to_midi_key (long inkey, float *midi_key)
 
void keysym_qwertz_to_midi_key (long inkey, float *midi_key)
 
void keysym_qwerty_to_midi_key (unsigned int inkey, float *midi_key)
 
void custom_to_midi_key (long custom_keys[128][2], long inkey, float *midi_key)
 
void set_key_in_matrix (unsigned long *key_matrix, int key, bool set)
 
bool is_key_in_matrix (unsigned long *key_matrix, int key)
 
int is_key_in_in_matrix (MidiKeyboard *keys, int key)
 
bool have_key_in_matrix (unsigned long *key_matrix)
 
void clear_key_matrix (unsigned long *key_matrix)
 
void use_matrix_color (Widget_t *w, int c)
 
bool need_redraw (MidiKeyboard *keys)
 
void read_keymap (const char *keymapfile, long keys[128][2])
 
Widget_tadd_midi_keyboard (Widget_t *parent, const char *label, int x, int y, int width, int height)
 
Widget_topen_midi_keyboard (Widget_t *w, const char *label)
 
void add_keyboard (Widget_t *wid, const char *label)
 

Function Documentation

◆ add_keyboard()

void add_keyboard ( Widget_t wid,
const char *  label 
)

Definition at line 923 of file xkeyboard.c.

923 {
924 MidiKeyboard *keys = (MidiKeyboard*)malloc(sizeof(MidiKeyboard));
925 wid->private_struct = keys;
926 wid->flags |= HAS_MEM | NO_AUTOREPEAT;
927 wid->scale.gravity = EASTSOUTH;
928 keys->prelight_key = -1;
929 keys->active_key = -1;
930 keys->new_prelight_key = -1;
931 keys->new_active_key = -1;
932 keys->last_active_key = -1;
933 keys->in_motion = 0;
934 keys->send_key = -1;
935 keys->octave = 12*2;
936 keys->layout = 0;
937 keys->channel = 0;
938 keys->velocity = 64;
939 keys->key_size = 20;
940 keys->key_offset = 15;
941 keys->keyboard = wid;
942 memset(keys->custom_keys, 0, 128*2*sizeof keys->custom_keys[0][0]);
943 int j = 0;
944 for(;j<4;j++) {
945 keys->key_matrix[j] = 0;
946 }
947 int i = 0;
948 for(;i<16;i++) {
949 j = 0;
950 for(;j<4;j++) {
951 keys->in_key_matrix[i][j] = 0;
952 }
953 }
954 read_keymap(label, keys->custom_keys);
955
956 wid->func.expose_callback = draw_keyboard;
957 wid->func.motion_callback = keyboard_motion;
958 wid->func.leave_callback = leave_keyboard;
959 wid->func.button_press_callback = button_pressed_keyboard;
960 wid->func.button_release_callback = button_released_keyboard;
961 wid->func.double_click_callback = button_released_keyboard;
962 wid->func.key_press_callback = key_press;
963 wid->func.key_release_callback = key_release;
964 wid->func.mem_free_callback = keyboard_mem_free;
965
966 keys->mk_send_note = key_dummy;
967 keys->mk_send_all_sound_off = wheel_dummy;
968
969 keys->context_menu = create_menu(wid,25);
970 Widget_t* keymap = cmenu_add_submenu(keys->context_menu,_("Keyboard"));
971 keymap->private_struct = keys;
972 menu_add_radio_entry(keymap,_("qwertz"));
973 menu_add_radio_entry(keymap,_("qwerty"));
974 menu_add_radio_entry(keymap,_("azerty (fr)"));
975 menu_add_radio_entry(keymap,_("azerty (be)"));
976 set_active_radio_entry_num(keymap, keys->layout);
977 keymap->func.value_changed_callback = layout_callback;
978
979 Widget_t* octavemap = cmenu_add_submenu(keys->context_menu,_("Octave"));
980 octavemap->private_struct = keys;
981 menu_add_radio_entry(octavemap,_("C 0"));
982 menu_add_radio_entry(octavemap,_("C 1"));
983 menu_add_radio_entry(octavemap,_("C 2"));
984 menu_add_radio_entry(octavemap,_("C 3"));
985 menu_add_radio_entry(octavemap,_("C 4"));
986 set_active_radio_entry_num(octavemap, keys->octave/12);
987 octavemap->func.value_changed_callback = octave_callback;
988
989 Widget_t* velocity = cmenu_add_submenu(keys->context_menu,_("Velocity"));
990 velocity->private_struct = keys;
991 Widget_t* vel = menu_add_value_entry(velocity, "128");
992 vel->private_struct = keys;
993 set_adjustment(vel->adj, 0.0, 0.0, 0.0, 127.0, 1.0, CL_CONTINUOS);
994 adj_set_value(vel->adj, keys->velocity);
995 vel->func.value_changed_callback = velocity_changed;
996
997 keys->grab_keyboard = menu_add_check_item(keys->context_menu,_("Grab Keyboard"));
998 keys->grab_keyboard->private_struct = keys;
999 keys->grab_keyboard->func.value_changed_callback = grab_callback;
1000}
evfunc button_release_callback
Definition xwidget.h:101
xevfunc expose_callback
Definition xwidget.h:85
evfunc key_release_callback
Definition xwidget.h:105
evfunc key_press_callback
Definition xwidget.h:104
evfunc double_click_callback
Definition xwidget.h:102
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
int prelight_key
Definition xkeyboard.h:44
Widget_t * context_menu
Definition xkeyboard.h:37
int new_active_key
Definition xkeyboard.h:47
unsigned long in_key_matrix[16][4]
Definition xkeyboard.h:54
int last_active_key
Definition xkeyboard.h:48
unsigned long key_matrix[4]
Definition xkeyboard.h:53
midiwheelfunc mk_send_all_sound_off
Definition xkeyboard.h:58
Widget_t * grab_keyboard
Definition xkeyboard.h:39
long custom_keys[128][2]
Definition xkeyboard.h:55
int new_prelight_key
Definition xkeyboard.h:45
Widget_t * keyboard
Definition xkeyboard.h:38
midikeyfunc mk_send_note
Definition xkeyboard.h:57
Gravity gravity
Definition xwidget.h:347
Widget_t - struct to hold the basic Widget_t info.
Definition xwidget.h:457
Resize_t scale
Definition xwidget.h:525
Adjustment_t * adj
Definition xwidget.h:497
long long flags
Definition xwidget.h:461
void * private_struct
Definition xwidget.h:475
Func_t func
Definition xwidget.h:481
void adj_set_value(Adjustment_t *adj, float value)
adj_set_value - set the current value to the Adjustment_t
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
void read_keymap(const char *keymapfile, long keys[128][2])
Definition xkeyboard.c:878
Widget_t * menu_add_check_item(Widget_t *menu, const char *label)
menu_add_check_item - add a item to menu
Definition xmenu.c:317
Widget_t * menu_add_value_entry(Widget_t *wid, const char *label)
menu_add_value_entry- add a value entry to menu
Definition xmenu.c:169
Widget_t * create_menu(Widget_t *parent, int height)
create_menu - create a menu to a Widget_t
Definition xmenu.c:256
Widget_t * cmenu_add_submenu(Widget_t *wid, const char *label)
cmenu_add_submenu - add a submenu to a cmenu
Definition xmenu.c:226
Widget_t * menu_add_radio_entry(Widget_t *wid, const char *label)
menu_add_radio_entry- add a radio entry to menu
Definition xmenu.c:141
void set_active_radio_entry_num(Widget_t *w, int active)
set_active_radio_item - activate selected radio item by number
Definition xmenu.c:78
@ EASTSOUTH
Definition xwidget.h:314
@ NO_AUTOREPEAT
Definition xwidget.h:408
@ HAS_MEM
Definition xwidget.h:406

References MidiKeyboard::active_key, Widget_t::adj, adj_set_value(), Func_t::button_press_callback, Func_t::button_release_callback, MidiKeyboard::channel, CL_CONTINUOS, cmenu_add_submenu(), MidiKeyboard::context_menu, create_menu(), MidiKeyboard::custom_keys, Func_t::double_click_callback, EASTSOUTH, Func_t::expose_callback, Widget_t::flags, Widget_t::func, MidiKeyboard::grab_keyboard, Resize_t::gravity, HAS_MEM, MidiKeyboard::in_key_matrix, MidiKeyboard::in_motion, MidiKeyboard::key_matrix, MidiKeyboard::key_offset, Func_t::key_press_callback, Func_t::key_release_callback, MidiKeyboard::key_size, MidiKeyboard::keyboard, MidiKeyboard::last_active_key, MidiKeyboard::layout, Func_t::leave_callback, Func_t::mem_free_callback, menu_add_check_item(), menu_add_radio_entry(), menu_add_value_entry(), MidiKeyboard::mk_send_all_sound_off, MidiKeyboard::mk_send_note, Func_t::motion_callback, MidiKeyboard::new_active_key, MidiKeyboard::new_prelight_key, NO_AUTOREPEAT, MidiKeyboard::octave, MidiKeyboard::prelight_key, Widget_t::private_struct, read_keymap(), Widget_t::scale, MidiKeyboard::send_key, set_active_radio_entry_num(), set_adjustment(), Func_t::value_changed_callback, and MidiKeyboard::velocity.

Referenced by add_midi_keyboard(), and open_midi_keyboard().

◆ add_midi_keyboard()

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

Definition at line 906 of file xkeyboard.c.

907 {
908 Widget_t *wid = create_widget(parent->app, parent, x, y, width, height);
909 wid->label = label;
911 add_keyboard(wid, label);
912 return wid;
913}
const char * label
Definition xwidget.h:463
Xputty * app
Definition xwidget.h:465
void add_keyboard(Widget_t *wid, const char *label)
Definition xkeyboard.c:923
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
Widget_t * create_widget(Xputty *app, Widget_t *win, int x, int y, int width, int height)
*create_widget - create a widget A Widget_t could only be created as child of a other Widget_t To...
Definition xwidget.c:265

References add_keyboard(), Widget_t::app, create_widget(), Widget_t::label, and os_set_input_mask().

◆ clear_key_matrix()

void clear_key_matrix ( unsigned long *  key_matrix)

Definition at line 353 of file xkeyboard.c.

353 {
354 int i = 0;
355 int j = 0;
356 for(;j<4;j++) {
357 for(;i<32;i++) {
358 key_matrix[j] &= (~(1 << i));
359 }
360 i = 0;
361 }
362}

◆ custom_to_midi_key()

void custom_to_midi_key ( long  custom_keys[128][2],
long  inkey,
float *  midi_key 
)

Definition at line 272 of file xkeyboard.c.

272 {
273 int i = 0;
274 for(;i<129;i++) {
275 int j = 0;
276 for(;j<2;j++) {
277 if (inkey == custom_keys[i][j]) {
278 (*midi_key) = (float)i;
279 return;
280 }
281 }
282 }
283}

◆ have_key_in_matrix()

bool have_key_in_matrix ( unsigned long *  key_matrix)

Definition at line 336 of file xkeyboard.c.

336 {
337
338 bool ret = false;
339 int i = 0;
340 int j = 0;
341 for(;j<4;j++) {
342 for(;i<32;i++) {
343 if(key_matrix[j] & (1<<i)) {
344 ret = true;
345 break;
346 }
347 }
348 i = 0;
349 }
350 return ret;
351}

Referenced by need_redraw().

◆ is_key_in_in_matrix()

int is_key_in_in_matrix ( MidiKeyboard keys,
int  key 
)

Definition at line 326 of file xkeyboard.c.

326 {
327 int i = 0;
328 for(;i<16;i++) {
329 if (is_key_in_matrix(keys->in_key_matrix[i], key)) {
330 return i;
331 }
332 }
333 return -1;
334}
bool is_key_in_matrix(unsigned long *key_matrix, int key)
Definition xkeyboard.c:305

References MidiKeyboard::in_key_matrix, and is_key_in_matrix().

◆ is_key_in_matrix()

bool is_key_in_matrix ( unsigned long *  key_matrix,
int  key 
)

Definition at line 305 of file xkeyboard.c.

305 {
306 unsigned long *use_matrix = &key_matrix[0];
307
308
309 if(key>94) {
310 use_matrix = &key_matrix[3];
311 key -=94;
312 } else if(key>62) {
313 use_matrix = &key_matrix[2];
314 key -=62;
315 } else if(key>31) {
316 use_matrix = &key_matrix[1];
317 key -= 31;
318 }
319 bool ret = false;
320 if((*use_matrix) & (1<<key)) {
321 ret = true;
322 }
323 return ret;
324}

Referenced by is_key_in_in_matrix().

◆ keysym_azerty_afnor_to_midi_key()

void keysym_azerty_afnor_to_midi_key ( long  inkey,
float *  midi_key 
)

Definition at line 158 of file xkeyboard.c.

158 {
159 /* probably a future standard for azerty keyboards */
160 switch(inkey) {
161 case(XK_less) : (*midi_key) = 11.0; /* "<" = B-1 */
162 break;
163 case(XK_KP_Decimal) : (*midi_key) = 23.0; /* . */
164 break;
165 case(XK_semicolon) : (*midi_key) = 24.0; /* ; = C1 */
166 break;
167 case(XK_eacute) : (*midi_key) = 25.0; /* é */
168 break;
169 case(XK_colon) : (*midi_key) = 26.0; /* : */
170 break;
171 case(XK_quotedbl) : (*midi_key) = 27.0; /* " */
172 break;
173 case(XK_exclam) : (*midi_key) = 28.0; /* ! */
174 break;
175 case(XK_ugrave) : (*midi_key) = 29.0; /* ù = F1 */
176 break;
177 case(XK_asterisk) : (*midi_key) = 30.0; /* * */
178 break;
179 case(XK_parenleft) : (*midi_key) = 30.0; /* ( */
180 break;
181 case(XK_minus) : (*midi_key) = 32.0; /* - */
182 break;
183 case(XK_egrave) : (*midi_key) = 34.0; /* è */
184 break;
185 case(XK_ccedilla) : (*midi_key) = 37.0; /* ç */
186 break;
187 case(XK_agrave) : (*midi_key) = 39.0; /* à */
188 break;
189 case (XK_parenright) : (*midi_key) = 41.0; /* ) = F2 */
190 break;
191 case (XK_equal) : (*midi_key) = 42.0; /* = */
192 break;
193 case (XK_dollar) : (*midi_key) = 43.0; /* $ */
194 break;
195 default: keysym_azerty_to_midi_key(inkey, midi_key);
196 }
197}
void keysym_azerty_to_midi_key(long inkey, float *midi_key)
Definition xkeyboard.c:24

References keysym_azerty_to_midi_key().

◆ keysym_azerty_be_to_midi_key()

void keysym_azerty_be_to_midi_key ( long  inkey,
float *  midi_key 
)

Definition at line 117 of file xkeyboard.c.

117 {
118 /* common azerty keyboards sell in Belgium (Wallonia) */
119 switch(inkey) {
120 case(XK_less) : (*midi_key) = 11.0; /* "<" = B-1 */
121 break;
122 case(XK_comma) : (*midi_key) = 23.0; /* , */
123 break;
124 case(XK_semicolon) : (*midi_key) = 24.0; /* ; = C1 */
125 break;
126 case(XK_eacute) : (*midi_key) = 25.0; /* é */
127 break;
128 case(XK_colon) : (*midi_key) = 26.0; /* : */
129 break;
130 case(XK_quotedbl) : (*midi_key) = 27.0; /* " */
131 break;
132 case(XK_equal) : (*midi_key) = 28.0; /* = */
133 break;
134 case(XK_ugrave) : (*midi_key) = 29.0; /* ù = F1 */
135 break;
136 case(XK_mu) : (*midi_key) = 30.0; /* µ */
137 break;
138 case(XK_parenleft) : (*midi_key) = 30.0; /* ( */
139 break;
140 case(XK_section) : (*midi_key) = 32.0; /* § */
141 break;
142 case(XK_egrave) : (*midi_key) = 34.0; /* è */
143 break;
144 case(XK_ccedilla) : (*midi_key) = 37.0; /* ç */
145 break;
146 case(XK_agrave) : (*midi_key) = 39.0; /* à */
147 break;
148 case (XK_parenright) : (*midi_key) = 41.0; /* ) = F2 */
149 break;
150 case (XK_minus) : (*midi_key) = 42.0; /* - */
151 break;
152 case (XK_dollar) : (*midi_key) = 43.0; /* $ */
153 break;
154 default: keysym_azerty_to_midi_key(inkey, midi_key);
155 }
156}

References keysym_azerty_to_midi_key().

◆ keysym_azerty_fr_to_midi_key()

void keysym_azerty_fr_to_midi_key ( long  inkey,
float *  midi_key 
)

Definition at line 76 of file xkeyboard.c.

76 {
77 /* common azerty keyboards sell in France */
78 switch(inkey) {
79 case(XK_less) : (*midi_key) = 11.0; /* "<" = B-1 */
80 break;
81 case(XK_comma) : (*midi_key) = 23.0; /* , */
82 break;
83 case(XK_semicolon) : (*midi_key) = 24.0; /* ; = C1 */
84 break;
85 case(XK_eacute) : (*midi_key) = 25.0; /* é */
86 break;
87 case(XK_colon) : (*midi_key) = 26.0; /* : */
88 break;
89 case(XK_quotedbl) : (*midi_key) = 27.0; /* " */
90 break;
91 case(XK_exclam) : (*midi_key) = 28.0; /* ! */
92 break;
93 case(XK_ugrave) : (*midi_key) = 29.0; /* ù = F1 */
94 break;
95 case(XK_asterisk) : (*midi_key) = 30.0; /* * */
96 break;
97 case(XK_parenleft) : (*midi_key) = 30.0; /* ( */
98 break;
99 case(XK_minus) : (*midi_key) = 32.0; /* - */
100 break;
101 case(XK_egrave) : (*midi_key) = 34.0; /* è */
102 break;
103 case(XK_ccedilla) : (*midi_key) = 37.0; /* ç */
104 break;
105 case(XK_agrave) : (*midi_key) = 39.0; /* à */
106 break;
107 case (XK_parenright) : (*midi_key) = 41.0; /* ) = F2 */
108 break;
109 case (XK_equal) : (*midi_key) = 42.0; /* = */
110 break;
111 case (XK_dollar) : (*midi_key) = 43.0; /* $ */
112 break;
113 default: keysym_azerty_to_midi_key(inkey, midi_key);
114 }
115}

References keysym_azerty_to_midi_key().

◆ keysym_azerty_to_midi_key()

void keysym_azerty_to_midi_key ( long  inkey,
float *  midi_key 
)

Definition at line 24 of file xkeyboard.c.

24 {
25 /* these keys are common to all types of azerty keyboards */
26 switch(inkey) {
27 case(XK_w) : (*midi_key) = 12.0; /* w = C0 */
28 break;
29 case(XK_s) : (*midi_key) = 13.0; /* s */
30 break;
31 case(XK_x) : (*midi_key) = 14.0; /* x */
32 break;
33 case(XK_d) : (*midi_key) = 15.0; /* d */
34 break;
35 case(XK_c) : (*midi_key) = 16.0; /* c */
36 break;
37 case(XK_v) : (*midi_key) = 17.0; /* v */
38 break;
39 case(XK_g) : (*midi_key) = 18.0; /* g */
40 break;
41 case(XK_b) : (*midi_key) = 19.0; /* b */
42 break;
43 case(XK_h) : (*midi_key) = 20.0; /* h */
44 break;
45 case(XK_n) : (*midi_key) = 21.0; /* n */
46 break;
47 case(XK_j) : (*midi_key) = 22.0; /* j */
48 break;
49 case(XK_a) : (*midi_key) = 24.0; /* a = C1 */
50 break;
51 case(XK_l) : (*midi_key) = 25.0; /* l */
52 break;
53 case(XK_z) : (*midi_key) = 26.0; /* z */
54 break;
55 case(XK_m) : (*midi_key) = 27.0; /* m */
56 break;
57 case(XK_e) : (*midi_key) = 28.0; /* e */
58 break;
59 case(XK_r) : (*midi_key) = 29.0; /* r */
60 break;
61 case(XK_t) : (*midi_key) = 31.0; /* t */
62 break;
63 case(XK_y) : (*midi_key) = 33.0; /* y */
64 break;
65 case(XK_u) : (*midi_key) = 35.0; /* u */
66 break;
67 case(XK_i) : (*midi_key) = 36.0; /* i */
68 break;
69 case(XK_o) : (*midi_key) = 38.0; /* o */
70 break;
71 case(XK_p) : (*midi_key) = 40.0; /* p */
72 break;
73 }
74}

Referenced by keysym_azerty_afnor_to_midi_key(), keysym_azerty_be_to_midi_key(), and keysym_azerty_fr_to_midi_key().

◆ keysym_qwerty_to_midi_key()

void keysym_qwerty_to_midi_key ( unsigned int  inkey,
float *  midi_key 
)

Definition at line 266 of file xkeyboard.c.

266 {
267 keysym_qwertz_to_midi_key(inkey,midi_key);
268 if ((*midi_key) == 12) (*midi_key) = 33;
269 else if ((*midi_key) == 33) (*midi_key) = 12;
270}
void keysym_qwertz_to_midi_key(long inkey, float *midi_key)
Definition xkeyboard.c:199

References keysym_qwertz_to_midi_key().

◆ keysym_qwertz_to_midi_key()

void keysym_qwertz_to_midi_key ( long  inkey,
float *  midi_key 
)

Definition at line 199 of file xkeyboard.c.

199 {
200 switch(inkey) {
201 case(XK_y) : (*midi_key) = 12.0; /* y = C0 */
202 break;
203 case(XK_s) : (*midi_key) = 13.0; /* s */
204 break;
205 case(XK_x) : (*midi_key) = 14.0; /* x */
206 break;
207 case(XK_d) : (*midi_key) = 15.0; /* d */
208 break;
209 case(XK_c) : (*midi_key) = 16.0; /* c */
210 break;
211 case(XK_v) : (*midi_key) = 17.0; /* v */
212 break;
213 case(XK_g) : (*midi_key) = 18.0; /* g */
214 break;
215 case(XK_b) : (*midi_key) = 19.0; /* b */
216 break;
217 case(XK_h) : (*midi_key) = 20.0; /* h */
218 break;
219 case(XK_n) : (*midi_key) = 21.0; /* n */
220 break;
221 case(XK_j) : (*midi_key) = 22.0; /* j */
222 break;
223 case(XK_m) : (*midi_key) = 23.0; /* m */
224 break;
225 case(XK_q) : (*midi_key) = 24.0; /* q */
226 break;
227 case(XK_2) : (*midi_key) = 25.0; /* 2 */
228 break;
229 case(XK_w) : (*midi_key) = 26.0; /* w */
230 break;
231 case(XK_3) : (*midi_key) = 27.0; /* 3 */
232 break;
233 case(XK_e) : (*midi_key) = 28.0; /* e */
234 break;
235 case(XK_r) : (*midi_key) = 29.0; /* r */
236 break;
237 case(XK_5) : (*midi_key) = 30.0; /* 5 */
238 break;
239 case(XK_t) : (*midi_key) = 31.0; /* t */
240 break;
241 case(XK_6) : (*midi_key) = 32.0; /* 6 */
242 break;
243 case(XK_z) : (*midi_key) = 33.0; /* z */
244 break;
245 case(XK_7) : (*midi_key) = 34.0; /* 7 */
246 break;
247 case(XK_u) : (*midi_key) = 35.0; /* u */
248 break;
249 case(XK_i) : (*midi_key) = 36.0; /* i */
250 break;
251 case(XK_9) : (*midi_key) = 37.0; /* 9 */
252 break;
253 case(XK_o) : (*midi_key) = 38.0; /* o */
254 break;
255 case(XK_0) : (*midi_key) = 39.0; /* 0 */
256 break;
257 case(XK_p) : (*midi_key) = 40.0; /* p */
258 break;
259 case(XK_udiaeresis) : (*midi_key) = 41.0; /* ü */
260 break;
261 case(XK_plus) : (*midi_key) = 42.0; /* + */
262 break;
263 }
264}

Referenced by keysym_qwerty_to_midi_key().

◆ need_redraw()

bool need_redraw ( MidiKeyboard keys)

Definition at line 830 of file xkeyboard.c.

830 {
831 bool have = false;
832 int i = 0;
833 for(;i<16;i++) {
834 if (have_key_in_matrix(keys->in_key_matrix[i])) {
835 have = true;
836 break;
837 }
838 }
839
840 return (keys->active_key > 0 ? 1 : 0) |
841 (keys->prelight_key > 0 ? 1 : 0) |
842 have_key_in_matrix(keys->key_matrix) |
843 have;
844}
bool have_key_in_matrix(unsigned long *key_matrix)
Definition xkeyboard.c:336

References MidiKeyboard::active_key, have_key_in_matrix(), MidiKeyboard::in_key_matrix, MidiKeyboard::key_matrix, and MidiKeyboard::prelight_key.

◆ open_midi_keyboard()

Widget_t * open_midi_keyboard ( Widget_t w,
const char *  label 
)

Definition at line 915 of file xkeyboard.c.

915 {
916 Widget_t *wid = create_window(w->app, os_get_root_window(w->app, IS_WINDOW), 0, 0, 700, 200);
918 add_keyboard(wid, label);
919 wid->parent = w;
920 return wid;
921}
void * parent
Definition xwidget.h:471
Window os_get_root_window(Xputty *main, int flag)
os_get_root_window - get a pointer to the root window (desktop)
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
@ IS_WINDOW
Definition xwidget.h:390

References add_keyboard(), Widget_t::app, create_window(), IS_WINDOW, os_get_root_window(), os_set_input_mask(), and Widget_t::parent.

◆ read_keymap()

void read_keymap ( const char *  keymapfile,
long  keys[128][2] 
)

Definition at line 878 of file xkeyboard.c.

878 {
879 if( access(keymapfile, F_OK ) != -1 ) {
880 FILE *fp;
881 if((fp=fopen(keymapfile, "rb"))==NULL) {
882 fprintf(stderr,"Cannot open file.\n");
883 }
884
885 if(fread(keys, sizeof(long), 128*2, fp) != 128*2) {
886 if(feof(fp))
887 fprintf(stderr,"Premature end of file.");
888 else
889 fprintf(stderr,"File read error.");
890 }
891 fclose(fp);
892 }
893}

Referenced by add_keyboard().

◆ set_key_in_matrix()

void set_key_in_matrix ( unsigned long *  key_matrix,
int  key,
bool  set 
)

Definition at line 285 of file xkeyboard.c.

285 {
286 unsigned long *use_matrix = &key_matrix[0];
287
288 if(key>94) {
289 use_matrix = &key_matrix[3];
290 key -=94;
291 } else if(key>62) {
292 use_matrix = &key_matrix[2];
293 key -=62;
294 } else if(key>31) {
295 use_matrix = &key_matrix[1];
296 key -= 31;
297 }
298 if (set) {
299 (*use_matrix) |= (1 << key);
300 }else {
301 (*use_matrix) &= (~(1 << key));
302 }
303}

◆ use_matrix_color()

void use_matrix_color ( Widget_t w,
int  c 
)

Definition at line 364 of file xkeyboard.c.

364 {
365 double ci = ((c+1)/100.0)*12.0;
366 if (c<4)
367 cairo_set_source_rgba(w->crb, ci, 0.2, 0.4, 1.00);
368 else if (c<8)
369 cairo_set_source_rgba(w->crb, 0.6, 0.2+ci-0.48, 0.4, 1.00);
370 else if (c<12)
371 cairo_set_source_rgba(w->crb, 0.6-(ci-0.96), 0.68-(ci-1.08), 0.4, 1.00);
372 else
373 cairo_set_source_rgba(w->crb, 0.12+(ci-1.56), 0.32, 0.4-(ci-1.44), 1.00);
374}
cairo_t * crb
Definition xwidget.h:489

References Widget_t::crb.