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

📄 gui_ems.c

📁 The font library converting tool MCT mainly introduces the process of the font formats to give us a
💻 C
📖 第 1 页 / 共 5 页
字号:
				case 1:	if(c==EMS_INPUTBOX_PARAGRAPH_BREAK_CHARACTER) done=1;
						break;
				case 2: if(o->Type==EMS_TYPE_TEXT_FORMAT)
                    	{	b->text_format.Alignment=o->data->text_format.Alignment;
							done=1;
						}
						break;
			}
		}


	}
}

void pixtel_UI_EMS_input_box_set_cursor_position(UI_EMS_input_box *b,EMSPosition *p)
{	if(b->data!=NULL)
	{	ResetCurrentPosition(b->data);
		while(!((b->data->CurrentPosition.OffsetToText==p->OffsetToText) && (b->data->CurrentPosition.Object==p->Object)))
		{	if(ForwardCurrentPosition(b->data,1)!=1) break;
		}
		pixtel_UI_EMS_input_box_locate_cursor(b);
	}
}

/*	Macros for graphics functions	*/

extern stFontAttribute *UI_font;
extern U8 SetFont(stFontAttribute Font , U8 arrCount);

extern s32 UI_clip_x1,UI_clip_x2,UI_clip_y1,UI_clip_y2;
extern s32 UI_text_x,UI_text_y;
extern color UI_text_color;

#define EMS_SET_FONT(f)					\
		{	UI_font=(f);				\
			SetFont(*(f),0);			\
		}

#define EMS_MOVE_TEXT_CURSOR(x,y)		\
		{	UI_text_x=x;				\
			UI_text_y=y;				\
		}

#define EMS_SET_TEXT_COLOR(c)			\
		{	UI_text_color=c;			\
			UI_set_current_text_color(UI_text_color);\
		}

byte pixtel_UI_EMS_input_box_equal_text_format(EMSTextFormat *t1,EMSTextFormat *t2)
{	if(t1->Alignment!=t2->Alignment) return(0);
	if(t1->bgColor!=t2->bgColor) return(0);
	if(t1->fgColor!=t2->fgColor) return(0);
	if(t1->FontSize!=t2->FontSize) return(0);
	if(t1->isBold!=t2->isBold) return(0);
	if(t1->isItalic!=t2->isItalic) return(0);
	if(t1->isStrikethrough!=t2->isStrikethrough) return(0);
	if(t1->isUnderline!=t2->isUnderline) return(0);
	if(t1->textLength!=t2->textLength) return(0);
	return(1);
}

#define EMS_EQUAL_TEXT_FORMAT(t1,t2) (~(memcmp((t1),(t2),sizeof(EMSTextFormat)))
#define EMS_ESCAPE_CHARACTER	(27)

