xlib로 입력 상자를 구현하려고하지만 깜박이는 커서를 표시하는 방법을 찾을 수 없습니다. 마찬가지로xlib 입력 상자에 깜박이는 커서를 표시하는 방법
다음
어떻게 그것을 할 수 있는가?
xlib로 입력 상자를 구현하려고하지만 깜박이는 커서를 표시하는 방법을 찾을 수 없습니다. 마찬가지로xlib 입력 상자에 깜박이는 커서를 표시하는 방법
다음
어떻게 그것을 할 수 있는가?
xlib
에는 애니메이션 또는 깜박임이라는 개념이 없습니다. 타이머를 실행하고 주기적으로 커서를 그리고 지워야합니다.
다음과 같은 것을 사용합니다. 이것은 내 프로젝트에서 발췌 한 것입니다. http://open.source.sveena.com 누락 된 부분을 완료해야합니다.
// call this periodically
void FlipCaret()
{
if(!s_caretgc)return;
if(s_hidecaret)return;
XACCESSLOCK;
if(!s_caretgc)return;
XFillRectangle(s_caretdisplay, s_caretwindow, s_caretgc, s_caretx, s_carety, s_caretcx, s_caretcy);
XFlush(s_caretdisplay);
s_caretvisible = s_caretvisible ? 0 : 1;
}
// to create and destroy caret
static void s_DestroyCaret()
{
if(!s_caretgc)return;
XACCESSLOCK;
if(s_caretgc){
if(s_caretvisible){
FlipCaret();
}
XFreeGC(s_caretdisplay, s_caretgc);
XFlush(s_caretdisplay);
s_caretgc = 0;
}
}
static void s_CreateCaret(MWND* mwnd, Window w)
{
s_DestroyCaret();
XACCESSLOCK;
s_caretdisplay = mwnd->m_Display;
s_caretmwnd = mwnd;
s_caretwindow = w;
s_caretx = mwnd->Caretx;
s_carety = mwnd->Carety;
s_caretcx = mwnd->CaretCx;
s_caretcy = mwnd->CaretCy;
if(s_caretcx<5)s_caretcx = 5;
if(s_caretcx>20)s_caretcx = 20;
if(s_caretcy<16)s_caretcy = 16;
if(s_caretcy>100)s_caretcy = 100;
XGCValues gcval;
gcval.function = GXinvert;
gcval.fill_style = FillSolid;
if(IsValidXWindow(w, "XCreateGC"))
s_caretgc = XCreateGC(s_caretdisplay,w,GCFunction|GCFillStyle,&gcval);
XFlush(s_caretdisplay);
}