xorg에서 누적 창을 그리는 방법은 무엇입니까?

xorg에서 누적 창을 그리는 방법은 무엇입니까?

나는 Low Level X Window ProgrammingRoss Maloney의 책을 읽고 있어요. 그는 창을 "제거"할 때 "숨겨진" 내용을 복원하는 스택형 창 시스템의 주요 측면 중 하나에 대해 이야기하고 있습니다.

일반적으로 "뒤에 있는" 콘텐츠가 즉시 표시될 것으로 예상합니다. 그러나 x일부 구현에서는 제공하지만 이는 분명히 구현에서 제공해야 하는 것이 아닙니다 .

이것다른 이름으로 저장그리고백업 스토어서비스가 조금 다릅니다. 저장에서는 창이 매핑되기 전 인스턴스의 서버 메모리를 사용하여 서버에서 창이 매핑된 화면의 내용을 저장합니다.

  1. 서버에서 제공 하지 않는 경우 x클라이언트 측에서 구현해야 합니까?
  2. 일부 일반적인 창 관리자는 스태킹을 어떻게 구현합니까?
  3. 이 기능이 실제로 제공 된다면 xorg"저장"에 특별히 사용할 수 있는 특정 알고리즘이 있습니까? 나중에 사용하기 위해 겹치는 영역의 복사본을 저장하는 방법을 이해하지 못합니다. 특히 여러 개의 겹치는 부분이 있는 경우 =) 내 아이디어는 이미 흥미진진합니다! 이러한 델타를 사용하여 스택을 재구축할 수 있습니까?

그렇지 않은 경우 창을 무작위로 삭제하는 경우 누적된 각 창을 하나씩 다시 그리나요? 위키피디아는 이렇게 말합니다.

스태킹은 가장 뒤쪽과 가장 바깥쪽부터 가장 앞쪽과 가장 안쪽까지 각 창을 하나씩 다시 그려야 하는 상대적으로 느린 프로세스입니다. 많은 누적 창 관리자가 항상 배경 창을 다시 그리는 것은 아닙니다. 일부 응용 프로그램은 출력이 변경될 때 스택을 요청하므로 다른 프로그램에서는 모든 창을 다시 그려야 하는 시기를 감지할 수 있습니다. 재스태킹은 일반적으로 필요에 따라 창을 선택적으로 다시 그리는 창 관리자에 대한 함수 호출을 통해 수행됩니다. 예를 들어 배경 창을 앞으로 가져오면 해당 창만 다시 그리면 됩니다.

추신: 이것이 큰 질문이라는 것을 알고 있지만 몇 가지 지침을 얻는 것이 도움이 될 것입니다.

답변1

둘 다백업 스토어그리고다른 이름으로 저장를 사용하여 창을 만들 때 설정할 수 있는 속성/플래그입니다 XCreateWindow(). 그러나 이는 X11 서버에 대한 힌트일 뿐이며 기본적으로 켜져 있지 않으며 최신 하드웨어에서는 문제를 일으킬 가치가 없습니다.

일반적으로 배경 창(일부)이 표시되면 X11 서버는 ExposeX11 클라이언트에 이벤트를 보내 다시 그려지게 합니다. 이는 단지 힌트일 뿐이므로 클라이언트가 창과 그 위에 열리는 팝업에 설정되어 Expose있더라도 X11 서버는 힌트를 계속 보낼 수 있습니다 ..backing_store = AlwaysCWSaveUnder

XDoesBackingStore()클라이언트가 서버가 백업 저장소를 구현하고 이를 및 아래에 저장하는지 여부를 쿼리할 수 있는 인터페이스도 있습니다 XDoesSaveUnders().

창 관리자는 이 작업과 아무 관련이 없습니다. 창을 다시 그리지는 않습니다(자체 창: 제목 표시줄, 닫기 버튼 제외).

답변2

그렇지 않은 경우 창을 무작위로 삭제하는 경우 누적된 각 창을 하나씩 다시 그리나요?

가장 널리 사용되는 데스크탑은 최신 XCOMPOSITE 확장을 사용합니다. 전체 창 내용은 오프스크린 버퍼로 렌더링되므로 응용 프로그램이 내용을 다시 그릴 필요 없이 컴포지션 관리자에서 사용할 수 있습니다.

이것은 에서 발췌한 것입니다.공식 웹 사이트:

이 확장을 사용하면 창 계층 구조의 전체 하위 트리가 오프스크린 버퍼로 렌더링됩니다. 그러면 애플리케이션은 해당 버퍼의 내용을 가져와서 원하는 작업을 수행할 수 있습니다. 오프스크린 버퍼는 자동으로 상위 창에 병합되거나 컴포지션 관리자라는 외부 프로그램에 의해 병합될 수 있습니다. 컴포지션 관리자를 사용하면 많은 흥미로운 효과를 얻을 수 있습니다.

관련 정보