FLTK 내에서 Fl_Group 간 페이지 전환 애니메이션을 구현한 소스를 공개 합니다. 같은 크기의 Fl_Group 만을 테스트 한 것이라 분명 다른 크기를 사용하면 버그가 발생 할 것으로 보이며, JUSTSHOW 에 대해서도 아직 테스트가 되지 않은 점을 고려해서 사용해 주시면 좋겠습니다.


 소스는 아래에서 받아서 사용하실 수 있으며, FLTK license 와 MIT License 제한이 있습니다만, FLTK 사용했다와, 원래 저작자 소스 표시등을 어디에든 하면 상용이던 뭐던 제한없이 사용할 수 있습니다.

Fl_GroupAniSwitch_version01.zip


사용 방법은 다음과 같이 구현 하시면 되고, WaitForFinish() 는 내부에서 Fl::wait( 10 ) 을 호출 하므로, Thread 내에서 그리실 때엔 다른 구현이 필요 할 수 있음을 고려 해야 합니다.


Fl_GroupAniSwitch* testswitch 
= new Fl_GroupAniSwitch( mainWindow,
                         grpViewer,
                         grpOverlay,
                         Fl_GroupAniSwitch::ATYPE_RIGHT2LEFT,
                         false,
                         5000 );

testswitch->WaitForFinish();

delete testswitch;


 클래스를 만듦과 동시에 애니메이션이 시작 되므로, 함수내에서 이를 생성하고 사용하고, 기다리는 시점을 잘 조정 해야 합니다.

 인자는 다음과 같습니다.

Fl_GroupAniSwitch( Fl_Group* host, Fl_Group* src, Fl_Group* dst, 
                   AnimationType anitype, bool autoHide, unsigned ms );

 

host 는 보통 Fl_Window 나 Fl_Double_Window 를 지정합니다.

또한 src 와 dst 는 각각 Fl_Group 으로 hide 되어 있거나 한 것을 보여 지게 디자인 해 두면 되며, 이 class 사용시, dst 가 hide() 되어 있으면 자동으로 show() 처리 합니다. 이때 최종 애니메이션 종료 후 AnimationType 에 따라 src 나 dst 가 자동으로 hide() 되게 하려면 autoHide 에 true 를 넣어 주면 됩니다.

ms 는 애니메이션이 그려지는 시간을 ms 단위로 처리 하며, 보통 GUI 크기에 따라 3000 이나 5000 정도가 적당 합니다.


소스에 대한 질문이나 개선점은 얼마든지 feedback 을 받습니다.

감사합니다.

Posted by 견족자K rageworx