MF

marc2332/freya

Developer tools

Эта страница переведена автоматически. Технические детали смотрите в оригинале. Открыть оригинал

3,3 тыс. stars Качество 68 Тренд 54MIT

Кроссплатформенная и невеб-библиотека GUI для 🦀 Rust на базе 🎨 Skia.

Обзор

:предупреждение: Недавно я переписал большую часть Фреи в https://github.com/marc2332/freya/pull/1351,, так что основная ветка сильно отличается от последнего стабильного релиза. Модель компонентов Фрейи позволяет создавать повторно используемые элементы интерфейса, которые автоматически перерисовываются при изменении зависимого от него состояния. Компоненты могут сохранять собственное внутреннее состояние или подписываться на общее состояние, а также генерируют UI в качестве выхода. Любой тип, реализующий черту Component, может быть компонентом, а корневый (приложение) компонент может быть просто функцией. Встроенные примеры включают такие компоненты, как Button и Switch. Freya поставляется с набором компонентов из коробки — от простых, таких как Button, Switch, Slider, до более сложных, таких как VirtualScrollView, Calendar, ColorPicker и т.д. Вы можете проверить все примеры, начинающиеся на component_, в папке примеров. Создайте переходы для цветов, размеров, позиций и других визуальных свойств.

Обзор (машинный перевод)

Веб-сайт | Документация | Discord | Контакты

Freya — это кроссплатформенная, нативная, декларативная GUI-библиотека для Rust 🦀.

Использование 📜

Последний стабильный релиз:

Следующий релиз:

main ветвь:

Пробую 🚀

Обязательно подготовьте Development Setup.

⚠️ Этот репозиторий использует подмодули git, клонирование без --recurse-submodules приведёт к тому, что примеры не будут компилироваться.

Уже клонированы без подмодулей? Запустите git submodule update --init --recursive, чтобы получить их.

Затем запустите пример:

⚠️ Если вы находитесь на Windows с windows-gnu и получаете ошибки компиляции, возможно, стоит проверить эту проблему.

Компоненты и состояние

Модель компонентов Фрейи позволяет создавать повторно используемые элементы интерфейса, которые автоматически переотображаются при изменении зависимого от него состояния. Компоненты могут сохранять собственное внутреннее состояние или подписываться на общее состояние, а также генерируют UI в качестве выхода. Любой тип, реализующий черт Component, может быть компонентом, а корневой (app) компонент — просто функцией. Встроенные примеры включают компоненты вроде Button и Switch.

Готовые компоненты

Эта страница переведена автоматически. Технические детали смотрите в оригинале.

README

Показан фрагмент оригинального README. Открыть оригинал.

Freya 🦀

Website | Documentation | Discord | Contact

Freya is a cross-platform, native, declarative GUI library for Rust 🦀.

Usage 📜

Latest stable release:

freya = "0.4"

Next release:

freya = "0.5.0-rc.13"

main branch:

freya = { git = "https://github.com/marc2332/freya", branch = "main" }

Trying it out 🚀

Make sure to have Development Setup ready.

⚠️ This repo uses git submodules, cloning without --recurse-submodules will make the examples fail to compile.

git clone --recurse-submodules https://github.com/marc2332/freya.git
cd freya

Already cloned without submodules? Run git submodule update --init --recursive to fetch them.

Then run an example:

cargo run --example counter

⚠️ If you happen to be on Windows using windows-gnu and get compile errors, maybe go check this issue.

Components & State

Freya’s component model lets you create reusable UI elements that automatically re-render when the state they depend on changes. Components can hold their own internal state or subscribe to shared state, and they produce UI as their output. Any type that implements the Component trait can be a component, while the root (app) component can simply be a function. Built-in examples include components like Button and Switch.

fn app() -> impl IntoElement {
    let mut count = use_state(|| 4);

    let counter = rect()
        .width(Size::fill())
        .height(Size::percent(50.))
        .center()
        .color((255, 255, 255))
        .background((15, 163, 242))
        .font_weight(FontWeight::BOLD)
        .font_size(75.)
        .shadow((0., 4., 20., 4., (0, 0, 0, 80)))
        .child(count.read().to_string());

    let actions = rect()
        .horizontal()
        .width(Size::fill())
        .height(Size::percent(50.))
        .center()
        .spacing(8.0)
        .child(
            Button::new()
                .on_press(move |_| {
                    *count.write() += 1;
                })
                .child("Increase"),
Открыть полный README на GitHub

Рекомендуемые инструменты

Попробуйте другой запрос или уберите фильтр.

Установка

npx skillfish add marc2332/freya
Новичок в MCP? Начните с руководства на mcpskill.org →