음악, 삶, 개발

Juce 로 만드는 GUI 파트2 : Component 의 paint 함수 본문

개발 공부/Juce 공부방

Juce 로 만드는 GUI 파트2 : Component 의 paint 함수

Lee_____ 2020. 10. 27. 11:16

< 참고 자료 >

 

Graphics Class Reference

Tutorial: The Graphics class


< 들어가기 앞서 >

앞서 우리는 juce::Component 를 상속받아 나의 클래스를 형성하고,

이들간에 부모-자식-관계를 설정하는 법에 대해 배웠다.

이제는 실질적으로 무언가를 그리는 방법에 대해 배울것이다.


< 콜백함수 paintoverride 하기 >

앞서 만들었던 Canvas 클래스를 다시 보자.

class Canvas : public juce::Component {

    public :
        
        Canvas() {
        
            setSize (canvasW, canvasH);
  
        }
        
    private :
        
        const int   canvasW {800};
        const int   canvasH {500};
        
};

 

이 상태로는 아무것도 그리지않은 상태이다.

그림을 그리기위해서는 그림을 그려줄 함수가 필요하다.

juce::Component 는 다음과 같은 가상함수를 가지고있다.

virtual void Component::paint(Graphics& g) // 난 가상함수!

우리는 juce::Component 를 상속받아 Canvas 클래스를 생성했으므로, 이 함수를 사용해야한다.

근데 앞에 virtual 키워드가 붙어있으므로, 호출해서 사용하는것이 아니라 override 해서 정의해야한다.

class Canvas : public juce::Component {

    public :
        
        Canvas() {
        
            setSize (canvasW, canvasH);
  
        }
        
        void paint(juce::Graphics& g) override {
        
            /* 여기서 그림을 그립니다! */
        
        }

    private :
        
        const int   canvasW {800};
        const int   canvasH {500};
        
};

paint 함수는 우리가 호출하는것이 아니라, Juce 가 호출하는 콜백함수이다.

따라서, 이 함수를 어딘가에서 우리 스스로가 호출할 일은 없어야하고,

저렇게 override 해서 함수 내부에서 그림을 그리는 코드를 짜는것이다.

그러면 그림을 그려야할때마다 Juce 가 알아서 paint 를 호출한다.

Juce 에서는 override 해야하는 가상함수들은 전부 콜백함수 (내가 직접 호출하지않는 함수) 이다.

(예를 들어, processBlock 이 있다)


< 이제부터 우리가 집중해야할 부분 : paint 안에서 일어날 일들 > 

이제 무언가를 그리기로 마음먹었다면, 다른 모든것은 잊고,

이 paint 함수안에서 무엇을 할지만을 고민하도록 하자.

void paint(juce::Graphics& g) override {
        
            /* 여기서 그림을 그립니다! */
        
}

< paint 에서 그림을 그리기위해 알아야할 클래스 발견하기 >

paint 에서 그림을 그리는것은 여러 클래스 객체들의 조합이 된다.

juce::Graphics 객체의 멤버 함수를 사용하게되는데,

이때 이 멤버 함수들의 인자가 또다른 클래스들의 객체이기때문이다.

언제나 클래스를 공부할때는, 이 클래스의 멤버 함수들을 보고,

각 함수들의 인자로 넘겨지는 클래스들을 확인하여 같이 공부하여야한다.

다음 포스팅에서 Graphics 클래스를 잘 사용하기위한 다른 클래스들이

무엇이 있는지 살펴보겠다.