📄 wgui_virtual_keyboard.c
字号:
/*****************************************************************************
* Copyright Statement:
* --------------------
* This software is protected by Copyright and the information contained
* herein is confidential. The software may not be copied and the information
* contained herein may not be used or disclosed except with the written
* permission of MediaTek Inc. (C) 2005
*
* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
*
* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
*
* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
*
*****************************************************************************/
/*****************************************************************************
*
* Filename:
* ---------
* wgui_virtual_keyboard.c
*
* Project:
* --------
* MAUI
*
* Description:
* ------------
* Virtual keyboard - WGUI integration
*
* Author:
* -------
* -------
* -------
*
*============================================================================
* HISTORY
* Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
*------------------------------------------------------------------------------
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
*------------------------------------------------------------------------------
* Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
*============================================================================
****************************************************************************/
#include "PixtelDataTypes.h"
#include "MMI_features.h"
#include "gui_data_types.h"
#include "gui.h"
#include "gdi_include.h"
#include "wgui.h"
#include "wgui_virtual_keyboard.h"
#include "wgui_categories_defs.h"
#include "DebugInitDef.h"
/*****************************************************************************
* Define
*****************************************************************************/
/* Dead keys (also as normal symbol) */
#define GRAVE_ACCENT 0x60 /* ` */
#define ACCUTE_ACCENT 0xB4
#define CIRCUMFLEX_ACCENT 0x5E /* ^ */
#define DIAERESIS 0xA8
#define TILDE 0x7E /* ~ */
/* Common european symbols */
#define EURO 0x20AC
#ifdef __MMI_MAINLCD_240X320__
#define MMI_VKBD_MATRIX_KEY_WIDTH 19
#define MMI_VKBD_MATRIX_KEY_HEIGHT 19
#define MMI_VKBD_MATRIX_KEY_H_GAP 1
#define MMI_VKBD_MATRIX_KEY_V_GAP 1
#define MATRIX_WIDTH(col) ((col)*(MMI_VKBD_MATRIX_KEY_WIDTH+MMI_VKBD_MATRIX_KEY_H_GAP) - MMI_VKBD_MATRIX_KEY_H_GAP)
#define MATRIX_HEIGHT(row) ((row)*(MMI_VKBD_MATRIX_KEY_HEIGHT+MMI_VKBD_MATRIX_KEY_V_GAP) - MMI_VKBD_MATRIX_KEY_V_GAP)
#define MMI_VKBD_STANDARD_WIDTH 240
#define MMI_VKBD_STANDARD_HEIGHT 63
/* matrix layout at the left side */
#define MMI_VKBD_STANDARD_MATRIX_COLUMN 7
#define MMI_VKBD_STANDARD_MATRIX_ROW 3
#define MMI_VKBD_STANDARD_MATRIX_X 1
#define MMI_VKBD_STANDARD_MATRIX_Y 2
#define MMI_VKBD_STANDARD_MATRIX_WIDTH MATRIX_WIDTH(7)
#define MMI_VKBD_STANDARD_MATRIX_HEIGHT MATRIX_HEIGHT(3)
#define MMI_VKBD_EXTENDED_WIDTH 240
#define MMI_VKBD_EXTENDED_HEIGHT 83
/* matrix layout at the left side */
#define MMI_VKBD_EXTENDED_MATRIX_COLUMN 8
#define MMI_VKBD_EXTENDED_MATRIX_ROW 4
#define MMI_VKBD_EXTENDED_MATRIX_X 1
#define MMI_VKBD_EXTENDED_MATRIX_Y 2
#define MMI_VKBD_EXTENDED_MATRIX_WIDTH MATRIX_WIDTH(8)
#define MMI_VKBD_EXTENDED_MATRIX_HEIGHT MATRIX_HEIGHT(4)
#define MMI_VKBD_TRAY_WIDTH 240
#define MMI_VKBD_TRAY_HEIGHT 23
/* matrix layout at the left side */
#define MMI_VKBD_TRAY_MATRIX_COLUMN 5
#define MMI_VKBD_TRAY_MATRIX_ROW 1
#define MMI_VKBD_TRAY_MATRIX_X 1
#define MMI_VKBD_TRAY_MATRIX_Y 2
#define MMI_VKBD_TRAY_MATRIX_WIDTH MATRIX_WIDTH(5)
#define MMI_VKBD_TRAY_MATRIX_HEIGHT MATRIX_HEIGHT(1)
#define MMI_VKBD_NUMBER_WIDTH 240
#define MMI_VKBD_NUMBER_HEIGHT 43
/* matrix layout at the left side */
#define MMI_VKBD_NUMBER_MATRIX_COLUMN 8
#define MMI_VKBD_NUMBER_MATRIX_ROW 2
#define MMI_VKBD_NUMBER_MATRIX_X 1
#define MMI_VKBD_NUMBER_MATRIX_Y 2
#define MMI_VKBD_NUMBER_MATRIX_WIDTH MATRIX_WIDTH(8)
#define MMI_VKBD_NUMBER_MATRIX_HEIGHT MATRIX_HEIGHT(2)
#define MMI_VKBD_PINYIN_WIDTH 240
#define MMI_VKBD_PINYIN_HEIGHT 83
/* matrix layout at the left-bottom */
#define MMI_VKBD_PINYIN_MATRIX_COLUMN 9
#define MMI_VKBD_PINYIN_MATRIX_ROW 3
#define MMI_VKBD_PINYIN_MATRIX_X 1
#define MMI_VKBD_PINYIN_MATRIX_Y 22
#define MMI_VKBD_PINYIN_MATRIX_WIDTH MATRIX_WIDTH(9)
#define MMI_VKBD_PINYIN_MATRIX_HEIGHT MATRIX_HEIGHT(3)
#define MMI_VKBD_BOPOMO_WIDTH 240
#define MMI_VKBD_BOPOMO_HEIGHT 83
/* matrix layout at the left-bottom */
#define MMI_VKBD_BOPOMO_MATRIX_COLUMN 10
#define MMI_VKBD_BOPOMO_MATRIX_ROW 3
#define MMI_VKBD_BOPOMO_MATRIX_X 1
#define MMI_VKBD_BOPOMO_MATRIX_Y 22
#define MMI_VKBD_BOPOMO_MATRIX_WIDTH MATRIX_WIDTH(10)
#define MMI_VKBD_BOPOMO_MATRIX_HEIGHT MATRIX_HEIGHT(3)
#else /* __MMI_MAINLCD_240X320__ */
#define MMI_VKBD_MATRIX_KEY_WIDTH 14
#define MMI_VKBD_MATRIX_KEY_HEIGHT 14
#define MMI_VKBD_MATRIX_KEY_H_GAP 1
#define MMI_VKBD_MATRIX_KEY_V_GAP 1
#define MATRIX_WIDTH(col) ((col)*(MMI_VKBD_MATRIX_KEY_WIDTH+MMI_VKBD_MATRIX_KEY_H_GAP) - MMI_VKBD_MATRIX_KEY_H_GAP)
#define MATRIX_HEIGHT(row) ((row)*(MMI_VKBD_MATRIX_KEY_HEIGHT+MMI_VKBD_MATRIX_KEY_V_GAP) - MMI_VKBD_MATRIX_KEY_V_GAP)
#define MMI_VKBD_STANDARD_WIDTH 176
#define MMI_VKBD_STANDARD_HEIGHT 46
/* matrix layout at the left side */
#define MMI_VKBD_STANDARD_MATRIX_COLUMN 7
#define MMI_VKBD_STANDARD_MATRIX_ROW 3
#define MMI_VKBD_STANDARD_MATRIX_X 1
#define MMI_VKBD_STANDARD_MATRIX_Y 1
#define MMI_VKBD_STANDARD_MATRIX_WIDTH MATRIX_WIDTH(7)
#define MMI_VKBD_STANDARD_MATRIX_HEIGHT MATRIX_HEIGHT(3)
#define MMI_VKBD_EXTENDED_WIDTH 176
#define MMI_VKBD_EXTENDED_HEIGHT 61
/* matrix layout at the left side */
#define MMI_VKBD_EXTENDED_MATRIX_COLUMN 8
#define MMI_VKBD_EXTENDED_MATRIX_ROW 4
#define MMI_VKBD_EXTENDED_MATRIX_X 1
#define MMI_VKBD_EXTENDED_MATRIX_Y 1
#define MMI_VKBD_EXTENDED_MATRIX_WIDTH MATRIX_WIDTH(8)
#define MMI_VKBD_EXTENDED_MATRIX_HEIGHT MATRIX_HEIGHT(4)
#define MMI_VKBD_TRAY_WIDTH 176
#define MMI_VKBD_TRAY_HEIGHT 16
/* matrix layout at the left side */
#define MMI_VKBD_TRAY_MATRIX_COLUMN 5
#define MMI_VKBD_TRAY_MATRIX_ROW 1
#define MMI_VKBD_TRAY_MATRIX_X 1
#define MMI_VKBD_TRAY_MATRIX_Y 1
#define MMI_VKBD_TRAY_MATRIX_WIDTH MATRIX_WIDTH(5)
#define MMI_VKBD_TRAY_MATRIX_HEIGHT MATRIX_HEIGHT(1)
#define MMI_VKBD_NUMBER_WIDTH 176
#define MMI_VKBD_NUMBER_HEIGHT 31
/* matrix layout at the left side */
#define MMI_VKBD_NUMBER_MATRIX_COLUMN 8
#define MMI_VKBD_NUMBER_MATRIX_ROW 2
#define MMI_VKBD_NUMBER_MATRIX_X 1
#define MMI_VKBD_NUMBER_MATRIX_Y 1
#define MMI_VKBD_NUMBER_MATRIX_WIDTH MATRIX_WIDTH(8)
#define MMI_VKBD_NUMBER_MATRIX_HEIGHT MATRIX_HEIGHT(2)
#define MMI_VKBD_PINYIN_WIDTH 176
#define MMI_VKBD_PINYIN_HEIGHT 61
/* matrix layout at the left-bottom */
#define MMI_VKBD_PINYIN_MATRIX_COLUMN 9
#define MMI_VKBD_PINYIN_MATRIX_ROW 3
#define MMI_VKBD_PINYIN_MATRIX_X 1
#define MMI_VKBD_PINYIN_MATRIX_Y 16
#define MMI_VKBD_PINYIN_MATRIX_WIDTH MATRIX_WIDTH(9)
#define MMI_VKBD_PINYIN_MATRIX_HEIGHT MATRIX_HEIGHT(3)
#define MMI_VKBD_BOPOMO_WIDTH 176
#define MMI_VKBD_BOPOMO_HEIGHT 61
/* matrix layout at the left-bottom */
#define MMI_VKBD_BOPOMO_MATRIX_COLUMN 10
#define MMI_VKBD_BOPOMO_MATRIX_ROW 3
#define MMI_VKBD_BOPOMO_MATRIX_X 1
#define MMI_VKBD_BOPOMO_MATRIX_Y 16
#define MMI_VKBD_BOPOMO_MATRIX_WIDTH MATRIX_WIDTH(10)
#define MMI_VKBD_BOPOMO_MATRIX_HEIGHT MATRIX_HEIGHT(3)
#endif /* __MMI_MAINLCD_240X320__ */
/*****************************************************************************
* Typedef
*****************************************************************************/
/*****************************************************************************
* Local Variable
*****************************************************************************/
/*****************************************************************************
* Local Function
*****************************************************************************/
/*****************************************************************************
* Global Variable
*****************************************************************************/
virtual_keyboard MMI_virtual_keyboard;
/* Maximum required size of key image cache.*/
S32 MMI_virtual_keyboard_bitmap_cache_size;
/****************************
* Standard layout
****************************/
static const gui_matrix_key_layout_struct gui_standard_matrix_layout =
{
MMI_VKBD_STANDARD_MATRIX_X,MMI_VKBD_STANDARD_MATRIX_Y,
MMI_VKBD_STANDARD_MATRIX_COLUMN,MMI_VKBD_STANDARD_MATRIX_ROW,
MMI_VKBD_STANDARD_MATRIX_WIDTH,MMI_VKBD_STANDARD_MATRIX_HEIGHT,
MMI_VKBD_MATRIX_KEY_WIDTH,MMI_VKBD_MATRIX_KEY_HEIGHT,
MMI_VKBD_MATRIX_KEY_H_GAP,MMI_VKBD_MATRIX_KEY_V_GAP
};
#ifdef __MMI_MAINLCD_240X320__
static const gui_custom_key_layout_struct gui_standard_custom_key_layout[] =
{
{141,2,19,19},
{161,2,19,19},
{181,2,19,19},
{201,2,38,19},
{141,22,19,19},
{161,22,19,19},
{181,22,19,19},
{201,22,38,19},
{141,42,19,19},
{161,42,39,19},
{201,42,38,19}
};
#else /* __MMI_MAINLCD_240X320__ */
static const gui_custom_key_layout_struct gui_standard_custom_key_layout[] =
{
{106,1,14,14},
{121,1,14,14},
{136,1,14,14},
{151,1,24,14},
{106,16,14,14},
{121,16,14,14},
{136,16,14,14},
{151,16,24,14},
{106,31,14,14},
{121,31,29,14},
{151,31,24,14}
};
#endif /* __MMI_MAINLCD_240X320__ */
static const gui_keyboard_layout_struct gui_virtual_keyboard_standard_layout =
{
MMI_VKBD_STANDARD_WIDTH,
MMI_VKBD_STANDARD_HEIGHT,
1,
11,
&gui_standard_matrix_layout,
gui_standard_custom_key_layout,
IMG_VKBD_STANDARD
};
/* English lowercase */
static const gui_keyboard_language_struct gui_keyboard_english_lowercase_string =
{
MMI_FALSE,
1,
11,
{
{'q','w','e','r','t','y','u','\0' },
{'a','s','d','f','g','h','j','\0' },
{'z','x','c','v','b','n','m','\0' }
},
{'i','o','p','\0','k','l','.','\0','\0','\0','\0'},
{0,0,0,IMG_VKBD_CUSTOM_HIDE,0,0,0,IMG_VKBD_CUSTOM_BACKSPACE,IMG_VKBD_CUSTOM_CAPSLOCK,
IMG_VKBD_CUSTOM_SPACE,IMG_VKBD_CUSTOM_SYMBPICKER},
{GUI_VKBD_PEN_CHAR_I,GUI_VKBD_PEN_CHAR_I,
GUI_VKBD_PEN_CHAR_I,GUI_VKBD_PEN_HIDE,
GUI_VKBD_PEN_CHAR_I,GUI_VKBD_PEN_CHAR_I,
GUI_VKBD_PEN_CHAR_I,GUI_VKBD_PEN_BAKSPACE,
GUI_VKBD_PEN_CAPSLOCK,GUI_VKBD_PEN_SPACE,
GUI_VKBD_PEN_SYMBPICKER}
};
/* English uppercase */
static const gui_keyboard_language_struct gui_keyboard_english_uppercase_string =
{
MMI_FALSE,
1,
11,
{
{'Q','W','E','R','T','Y','U','\0' },
{'A','S','D','F','G','H','J','\0' },
{'Z','X','C','V','B','N','M','\0' }
},
{'I','O','P','\0','K','L','.','\0','\0','\0','\0'},
{0,0,0,IMG_VKBD_CUSTOM_HIDE,0,0,0,IMG_VKBD_CUSTOM_BACKSPACE,IMG_VKBD_CUSTOM_CAPSLOCK,
IMG_VKBD_CUSTOM_SPACE,IMG_VKBD_CUSTOM_SYMBPICKER},
{GUI_VKBD_PEN_CHAR_I,GUI_VKBD_PEN_CHAR_I,
GUI_VKBD_PEN_CHAR_I,GUI_VKBD_PEN_HIDE,
GUI_VKBD_PEN_CHAR_I,GUI_VKBD_PEN_CHAR_I,
GUI_VKBD_PEN_CHAR_I,GUI_VKBD_PEN_BAKSPACE,
GUI_VKBD_PEN_CAPSLOCK,GUI_VKBD_PEN_SPACE,
GUI_VKBD_PEN_SYMBPICKER}
};
//#if defined(__MMI_LANG_TR_CHINESE__) || defined(__MMI_LANG_SM_CHINESE__)
static const gui_keyboard_language_struct gui_keyboard_chinese_symbol_string =
{
MMI_FALSE,
1,
11,
{
{0x3002,0xFF0C,0xFF0E,0x3001,0xFF1B,0xFF1A,0xFF1F,'\0' },
{0x3010,0x3011,0x300A,0x300B,0x3008,0x3009,0x300C,'\0' },
{0x2018,0x2019,0x201C,0x201D,0x2190,0x2192,0x2193,'\0' }
},
{0xFF01,0xFF08,0xFF09,'\0',0x300D,0x300E,0x300F,'\0',0x2191,'\0','\0'},
{0,0,0,IMG_VKBD_CUSTOM_HIDE,0,0,0,IMG_VKBD_CUSTOM_BACKSPACE,0,
IMG_VKBD_CUSTOM_SPACE,IMG_VKBD_CUSTOM_SYMBPICKER},
{GUI_VKBD_PEN_CHAR_I,GUI_VKBD_PEN_CHAR_I,
GUI_VKBD_PEN_CHAR_I,GUI_VKBD_PEN_HIDE,
GUI_VKBD_PEN_CHAR_I,GUI_VKBD_PEN_CHAR_I,
GUI_VKBD_PEN_CHAR_I,GUI_VKBD_PEN_BAKSPACE,
GUI_VKBD_PEN_CHAR_I,GUI_VKBD_PEN_SPACE,
GUI_VKBD_PEN_SYMBPICKER}
};
//#endif /* __MMI_LANG_TR_CHINESE__ || __MMI_LANG_SM_CHINESE__ */
/****************************
* Extended layout
****************************/
static const gui_matrix_key_layout_struct gui_extended_matrix_layout =
{
MMI_VKBD_EXTENDED_MATRIX_X,MMI_VKBD_EXTENDED_MATRIX_Y,
MMI_VKBD_EXTENDED_MATRIX_COLUMN,MMI_VKBD_EXTENDED_MATRIX_ROW,
MMI_VKBD_EXTENDED_MATRIX_WIDTH,MMI_VKBD_EXTENDED_MATRIX_HEIGHT,
MMI_VKBD_MATRIX_KEY_WIDTH,MMI_VKBD_MATRIX_KEY_HEIGHT,
MMI_VKBD_MATRIX_KEY_H_GAP,MMI_VKBD_MATRIX_KEY_V_GAP
};
#ifdef __MMI_MAINLCD_240X320__
static const gui_custom_key_layout_struct gui_extended_custom_key_layout[] =
{
{161,2,19,19},
{181,2,19,19},
{201,2,38,19},
{161,22,19,19},
{181,22,19,19},
{201,22,38,19},
{161,42,19,19},
{181,42,19,19},
{201,42,38,19},
{161,62,39,19},
{201,62,38,19}
};
#else /* __MMI_MAINLCD_240X320__ */
static const gui_custom_key_layout_struct gui_extended_custom_key_layout[] =
{
{121,1,14,14},
{136,1,14,14},
{151,1,24,14},
{121,16,14,14},
{136,16,14,14},
{151,16,24,14},
{121,31,14,14},
{136,31,14,14},
{151,31,24,14},
{121,46,29,14},
{151,46,24,14}
};
#endif /* __MMI_MAINLCD_240X320__ */
static const gui_keyboard_layout_struct gui_virtual_keyboard_extended_layout =
{
MMI_VKBD_EXTENDED_WIDTH,
MMI_VKBD_EXTENDED_HEIGHT,
1,
11,
&gui_extended_matrix_layout,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -