2017-10-06 16 views
-3

GUI 요소에 대해 소스 코드가 어떻게 생겼는지 궁금합니다. 아주 기본 코드가 운영 체제 코드의 일부가 될 것이라고 생각합니까?GUI 소스 코드는 어떻게 생겼습니까?

내가 궁금한 가장 큰 이유는 각 GUI 요소가 얼마나 많은 양의 처리를하는지 알고 싶기 때문입니다. E.G. 각 버튼은 눌렀 음 여부에 관계없이 각 클록주기마다 청취하고 있습니까? 이미지가 GPU와 어떤 차이가 있습니까? 그들은 단지 2D 매트릭스입니까? 매 클록주기마다 업데이트됩니까?

여러 질문에 대해 용서해주세요. 주변을 둘러 보았지만 GUI가 저수준에서 어떻게 작동하는지, 그리고 그 지침이 어떻게 보이는지 알지 못했습니다.

+0

Have it : https : // github.com/GNOME/gtk – ceejayoz

+0

당신은 이것을 지나치게 복잡하게 만듭니다. 픽셀은 로직이 읽고 모니터의 올바른 신호로 변환하는 램의 비트 또는 바이트입니다. 버튼은 단지 픽셀입니다. 그것을 클릭하면 디스플레이 나 픽셀과 아무런 관련이 없습니다. x/y가 계산 된 입력 장치가 소프트웨어가 GUI에 매핑되어 버튼이 소프트웨어가 반응하는 경계 상자를 찾습니다. 필요에 따라 새로운 픽셀을 만듭니다. –

+0

왜 아래 표를 얻었습니까? 이것은 나의 첫 번째 질문입니다. 따라서 질문을 표현할 수있는 더 좋은 방법이 있다면, 나는 건설적인 비판에 감사 할 것입니다. – Shaws34

답변

0

아니요, 괜찮은 GUI는 모든 요소가 마우스 대기 위치와 버튼 상태를 폴링하는 동안 busy-wait 루프에서 반복하지 않습니다.

가장 일반적인 디자인은 물건이 발생할 때 클라이언트 프로세스에 이벤트를 보냅니다. 그들은 사용자 액션에 응답하여 콜백 함수를 기다리고 실행합니다.

일반적으로 실제 및 가상 마우스/키보드와 대화하는 GUI 서버 ("OS"(Windows)에 내장되어 있거나 사용자 공간 프로세스 (Linux의 경우 X 서버)에서 실행 됨)가 있으며 가상 마우스 포인터의 위치/버튼 상태 업데이트.

필요한 경우 사용자가 클릭 한 창을 클라이언트 프로세스에 보냅니다.

클라이언트는 이벤트에 대해 알고 자하는 이벤트를 서버에 등록하고 시스템 호출/GUI 라이브러리 기능을 사용하여 이벤트를 기다립니다. 이는 마치 네트워크 소켓이나 직렬 포트 등에서 데이터를 기다리는 프로세스와 같습니다. X11이있는 Linux에서 문자 그대로 은 소켓 (X 서버와 클라이언트 사이) 인 소켓이며 정확히 동일한 시스템 select, poll 또는 epoll 시스템 호출을 사용하여 네트워크 데이터를 기다리는 것처럼 이벤트를 기다립니다. 사실, 여러 파일 기술자를 기다려 하나의 스레드에서 동시에 둘 다 기다릴 수 있습니다. poll(2)을 참조하십시오. 클라이언트가 이벤트를 가져 오면


, 그것은 이벤트입니다, 이전 버튼을 만들 때 등록 된 콜백 함수를 실행하는 버튼 또는 텍스트 상자 또는 무엇이든 파악.

일부 GUI 시스템에서 클라이언트 프로세스는 서버에 단추에 대해 알릴 수 있으므로 서버는 클라이언트가 정렬하기 위해 모든 마우스 이벤트에 관한 메시지를 보내는 대신 테두리 상자 사각형을 검사합니다.


이미지는 GPU에 같이있어 중요시하는 점은 무엇입니까? 2D 행렬입니까?

예, 다소 차이가 있습니까? 예를 들어 https://www.khronos.org/opengl/wiki/Image_Format을 참조하십시오. GPU 하드웨어 자체는 다양한 너비 (비트 심도)의 RGBA 또는 YUV와 같은 몇 가지 형식으로 이미지를 처리 ​​할 수 ​​있습니다.

매 클럭주기마다 업데이트 되나요?

아니요, 이동하거나 변경하지 않는 경우 아니요!