2010-05-03 2 views
7

모든 단일 픽셀을 제어 할 수있는 GUI를 구축하고 싶습니다 (GTK +가 제공하는 표준 위젯을 사용하지 않음). Renoise은 제가 생산하고자하는 좋은 예입니다.Linux에서 "픽셀 완벽한"GUI를 구축하는 방법은 무엇입니까?

Xlib 또는 XCB 레벨로 전환하는 것이 가장 좋은 방법입니까, 아니면 GTK + (어쩌면 심지어 PyGTK)와 같은 상위 레벨의 프레임 워크에서이를 수행 할 수 있습니까? 나는 그림을보기 위해 카이로를보고 있어야 할까?

가능하면 Python이나 Ruby로 작업하고 싶지만 C도 좋습니다.

답변

7

Clutter 툴킷 (또는 다른 캔버스 위젯/툴킷)을 사용하면 이러한 인터페이스를 구축 할 수 있습니다. Xlib/XCB 또는 DrawingArea 레벨로 가려는 것은 캔버스에 이미 존재하는 일반적인 기능을 많이 구현해야하기 때문에 권장하지 않습니다.

+0

와우! 깔끔하게 보입니다. 감사 드미트리! * 사용해서는 안되는 이유가 있습니까? – splicer

3

아마도 pygame과 같은 것을 원할 것입니다.

1

GTK와 PyGTK는 아마도 잘못된 도구 일 것입니다. 불가능한 일은 아닙니다. 전체 응용 프로그램을 하나의 큰 것으로 만들 수 있기 때문에 불가능하지는 않습니다. gtk.DrawingArea (예 : Gargoyle이 실제로 적용되는 예입니다.) 복잡한 GUI의 경우 미쳐 버릴 수 있습니다.

1

가장 간단한 용어로, 경계 사각형과 원하는대로 그릴 수있는 무언가가 필요합니다. 이러한 객체는 일반적으로 "캔버스"라고합니다. 나는 (Ruby에서) Fox toolkit을 통해 사용할 수있는 FXCanvas 클래스를 사용하기 전에이 작업을 수행했지만 다른 것들도 사용할 수 있습니다 (wxWidgets, 예를 들어,이 툴킷에 대한 개인적인 경험이 없습니다).

경고. 이와 같이 낮은 수준의 인터페이스는 많은 유연성을 제공하지만 사용자가 더 많은 작업을해야합니다.

5

X에서는이 접근법에 대해 고려하지 않았던 한 가지 문제점이 있습니다. 글꼴 크기는 점 (1 포인트는 1/72 인치)으로 측정되므로 해상도 및 모니터 크기에 따라 (픽셀) 크기가 다릅니다. 텍스트 문자열은 언어에 따라 길이가 다를 수 있으므로 크기가 큰 버튼 등을 결정할 수 없습니다. X 용 공통 GUI 툴킷은이를 염두에두고 설계되었습니다. 그 외에도 GTK를위한 테마 엔진을 작성하여 (위의 Cairo [1] 또는 GDK [2]를 사용하여) 모든 위젯을 정확하게 그려 내고 응용 프로그램이 항상 그 테마를 사용하도록 만들 수 있습니다. 아마도 응용 프로그램이 DPI를 기반으로 기본 글꼴 크기를 (포인트 단위로) 픽셀 단위로 항상 동일하게 설정하는 것도 가능합니다. 물론 응용 프로그램을 변환 할 수 없게 만들 수도 있습니다.

예를 들어 AGAR [4], PicoGUI [5] 및 Guichan [6]과 같은 SDL [3]을 기반으로 한이 픽셀 완벽한 접근법을 사용하는 GUI가 두 개 있습니다. 그들 대부분은 C++과 C 언어로 작성되었으며, 파이썬이나 루비에 대한 바인딩을 갖고 있지 않습니다. 그런 다음 SDL을 사용하면 응용 프로그램 (또는 사용하는 GUI 툴킷)이 다양한 대화 상자 등을 관리하는 고유 한 창을 수행해야 함을 의미하는 최상위 창 하나만 가질 수 있습니다. 그러나 나는 그것이 당신이 어쨌든 의도했던 것 같아요.

[1] cairographics.org/
[2] library.gnome.org/devel/gdk/unstable/index.html
[3] www.libsdl.org/
[4] libagar.org/
[5] picogui.org/
[6] guichan.sourceforge.net/wiki/index.php/Main_Page

+1

정답입니다! – Joshua