0511 일시적최상단GUI

글 좀 수정한다.
    컬러피커, 스핀박스(에 필요한 리스트) 는
    "IViewport"에 하나면 족하다.

    그냥 뷰포트 기준, 글로벌로 만들어 두고,
        한 오브젝트가 
            "컬러피커 띄워 주세요. dst는 저입니다. 이 함수를 통해 값을 주세요"
            라는 걸 요청 하면?
        컬러피커가 띄워져 있을 동안,
        컬러피커의 RGB값이 콜백을 통해서 전달된다.

        단, (IViewport기준으로 컬러피커가 띄워져 있는데 클릭이 났고, 콜리젼 실패했다면?)
            또는
            ("컬러피커 내려 주세요" 라는 요청이 왔다면)

            -> 이럴 경우에는 그냥 컬러피커 비활성화 하면 된다.

    명심할 것.

        1. "요청하는 형태가 아닌 "평범한 컬러피커" 는
            그냥 뭉탱이로 구현하면 된다 
                // (뭉탱이로, 고정된 스타일로 구현하는 게 핵심이다). 
                //  스타일 바꾸는 건 Theme에서....

        2. "최상단 GUI 요청이 들어왔을 때, 스크린(=뷰포트 크기)을 벗어나면 안 되도록,
            사이즈에 맞춰 적절히 포지션을 조정하자."

        3. 요청을 줄 때, 어느 월드 위치에다가 띄워야 하는지도 명시해야 한다.
            물론 그 위치에 반드시 띄워진다는 보장은 없다. (2)번 조항 때문에.

// ======================================== //

이는 SpinBox, ColorPicker 같이

다른 데를 누르면 바로 사라지지만,
띄우고 아무 짓도 안하면 계속 남아있는 것이며,

"IViewport당 1개만이 띄워질 수 있다."

    -> 이들은 매 프레임마다 
        (포커싱되어있는데 && (추가적으로 띄워진거 기준) 콜리젼실패 
            && focused가 this였다면)
                focused를 nullptr로 바꿀 의무가 있다.
                그리고?????    
                    get_viewport().set_top_object를 nullptr로 한다.

여기서 top_object개념이란, 
    IViewport가 모든 오브젝트들을 다 그린 후에
    그 위에다가 추가적으로 그릴 오브젝트를 뜻하는데,
    IControl* m_top_object에다가 ColorPicker를 넣어 놓으면,

    IViewport가 렌더링 이후에
        virtual IControl::draw_top() const // 가상함수 아님
    m_top_object의 이 메서드를 불러서
        ColorPicker의 draw_top을 실행하고?

    ColorPicker의 draw_top() const override 에서는
        "자신의 월드 rect포지션을 기준으로
            적절한 곳에다가"
        컬러피커 UI를 그리면 된다.