Главная цель новичка - уметь рисовать круг

Если стоит задача уметь рисовать круг, то есть варианты: Основной на Linux/X11, допустимо-альтернативный на Windows 11, в крайнем случае на Linux/Wayland.

Для того, чтобы сделать приложение типа Xournal++ или Sticky Notes, работающее с электростатической ручкой, графическая библиотека Rust должна поддерживать абстракции как для самого пера, так и для подходящих контролов (типа Ribbon или как там сейчас модные тулбары называются, выбора цвета из палитры и т.п.).

Ещё было бы неплохо иметь поддержку ввода иероглифов и их распознавание, но это, понятно, уже не совсем к графической библиотеке относится, а к распознаванию рукописного ввода.

Вопрос не очень понял??
В “идеале”, который пока не достижим, хочется взять абстрактное АПИ (пусть gui или еще что), которое делает одно и тоже на любой плафторме (хотя бы 3-х основных - Win, linux, Macos).

А реале, известен мне например проект на Rust, в котором сделана попытка объеденить кучку разных BlueTooth/BLE либ, соединить их под единым API-зонтиком, чтобы использовать единообразно. Для какого-то функционала это вполе получается, а для некоторых частей плохо, т.к. “покапотный” функционал реализован по разному.
Но это не проблема раст-а, а разнородности платформ.

Это менее основная платформа (для tablet-компьютеров), чем, скажем, Android.

На самом, как-то очень сложно понять что ты в итоге хочешь) Просто нарисовать круг миллион способов есть для разных контекстов. Тебе в итоге именно для gtk-rs пример нужен?

У меня рабочая среда Mate поверх XOrg. gtk-rs, наверное, был бы в ней наиболее нативен. Но в принципе мне Rust не нужен. Потому что я не понимаю, зачем он.

Ну да, если тебе просто надо написать десктопное приложение со сложным UI, то C# для этого правда вполне подходящим выбором может быть. В постановке задачи раст как-то не очень напрашивается и раз ты сам к нему энтузиазма не питаешь, похоже, то вполне имеет смысл смотреть на другие (более привычные или мейнтримные) инструменты.

Черт. Это объясняет, почему тема изначально была создана в оффтопик разделе. :smiley:
Видимо, зря пернеес в Тех.вопросы, извиняюсь.

Если бы пришедший человек увидел, как начать решать свои задачи, он бы может быть попробовал бы. Поэтому и нужны туториалы. А лично я подожду лет двадцать, и когда появятся учебники для начинающих, как сейчас появились по питону, тогда и начну пробовать.

А лично я подожду лет двадцать, и когда появятся учебники для начинающих, как сейчас появились по питону, <…>

В смысле просто по языку Rust? А чем тебя не устраивает гора уже существующих учебников по Rust для новичков и среднячков? На любой вкус же понаписали:

Мне нужно, чтобы мне посоветовали одно название одной книжки с одним автором, в которой написано конкретно про круг на Gtk+ под Linux. Можно с указанием диапазона страниц. Самостоятельно пока не получается её найти.

Подойдёт ли книжка с кодом на си в которой будет объясняться как это сделать?

Я в своё время совершенно не страдал от того что в большинстве книг и туториалов код на C/C++, спокойно переносил его на дельфи (это было очень давно :)).

Более того, читать книгу с сишным API и переносить на другой язык в соответствии с документацией в том числе способствует лучшему освоению языка, чем тупое копирование листингов из книги

про кружок не знаю, но про то как писать гуй приложения тут инфа присутствует, по кружку как вариант после прочтения можно разобраться самостоятельно, почитав доку по gtk

Мой порядок действий был бы следующий:

  1. Найти любую книжку по gtk, желательно на си
  2. Пройти примеры в этой книжке, перенося код на раст “по подобию”
  3. Разобраться к этому моменту с сишной и растовой докой по gtk, начинать экспериментировать самостоятельно

Ждать, что на любую вашу прихоть появится книга просто бессмысленно. И язык тут не причём вообще. Пример с кружком это слишком специфичный пример из очень специфичной книги на языке X. Я точно так же могу найти пример в книге по расту, для которого никогда не найдётся книги на этом языке X

6

1 лайк

Боюсь что да, прям покрывающей именно это книги нет. :slight_smile:

Как @madwareru выше написал, имеется много учебников по самому расту и документация по gtk (в основном родная сишная, но немного и уникальной для раст привязок; они даже вон книгу свою пробовали начать писать, ого).

Цель состоит просто в том, что бы нарисовать круг в cairo, правильно понимаю? Вроде в сети не мало ресурсов про введение в эту тему есть и tldr такой, что нужно создать cairo контекст и в нем вызвать arc с желаемыми параметрами.


Вот накидал по-быстрому на основе вопроса выше какой-то минимальный пример чисто про круг в cairo, держи:

// Cargo.toml:
// [package]
// name = "gtk-circle"
// version = "0.1.0"
// edition = "2021"
//
// [dependencies]
// gtk = "0.15.1"
// cairo-rs = "0.14.9"

use std::f64::consts::PI;

use gtk::{cairo, traits::{ContainerExt, GtkWindowExt, WidgetExt}};

fn main() {
    gtk::init().expect("gtk init error");

    let window = gtk::Window::new(gtk::WindowType::Toplevel);
    window.set_default_size(500, 500);

    let area = Box::new(gtk::DrawingArea::new)();
    area.connect_draw(move |_, ctx| draw(ctx));
    window.add(&area);
    window.show_all();

    gtk::main();
}

fn draw(ctx: &cairo::Context) -> gtk::Inhibit {
    ctx.scale(500.0, 500.0);
    ctx.set_source_rgb(1.0, 0.0, 0.0);
    ctx.arc(0.5, 0.5, 0.5, 0., PI * 2.0);
    ctx.fill().expect("draw error");
    gtk::Inhibit::default()
}

1 лайк