GTK-rs 튜토리얼 1강 Hello Gtk
GTK-rs 튜토리얼 1강 Hello Gtk

GTK-rs 튜토리얼 1강 Hello Gtk

날짜
2023년 08월 10일
생성자
ShalomShalom
카테고리
gtk
작성일
2023년 08월 10일
태그
rust
gtk
오늘을 시작으로 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
microsoftUpdated 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: &gtk::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(); }

댓글

guest