0511 (중요) 팝업GUI 해답 UILayer의 구현

UILayer의 구현?

"업데이트는 먼저, 렌더링은 나중에"

"IViewport::m_root_object를 default layer라고 간주하고, 
    선택적으로 레이어를 추가할 수 있음."

"UILayer는 자신이 속한 IViewport의 std::list<UILayer*> 들 안의
    자신의 순서를 맨 위로 올려달라고 IViewport에게 요청할 수 있음."

    -> 예를 들면 추적하고 있던 Panel이 포커싱 된 경우,
        m_owner.request_make_top_layer(this) 를 해주면?
        그 팬널이 맨 위에 오게 된다.

        그리고 팬널은 m_focused_obj로
            "유지되면 안된다!!!!!"
        (여기서 팬널은 "마우스로 드래그 할 수 있는 IControl상속"이라는 뜻으로 쓰임)

        팬널은 "드래그 할 때만!!!! m_focused_obj가 되는 거다!!"
        팬널 포커싱을 유지해 버리면
            "팬널 밑에 달린 버튼들이 감지가 안된다!!!"




class UILayer {
private:
    IViewport& m_owner;
    IObject* m_root_object = nullptr;
public:
    void update() { m_root_object->update(); }
    void draw()const { m_root_object->draw(); }
}

void IViewport::update() {
    // TODO : 업데이트는 가장 위에 있는 레이어부터 해야 한다.
    for (auto riter = m_layers.rbegin(); riter != m_layers.rend(); ++riter) {
        layer->update(); // 여기서 m_focused가 먼저 쟁취될 수 있다.
    }

    m_root_obj->update();
}

void IViewport::update() {
    m_root_obj->draw();

    // TODO : 렌더링은 default layer이후부터 순방향으로 해야 한다.
    for (const auto& layer : m_layers) {
        layer->draw();
    }
}