최근 출시된 Qt 5.7 에는 새로운 Qt Wayland Compositor API 에 대한 Technical Preview 가 공개되었습니다. 여기에서는 Qt Wayland 기능에 대한 개요와 더불어 개발자 고유의 Compositor 를 만드는 방법에 대한 몇 가지 예제를 제공 할 것입니다.

Wayland는 X Window System을 대체 할 수 있도록 설계된 경량 디스플레이 서버 프로토콜입니다. 특히 임베디드 및 모바일 시스템과 관련이 있습니다. Qt의 Wayland 지원을 통해 UI를 여러 프로세스로 분리하여 견고성과 안정성을 높일 수 있습니다. compositor API를 사용하면 디스플레이 서버에 대한 진정한 사용자 정의 UI를 만들 수 있습니다. 다른 프로세스의 디스플레이 정보를 정확하게 제어하고 고유 한 GUI 요소를 추가 할 수 있습니다.

Qt Wayland는 처음부터 컴포저 API를 포함 시켰지만 이 API는 공식적으로 출시되지 않았습니다. 이제 우리는 API를 재 작성하여 더욱 강력하고 사용하기가 훨씬 쉬워졌습니다.

다음은 임베디드 월드에서 보여준 데모의 스냅 샷입니다: 이것은 런처와 타일링 윈도우 관리자를 포함하는 컴포저이며 순수하게 QML로 작성되었습니다.

 

 

우리는 모든 5.7.x 패치 릴리스에 대해 소스 및 바이너리 호환성을 유지할 계획이지만, Technical Preview 이므로 최종 릴리스 전에 API 에 호환되지 않았던 개선 사항을 추가 할 예정입니다. Qt Wayland Compositor API는 Qt git 저장소의 dev 브랜치에서 활발히 개발되고 있습니다.

Qt Wayland Compositor Technical Preview는 Qt for Device Creation 패키지에 포함될 것입니다. 이 패키지는 Qt for Application Development 바이너리 패키지에 포함되어 있지 않지만 소스에서 Qt를 컴파일 할 때 Wayland 1.6이 설치되어 있는 한 기본적으로 빌드됩니다.

 

Qt Wayland 의 새로운 기능?

> 순수 QML로만 전체 compositor 를 작성할 수 있게 되었습니다.
> 향상된 API : QML 및 C ++ API 모두 작성하기가 쉽고 이해하기 쉽습니다.
> 완전하게 재 작업한 확장 지원 : 몇 줄의 QML 만 있으면 확장 기능을 추가 할 수 있으며 확장 기능을 작성하기위한 강력하고 사용하기 쉬운 C ++ API가 있습니다.
> 다중 화면 지원
> XDG-Shell 지원 : 비 Qt 클라이언트의 연결을 허용합니다.
> 마지막으로 API에서 볼 수 없지만 개발자로서의 삶을 더 편하게 만드는 변화 : 우리는 구현을 간편화했고 Qt Wayland는 표준 Qt PIMPL (Q_DECLARE_PRIVATE) 패턴을 따르고 있습니다.

자세한 내용은 API 설명서를 참조하십시오.

 

예제들

순수 QML로 작성된 완전히 기능적인 (그러나 최소한의) compositor 입니다 :

이것은 Technical Preview에서 pure-qml 예제를 제거한 것입니다. 그리고 정말로 완벽한 compositor 입니다. Technical Preview 에서 위의 텍스트를 복사하여 파일에 저장하고 qmlscene: 을 통해 실행할 수 있습니다.

 

위의 화면을 만들 때 사용한 명령은 다음과 같습니다:

 

Qt Wayland Compositor API는 당연히 데스크탑에도 사용될 수 있습니다. Grefsen compositor (https://github.com/ec1oud/grefsen)는 Qt Company에서 hackathon 프로젝트로 시작했으며 Shawn은 이후에도 계속 개발했습니다.

 

 

C ++ API

C ++ API는 좀 더 방대합니다. Technical Preview 에 포함 된 minimal-cpp 예제는 주석과 공백을 제외하고 195 행이 있습니다. 마우스 또는 키보드 입력을 따로 할 필요가 없습니다. qwindow-compositor 예제는 현재 743 라인으로, 윈도우 이동 / 크기 조정, 드래그 앤 드롭, 팝업 지원 및 마우스 커서를 구현합니다.

이러한 복잡성으로 인해 완전히 새로운 상호 작용 모델을 정의 할 수 있습니다. 우리는 새로운 API 로 이식될 모든 개발자들이 환영할만한 compositor 찾을 수 있는 시간을 벌었습니다.

 

 

이것은 아마도 Qt 로 Compositor 를 구현하는 가장 좋은 방법은 아니지만 어쨌든 코드를 사용할 수는 있습니다.

 

이후에 우리가 해야할 일은 무엇일까요?

API의 주요 부분은 완료되었지만 Technical Preview 의 피드백을 기반으로 일부 수정이 필요합니다.
QTBUG-48646Trello 보드에 자세히 나와있는 몇 가지 알려진 문제가 있습니다.
해결되지 않은 주요 API 문제는 Input 핸들링에 관련한 것입니다.

 

어떻게 해야 할까요?

계속 시도하십시요! Qt 의 방대한 문서를 읽고, 예제를 실행하고, 자신의 프로젝트에서 도전해 보고, 개선 할 수 있는 것에 대한 피드백을 제공하십시오.

 

 

본 문서는 qt.io 의 “New Compositor API for Qt Wayland” 을 번역한 블로그로 의역 및 오역 이 있을 수 있습니다.