음악, 삶, 개발

사용자 모니터 크기 가져오기. 본문

개발 공부/Juce 공부방

사용자 모니터 크기 가져오기.

Lee_____ 2020. 9. 25. 02:57

Max 에서는 screensize 라는 오브젝트가 있는데,

Juce 에서는 Desktop 이라는 클래스를 통해 얻어와야한다.

조금은 복잡하다. 

const auto userMonitor = juce::Desktop::getInstance().getDisplays().getMainDisplay().totalArea;

DBG(userMonitor.getWidth());    // 2560
DBG(userMonitor.getHeight());   // 1600

일단 juce::Desktop::getInstance() 함수로 Desktop instance 를 얻고,

이 instance 에 다시 getDisplays() 를 호출하여 디스플레이"들" 을 얻고, (모니터가 여러대 일수도있으므로)

이중 사용자의 주요 디스플레이를 getMainDisplay() 로 호출하고

다시 totalArea 메소드를 호출하면 Rectangle<int> 객체를 return 한다.

정리하면

 

Desktop -> Displays -> Display -> Rectangle<int> 순이다.

 

수정! : 더 쉬운 방법이 있었다!)

auto m = getParentMonitorArea(); 
auto w = getParentWidth();
auto h = getParentHeight();

DBG(m.getWidth());  // 2560
DBG(m.getHeight()); // 1570
DBG(w);             // 2560
DBG(h);             // 1570

const auto userMonitor = juce::Desktop::getInstance().getDisplays().getMainDisplay().totalArea;
DBG(userMonitor.getWidth());    // 2560
DBG(userMonitor.getHeight());   // 1600

Component 클래스 안에 정의되어있는 편리한 함수가 있었다.

getParentMonitorArea() 를 하면, 부모가 더 이상 없는 main editor 는 사용자 모니터 크기를 return 한다.

하지만 결과가 Desktop 클래스를 이용하는것과 살짝 달랐는데,

Desktop 클래스는 실제 모니터 크기를 얻을수있는 반면,

getParentMonitorArea() 는 Mac 에서 doc 이나, 윈도우 화면의 작업표시줄같은 부분은 제외를 한다.

그래서 높이가 getParentMonitorArea 를 사용했을때 작업표시줄을 제외해서 더 작게 나타난다.

편리성을 생각하면 getParentMonitorArea() 가 좋고 또한, 내가 사용자가 플러그인을 연 디스플레이의

크기를 자동적으로 가져와준다.

위의 빨간줄을 해석하면, 모니터가 한대인 경우 이 모니터의 사이즈를 return 하고,

여러대인 경우 이 component 의 중앙을 포함하는 모니터를 return 한다.


참고자료

 

Desktop 클래스

Component 클래스