?? vk.c
字號:
#include "ui.h"
#include "vk.h"
#include "all.h"
#include "py.h"
int iClear = 0;
int iNum_VK = VK_NUM;
int iCur_VK = 2;
int iCur_PYW= 0;
int iCur_PYS= 0;
int iCur_ZHW= 0;
int iCur_PUTS= 0;
int iCur_SCW= 0;
char Cur_py_win[PY_WIN_NUM][STR_SIZE];
char Cur_zh_buf[PY_NUM][ZH_NUM][STR_SIZE];
char Cur_put_win[PUT_WIN_NUM][STR_SIZE];
extern char Cur_input_buf[STR_SIZE];
extern char Cur_py_buf[PY_NUM][STR_SIZE];
extern int iCur_X;
extern int iCur_Y;
extern int iPrev_X;
extern int iPrev_Y;
extern pid_t VK_ID;
extern XftFont *ListWinFont;
extern XftFont *VKLabelFont;
extern XftFont *PYListWinFont;
extern XftFont *ZHListWinFont;
VKS vks[] = {
{{"Abc"}, {{"","abcABC","defDEF",""},{"ghiGHI","jklJKL","nmoNMO",""},
{"pqrsPQRS","tuvTUV","wxyzWXYZ",""},{"*"," ","",""}}},
{{"123"}, {{"1","2","3",""},{"4","5","6",""},{"7","8","9",""},{"*","0 ","",""}}},
{{"簡體"}, {{"1","2","3",""},{"4","5","6",""},{"7","8","9",""},{""," ","",""}}},
{{"繁體"}, {{"1","2","3",""},{"4","5","6",""},{"7","8","9",""},{""," ","",""}}}
};
char *vk_sc[4]= {"`~!@#$%^","&*()-=\\|","+_][';/.",",{}:\">?<"};
int check_strarr_len(int max_len, char buf[][STR_SIZE])
{
int i=0;
for(;buf[i][0]!='\0';i++);
if (i >= max_len)
i=max_len;
return i;
}
void clear_py_zh(void)
{
iCur_PYS = 0;
iCur_PYW = 0;
iCur_ZHW=0;
bzero(Cur_input_buf,sizeof(Cur_input_buf));
bzero(Cur_py_buf,sizeof(Cur_py_buf));
bzero(Cur_zh_buf,sizeof(Cur_zh_buf));
bzero(Cur_py_win,sizeof(Cur_py_win));
bzero(Cur_put_win,sizeof(Cur_put_win));
}
void get_str_arr(char str[],char str_arr[][STR_SIZE])
{
int i,n=0;
for(i=0;str[i] != '\0';i++){
if(str[i] > 0xffffff80 ) {
str_arr[n][0] = str[i++];
str_arr[n][1] = str[i];
str_arr[n][2] = '\0';
n++;
}else{
str_arr[n][0] = str[i];
str_arr[n][1] = '\0';
n++;
}
}
}
void get_win_str(char buf_str[][STR_SIZE], char win_str[][STR_SIZE], int win_start, int win_max)
{
int i;
for(i=0;i<win_max;i++){
if(buf_str[win_start+i][0] == '\0'){
break;
}else{
strcpy(win_str[i],buf_str[win_start+i]);
}
}
}
void str_to_tradition(char put_win[][STR_SIZE])
{
int i=0;
int n;
i = check_strarr_len(PUT_WIN_NUM, Cur_put_win);
for(n=0;n<i;n++){
strcpy(Cur_put_win[n],simple_to_tradition(Cur_put_win[n]));
}
}
void get_py_zh_win(void)
{
bzero(Cur_py_win,sizeof(Cur_py_win));
bzero(Cur_put_win,sizeof(Cur_put_win));
get_win_str(Cur_py_buf, Cur_py_win, iCur_PYW, PY_WIN_NUM);
get_win_str(Cur_zh_buf[iCur_PYW+iCur_PYS], Cur_put_win, iCur_ZHW, PUT_WIN_NUM);
if (iCur_VK == 3)
str_to_tradition(Cur_put_win);
}
Bool vk_key_handler (int x, int y)
{
int xindex = -1,yindex = -1;
char *cmd=NULL;
if(y >0 && y <= TOP_BAR_HEIGHT){
if(iCur_VK >= 2 && check_strarr_len(PY_WIN_NUM,Cur_py_win) > 0){
if(y >TOP_BAR_HEIGHT/2 && y <= TOP_BAR_HEIGHT ){
if(x>300 && x<320){//next or prev button
iCur_ZHW=iCur_ZHW+PUT_WIN_NUM;
if(iCur_ZHW>=check_strarr_len(ZH_NUM,Cur_zh_buf[iCur_PYW+iCur_PYS]))
iCur_ZHW=0;
get_py_zh_win();
rescan_vk_window();
}else if(x>ZH_WIN_X && x<(ZH_WIN_X+index_to_point(check_strarr_len(PUT_WIN_NUM,Cur_put_win),
ZH_WIDTH, Cur_put_win, ZHListWinFont, 1))){
iCur_PUTS = point_to_index(x-ZH_WIN_X,ZH_WIDTH,Cur_put_win,PUT_WIN_NUM,ZHListWinFont);
get_py_zh_win();
out_put_str(iCur_PUTS);
iClear = 1;
}
}else{
if(x>PY_WIN_X && x<(PY_WIN_X+index_to_point(check_strarr_len(PY_WIN_NUM,Cur_py_win),
PY_WIDTH, Cur_py_win, PYListWinFont, 1))){
iCur_ZHW = 0;
iCur_PYS = point_to_index(x-PY_WIN_X,PY_WIDTH,Cur_py_win,PY_WIN_NUM,PYListWinFont);
get_py_zh_win();
rescan_vk_window();
}
}
}else if(x>WIN_X && x<(WIN_X+index_to_point(check_strarr_len(PUT_WIN_NUM,Cur_put_win),
CHAR_WIDTH, Cur_put_win, ListWinFont, 1))){
iCur_PUTS = point_to_index(x-WIN_X,CHAR_WIDTH, Cur_put_win, PUT_WIN_NUM, ListWinFont);
out_put_str(iCur_PUTS);
}
}else if (y > TOP_BAR_HEIGHT && y <= VK_WINDOW_HEIGHT) {
if (x < 0 || x > VK_WINDOW_WIDTH)
return False;
yindex = (y-TOP_BAR_HEIGHT)/BUTTON_HEIGHT;
xindex = x/BUTTON_WIDTH;
if (xindex > 4)
xindex = 3;
if (yindex > 4)
yindex = 3;
//key: *
if (xindex == 0 && yindex == 3) {
if (iCur_VK >= 2){
iCur_PYS = 0;
iCur_PYW = 0;
iCur_ZHW=0;
bzero(Cur_input_buf,sizeof(Cur_input_buf));
bzero(Cur_py_buf,sizeof(Cur_py_buf));
bzero(Cur_zh_buf,sizeof(Cur_zh_buf));
bzero(Cur_py_win,sizeof(Cur_py_win));
}
bzero(Cur_put_win,sizeof(Cur_put_win));
get_str_arr(vk_sc[iCur_SCW],Cur_put_win);
iPrev_X = -1;
iPrev_Y = -1;
if (iCur_SCW >= 3)
iCur_SCW = 0;
else
iCur_SCW++;
rescan_vk_window();
return True;
}
//key: #
if (xindex == 2 && yindex == 3) {
iCur_SCW = 0;
iCur_VK++;
if (iCur_VK >= iNum_VK)
iCur_VK = 0 ;
if (iCur_VK >= 2){
iCur_PYS = 0;
iCur_PYW = 0;
iCur_ZHW=0;
bzero(Cur_input_buf,sizeof(Cur_input_buf));
bzero(Cur_py_buf,sizeof(Cur_py_buf));
bzero(Cur_py_win,sizeof(Cur_py_win));
}
bzero(Cur_put_win,sizeof(Cur_put_win));
rescan_vk_window();
return True;
}
//key: 0-9
if (xindex != 3){
if (iCur_VK >= 2){
if (iClear == 1){
clear_py_zh();
iClear = 0;
}
py_get_zh(vks[iCur_VK].strSymbol[yindex][xindex]);
get_py_zh_win();
}else {
iPrev_X = xindex;
iPrev_Y = yindex;
bzero(Cur_put_win,sizeof(Cur_put_win));
get_str_arr(vks[iCur_VK].strSymbol[iPrev_Y ][iPrev_X],Cur_put_win);
if(check_strarr_len(PUT_WIN_NUM,Cur_put_win) == 1){
out_put_str(0);
return True;
}
}
rescan_vk_window();
}
//key:Del
if (xindex == 3 && yindex <= 2) {
if (iCur_VK>=2 && strlen(Cur_input_buf)>0){
Cur_input_buf[strlen(Cur_input_buf)-1] = '\0';
iCur_PYW = 0;
iCur_PYS = 0;
iCur_ZHW = 0;
py_get_str();
get_py_zh_win();
rescan_vk_window();
}else {
bzero(Cur_put_win,sizeof(Cur_put_win));
iCur_SCW = 0;
rescan_vk_window();
}
return False;// move the VK window
}
//key:EXIT
if (xindex == 3 && yindex == 3){
sprintf(cmd,"kill %d",VK_ID);
execvp(cmd, NULL);
}
}
return True;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -