⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 matchbox-keyboard.c

📁 Linux系统上的一款屏幕软键盘
💻 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 + -