void pixtel_UI_EMS_input_box_remove_extension_character(EMSData *data)
{
   U16 c,OffsetToText;
   U8*	textBuffer=data->textBuffer;
   U16 textBufferLength=data->textLength;
   EMSPosition currposition=data->CurrentPosition;
#if defined(__MMI_T9__)
//PMT VIKAS GUPTA START 20051129
	EMSPosition backupcurrposition=data->CurrentPosition;
//PMT VIKAS GUPTA END 20051129
#endif
   kal_uint16  ret_char; 
	EMSPosition dummyposition;
	EMSObject   *ret_object;
   if( textBuffer == NULL ) 
   {
      return;
   }
   ResetCurrentPosition(data);
   if( data->dcs == SMSAL_DEFAULT_DCS )
   {
      while( (OffsetToText = data->CurrentPosition.OffsetToText) < textBufferLength )
      {
#if(EMS_BYTE_ORDER_BIG_ENDIAN)
         c=(U16)(textBuffer[OffsetToText+1]|(textBuffer[OffsetToText]<<8));
#else
         c=(U16)(textBuffer[OffsetToText]|(textBuffer[OffsetToText+1]<<8));
#endif
         if( c == EMS_ESCAPE_CHARACTER )
         {
         	dummyposition = data->CurrentPosition;
				while (EMSGetNextObject(data, &dummyposition, &ret_char , &ret_object) == 2)
				{					
					ForwardCurrentPosition(data,1);
					dummyposition = data->CurrentPosition;

					if(ret_object->Type == EMS_TYPE_TEXT_FORMAT)				
					{
						if(EMSGetPreviousObject(data, &dummyposition, &ret_char , &ret_object) == 1)
						{
							BackwardCurrentPosition(data,1);
							break;					
						}
						dummyposition = data->CurrentPosition;
					}
				}			
#if(EMS_BYTE_ORDER_BIG_ENDIAN)
            if( ForwardCurrentPosition(data,1) != 1) 
            {
               break;
            }
            CancelCurrentPosition(data,1);
            if( OffsetToText <= currposition.OffsetToText )
            {
               currposition.OffsetToText--;
            }
            OffsetToText=data->CurrentPosition.OffsetToText;
            textBufferLength -= ENCODING_LENGTH;
#else
            if( ForwardCurrentPosition(data,1) != 1 ) 
            {
               break;
            }
            CancelCurrentPosition(data,1);
            if( OffsetToText <= currposition.OffsetToText ) 
            {
               currposition.OffsetToText -= ENCODING_LENGTH;
            }
            OffsetToText=data->CurrentPosition.OffsetToText;
            textBufferLength -= ENCODING_LENGTH;
#endif
         }
         if( ForwardCurrentPosition(data,1) != 1 ) 
         {
            break;
         }
      }
   }
   MoveCursorToPosition(data, &currposition);
#if defined(__MMI_T9__)
//PMT VIKAS GUPTA START 20051129
	if(memcmp((const void *)&backupcurrposition,(const void *)&currposition,sizeof(EMSPosition))==0) return;
//PMT VIKAS GUPTA END 20051129
   T9SynT9WithInputBoxForEMSInputBox();
#endif
}

/*	Call before EMSPack	*/
void pixtel_UI_EMS_input_box_insert_extension_character(EMSData *data)
{
   U16 c,OffsetToText;
   U8* textBuffer=data->textBuffer;
   U16 textBufferLength=data->textLength;
   EMSPosition currposition=data->CurrentPosition;
#if defined(__MMI_T9__)
//PMT VIKAS GUPTA START 20051129
	EMSPosition backupcurrposition=data->CurrentPosition;
//PMT VIKAS GUPTA END 20051129
#endif
#if(EMS_BYTE_ORDER_BIG_ENDIAN)
   U8	ESC_string[]={0x00,0x1B};
#else
   U8	ESC_string[]={0x1B,0x00};
#endif
   if( textBuffer == NULL ) 
   {
      return;
   }
   ResetCurrentPosition(data);
   
   if( data->dcs == SMSAL_DEFAULT_DCS )
   {
      while( (OffsetToText=data->CurrentPosition.OffsetToText) < textBufferLength )
      {
#if(EMS_BYTE_ORDER_BIG_ENDIAN)
         c=(U16)(textBuffer[OffsetToText+1]|(textBuffer[OffsetToText]<<8));
#else
         c=(U16)(textBuffer[OffsetToText]|(textBuffer[OffsetToText+1]<<8));
#endif
         if(UI_TEST_GSM_EXTENDED(c))
         {
            AddString(data,ESC_string,1,NULL);
            if(OffsetToText<=currposition.OffsetToText)
            {
               currposition.OffsetToText += ENCODING_LENGTH;
            }
            OffsetToText=data->CurrentPosition.OffsetToText;
            //MTK Elvis 20031126
            textBufferLength += ENCODING_LENGTH;
            //MTK end
         }
         if(ForwardCurrentPosition(data,1)!=1) 
         {
            break;
         }
      }
   }
   MoveCursorToPosition(data, &currposition);
#if defined(__MMI_T9__)
//PMT VIKAS GUPTA START 20051129
	if(memcmp((const void *)&backupcurrposition,(const void *)&currposition,sizeof(EMSPosition))==0) return;
//PMT VIKAS GUPTA END 20051129
   T9SynT9WithInputBoxForEMSInputBox();
#endif
}



