음악, 삶, 개발
사용자 모니터 크기 가져오기. 본문
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 한다.
참고자료