📄 matchbox-keyboard.c
字号:
/* * Matchbox Keyboard - A lightweight software keyboard. * * Authored By Matthew Allum <mallum@o-hand.com> * * Copyright (c) 2005 OpenedHand Ltd - http://o-hand.com * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * */#include "matchbox-keyboard.h"static voidmb_kbd_usage (char *progname){ fprintf(stderr, "Usage:\n %s [Options ] [ Layout Variant ]\n", progname); fprintf(stderr, "\nOptions are;\n" " -xid,--xid Print window ID to stdout ( for embedding )\n"); fprintf(stderr, "\nmatchbox-keyboard %s \nCopyright (C) 2005 Matthew Allum, OpenedHand Ltd.\n", VERSION); exit(-1);}MBKeyboard*mb_kbd_new (int argc, char **argv){ MBKeyboard *kb = NULL; char *variant = NULL; Bool want_embedding = False; int i; kb = util_malloc0(sizeof(MBKeyboard)); kb->key_border = 1; kb->key_pad = 2; kb->key_margin = 0; kb->col_spacing = 5; kb->row_spacing = 5; kb->font_family = strdup("sans"); kb->font_pt_size = 5; kb->font_variant = strdup("bold"); for (i = 1; i < argc; i++) { if (streq ("-xid", argv[i]) || streq ("--xid", argv[i])) { want_embedding = True; continue; } if (i == (argc-1) && argv[i][0] != '-') variant = argv[i]; else mb_kbd_usage(argv[0]); } if (variant == NULL) variant = getenv("MB_KBD_VARIANT"); if (!mb_kbd_ui_init(kb)) return NULL; if (mb_kbd_ui_display_width(kb->ui) <= 320) { kb->key_border = 1; kb->key_pad = 0; kb->col_spacing = 0; kb->row_spacing = 0; kb->font_pt_size = 8; } if (!mb_kbd_config_load(kb, variant)) return NULL; kb->selected_layout = (MBKeyboardLayout *)util_list_get_nth_data(kb->layouts, 0); if (want_embedding) mb_kbd_ui_set_embeded( kb->ui, True ); if (!mb_kbd_ui_realize(kb->ui)) return NULL; if (want_embedding) mb_kbd_ui_print_window( kb->ui ); return kb;}intmb_kbd_row_spacing(MBKeyboard *kb){ return kb->row_spacing;}intmb_kbd_col_spacing(MBKeyboard *kb){ return kb->col_spacing;}intmb_kbd_keys_border(MBKeyboard *kb){ return kb->key_border;}intmb_kbd_keys_pad(MBKeyboard *kb){ return kb->key_pad;}intmb_kbd_keys_margin(MBKeyboard *kb){ return kb->key_margin;}voidmb_kbd_add_state(MBKeyboard *kbd, MBKeyboardStateType state){ kbd->keys_state |= state;}voidmb_kbd_toggle_state(MBKeyboard *kbd, MBKeyboardStateType state){ kbd->keys_state ^= state;}booleanmb_kbd_has_state(MBKeyboard *kbd, MBKeyboardStateType state){ return (kbd->keys_state & state);}booleanmb_kbd_has_any_state(MBKeyboard *kbd){ return (kbd->keys_state > 0);}voidmb_kbd_remove_state(MBKeyboard *kbd, MBKeyboardStateType state){ kbd->keys_state &= ~(state);}MBKeyboardKeyStateTypemb_kbd_keys_current_state(MBKeyboard *kbd){ if (mb_kbd_has_state(kbd, MBKeyboardStateShifted)) return MBKeyboardKeyStateShifted; if (mb_kbd_has_state(kbd, MBKeyboardStateMod1)) return MBKeyboardKeyStateMod1; if (mb_kbd_has_state(kbd, MBKeyboardStateMod2)) return MBKeyboardKeyStateMod2; if (mb_kbd_has_state(kbd, MBKeyboardStateMod3)) return MBKeyboardKeyStateMod3; return MBKeyboardKeyStateNormal;}voidmb_kbd_redraw(MBKeyboard *kb){ mb_kbd_ui_redraw(kb->ui);}voidmb_kbd_redraw_key(MBKeyboard *kb, MBKeyboardKey *key){ mb_kbd_ui_redraw_key(kb->ui, key); mb_kbd_ui_swap_buffers(kb->ui);}MBKeyboardKey*mb_kbd_locate_key(MBKeyboard *kb, int x, int y){ MBKeyboardLayout *layout; List *row_item, *key_item; layout = mb_kbd_get_selected_layout(kb); row_item = mb_kbd_layout_rows(layout); while (row_item != NULL) { MBKeyboardRow *row = row_item->data; if (x >= mb_kbd_row_x(row) && x <= mb_kbd_row_x(row) + mb_kbd_row_width(row) && y >= mb_kbd_row_y(row) && y <= mb_kbd_row_y(row) + mb_kbd_row_height(row) ) { mb_kbd_row_for_each_key(row, key_item) { MBKeyboardKey *key = key_item->data; if (!mb_kbd_is_extended(kb) && mb_kbd_key_get_extended(key)) continue; if (!mb_kbd_key_is_blank(key) && x >= mb_kbd_key_abs_x(key) && x <= mb_kbd_key_abs_x(key) + mb_kbd_key_width(key)) return key; } return NULL; } row_item = util_list_next(row_item); } return NULL;}voidmb_kbd_add_layout(MBKeyboard *kb, MBKeyboardLayout *layout){ kb->layouts = util_list_append(kb->layouts, (pointer)layout);}MBKeyboardLayout*mb_kbd_get_selected_layout(MBKeyboard *kb){ return kb->selected_layout;}voidmb_kbd_set_held_key(MBKeyboard *kb, MBKeyboardKey *key){ kb->held_key = key;}MBKeyboardKey *mb_kbd_get_held_key(MBKeyboard *kb){ return kb->held_key;}voidmb_kbd_set_extended(MBKeyboard *kb, boolean extend){ kb->extended = extend;}booleanmb_kbd_is_extended(MBKeyboard *kb){ return kb->extended;}voidmb_kbd_run(MBKeyboard *kb){ mb_kbd_ui_event_loop(kb->ui);}int main(int argc, char **argv){ MBKeyboard *kb; kb = mb_kbd_new(argc, argv); if (kb) mb_kbd_run(kb); return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -