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

📄 gb_wrapper.c

📁 The font library converting tool MCT mainly introduces the process of the font formats to give us a
💻 C
📖 第 1 页 / 共 3 页
字号:
	pixtel_UI_move_text_cursor(x, y);
	pixtel_UI_print_text(text);
	return width - widthLeft;
}

#define ZERO_SAM     0//ADD this just to eliminate some values in counting.
static void GBDrawStrokeUpLine(void)
{
/*	U16 compIndex;
    //首先画部首
	int cmpTop = (UP_LINE_HEIGHT - COMP_HEIGHT) / 2 + UP_LINE_TOP;
	int cmpLeft = UP_LINE_RIGHT - g_gbMMIGlobals.outputInfo.componentsLen * (COMP_WIDTH + SELECTOR_WIDTH);
	int allStringLength;
	int leftLength;
	int outputStringWidth;
	int strokeStringWidth;
	int showOutputWidth;	
	int i;

	//既然已经开始选择候选了,那么这个时候就不要出部首了。
	if(g_gbMMIGlobals.outputInfo.isSelectedCand)
	{
		g_gbMMIGlobals.outputInfo.componentsLen = 0;
	}
	
	for(i = 0; i < g_gbMMIGlobals.outputInfo.componentsLen; i++)
	{
		compIndex = FindCompIndex(g_gbMMIGlobals.outputInfo.components[i]);
		compIndex = (ALL_COMP_COUNT * i * ZERO_SAM) + compIndex + IMG_GB_COMP_SELECTOR_1_1;
		pixtel_UI_show_image(cmpLeft, cmpTop, get_image(compIndex));
		INSERT_REGION(cmpLeft, cmpTop,
			cmpLeft + COMP_WIDTH,
			cmpTop + COMP_HEIGHT,
			GBET_In_Key,
			((i < 4) ? i + '6' : '0'));
		cmpLeft += COMP_WIDTH;
		pixtel_UI_show_image(cmpLeft, cmpTop, get_image((U16)(IMG_GB_SELECTOR_0 + (i + 6) % 10)));//Sam,add digital map
		cmpLeft += SELECTOR_WIDTH;
	}
	if(g_gbMMIGlobals.outputInfo.fullOutput[0] == 0)
	{
		return;
	}
	
	outputStringWidth = pixtel_UI_get_string_width(g_gbMMIGlobals.outputInfo.fullOutput);
	strokeStringWidth = pixtel_UI_get_string_width(g_gbMMIGlobals.outputInfo.stroke);
	allStringLength = outputStringWidth + strokeStringWidth + 3;
	
	leftLength = UP_LINE_WIDTH - g_gbMMIGlobals.outputInfo.componentsLen * COMP_WIDTH;

	showOutputWidth = (leftLength - 3) * outputStringWidth / 
		(outputStringWidth + strokeStringWidth);

	pixtel_UI_set_text_color(UI_COLOR_BLACK);
	showOutputWidth = 
		RightAlignDrawText(UP_LINE_LEFT, UP_LINE_TOP, 
		(U16)showOutputWidth, 
		g_gbMMIGlobals.outputInfo.fullOutput, 
		NULL);

	if(!g_gbMMIGlobals.outputInfo.isSelectedCand)
	{
		INSERT_REGION(UP_LINE_LEFT, UP_LINE_TOP,
			CAND_LEFT + showOutputWidth,
			CAND_LINE_BOTTOM,
			GBET_In_Key,
			GBKEY_Up);
	}
			

	if(g_gbMMIGlobals.outputInfo.strokeLen > 0)
	{
		pixtel_UI_line(CAND_LEFT + showOutputWidth + 2, CAND_TOP, 
			CAND_LEFT + showOutputWidth + 2, 
			UP_LINE_BOTTOM,
			UI_COLOR_BLACK);
			
		RightAlignDrawText(CAND_LEFT + showOutputWidth + 3, CAND_TOP, 
			(U16)(leftLength - showOutputWidth - 3), 
			g_gbMMIGlobals.outputInfo.stroke,
			NULL);
	}*/
}

static void GBDrawPinYinUpLine(void)
{
/*	int i;
	int x, y;
	int stringWidth;
	int widthLeft;
	UI_string_type pStr;

	x = UP_LINE_LEFT;
	y = UP_LINE_TOP;
	widthLeft = UP_LINE_WIDTH;
	
	for(i = 0; i < g_gbMMIGlobals.outputInfo.syllableNum && widthLeft > 0; i++)
	{
		if(i > 0)
		{
			x += SYLLABLE_SEPERATE;
		}
		pStr = g_gbMMIGlobals.outputInfo.syllables[i];
		stringWidth = pixtel_UI_get_string_width(pStr);

		if(g_gbMMIGlobals.outputInfo.syllableIndex == i)
		{
			
			pixtel_UI_fill_rectangle(x - 1, UP_LINE_TOP, 
				x + min(stringWidth, widthLeft - 1) + 1,
				UP_LINE_BOTTOM, 
				BG_CLR_SELECTED);
			pixtel_UI_set_text_color(FONT_CLR_SELECTED);
			
		}
		else
		{
			pixtel_UI_set_text_color(FONT_CLR_NORMAL);
		}

		if(widthLeft > stringWidth)
		{
			pixtel_UI_move_text_cursor(x, y);
			pixtel_UI_print_text(pStr);
		}
		else
		{
			RightAlignDrawText(x, y, (U16)widthLeft, pStr, NULL);
			stringWidth = widthLeft;
		}

		INSERT_REGION(x, y, 
			x + stringWidth,
			UP_LINE_BOTTOM,
			GBET_In_SetPinYinIndex,
			i);
		x += stringWidth;
		widthLeft -= stringWidth;
	}*/
}

static void GBDrawSmartLatinUpLine(void)
{
	int width;
	
	pixtel_UI_set_text_color(UI_COLOR_BLACK);
	/*在标点模式下面不要画那个'#'号*/
	if(g_gbMMIGlobals.outputInfo.fullOutput[1] == 0
		&& g_gbMMIGlobals.outputInfo.fullOutput[0] == '#')
	{
		return;
	}
	width = RightAlignDrawText(UP_LINE_LEFT, UP_LINE_TOP, UP_LINE_WIDTH,
		g_gbMMIGlobals.outputInfo.fullOutput, NULL);
	
	if(!g_gbMMIGlobals.outputInfo.isSelectedCand)
	{
		INSERT_REGION(UP_LINE_LEFT, UP_LINE_TOP,
			UP_LINE_TOP + width, UP_LINE_BOTTOM,
			GBET_In_Key,
			GBKEY_Up);
	}
}

static void GBDrawCandLine(void)
{
	int seperate;
	int allCandLength;
	int candLength;
	UI_string_type str;
	S32 x, y;
	
	int i;
	allCandLength = 0;
	for(i = 0; i < g_gbMMIGlobals.outputInfo.candidatesNum; i++)
	{
		allCandLength += pixtel_UI_get_string_width((UI_string_type)g_gbMMIGlobals.outputInfo.candidates[i]);
	}

	seperate = (CAND_LINE_WIDTH - (allCandLength + 
		g_gbMMIGlobals.outputInfo.candidatesNum * SELECTOR_WIDTH))
		/ (g_gbMMIGlobals.outputInfo.candidatesNum + 1);
	
	x = CAND_LINE_LEFT;
	y = CAND_LINE_TOP;
	for(i = 0; i < g_gbMMIGlobals.outputInfo.candidatesNum; i++)
	{
		str = (UI_string_type)g_gbMMIGlobals.outputInfo.candidates[i];
		candLength = pixtel_UI_get_string_width(str);
		
		if(g_gbMMIGlobals.outputInfo.isSelectedCand)
		{
			pixtel_UI_show_image(x, y, get_image((U16)(IMG_GB_SELECTOR_0 + (i + 1) % 10)));
		}

		INSERT_REGION(x, y, 
			x + SELECTOR_WIDTH + candLength, 
			y + CAND_LINE_HEIGHT,
			GBET_In_SelCandidate,
			i);

		x += SELECTOR_WIDTH;
		if(g_gbMMIGlobals.outputInfo.isSelectedCand == 0
			&& g_gbMMIGlobals.outputInfo.candidateIndex == i)
		{
			pixtel_UI_fill_rectangle(x, y, 
				x + candLength + 1, 
				y + CAND_LINE_HEIGHT, 
				BG_CLR_HOT);
			pixtel_UI_set_text_color(FONT_CLR_HOT);
		}
		else if(g_gbMMIGlobals.outputInfo.isSelectedCand == 1
			&& g_gbMMIGlobals.outputInfo.candidateIndex  == i)
		{
			pixtel_UI_fill_rectangle(x, y, 
				x + candLength + 1, 
				y + CAND_LINE_HEIGHT, 
				BG_CLR_SELECTED);
			pixtel_UI_set_text_color(FONT_CLR_SELECTED);
		}
		else
		{
			pixtel_UI_set_text_color(FONT_CLR_NORMAL);
		}
		
		pixtel_UI_move_text_cursor(x, y);
		pixtel_UI_print_text(str);
		
		x += candLength + seperate;
	}
}


#define UP_DOWN_TIPS_HEIGHT		10
#define UP_DOWN_TIPS_WIDTH		20
#define LEFT_RIGHT_TIPS_HEIGHT	20
#define LEFT_RIGHT_TIPS_WIDTH	10
/**
 * \brief 输入法的显示函数
 */
void GBDrawCandWnd(void)
{
#ifdef __MMI_TOUCH_SCREEN__
	s_gbTouchRegionsCount = 0;
#endif
	if(!g_gbMMIGlobals.outputInfo.isShowIMWin
		|| !GB_IS_ACTIVE())
	{
		GBCloseCand();
		return;
	}
	else
	{
		GBCheckCandWnd();
	}

	pixtel_UI_lock_double_buffer();
	pixtel_UI_push_clip();
	pixtel_UI_push_text_clip();
	pixtel_UI_set_clip(CAND_LEFT, CAND_TOP, CAND_RIGHT, CAND_BOTTOM);
	pixtel_UI_set_text_clip(CAND_LEFT, CAND_TOP, CAND_RIGHT, CAND_BOTTOM);

	pixtel_UI_fill_rectangle(CAND_LEFT, CAND_TOP, CAND_RIGHT, CAND_BOTTOM, UI_COLOR_WHITE);
	pixtel_UI_draw_rectangle(CAND_LEFT, CAND_TOP, CAND_RIGHT, CAND_BOTTOM, UI_COLOR_BLACK);
	pixtel_UI_line(CAND_LEFT, 
		(CAND_TOP + CAND_BOTTOM) / 2, CAND_RIGHT, (CAND_TOP + CAND_BOTTOM) / 2,
		UI_COLOR_BLACK);
		/*
		pixtel_UI_fill_rectangle(UP_LINE_LEFT, 
		UP_LINE_TOP, 
		CAND_RIGHT - 1, 
		UP_LINE_BOTTOM,
		(g_gbMMIGlobals.outputInfo.isSelectedCand) ? BG_CLR_DEACTIVE_LINE : BG_CLR_ACTIVE_LINE);
		pixtel_UI_fill_rectangle(CAND_LINE_LEFT, 
		CAND_LINE_TOP, 
		CAND_RIGHT - 1, 
		CAND_LINE_BOTTOM,
		(g_gbMMIGlobals.outputInfo.isSelectedCand) ? BG_CLR_ACTIVE_LINE : BG_CLR_DEACTIVE_LINE);
	*/

	pixtel_UI_set_font(&MMI_medium_font);
	
	if(g_gbMMIGlobals.outputInfo.nInputMode == GBIM_Chn_Stroke
		|| g_gbMMIGlobals.outputInfo.nInputMode == GBIM_Chn_YinStroke)
	{
		GBDrawStrokeUpLine();
	}
	else if(g_gbMMIGlobals.outputInfo.nInputMode == GBIM_Chn_Pinyin)
	{
		GBDrawPinYinUpLine();
	}
	else
	{
		GBDrawSmartLatinUpLine();
	}
	pixtel_UI_set_font(&MMI_medium_font);
	GBDrawCandLine();

	if(g_gbMMIGlobals.outputInfo.otherInfo.isShowUpArrow)
	{
		pixtel_UI_show_image(CAND_LINE_RIGHT + 1, CAND_LINE_TOP, 
			get_image(IMG_GB_TIP_UP));
		INSERT_REGION(CAND_LINE_RIGHT + 1, CAND_LINE_TOP, 
			CAND_LINE_RIGHT + 1 + UP_DOWN_TIPS_WIDTH,
			CAND_LINE_TOP + UP_DOWN_TIPS_HEIGHT,
			GBET_In_Key,
			GBKEY_Up);
	}
	if(g_gbMMIGlobals.outputInfo.otherInfo.isShowDownArrow)
	{
		pixtel_UI_show_image(CAND_LINE_RIGHT + 1, CAND_LINE_TOP + UP_DOWN_TIPS_HEIGHT, 
			get_image(IMG_GB_TIP_DOWN));
		INSERT_REGION(CAND_LINE_RIGHT + 1, CAND_LINE_TOP + UP_DOWN_TIPS_HEIGHT,
			CAND_LINE_RIGHT + 1 + UP_DOWN_TIPS_WIDTH,
			CAND_LINE_TOP + UP_DOWN_TIPS_HEIGHT * 2,
			GBET_In_Key,
			GBKEY_Down);
	}
/*
	if(g_gbMMIGlobals.outputInfo.otherInfo.isShowLeftArrow)
	{
		pixtel_UI_show_image(UP_LINE_RIGHT + 1, UP_LINE_TOP,
			get_image(IMG_GB_TIP_LEFT));
		INSERT_REGION(UP_LINE_RIGHT + 1, UP_LINE_TOP, 
			UP_LINE_RIGHT + 1 + LEFT_RIGHT_TIPS_WIDTH,
			UP_LINE_TOP + LEFT_RIGHT_TIPS_HEIGHT,
			GBET_In_Key,
			GBKEY_Left);
	}
	if(g_gbMMIGlobals.outputInfo.otherInfo.isShowRightArrow)
	{
		pixtel_UI_show_image(UP_LINE_RIGHT + 1 + LEFT_RIGHT_TIPS_WIDTH, UP_LINE_TOP,
			get_image(IMG_GB_TIP_RIGHT));
		INSERT_REGION(UP_LINE_RIGHT + 1 + LEFT_RIGHT_TIPS_WIDTH, UP_LINE_TOP, 
			UP_LINE_RIGHT + 1 + LEFT_RIGHT_TIPS_WIDTH * 2,
			UP_LINE_TOP + LEFT_RIGHT_TIPS_HEIGHT,
			GBET_In_Key,
			GBKEY_Right);
	}*/
	
	pixtel_UI_pop_clip();
	pixtel_UI_pop_text_clip();
	pixtel_UI_unlock_double_buffer();
	//这里面才是真正更新屏幕,前面是在memory里面的更新
	pixtel_UI_BLT_double_buffer(CAND_LEFT, CAND_TOP, CAND_RIGHT, CAND_BOTTOM);  
}


/**
 * \brief 将上屏的内容加入EMS input box
 */
static void GBUpScreen(void)
{
	int i;
	if(!gbCurInputBox.pfUpscreen)
	{
		return;
	}
	for(i = 0; i < g_gbMMIGlobals.outputInfo.upscreenLen; i++)
	{
		(*gbCurInputBox.pfUpscreen)(g_gbMMIGlobals.outputInfo.upscreenStr[i]);
	}
	g_gbMMIGlobals.outputInfo.upscreenLen = 0;
}

/**
 * \brief 检查输入法当前的输入是否为空
 */
int GbIsInputEmpty(void)
{	
	if(GB_IS_ACTIVE())
	{
		if(g_gbMMIGlobals.outputInfo.fullOutput == NULL
			|| g_gbMMIGlobals.outputInfo.fullOutput[0] == 0)
		{
			return 1;
		}
		else
		{
			return 0;
		}
	}
	else
	{
		return 1;
	}
}


U8 GBSinglineInputBoxIsEmpty(void)
{
	return pixtel_UI_single_line_input_box_get_text_length(&MMI_singleline_inputbox) <= 0;
}

U8 GBEMSInputBoxIsEmpty(void)
{
	return pixtel_UI_EMS_inputbox_empty(&MMI_EMS_inputbox);
}

void GBSetCurInputBox(const GBIInputBox * pIInputBox)
{
	memcpy(&gbCurInputBox, pIInputBox, sizeof(gbCurInputBox));
}
#ifdef __MMI_TOUCH_SCREEN__
void GBHandleTouchEvent(U16 x, U16 y)
{
	GBTouchRegion * pStart = s_gbTouchRegions + s_gbTouchRegionsCount - 1;

	while(pStart >= s_gbTouchRegions)
	{
		if(PT_IN_REGION(x, y, pStart))
		{
			GBEventHandler(pStart->gbEvent, pStart->param, 0);
			GBDrawCandWnd();
			break;
		}
		--pStart;
	}
}
#endif

#ifndef __MMI_TOUCH_SCREEN__
extern void redraw_EMS_inputbox();
void GBResizeContentArea(int changed_height)
{
    if (0 == changed_height)
    {
        return;
    }
    switch (gbCurInputBox.type)
    {
        case GBMultilineInputBox:
            gui_resize_multi_line_input_box(
                &MMI_multiline_inputbox,
                MMI_multiline_inputbox.width,
                MMI_multiline_inputbox.height + changed_height);
            redraw_multiline_inputbox();
            break;

        case GBEMSInputBox:
            gui_resize_EMS_input_box(
                &MMI_EMS_inputbox,
                MMI_EMS_inputbox.width,
                MMI_EMS_inputbox.height + changed_height);
            redraw_EMS_inputbox();
            break;

        case GBSinglineInputBox:
            break;
/*
        case PEN_EDITOR_QUICK_SEARCH_SINGLE_LINE_INPU_BOX:
            resize_fixed_list(MMI_fixed_list_menu.width, MMI_fixed_list_menu.height + changed_height);
            / * W06.03 Adjust highlight position * /
            gui_dynamic_list_menu_locate_highlighted_item(&MMI_fixed_list_menu);
            move_singleline_inputbox(MMI_singleline_inputbox.x, MMI_fixed_list_menu.y + MMI_fixed_list_menu.height + 1);
            break;

        case PEN_EDITOR_DICT_MULTILINE_INPUT_BOX:
            resize_fixed_list(MMI_fixed_list_menu.width, MMI_fixed_list_menu.height + changed_height);
            gui_dynamic_list_menu_locate_highlighted_item(&MMI_fixed_list_menu);
            move_multiline_inputbox(
                MMI_multiline_inputbox.x,
                MMI_fixed_list_menu.y + MMI_fixed_list_menu.height + wgui_inputbox_information_bar_height);
            wgui_setup_input_information(
                MMI_multiline_inputbox.x,
                MMI_multiline_inputbox.y - wgui_inputbox_information_bar_height,
                MMI_multiline_inputbox.width,
                wgui_inputbox_information_bar_height);
            RedrawCategoryControlledArea201Screen();
            break;

        case PEN_EDITOR_INLINE_TEXT:
            break;

        case PEN_EDITOR_DATE:
            break;

        case PEN_EDITOR_IP4:
            break;

        case PEN_EDITOR_TIME:
            break;

        case PEN_EDITOR_TIME_PERIOD:
            break;*/

        default:
            MMI_ASSERT(0);
            break;
    }
}
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -