오늘을 시작으로 Gtk를 1강부터 설명을 차근차근 같이 알아보는 시간을 가질 겁니다
Gtk는 우리가 흔히 사용하는 객체 지향 언어인 C++이나 자바가 존재하기 전부터 있었던
GUI라이브러리
입니다gtk는 C에서 객체지향 언어의 성격을 띄게 해줄 수 있는
Glib
라이브러리를 바탕으로 만들어졌는데요따라서 객체지향언어가 아닌 Rust에서도 바인딩이 비교적 많이 되어있는 gui 프레임워크입니다
gtk는 현재 많이 쓰이고 있는 버전이 3버전과 4버전이 있습니다
우리는 현재 안정성이 검증되어있는 3버전을 기반으로 튜토리얼을 진행할 예정입니다
튜토리얼 개발환경
윈도우 10/11
VisualSturdio 2019
- C++를 이용한 데스크톱 개발
meson
ninja
C++를 이용한 데스트톱 개발을 설치하는 이유는
눈치채신 분들도 계시곘지만 gtk은 windows 환경에선 winapi를 이용하여 위젯을 만듭니다
리눅스 환경에서는 x11이나 wayland를 사용하겠죠?
설치
gtk는 설치하는 방법이 크게 3가지가 있습니다
vcpkg를 이용하는 방법
vcpkg
microsoft • Updated Apr 29, 2024
위 사이트에서 vckpkg를 설치한 후
vcpkg install gtk:x64-windows
위의 명령어를 입력합니다
그리고 다음 경로를 PKG_CONFIG_PATH에 추가해 줍니다
C:\codes\vcpkg\installed\x64-windows\lib\pkgconfig
Msys
Atins gtk-rs 직접 빌드 (추천)
현재 제가 다니고 있는 회사에서 gtk를 windows에서 직접 빌드가 가능하게 만든 repo가 있습니다
아래의 내용을 따라 진행하시면 됩니다
GTK를 설치하기 앞서 필요한 의존 패키지 및 도구를 설치한다.
Atins GitHub의 저장소를 클론하려면 SSH agent 설정 및 키 등록이 필요하다.
관련 작업을 사전에 하지 않았다면 링크를 참고하여 설정한다.
참고) 빌드된 바이너리 위치
Libpng 설치
gtk 빌드에 필요한 libpng 패키지를 클론하고 빌드 및 설치한다.
git clone https://github.com/atins-dev/libpng cd libpng meson build --prefix C:\deploy ninja -C build install
SASSC 패키지 빌드
SASSC 패키지를 아래 가이드를 따라 빌드하고 빌드 결과물인
sassc.exe
파일을 C:\deploy\bin
위치에 저장한다.Adwaita Icon 설치
Windows 플랫폼에서 Adwaita 테마의 아이콘의 빌드 문제가 있어서 직접 Icon을 설치해준다.
아래
Adwaita.zip
파일을 다운로드 및 압축을 해제하고, share
폴더를 C:\deploy
아래로 복사한다.환경 변수 설정
빌드 결과물의 경로(C:\deploy라면) 아래의
C:\deploy\lib\pkgconfig
위치를 PKG_CONFIG_PATH
환경 변수를 생성하여 추가한다. (시스템 환경 변수 편집
→ 사용자 변수 항목의 PKG_CONFIG_PATH
변수 편집 → 경로 추가)PKG_CONFIG_PATH=기존경로;C:\deploy\lib\pkgconfig
GTK 빌드 및 설치
x64 Native Tools Command Propt for VS 2019를 실행하여 아래 단계를 수행한다.
Windows 빌드 이슈를 개선한 Atins GitHub의
gtk
fix_3.24.34
브랜치를 클론한다.GTK 폴더로 이동하여 아래 명령으로 빌드 및 설치한다.
git clone git@github.com:atins-dev/gtk.git cd gtk meson build --prefix C:\deploy ninja -C build install
Rust
이제 본격적으로 rust에서 gtk를 사용해 봅시다
다음 명령어를 통해 새로운 프로젝트를 만듭니다
cargo new --bin gtk-tutorial cd gtk-tutorial
Cargo.toml
의존 라이브러리에 다음을 추가합니다
[package] name = "gtk-tutorial" version = "0.1.0" edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] gtk = { version = "0.17", featuers = ["v3_24"] } # 추가
main.rs
다음 코드를 입력 후 실행해 봅니다
use gtk::prelude::*; fn build_ui(application: >k::Application) { let window = gtk::ApplicationWindow::new(application); window.set_title("First GTK+ Program"); // 타이틀 이름을 지정 window.set_border_width(10); // window의 두께를 지정 window.set_position(gtk::WindowPosition::Center); // 창이 떴을때의 위치 window.set_default_size(350, 70); // 창의 크기 let button = gtk::Button::with_label("Click me!"); // 버튼 인스턴스 생성 window.add(&button); // 생성한 버튼을 윈도우에 추가 window.show_all(); // 윈도우 띄우가 } fn main() { // 어플리케이션 인스턴스 생성 let application = gtk::Application::new(Some("com.gtk-tutorial"), Default::default()); // 어플리케이션이 활성되었을 때 이벤트연결 application.connect_activate(build_ui); // 어플리케이션 실행 application.run(); }
댓글