static void buildLayout(LayoutBuilder builder, object creationParam) { bool enhanced = (bool)creationParam; builder.symbols(eKey.D1, "1234567890-=", "!@#$%^&*()_+"); builder.key(eKey.Backspace, '\b'); builder.key(eKey.Tab, '\t'); CultureInfo ci = CultureInfo.InvariantCulture; builder.letters(eKey.Q, "qwertyuiop", ci); builder.symbols(eKey.LeftBrace, "[]", "{}"); builder.key(eKey.Enter, '\n'); builder.letters(eKey.A, "asdfghjkl", ci); builder.symbols(eKey.Semicolon, ";'`", @":""~"); builder.symbol(eKey.Backslash, '\\', '|'); builder.letters(eKey.Z, "zxcvbnm", ci); builder.symbols(eKey.Comma, ",./", "<>?"); // Enhancement #1: non-breaking space on ctrl+shift+space if (enhanced) { builder.customCtrlShift(eKey.Space, ' ', '\u00A0'); } else { builder.key(eKey.Space, ' '); } // Enhancement #2: better dashes on ctrl+alt+(keypad minus) and ctrl+(keypad minus) builder.mapKeyPad(enhanced); }
/// <summary>Make Ctrl+Alt+E print Euro character.</summary> public static void bindEuro(this LayoutBuilder builder) { builder.remove(eKey.E); builder.custom ( eKey.E, Expression.Condition ( builder.eControlAltDown, Expression.Constant('€'), Expression.Condition ( builder.eControlOrAltIsDown, builder.eNullChar, Expression.Condition ( builder.eShiftXorCapsLock, Expression.Constant('E'), Expression.Constant('e') ) ) ) ); }
/// <summary>Compile the layout</summary> protected LayoutBase(Action <LayoutBuilder, object> buildLayout, object creationParam = null) { LayoutBuilder builder = new LayoutBuilder(this); buildLayout(builder, creationParam); m_keymap = builder.compile(); }
/// <summary>Map the keypad area, AFAIK they don't often depend on locale.</summary> public static void mapKeyPad(this LayoutBuilder builder, bool enhanced) { builder.key(eKey.Kpasterisk, '*'); builder.keypad(eKey.Kp7, "789"); // Various dashes on ctrl+alt+(keypad minus) and ctrl+(keypad minus) if (enhanced) { builder.customCtrlAlt(eKey.Kpminus, '-', '–', '—'); } else { builder.key(eKey.Kpminus, '-'); } builder.keypad(eKey.Kp4, "456"); builder.key(eKey.Kpplus, '+'); builder.keypad(eKey.Kp1, "1230."); builder.key(eKey.Kpslash, '/'); }