#if(EMS_USE_DCS)

#if(EMS_USE_CRLF_COMBINATION||EMS_USE_ESC_COMBINATION)

/*	Deletes one object/character before cursor position and updates UCS2 and Object counters	*/
/*	Also handles CRLF combination																*/

byte pixtel_UI_EMS_cancel_current_position(UI_EMS_input_box *b)
{
#ifdef __MMI_HINDI_ALG__
	S32 lst_pos=0;
	S32 cancel_two_pos=0;
	UI_character_type current_character1 = 0;
	byte object_type_check1=0;
   EMSObject				*o1;
	EMSPosition				p1=b->data->CurrentPosition;
	EMSData *data_chk_type1 = b->data;
	if(TestLastPosition(b->data,&(b->data->CurrentPosition)))
	{
		lst_pos=1;
	}
#endif //__MMI_HINDI_ALG__

if(BackwardCurrentPosition(b->data,1)==1)
	{	EMSPosition			p=b->data->CurrentPosition;
		EMSObject*			current_object;
		UI_character_type	c;
		byte				r;
		s32					count;
		byte				dcs_change=0;

		r=pixtel_UI_EMS_input_box_get_next_object(b->data,&p,&c,&current_object);
#ifdef __MMI_HINDI_ALG__
	if(lst_pos)
		{
			if (b->data->CurrentPosition.OffsetToText>=4 && UI_TEST_LF_CHARACTER(b->data->textBuffer[b->data->CurrentPosition.OffsetToText])
				&& UI_TEST_CR_CHARACTER(b->data->textBuffer[b->data->CurrentPosition.OffsetToText-2]))
			{
				b->data->textBuffer[b->data->CurrentPosition.OffsetToText-2]=0;
				b->data->textBuffer[b->data->CurrentPosition.OffsetToText-1]=0;
				cancel_two_pos = 1;

			}
			b->data->textBuffer[b->data->CurrentPosition.OffsetToText]=0;
			b->data->textBuffer[b->data->CurrentPosition.OffsetToText+1]=0;
		}
#endif //__MMI_HINDI_ALG__
		ForwardCurrentPosition(b->data,1);
		switch(r)
		{	case 0:	break;
			case 1:
#if(EMS_USE_CRLF_COMBINATION)
					if(UI_TEST_LF_CHARACTER(c))
					{	count=BackwardCurrentPosition(b->data,2);
						if(count==2)
						{	p=b->data->CurrentPosition;
							r=pixtel_UI_EMS_input_box_get_next_object(b->data,&p,&c,&current_object);
							if((r==1) && UI_TEST_CR_CHARACTER(c))
							{	ForwardCurrentPosition(b->data,2);
								CancelCurrentPosition(b->data,1);
								count=0;
							}
						}
						ForwardCurrentPosition(b->data,(U16)count);
					}
					else
#endif
					if(UI_TEST_UCS2_CHARACTER(c))
					{	if(b->UCS2_count>0)
						{	b->UCS2_count--;
							if(b->UCS2_count==0)
							{
								dcs_change=1;
								pixtel_UI_EMS_change_DCS(b);
							}
						}
					}
					else if(UI_TEST_GSM_EXTENDED(c))
					{	if(b->GSM_ext_count>0) b->GSM_ext_count--;
					}
					break;
			case 2:
			//MTK Joy added for text format case, get the character and set the parameters accordingly, 1230
					if(current_object->Type==0)
					{
						r=pixtel_UI_EMS_input_box_get_next_object(b->data,&p,&c,&current_object);
						if((r==1) &&UI_TEST_UCS2_CHARACTER(c))
						{	if(b->UCS2_count>0)
							{	b->UCS2_count--;
								if(b->UCS2_count==0)
								{
									dcs_change=1;
									pixtel_UI_EMS_change_DCS(b);
								}
							}
						}
						else if(UI_TEST_GSM_EXTENDED(c))
						{	if(b->GSM_ext_count>0) b->GSM_ext_count--;
						}
						break;
					}
			//MTK end
					if(b->object_count>0)
					{	b->object_count--;
						if(b->object_count==0) pixtel_UI_EMS_change_DCS(b);
					}
					break;
		}
		CancelCurrentPosition(b->data,1);
#ifdef __MMI_HINDI_ALG__
		b->data->textBuffer[b->data->textLength]=0;
		b->data->textBuffer[b->data->textLength+1]=0;
		if (cancel_two_pos)
		{
			CancelCurrentPosition(b->data,1);
		}
		if (b->data->CurrentPosition.OffsetToText >=4)
		{
		if ( (UI_CHK_CONSONANT(b->data->textBuffer[b->data->CurrentPosition.OffsetToText]))
			&& (UI_CHK_CONSONANT(b->data->textBuffer[b->data->CurrentPosition.OffsetToText-4]))
			&& (b->data->textBuffer[b->data->CurrentPosition.OffsetToText-2]==0x4d)
			&& ((b->data->textBuffer[b->data->CurrentPosition.OffsetToText+1])== 0x09)
			&& ((b->data->textBuffer[b->data->CurrentPosition.OffsetToText-3])== 0x09))
			{
				EMSObject *bb;
				U8 fwd_positions=0;
				U8 saved_fwd_positions=0;
				PU8 dest_pos;
				PU8 src_pos=&b->data->textBuffer[b->data->CurrentPosition.OffsetToText];

				p1=b->data->CurrentPosition;
				object_type_check1 = pixtel_UI_EMS_input_box_get_next_object(data_chk_type1,&p1,&current_character1,&o1);

				//dest_pos = hf_get_next_cluster_p(b->data->textBuffer,src_pos);
				dest_pos = hf_get_next_cluster_p(src_pos,src_pos);
				fwd_positions = dest_pos - src_pos;//Number of moves
				fwd_positions = fwd_positions >> 1;
				saved_fwd_positions =fwd_positions;
				PRINT_INFORMATION_2((MMI_TRACE_INFO, "pixtel_UI_EMS_cancel_current_position[fwd_positions]:%d  ",fwd_positions));
				while(fwd_positions--)
				{
					ForwardCurrentPosition(b->data,1);
				}
				if (object_type_check1 == 2)
				{
					if (saved_fwd_positions == 1)
					{
						// To shift the images on cluster completion
						bb = b->data->listTail;
						do
						{
							if (bb->OffsetToText == b->data->CurrentPosition.Object->OffsetToText)
								bb->OffsetToText+=(saved_fwd_positions)*2;
							bb = bb->prev;
						}while(bb != NULL);


						ForwardCurrentPosition(b->data,saved_fwd_positions);
						BackwardCurrentPositionSkipCR(b->data);
					}
					else if (saved_fwd_positions > 1)
					{
						// To shift the images on cluster completion
						bb = b->data->listHead;
						do
						{
							if (bb->OffsetToText == b->data->CurrentPosition.Object->OffsetToText)
								bb->OffsetToText+=(saved_fwd_positions)*2;
							bb = bb->next;
						}while(bb != NULL);
						ForwardCurrentPosition(b->data,saved_fwd_positions);
						if (b->data->listHead == b->data->listTail)
						{
							BackwardCurrentPositionSkipCR(b->data);
						}
						else
						{
							BackwardCurrentPositionSkipCR(b->data);
							BackwardCurrentPositionSkipCR(b->data);
						}

					}

				}

			}
		}
#endif //__MMI_HINDI_ALG__

		if(dcs_change)
			pixtel_UI_EMS_input_box_insert_extension_character(b->data);

#if(EMS_USE_ESC_COMBINATION)
		if(b->UCS2_count==0)
		{
		p=b->data->CurrentPosition;
		r=pixtel_UI_EMS_input_box_get_previous_object(b->data,&p,&c,&current_object);
		if((r==1) && UI_TEST_ESC_CHARACTER(c)) CancelCurrentPosition(b->data,1);
		}
#endif
		return(1);
	}
	return(0);
}

⌨️ 快捷键说明

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