본문 바로가기

Developement/C/C++

FLTK 1.3.x 용 Fl_TransBox component

 이 component 는 투명한 Dimming 처리된 배경을 가진 Overlay 화면을 만들기 위해 만든 custom component class source code 로서, Fl_Box 를 상속받아 만들었습니다.


 사용은 간단 합니다.

 일반 Window 또는 Group 등 위에 이 Fl_TransBox 로 만든 component 를 생성 후, invisible 처리 해 놓고.


 만들어진 component 를 보이도록 처리하면 되는데, 이때 Fl_Group 으로 묶어서 처리 하면 좀 더 효과적인 visual 을 만들수 있게 됩니다.



 투명도는 set_alpha( unsgined char a ); 로 지정할 수 있으며, 0 부터 255 사이의 값으로 조절 됩니다. param 으로 넘어 가는 값이 0 이면 투명, 255 에 가까울수록 불투명 해 집니다. 값을 받아 오는 부분은 get_alpha() 로 가능하도록 했습니다.

 주의 점은 이 component 는 실제 PC 용으로 만든 것이 아니므로 parent 객체가 resize 가 가능한 경우 최초 고려 되지 못하게 만든 부분이 있었기에, 추후 추가된 기능으로 resize() 가 있으며, 이를 활성화 하려면 FL_TRANSBOX_SUPPORT_RESIZE 를 선언 해 주어야 합니다. (또는 이 부분을 지우거나)


 최초 인터넷에 떠도는 소스를 보고 만든 것이라 GPL 에 따라 저 역시 소스를 공개 하도록 합니다. class header 부분은 참조만 하시고, 첨부된 파일을 사용하시면 됩니다.


⁄*******************************************************************************
**  A Transparency box control
**  =========================================================================
**  (C) Copyright 2013 , rageworx@gmail.com & rage.kim@gmail.com
**  License: GPL, LGPL
**
*******************************************************************************⁄
#ifndef __FL_TRANSBOX_H__
#define __FL_TRANSBOX_H__

#include <FL⁄Fl.H>
#include <FL⁄Fl_Box.H>
#include <FL⁄fl_draw.H>
#include <FL⁄Fl_Image.H>

class Fl_TransBox : public Fl_Box
{
    public:
        Fl_TransBox(int x,int y,int w,int h, char* l = 0);
        virtual ~Fl_TransBox();

    public:
        void color(Fl_Color c);
        void set_alpha(unsigned char a);
        void set_dragEnabled(bool enabled) { dragEnabled = enabled; }
        void set_displayimage(Fl_Image* aimg) { dispimg = aimg; }

    public:
        unsigned char get_alpha() { return alpha; }

    protected:
        int handle(int e);
#ifdef FL_TRANSBOX_SUPPORT_RESIZE
        void resize(int x, int y, int w, int h);
#endif
        void draw();

    private:
        void fill_buffer();

    private:
        unsigned char*  buffer;
        unsigned char r;
        unsigned char g;
        unsigned char b;
        unsigned char alpha;
        Fl_RGB_Image* img;
        bool          dragEnabled;
        Fl_Image*     dispimg;
        char*         inLabel;

};

#endif ⁄⁄⁄ __FL_TRANSBOX_H__


Fl_TransBox.zip

 이 소스 코드는 재활용, 수정, 재배포 등이 모두 자유 입니다. 변경된 소스 코드 공개도 개인의 의사에 따른 것임을 미리 밝히며, 수정 된 코드는 되도록 공개하도록 하면 좋겠습니다.

 이 소스는 MinGW 4.x 에서 사용되었으며, FLTK 는 1.3.0 에서 사용중인 것이라, 이후 버젼 호환성에 대해서는 장담할 수 없음을 고려 해 주시기 바랍니다.