Overview
Examples
Screenshots
Comparisons
Applications
Download
Documentation
Tutorials
Bazaar
Status & Roadmap
FAQ
Authors & License
Forums
Funding Ultimate++
Search on this site
Search in forums












SourceForge.net Logo
Home » U++ Library support » U++ Libraries and TheIDE: i18n, Unicode and Internationalization » Japanese IME test code
Re: Japanese IME test code [message #15827 is a reply to message #15812] Fri, 09 May 2008 02:16 Go to previous messageGo to previous message
mobilehunter is currently offline  mobilehunter
Messages: 87
Registered: November 2006
Member
Hi Mirek,
Sorry about virtual functions. Maybe we can remove some.
Please also consider the X11 implementations

Here my codes for X11:
at CtrlCore.cpp
#ifdef PLATFORM_X11
	static int ImePreEditStartCB(XIC xic, XPointer clientData, XPointer callData);
	static void ImePreEditDoneCB(XIC xic, XPointer clientData, XPointer callData);
	static void ImePreEditDrawCB(XIC xic, XPointer clientData, XIMPreeditDrawCallbackStruct *callData);
	static void ImePreEditCaretCB(XIC xic, XPointer clientData, XIMPreeditCaretCallbackStruct *callData);
	#endif


at Ctrl.cpp
#ifdef PLATFORM_X11
int Ctrl::ImePreEditStartCB(XIC xic, XPointer clientData, XPointer callData)
{
	Ctrl *ctrl = (Ctrl*)clientData;
	
	Ptr<Ctrl> pfocusCtrl = ctrl->GetFocusCtrl();
	if(!pfocusCtrl)
		return -1;
	
	pfocusCtrl->ImePreEditStart();
	return -1;
}

void Ctrl::ImePreEditDoneCB(XIC xic, XPointer clientData, XPointer callData)
{
	Ctrl *ctrl = (Ctrl*)clientData;
	
	Ptr<Ctrl> pfocusCtrl = ctrl->GetFocusCtrl();
	if(!pfocusCtrl)
		return;
	pfocusCtrl->ImePreEditEnd();
}

void Ctrl::ImePreEditDrawCB(XIC xic, XPointer clientData, XIMPreeditDrawCallbackStruct *callData)
{
	Ctrl *ctrl = (Ctrl*)clientData;
	Ptr<Ctrl> pfocusCtrl = ctrl->GetFocusCtrl();
		
	if(callData)
	{
		int caretPos = callData->caret;
		int changeFirst = callData->chg_first;
		int changeLength = callData->chg_length;
		
		if(callData->text)
		{
			int length = callData->text->length;

			if(!callData->text->encoding_is_wchar)
			{
				String newString = callData->text->string.multi_byte;
				WString newWString = ToUnicode(newString, newString.GetLength(), CHARSET_UTF8);
				
				pfocusCtrl->ImePreEditSetText(newWString);				
			}
		}
	}
}

void Ctrl::ImePreEditCaretCB(XIC xic, XPointer clientData, XIMPreeditCaretCallbackStruct *callData)
{
	Ctrl *ctrl = (Ctrl*)clientData;
	Ptr<Ctrl> pfocusCtrl = ctrl->GetFocusCtrl();
	
	if(!pfocusCtrl)
		return;
	
	pfocusCtrl->imePreEditCursor = callData->position;
	pfocusCtrl->ImePreEditSyncCaret();
	pfocusCtrl->SyncCaret(); 
}
#endif


At X11Wnd.cpp
/*cw.xic = xim ? XCreateIC(xim,
	                         XNInputStyle, XIMPreeditNothing|XIMStatusNothing,
	                         XNClientWindow, w,
	                         XNFocusWindow, w,
	                         NULL)
	             : NULL;*/
//Added for CJK 
	//Using on the spot way
	XIMCallback     PreEditStartCallback;
	XIMCallback     PreEditDoneCallback;
	XIMCallback     PreEditDrawCallback;
	XIMCallback     PreEditCaretCallback;
	
	PreEditStartCallback.client_data = (XPointer)this;
	PreEditStartCallback.callback = (XIMProc)ImePreEditStartCB;
	
	PreEditDoneCallback.client_data = (XPointer)this;
	PreEditDoneCallback.callback = (XIMProc)ImePreEditDoneCB;
	
	PreEditDrawCallback.client_data = (XPointer)this;
	PreEditDrawCallback.callback = (XIMProc)ImePreEditDrawCB;
	
	PreEditCaretCallback.client_data = (XPointer)this;
	PreEditCaretCallback.callback = (XIMProc)ImePreEditCaretCB;
	
	XVaNestedList preEditAttribute;
	XPoint imePosition;
	XFontSet fs;
	XIMStyle overSpot=XIMPreeditPosition | XIMStatusNothing;
	XIMStyle onSpot=XIMPreeditCallbacks | XIMStatusNothing;
	XIMStyle uppStyle = onSpot;
	char                    **missing_list;
    int                     missing_count;
    char                    *def_string;
	fs = XCreateFontSet(Xdisplay, "-*-*-*-R-Normal--14-130-75-75-*-*", &missing_list,
                               &missing_count, &def_string);
                               
	imePosition.x=imePosition.y=0;
	preEditAttribute = XVaCreateNestedList(NULL,
                                XNSpotLocation, &imePosition,
                                XNFontSet, fs,
                                XNPreeditStartCallback, &PreEditStartCallback,
                        		XNPreeditDoneCallback, &PreEditDoneCallback,
		                        XNPreeditDrawCallback, &PreEditDrawCallback,
		                        XNPreeditCaretCallback, &PreEditCaretCallback,
                                NULL);
                                            
	cw.xic = xim ? XCreateIC(xim,
	                         XNInputStyle, uppStyle,
	                         XNClientWindow, w,
	                         XNFocusWindow, w,
	                         XNPreeditAttributes, preEditAttribute,
	                         NULL)
	             : NULL;
	XFree(preEditAttribute);
	//End of Added for CJK
 
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Previous Topic: How to retrieve current language?
Next Topic: CJK characters can be higlighted as keywords
Goto Forum:
  


Current Time: Sun Apr 28 10:55:21 CEST 2024

Total time taken to generate the page: 0.05300 seconds