FLTK 에 없다 싶이 한 기능 중 하나가, 바로 애니메이션 처리 입니다. 요즘 GUI 대세를 보면 뭔가 간단한 애니메이션이라도 집어 넣어 만드는게 예의가 아닌가 하는 바람으로 가칭 Fl_GroupAniSwitch() 라는걸 만들어 보고 있습니다.

 FLTK 특성상, 배경이 안그려 지는 것들을 감안해서 Fl_Group 중, 가려지는 것에 대해 offscreen 으로 이미지를 그린 다음, 이것을 Bilinear 로 10%로 줄였다가 다시 원래 크기로 Bicubic Filter를 적용해서 그리면 보통 우리가 아는 Blurred background 가 됩니다. 현재 제가 만들어 쓰는 fl_smimg 가 OpenMP 를 적용해서 돌기 때문에 1080p 정도의 이미지는 얼마 걸리지 않는 시간 내에 처리가 가능한 관계로, 매우 이쁜 UI 를 만들수 있지 않을까 합니다만 ... 아직 어디선가 메모리 누수가 있는 관계로 약간의 디버깅 중 입니다.


 가칭 Fl_GroupAniSwitch() 가 가진 기능을 나열 해 보면 이와 같습니다.

  • Fl_Group A 에서 B 간의 이동을 페이지를 넘기듯이 표현 해 줌.
  • Blurred backgroud 를 만들어 애니메이션 뒤에 표시를 위해,
  • 원본 Fl_Group 이전에 임시로 Blurred 된 영역 표시를 위해 Fl_Group 하나와 Fl_Box 를 넣어서 이동.
  • 애니메이션이 끝나면 이를 삭제함.

 현재 위 구현은 아래 처럼 되어 있습니다, 사용은 간단하게 !


if ( grpOverlay->visible_r() == 0 )
{
    Fl_GroupAniSwitch* testswitch
    = new Fl_GroupAniSwitch( mainWindow->clientarea(),
                             grpViewer,
                             grpOverlay,
                             Fl_GroupAniSwitch::ATYPE_RIGHT2LEFT,
                             false,
                             5000 );

    testswitch->WaitForFinish();
    delete testswitch;
}
else
{
    Fl_GroupAniSwitch* testswitch
    = new Fl_GroupAniSwitch( mainWindow->clientarea(),
                             grpViewer,
                             grpOverlay,
                             Fl_GroupAniSwitch::ATYPE_LEFT2RIGHT,
                             true,
                             5000 );

    testswitch->WaitForFinish();
    delete testswitch;
}

 메모리 누수를 해결 하고 나면 간단히 가칭 class 를 c++ 소스로 올려 공개 하겠습니다. 혹시라도 FLTK 로 GUI 를 만드시는 분들 중, 하나의 윈도우 내에서, 부드러운 페이지 전환 처럼 애니메이션을 추가 해 보고 싶다면 사용하시는데 꽤 어렵지 않은 편리한 도구가 될 수 있어 보입니다.


_ps_

메모리 누수가 해결 된 상태가 되어, 64bit 로 구동되는 windows exe 예제를 추가 합니다.

fltk_page_animation.7z


이미지 뷰어를 실행 한 다음, 키보드 상에 'T' 를 누르면 전환 테스트가 진행 됩니다.

Posted by 견족자K rageworx