Anton
крутить в ивентлупе? Но как? Какие подходы и тд
Anton
вот почему петухи пишут на жс
Содай свой qml поверх rust ядра отрисовки =)
Anton
по идее можно спиздить из js подходы с requestAnimationFrame в цикле
Anton
и затрахать базовый tween с транзишинами в отдельный тред
Anton
но тут стоит другая проблема
Anton
для каждой анимашки или компонента свой тред открывать чтоле?
Anton
И можно ли (если да то как) захуярить все транзишены с анимациями всех элементов в один ивентлуп
Anton
Смотри
Anton
пиздить идею с keyframes css3 считаю скамом, он очень убогий, и не поддерживает состояния, хочу захуярить базис с транзишенами в коде, и оболочку с поддержкой стейта
Anton
А если сделать так - у тебя есть евент луп - ты мередаешь ему ROOT вьюху
Anton
let app = App::new(); let view = new View(); app.run(&new);
Anton
Содай свой qml поверх rust ядра отрисовки =)
не, я решил что сделаю изначально стили аля react-native стили, чистый css с каскадированием - считаю не нужно, это слишком да и дюже большое и имеет много не нужных вещей сделанных онли фо веб
Anton
Anton
let app = App::new(); let view = new View(); app.run(&new);
теперь если ты хочешь добавить виджет ты должен назначить ему парента
Anton
let child = View:new(); child.set_parrent(view);
Anton
ну сейчас в эксперименете так и делается, нельзя не иметь родителя вне глобального контекста вьюхи окна
Anton
или наоборот
Anton
view.add_child(child);
Anton
а там уже все присвоится
Anton
дак так и делается)
Anton
вопрос с анимациями у меня открыт
Anton
Ну в чем проблемма?
Anton
У тебя отрисовщик по виджетам строит карту, потом "трейсишь"
Anton
ну я описал же, я хочу сделать хелпер либу сразу для простых анимаций трансформацмионных, аля: let view = View::new(); let animation = Animation::new(&view) .to(style! { top: 100, left: 100 }, Transition::Ease) .delay(200) .to(action! { rotate: 90deg infinity }, Transition::EaseInOut) .run() animation.to(...) // Следующая идерация или действие от текущего состояния
Anton
Но я не знаю как это крутить, в основном треде UI эвентов? Создать тред для анимаций? Если создавать тред - то как мне создать тред единый для всех анимаций?
Anton
Для каждой вьюхи свой тред с анимациями это слишком
Vladimir
Фьючи
Anton
а как сделать единый для всех - хуй знает, ибо где тогда контекст этого треда? Откуда он берется? Или я должен хранить во вьюхе контекст этого треда который эта вьюха берет из глобального контекста?
Anton
Фьючи
какого хуя одно слово то? Разжуй пожалста полностью идею
Anton
Внутри евентлупа у тя будет tokio
Vladimir
какого хуя одно слово то? Разжуй пожалста полностью идею
Ты уже дизайнишь своё говно, или это поверх гктшного?
Anton
И очередь, куда помещаются фючи на anim
Anton
Ты уже дизайнишь своё говно, или это поверх гктшного?
свое дерьмище, уже начало чтото в голове нормально в кусочки собираться, начал думать о деталях - эксперименты пока норм идут
Vladimir
Ты хочешь чтобы анимация меняло состояние вьюхи шоли?
Vladimir
Зачем в анимаху контекст вьюхи
Anton
И очередь, куда помещаются фючи на anim
тоесть: - в глобальном контексте App я храню инстанс реактора в другом треде в запущенном цикле - Во вьюхи закидываю RefCell-ы на этот реактор контекст - Импортирую чистый как слеза модуль анимаций, в билдере передавая вьюху, он берет из нее ссылку на ивентлуп токио - когда запускается анимация новая - он запускает фьючу в реакторе из ссылки, включая все ништяки типо delay - и так можно в одном реакторе крутить все анимации каждой вьюхи
Anton
Так?
Loyd
Правда хз, есть ли CLS для раста
Anton
Зачем в анимаху контекст вьюхи
она будет управлять параметрами стилями этой вьюхи, плюс забирать контекст реактора для запуска анимашки
Loyd
там можно импортировать готовый инстанс как модуль
Ну и чем это тебе отличается от модуля со статиком?
Anton
Но Arc ссылку на вьюху тебе нужно будет
Anton
Вы посоны если чото говорите, поясняйте ну, я не ванга и раст на все сто не знаю
Anton
и тишина
Anton
ну блэт
Anton
Пишу
Anton
Свое виденье
Anton
Итак анимация прилетела вьюха из угла (0, 0) в кординаты (100, 100) и увеличилась с (0, 0) до (200, 200) Добавить какой нить StateMachine (sm) sm.set_frame_rate(60); // Чтобы обеспечить плавную анимацию sm.add_transition_move(Arc(View), 100, 100, 1000ms); // 1sec sm.add_transition_resize(Arc(View), 200, 200, 1000ms); // 1sec Для move // anim_time = 1000 step = anim_time / frame_rate; // 16.6 // x_aim, y_aim - конечный размер (100, 100) x_step = x_aim / anim_time * step; y_step = y_aim / anim_time * step; loop 1 .. (frame_rate - 1) { view.x += x_step; view.y ~= y_step; sleep(step) } view.x = x_aim; view.y = y_aim;
Oleg
я не настоящий пацан, но насколько геморно сделать ну типа по-фпшному, как будто есть enum WithContext <Ctx, R> { ...} impl <Ctx, R> Fn(Ctx) -> R for WithContext <A, R> impl <Ctx, R: Future> for WithContext <A, R>{ pub fn map(...) pub fn and_then(...) pub fn filter(...) pub fn product(...) pub fn pure(...) }
Oleg
и какой-нибудь там do-notation macro прикрутить к этому
Anton
Стейтмашина внутри себя может сожержать tokio или ссылку на канал другого треда, анимация может выполнятся во фьюче или отдельном треде
Anton
стейтмашина только изменяет пропсы, отрисовкой занимается ui тред, и сколько он успеет отрисовать - это его проблема, он может отрисует 10 кадров в секунду, нас это не волнует, мы меняем свойства плавно
Anton
имхо мне кажется это более гемморно
Anton
в твоем варианте Anton у нас получается проблема с тредом
Anton
тоесть в твоем варианте простой выход - по треду на вьюху
Anton
ну это большой оверхэд на ожидание
Anton
а пилить свой костыль для работы с эвентлупом который ожидает на каждую вьюху действие тоже неоч
Anton
фпс все время будет 60, тут уж свои костыли с заготовкой "а когда же оно ебнет" да и к тому же с своей костыльной реализацией delay и duration
Anton
ну это както слишком цветное и страшное
Anton
вот
Anton
судя по примеру создание цикла куда хуячить то?
Anton
Чтобы не лочило отдельный тред, или я чот не шарю?
Anton
как ему тогда извлекать состояния по срезам времени?
Anton
Слип там для выравнивания
Anton
можно сделать без слипа
Anton
1 тред на все анимации
Anton
мммм, ну хз хз, по моему лучше в этом варианте реально заюзать реактор токио на каналах
Anton
ибо там уже все временные проблемы учтены, и можно кидать в него скоп фьюч, при этом без своего костыля
Anton
главная цель предоставить невероятно простой и базовый апи для анимаций без изъебов с настройкой фреймрейтов и тд
Anton
да и к тому же webrender сам по себе событийный, и так раскидает как надо уже при рисовке
Anton
а у вебрендера бай дефолт 60 фпс)
Anton
да и к тому же webrender сам по себе событийный, и так раскидает как надо уже при рисовке
Чет я тебя не пойму - пацаны у нас проблема, да чет теперь и проблем нет - вебрендер ставит очереди на отрисовку - поменялись свойства - акидывает на перерисовку, и т.д. как разтаки сменой свойств - занимается отделььный компонент - орисовкой другой, не вижу противоречий
Anton
Мухи отдельно - катлеты отдельно
Anton
ну тож верно
Anton
короч нужно еще чьето мнение