keysym, for the keys that type no character. */ public static function special(int $sdl): ?int { if ($sdl >= 1073741882 && $sdl <= 1073741893) { return self::F1 + ($sdl - 1073741882); // F1..F12 } return match ($sdl) { Pointer::BACKSPACE => self::BACKSPACE, Pointer::TAB => self::TAB, Pointer::RETURN, Pointer::KP_ENTER => self::RETURN, Pointer::ESCAPE => self::ESCAPE, Pointer::DELETE => self::DELETE, Pointer::HOME => self::HOME, Pointer::END => self::END, Pointer::LEFT => self::LEFT, Pointer::RIGHT => self::RIGHT, Pointer::UP => self::UP, Pointer::DOWN => self::DOWN, Pointer::PAGEUP => self::PAGEUP, Pointer::PAGEDOWN => self::PAGEDOWN, 1073741897 => self::INSERT, default => null, }; } /** A typed character -> keysym (Latin-1 as is, other letters 0x01000000 + their code point). */ public static function char(string $char): int { $code = mb_ord($char, 'UTF-8'); if ($code === false) { return 0; } return $code < 0x100 ? $code : 0x01000000 + $code; } }