Slint là một toolkit GUI mạnh mẽ dùng để xây dựng giao diện người dùng native cho các ứng dụng trên máy tính và nhúng được viết bằng Rust, C++ hoặc JavaScript. Tên “Slint” xuất phát từ những mục tiêu thiết kế của chúng tôi:
- Mở rộng được : Slint nên hỗ trợ thiết kế UI linh hoạt, cho phép sử dụng trên nhiều nền tảng khác nhau và kiến trúc bộ vi xử lý, cũng như hỗ trợ nhiều ngôn ngữ lập trình.
- Nhẹ nhàng : Slint cần yêu cầu tối thiểu tài nguyên, về mặt bộ nhớ và sức xử lý, nhưng vẫn mang lại trải nghiệm người dùng mượt mà, tương tự trên điện thoại thông minh, trên mọi thiết bị.
- Trực quan : Những người thiết kế và nhà phát triển cần cảm thấy hiệu quả trong việc thiết kế và phát triển GUI. Công cụ tạo thiết kế nên dễ sử dụng với những người thiết kế. Tương tự đối với nhà phát triển, các APIs nên được thống nhất và dễ sử dụng, bất kể ngôn ngữ lập trình nào họ chọn.
- Native : Giao diện người dùng được xây dựng bằng Slint nên phù hợp với kỳ vọng của người dùng cuối về một ứng dụng native, không phụ thuộc vào nền tảng – máy tính để bàn, di động, web hoặc hệ thống nhúng. Thiết kế UI nên được biên dịch thành mã máy và mang lại tính linh hoạt mà chỉ một ứng dụng native mới có thể cung cấp: Truy cập đầy đủ các APIs hệ điều hành, sử dụng tất cả các nhân CPU và GPU, kết nối với bất kỳ thiết bị ngoại vi nào.
Chúng tôi mời bạn sử dụng Slint và tham gia cộng đồng của nó.
Tình trạng Hiện tại
Slint đang trong giai đoạn phát triển tích cực. Tình trạng hỗ trợ cho mỗi nền tảng như sau:
- Nhúng : Sẵn sàng. Slint đang được sử dụng bởi khách hàng trong môi trường sản xuất trên các thiết bị nhúng chạy hệ điều hành nhúng Linux và Windows. Thời gian chạy của Slint yêu cầu ít hơn 300KiB bộ nhớ RAM và có thể chạy trên các kiến trúc bộ xử lý khác nhau như ARM Cortex M, ESP32, STM32 từ loại MCU đến ARM Cortex A, Intel x86 từ loại MPU.
- Máy tính để bàn : Đang tiến hành. Mặc dù Slint hoạt động tốt trên Windows, Linux và Mac, chúng tôi đang làm việc để cải thiện hỗ trợ nền tảng trong các phiên bản phát hành sau này.
- Web : Đang tiến hành. Ứng dụng Slint có thể được biên dịch thành WebAssembly và chạy trên trình duyệt web. Vì có nhiều framework web khác, nền tảng web không phải là một trong những mục tiêu chính của chúng tôi. Hỗ trợ web hiện tại chỉ giới hạn cho mục đích trình diễn.
- Di động (Android/iOS): Dự định. Chúng tôi chưa bắt đầu hỗ trợ các nền tảng di động, nhưng chúng tôi dự định làm như vậy trong tương lai gần.
Khả năng tiếp cận
Slint hỗ trợ điều hướng dựa trên bàn phím cho nhiều thành phần giao diện, và giao diện người dùng có khả năng mở rộng. Cơ sở hạ tầng cơ bản cho công nghệ hỗ trợ như các chương trình đọc màn hình đã được đưa vào, nhưng hiện tại cần sử dụng backend Qt. Chúng tôi nhận thức rằng cần làm thêm nhiều công việc để có sự hỗ trợ tốt nhất cho người dùng có nhu cầu đặc biệt.
Các Mẫu thử nghiệm
Trên thiết bị nhúng
Raspberry Pi | STM32 | RP2040 |
---|---|---|
[Video của Slint trên Raspberry Pi][#1] | [Video của Slint trên STM32][#2] | [Video của Slint trên RP2040][#3] |
Trên máy tính để bàn
Windows | macOS | Linux |
---|---|---|
![Ảnh chụp màn hình của Bộ sưu tập trên Windows][#4] | ![Ảnh chụp màn hình của Bộ sưu tập trên macOS][#5] | ![Ảnh chụp màn hình của Bộ sưu tập trên Linux][#6] |
Sử dụng trên web bằng WebAssembly
Mẫu máy in | Trò chơi xếp hình | Máy đo năng lượng | Bộ sưu tập thành phần |
---|---|---|---|
[![Ảnh chụp màn hình của Mẫu máy in][#7]][#8] | [![Ảnh chụp màn hình của Trò chơi xếp hình][#9]][#10] | [![Ảnh chụp màn hình của Mẫu máy đo năng lượng][#11]][#12] | [![Ảnh chụp màn hình của Mẫu Bộ sưu tập thành phần][#13]][#14] |
Bắt đầu
Xin chào Thế giới
Giao diện người dùng được định nghĩa bằng Một Ngôn Ngữ Đặc Thù miêu tả rõ ràng, dễ sử dụng, trực quan và cung cấp một cách mạnh mẽ để mô tả các yếu tố đồ họa, vị trí của chúng, cấu trúc hệ thống, ràng buộc thuộc tính và luồng dữ liệu qua các trạng thái khác nhau.
Dưới đây là “Xin chào Thế giới” bắt buộc:
[[ĐẢO_NGƯỢC_VÌ_MÃ_0]]
Tài liệu
Để biết thêm chi tiết, hãy kiểm tra [[ĐỂ_TRỐNG_VÌ_LINK_0]].
Thư mục ví dụ chứa các ví dụ và thử nghiệm, cho thấy cách sử dụng ngôn ngữ đánh dấu Slint và cách tương tác với giao diện người dùng Slint từ các ngôn ngữ lập trình được hỗ trợ.
Thư mục docs
chứa nhiều thông tin hơn, bao gồm hướng dẫn xây dựng và tài liệu phát triển nội bộ.
Tham khảo tệp README của mỗi thư mục ngôn ngữ trong thư mục api
:
- C++ ([[ĐỂ_TRỐNG_VÌ_LINK_1]] | [[ĐỂ_TRỐNG_VÌ_LINK_2]] | [[ĐỂ_TRỐNG_VÌ_LINK_3]])
- Rust [[ĐỂ_TRỐNG_VÌ_ẢNH_0]] ([[ĐỂ_TRỐNG_VÌ_LINK_4]] | [[ĐỂ_TRỐNG_VÌ_LINK_5]] | [[ĐỂ_TRỐNG_VÌ_LINK_6]] | [[ĐỂ_TRỐNG_VÌ_LINK_7]])
- JavaScript/NodeJS (Beta) [[ĐỂ_TRỐNG_VÌ_ẢNH_1]] ([[ĐỂ_TRỐNG_VÌ_LINK_8]] | [[ĐỂ_TRỐNG_VÌ_LINK_9]] | [[ĐỂ_TRỐNG_VÌ_LINK_10]])
Kiến trúc
Một ứng dụng bao gồm logic kinh doanh được viết bằng Rust, C++ hoặc JavaScript và dạng đánh dấu .slint
của giao diện người dùng, được biên dịch thành mã nguồn gốc.
[[ĐỂ_TRỐNG_VÌ_ẢNH_2]]
Trình biên dịch
Các tệp .slint
được biên dịch trước thời gian. Các biểu thức trong tệp .slint
là các hàm thuần túy mà trình biên dịch có thể tối ưu hóa. Ví dụ, trình biên dịch có thể chọn để “nội suy” các thuộc tính và loại bỏ những thuộc tính là hằng số hoặc không thay đổi. Trong tương lai, chúng tôi hy vọng cải thiện thời gian hiển thị trên các thiết bị cấu hình thấp bằng cách tiền xử lý hình ảnh và văn bản. Trình biên dịch có thể xác định rằng một phần tử Text
hoặc Image
luôn nằm trên đỉnh của một Image
khác ở cùng vị trí. Do đó, cả hai phần tử có thể được hiển thị trước thời gian thành một phần tử duy nhất, giảm thời gian hiển thị.
Trình biên dịch sử dụng các giai đoạn thông thường của trình biên dịch như lexing, parsing, tối ưu hóa và cuối cùng là tạo mã. Nó cung cấp các bộ mã nguồn khác nhau cho việc tạo mã trong ngôn ngữ đích. Trình tạo mã nguồn C++ tạo ra một tệp tiêu đề C++, trình tạo mã Rust tạo mã Rust, và cứ thế. Một trình thông dịch cho các ngôn ngữ động cũng được bao gồm.
Thời gian chạy (Runtime)
Thư viện thời gian chạy bao gồm một bộ máy hỗ trợ các thuộc tính được khai báo trong ngôn ngữ .slint
. Các thành phần với các phần tử, mục và thuộc tính của chúng được sắp xếp trong một khu vực bộ nhớ duy nhất, để giảm việc cấp phát bộ nhớ.
Các bộ kết xuất và kiểu dáng hiển thị có thể cấu hình trong thời gian biên dịch:
- Bộ kết xuất
femtovg
sử dụng OpenGL ES 2.0 để hiển thị. - Bộ kết xuất
skia
sử dụng Skia để hiển thị. - Bộ kết xuất
software
sử dụng CPU mà không cần thêm phụ thuộc.
LƯU Ý: Khi Qt được cài đặt trên hệ thống, kiểu dáng native
sử dụng QStyle của Qt để đạt được giao diện người dùng bản địa.
Công cụ
Chúng tôi có một số công cụ để hỗ trợ phát triển các tệp .slint
:
- Một Máy chủ LSP thêm các tính năng như tự động hoàn thành và xem trước trực tiếp các tệp
.slint
vào nhiều trình soạn thảo. - Nó được gói kèm trong một Tiện ích Mở rộng Visual Studio Code có sẵn từ cửa hàng thị trường.
- Một công cụ slint-viewer hiển thị các tệp
.slint
. Đối số--auto-reload
giúp dễ dàng xem trước giao diện người dùng khi bạn đang làm việc trên nó (khi sử dụng LSP, việc xem trước không khả thi). - SlintPad, một trình soạn thảo trực tuyến để thử cú pháp .slint mà không cần cài đặt bất cứ thứ gì (nguồn).
- Một công cụ cập nhật để chuyển đổi các tệp .slint từ các phiên bản trước sang các phiên bản mới hơn.
- Một người nhập khẩu Figma thử nghiệm.
Vui lòng kiểm tra Tài liệu hướng dẫn chỉnh sửa của chúng tôi để biết mẹo cách cấu hình trình soạn thảo ưa thích của bạn để làm việc tốt với Slint.
#MadeWithSlint
Truy cập https://madewithslint.com để xem một số dự án sử dụng Slint: (Liên hệ chúng tôi hoặc mở một yêu cầu kéo trên https://github.com/slint-ui/madewithslint để thêm dự án của bạn).
Giấy phép
Bạn có thể sử dụng Slint dưới bất kỳ một trong các giấy phép sau đây, theo lựa chọn của bạn:
. Giấy phép miễn phí tác quyền,
. GNU GPLv3,
. Paid license.
Xem thêm Câu hỏi thường gặp về Giấy phép
Đóng góp
Chúng tôi hoan nghênh đóng góp của bạn: dưới dạng mã, báo cáo lỗi hoặc phản hồi.
- Nếu bạn thấy một RFC tag trên một vấn đề, hãy tham gia thảo luận.
- Để biết hướng dẫn đóng góp, xem CONTRIBUTING.md.
Câu hỏi thường gặp
Vui lòng xem FAQ riêng của chúng tôi.
Về chúng tôi (SixtyFPS GmbH)
Chúng tôi đam mê về phần mềm – thiết kế API, phát triển phần mềm đa nền tảng và các thành phần giao diện người dùng. Mục tiêu của chúng tôi là làm cho việc phát triển giao diện người dùng trở nên thú vị đối với tất cả mọi người: từ các nhà phát triển JavaScript, C++ hay Rust cho đến các nhà thiết kế UI/UX. Chúng tôi tin rằng phần mềm phát triển một cách tự nhiên và giữ cho nó mã nguồn mở là cách tốt nhất để duy trì sự phát triển đó. Các thành viên trong đội của chúng tôi đặt tại nhiều vị trí ở Đức.
Cập nhật thông tin
- Theo dõi @slint-ui trên Twitter.
- Theo dõi @slint@fosstodon.org trên Mastodon.
- Theo dõi @slint-ui trên LinkedIn.
- Hãy để ý đến 🥠 Weekly Status Updates của chúng tôi.
Liên hệ chúng tôi
Hãy tham gia Github discussions để trò chuyện chung hoặc đặt câu hỏi. Sử dụng Github issues để báo cáo đề xuất công khai hoặc lỗi.
Chúng tôi trò chuyện trên our Mattermost instance nơi bạn được mời nghe hoặc đặt câu hỏi của bạn.
Tất nhiên, bạn cũng có thể liên hệ với chúng tôi riêng tư qua email tới info@slint.dev.
Thông tin tải về:
Tác giả: slint-ui
Nguồn: https://github.com/slint-ui/slint
Giấy phép: View license