MCPcopy Create free account
hub / github.com/TASEmulators/fceux / DTestButton

Function DTestButton

src/drivers/win/input.cpp:223–284  ·  view source on GitHub ↗

Function to check if key/button/combination is pressed/held bc: button mapping structure just_down: indicates that only new button presses should be logged, not held down block_meta: indicates that key can't be pressed in combination with meta keys if it's not set explicitly, e.g. do not trigger "F1" if "Ctrl+F1" is pressed

Source from the content-addressed store, hash-verified

221// if it's not set explicitly,
222// e.g. do not trigger "F1" if "Ctrl+F1" is pressed
223int DTestButton(ButtConfig *bc, uint8_t just_down, uint8_t block_meta)
224{
225 unsigned int *keys_data = !just_down ? GetKeyboard_nr() : GetKeyboard_jd();
226 unsigned int *keys_data_nr = GetKeyboard_nr();
227
228 for (int x = 0; x < bc->NumC; x++)
229 {
230 if (bc->ButtType[x] == BUTTC_KEYBOARD)
231 {
232 int cmd = bc->ButtonNum[x];
233 int cmdmask = cmd&CMD_KEY_MASK;
234
235 /* test CTRL, SHIFT, ALT, WIN */
236 if (cmd & CMD_KEY_ALT)
237 {
238 int ctlstate = (cmd & CMD_KEY_LALT) ? keys_data_nr[SCAN_LEFTALT] : 0;
239 ctlstate |= (cmd & CMD_KEY_RALT) ? keys_data_nr[SCAN_RIGHTALT] : 0;
240 if (!ctlstate)
241 continue;
242 }
243 else if (block_meta && ((cmdmask != SCAN_LEFTALT && keys_data_nr[SCAN_LEFTALT]) || (cmdmask != SCAN_RIGHTALT && keys_data_nr[SCAN_RIGHTALT])))
244 continue;
245
246 if (cmd & CMD_KEY_CTRL)
247 {
248 int ctlstate = (cmd & CMD_KEY_LCTRL) ? keys_data_nr[SCAN_LEFTCONTROL] : 0;
249 ctlstate |= (cmd & CMD_KEY_RCTRL) ? keys_data_nr[SCAN_RIGHTCONTROL] : 0;
250 if (!ctlstate)
251 continue;
252 }
253 else if (block_meta && ((cmdmask != SCAN_LEFTCONTROL && keys_data_nr[SCAN_LEFTCONTROL]) || (cmdmask != SCAN_RIGHTCONTROL && keys_data_nr[SCAN_RIGHTCONTROL])))
254 continue;
255
256 if (cmd & CMD_KEY_SHIFT)
257 {
258 int ctlstate = (cmd & CMD_KEY_LSHIFT) ? keys_data_nr[SCAN_LEFTSHIFT] : 0;
259 ctlstate |= (cmd & CMD_KEY_RSHIFT) ? keys_data_nr[SCAN_RIGHTSHIFT] : 0;
260 if (!ctlstate)
261 continue;
262 }
263 else if (block_meta && ((cmdmask != SCAN_LEFTSHIFT && keys_data_nr[SCAN_LEFTSHIFT]) || (cmdmask != SCAN_RIGHTSHIFT && keys_data_nr[SCAN_RIGHTSHIFT])))
264 continue;
265
266 if (cmd & CMD_KEY_WIN)
267 {
268 int ctlstate = (cmd & CMD_KEY_LWIN) ? keys_data_nr[SCAN_LEFTWIN] : 0;
269 ctlstate |= (cmd & CMD_KEY_RWIN) ? keys_data_nr[SCAN_RIGHTWIN] : 0;
270 if (!ctlstate)
271 continue;
272 }
273 else if (block_meta && ((cmdmask != SCAN_LEFTWIN && keys_data_nr[SCAN_LEFTWIN]) || (cmdmask != SCAN_RIGHTWIN && keys_data_nr[SCAN_RIGHTWIN])))
274 continue;
275
276 if (keys_data[cmdmask])
277 {
278 return 1;
279 }
280 }

Callers 15

UpdateGamepadFunction · 0.70
UpdatePPadDataFunction · 0.70
UpdateVirtualBoyDataFunction · 0.70
UpdateFKBFunction · 0.70
UpdateSuborKBFunction · 0.70
UpdateSNESFunction · 0.70
UpdateHyperShotFunction · 0.70
UpdateMahjongFunction · 0.70
UpdateQuizKingFunction · 0.70
UpdateTopRiderFunction · 0.70

Calls 3

GetKeyboard_nrFunction · 0.85
GetKeyboard_jdFunction · 0.85
DTestButtonJoyFunction · 0.70

Tested by

no test coverage detected