2012-06-26 4 views
3

저는 C++에서 매우 간단한 크로스 플랫폼 윈도우 클래스를 개발 중입니다. 그래서 렌더링 할 표면이 있습니다. 지금까지 Linux와 Windows에서 작동하고 있습니다. OS-X에서 작업 한 후에 내 Android 휴대 전화에서 작동하도록하려고합니다.SurfaceFlinger는 어떻게 작동합니까?

그러나 SurfaceFlinger로 만든 모든 "창"이 전체 화면인지 또는 Linux 또는 Windows의 창과 같이 바탕 화면의 일부만 차지할 수 있는지 알고 싶습니다. 나는 내 전화기의 바탕 화면에 위젯을 배치 할 수 있다는 것을 알고 있기 때문에 이것을 묻는다. 그러나 앱이 데스크탑 위에 놓인 팝업이나 프레임 같은 것을 한 번도 본 적이 없다.

전화 해상도보다 작은 "창"을 만드는 것이 어떻게됩니까? 드로어 블 표면을 중심에두고 검은 색 테두리를 남기고 있습니까? 또한 응용 프로그램에 여러 개의 "창"이있을 수 있습니까?

+0

귀하의 질문에 대한 답변이 정확하지 않지만 다음 질문에 대한 다음 답변이 귀하의 이해에 도움이 될 것이라고 생각합니다. http://stackoverflow.com/a/4577249/1427098 –

답변

2

이름에서 알 수 있듯이 Surfaceflinger는 창이 아니라 표면을 처리합니다. 각 창에는 실제로 그릴 수있는 한면이 있지만, 이들은 다른 유형의 클래스입니다. 특정 응용 프로그램 윈도우의 ViewRootImpl (윈도우의 상위 뷰)이 어떤 방식 으로든 생성되거나 변경 될 때마다 WindowManagerService의 재 지정 기능이 호출됩니다. 이제 지루한 세부 정보를 건너 뛰고 WindowManagerService가 서페이스를 만듭니다. 서페이스의 크기는 다양 할 수 있으며 여러 개의 디스플레이를 사용하는 경우 특정 디스플레이에 연결할 수도 있습니다 (아직 구현되지는 않았지만). 이것은 귀하의 질문에 우리를 다시 : - 표면 (원하는 경우 창) 모든 크기의 수 있습니다. 당신이 실제로 언급 한 검은 색 테두리는 현재 창 아래에 배치 된 창에서옵니다 (그리고 검은 색으로 칠 해짐). - 예, 응용 프로그램에 여러 개의 창이있을 수 있습니다 (예 : 대화 상자가 될 수있는 창이 나타남).

위젯의 경우 Launcher (데스크톱 응용 프로그램)가 지원하고 드래그 앤 드롭 동작을 지원하는 방법을 알고 있지만 실제로 새 창인지 여부는 묻지 않았습니다. 따라서 실제로 대답 할 수 없습니다.

0

또한 응용 프로그램에 여러 개의 "창"이있을 수 있습니까? 예, 애플리케이션에 여러 개의 창이있을 수 있습니다. 1. 상태 표시 줄 창 2. 활동 화면 창 3. 탐색 창 4. 대화 상자 등.