2013-11-04 3 views

답변

2

xlib에는 애니메이션 또는 깜박임이라는 개념이 없습니다. 타이머를 실행하고 주기적으로 커서를 그리고 지워야합니다.

1

다음과 같은 것을 사용합니다. 이것은 내 프로젝트에서 발췌 한 것입니다. 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); 
} 
관련 문제