GN⁺: ImRAD, ImGui 라이브러리용 GUI 빌더
(github.com/tpecholt)ImRAD
ImRAD는 ImGui 라이브러리를 위한 GUI 빌더임. C++ 코드를 생성하고 파싱하여 애플리케이션에서 직접 사용할 수 있음. ImRAD는 Windows, Linux, MacOS에서 실행 가능함.
특징
ImRAD는 활발히 개발 중이며 주요 특징은 다음과 같음:
-
다양한 창 디자인 지원
- 플로팅 창, 팝업 및 모달 팝업. ImGui 백엔드와 독립적임
- GLFW 통합을 통한 MainWindow. ImRAD는 ImGui 창을 OS 창과 동기화하는 GLFW 호출을 생성함 (제목 표시줄, 크기 조정 가능 플래그, 자동 크기 조정 등)
- Activity. 전체 뷰포트 영역을 채우는 장식 없는 창. 주로 안드로이드 앱에 사용됨
- 일반적인
main.cpp
를 생성하는 GLFW 템플릿 포함 - 일반적인
MainActivity.java
+manifest
+main.cpp
를 생성하는 안드로이드 템플릿 포함
-
다양한 위젯 지원
-
Text
,Checkbox
,Combo
,Button
,Slider
,ColorEdit
등의 기본 위젯 -
Child
,Table
,CollapsingHeader
,TreeNode
,TabBar
등의 컨테이너 위젯 -
Splitter
같은 특이한 위젯 -
MenuBar
및 컨텍스트 메뉴 편집 - 사용자 코드용
CustomWidget
(플레이스홀더)
-
-
SameLine
/Spacing
/NextColumn
을 사용한 레이아웃 생성- 이는 위젯이 항목 간격 및 프레임 패딩을 일관되게 준수하도록 보장함
- 부모-자식 위젯 간의 명확한 관계와 자식 순서가 중요함
-
박스 레이아웃 지원
- ImGui 기능 위에 구현된 강력하고 사용하기 쉬운 레이아웃 메커니즘
- 수평 또는 수직 방향으로 크기 조정 가능한 위젯을 스트레치 가능
- 정렬을 위해 스페이서를 삽입 가능
- 테이블 레이아웃 헬퍼를 사용하여 수평 레이아웃 생성 가능
-
속성 바인딩 지원
- 클래스 변수는 간단한 클래스 마법사 또는 바인딩 대화 상자를 통해 관리 가능
- 속성 바인딩을 통해 생성된 UI는 동적이면서도 동시에 설계 가능
-
이벤트 핸들러 및 기타 지원 코드 생성
- 예를 들어, 모달 대화 상자는
OpenPopup
멤버 함수와 대화 상자가 닫힐 때 호출되는 람다 콜백을 생성함 - 이벤트 핸들러는 사용자 코드와 생성된 부분을 분리하여 디자이너가 계속 작동하도록 함
- 예를 들어, 모달 대화 상자는
-
생성된 코드는 주석 마커로 구분되며 사용자는 추가 코드를 자유롭게 추가 가능
- 종속 팝업 Draw 호출을 하거나 변수를 계산하는 데 사용 가능
- 사용자 코드 콜백을 호출하는
CustomWidget
사용 가능
-
대상 창 스타일은 완전히 구성 가능
- ImGui에서 제공하는 기본 스타일 외에도 사용자가 새로운 스타일을 정의하고
style
폴더에 INI 파일로 저장 가능 - ImRAD는 UI 설계 시 스타일 설정을 따름
- 저장된 스타일은 간단한
imrad.h
함수를 사용하여 애플리케이션에서 로드 가능
- ImGui에서 제공하는 기본 스타일 외에도 사용자가 새로운 스타일을 정의하고
-
생성된 코드는 프로젝트에서 바로 사용 가능하며 ImGui 라이브러리와 하나의 헤더 파일 (imrad.h)만 필요함
- MainWindow 또는 Image 위젯과 같은 일부 기능은 GLFW 종속성이 필요함.
IMRAD_WITH_GLFW
로 컴파일하여 활성화 가능 - 현재 Image 위젯은 stb 라이브러리도 필요함.
IMRAD_WITH_STB
로 컴파일하거나LoadTextureFromFile()
을 제공해야 함 - 인기 있는
fmt
라이브러리에 대한 선택적 지원은IMRAD_WITH_FMT
를 정의하여 활성화 가능. 이는 모든 문자열 속성에 형식 지정 플래그를 사용할 수 있게 함
- MainWindow 또는 Image 위젯과 같은 일부 기능은 GLFW 종속성이 필요함.
-
ImRAD는 열린 파일의 변경 사항을 추적하여 IDE에서 파일을 설계하고 편집할 수 있음
- 자동 저장 기능이 유용할 수 있음
라이선스
- ImRAD 소스 코드는 GPL 라이선스 하에 있음
- 도구에 의해 생성된 코드는 GPL에서 제외되며 오픈 소스 또는 상업 프로젝트에 포함될 수 있음. 사용자가 라이선스를 결정함
-
imrad.h
도 GPL 라이선스에서 제외됨
다운로드
최신 버전은 CMake를 사용하여 저장소를 클론하고 빌드하여 얻을 수 있음. 3rdparty 디렉토리의 서브모듈도 가져와야 함. 다소 오래된 버전은 Releases에서 다운로드 가능함
GN⁺의 정리
- ImRAD는 ImGui 라이브러리를 위한 강력한 GUI 빌더로, 다양한 창과 위젯을 지원함
- 속성 바인딩과 이벤트 핸들러 생성 기능을 통해 동적이고 유연한 UI 설계가 가능함
- 생성된 코드는 프로젝트에서 바로 사용 가능하며, 다양한 종속성을 지원함
- ImRAD는 활발히 개발 중이며, 사용자가 자유롭게 스타일을 정의하고 저장할 수 있음
- 비슷한 기능을 가진 다른 프로젝트로는 Qt Designer와 Dear ImGui가 있음
Hacker News 의견
- 이 프로젝트의 가장 놀라운 부분 중 하나는 C++의 하위 집합을 처리하는 핸드롤드 파서를 단일 헤더 파일로 구현한 것임
- dear-imgui의 창시자가 "dear"로 명명했다고 했으므로 "Dear library"라고 불러야 함
- IMGUI는 즉시 모드 GUI를 의미하며, 창시자는 다른 IMGUI인 "simgui"에서 영감을 받았다고 함
- Visual Basic에 대한 향수가 느껴지지만, 이것은 imgui의 케이크 위에 아이싱을 얹은 것 같음
- wasm html5 앱으로 브라우저에서 GUI를 빠르게 만들고 결과를 편집기에 복사하여 붙여넣는 것도 멋질 것임
- 이 도구는 C++ 코드를 생성하고 파싱하여 애플리케이션에서 직접 사용할 수 있음
- 지난 몇 년 동안 ImGui C++ 앱을 작업해왔는데, 이 도구가 많은 시간을 절약해 줄 수 있었을 것임
- pyimgui 바인딩을 사용할 때, 생성된 C++ 코드를 Python에서 사용할 수 있는지 궁금함
- 왜 ImGui 자체에 GUI 빌더가 구현되지 않았는지 궁금함
- ImGui로 프로젝트를 작업하면서 이런 도구가 있으면 좋겠다고 생각했는데, 꼭 시도해볼 것임
- Steam은 인기 있는 크로스 플랫폼 시스템인데, 비게임 애플리케이션이나 엔터프라이즈 애플리케이션에도 사용할 수 있을지 궁금함
- 너무 많은 sudo 명령이 있는 것 같지만, 전체적으로 매우 멋져 보임