LINUX.ORG.RU

Библиотека для построения GUI на HTML/CSS

 , , ,


2

4

Собственно, что можете подсказать на эту тему? Есть движок, написанный, предположим, на C++ или Rust. К нему нужен ТОЛЬКО ИНТЕРФЕЙС - вся логика уже написана на низкоуровневых языках. То есть жирный js-движок не нужен, нужна чисто отображалка. Тянуть в систему Электрон или тяжёлые браузерные движки изи GTK/Qt не хочу.

Есть что-то такое в природе? Если ещё и Rust поддерживает, вообще шикарно будет.

Знаю, что так устроены некоторые аппликухи, навскидку, Bitwig. Но он проприетарный, не посмотришь.

★★★★★

Ответ на: комментарий от kote4ka

Ничоси, неплохо выглядит этот Nuklear. Даже не знал про такой. Но если уж выбирать такой подход, я бы выбрал GTK - меньше шансов нарваться на какую-нибудь нереализованную фичу вроде обработки drug-n-drop-а. Да и знаю я его получше.

Но я тут хочу провернуть вообще финт ушами - сделать весь гуй вёб-страницей, а обработка будет на низкоуровневом языке вместо ДжаваСкрипа. Пока нашёл вот этот проект, присматриваюсь. https://github.com/webview/webview

Электрон хорош, но тяжёл и всё-таки многое навязывает, например, использование ДжаваСкрипта. А мне это всё нафиг не впилось.

meliafaro ★★★★★ ()
Ответ на: комментарий от Shadow

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

Wx - это тоже ближе к ГТК и Культи, нативная отрисовка.

meliafaro ★★★★★ ()
Ответ на: комментарий от meliafaro

На GTK в immediate mode нельзя программировать. Это же совсем другое. В Nuklear окно перерисовывается постоянно, и у тебя определенная функция отвечает за контент, вызывая отрисовку кнопок. Ты можешь там вставить while, if, и менять отображение как хочешь, реакт для сишников.

void show(struct nuklear_context *ctx) {
	bool view_1win = true; 
	bool view_footer = false;

	if(nk_button_label(ctx, "Переключить вкладки")) view_1win = !view_1win;
	if(view_1win) {
		nk_label(ctx, "Это первая импровизированная вкладка");
	} else {
		nk_label(ctx, "А это вторая");
		if(nk_button_label(ctx, "Кликни на меня и появится footer")) {
			view_footer = true;
		}
	}
	if(view_footer) {
		nk_label(ctx, "Футер 2021");
	}
}

А так Nuklear не умеет драг-н-дропы, нужно драйвер писать %) Хотя есть уже готовые в папке demo/

Вообще на Electron такое себе писать простые приложения, виджетов же нету, размещать их неудобно, и разметку долго писать.

Не знаю что ты там делаешь, но посмотри Lazarus если тебе кнопок да деревьев накидать надо. Просто, кроссплатформено, легковесно.

kote4ka ()

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

Раньше ещё была librocket, но загнулась.

eve ()
Ответ на: комментарий от meliafaro

Не сказал бы, вот нужно окно входа простое, чем разбираться с лайотами и чето там накидывать искать, мне сильно быстрее и проще все это написать:

static char log[256], pas[256];

nk_layout_row_dynamic(ctx, 25, 2);

nk_label(ctx, "Логин: ", NK_LEFT);
nk_edit_string_zero_terminated(ctx, log, sizeof(log));

nk_label(ctx, "Пароль: ", NK_LEFT);
nk_edit_string_zero_terminated(ctx, pas, sizeof(pas));

nk_spacing(ctx, 1);

if((nk_button_label(ctx, "Вход")) {
	if(!strcmp(log, "root") && !strcmp(pas, "1234")) {
		login();
	}
}
Вот результат (осторожна тема сделана для вытекания глаз) - https://i.imgur.com/9fXnlVu.png

А когда дело доходит до сильно меняющихся структур, деревьев, то вообще классно.

Если что то изменилось тебе не нужно менять что то еще и в гуи, потому что гуи рисуется по твоей структуре.

kote4ka ()
Последнее исправление: kote4ka (всего исправлений: 2)
Ответ на: комментарий от deep-purple

Пошла спискота виджет-сетов. Я ищу не тулкит, а легонький, простой недобраузер, в котором веб-страница может вызывать функции Си или Раст.

meliafaro ★★★★★ ()
Ответ на: комментарий от meliafaro

А зачем тебе вообще html/css? Ведь если интерфейс очень простой и не планируется его часто менять, то проще сделать его с использованием какой-нибудь библиотеки виджетов. Ну или очень заморочиться и сделать без библиотеки.

rumgot ★★★★★ ()
Ответ на: комментарий от deep-purple

дык, гуй всегда рисует по твоей структуре, это называется — вьюха.

Нет, он рисует скорей по скопированной структуре.

kote4ka ()
Ответ на: комментарий от meliafaro

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

deep-purple ★★★★★ ()
Последнее исправление: deep-purple (всего исправлений: 1)
Ответ на: комментарий от meliafaro

Кроме того, он не поддерживает стили вроде, и уродливо смотрится на любой платформе.

Вроде поддерживает, и относительно прилично смотрится на Mac OS и виндовс.

Shadow ★★★★★ ()
Ответ на: комментарий от deep-purple

Ну, возможно, но, опять же, это изучение нового тулкита, который мне в будущем вряд ли пригодится. Я более-менее знаю уже GTK и Qt, и задачи стать специалистом экспертом по всем-всем тулкитам у меня не стоит😏 Кроме того, за гуйнёй на вебщине будущее, как бы кто к этому не относился, так что пора привыкать😎

meliafaro ★★★★★ ()
Ответ на: комментарий от meliafaro

а тебе так и так это осиливать придется.

кути и гтк ты ж вроде говоришь жирные?

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

deep-purple ★★★★★ ()
Последнее исправление: deep-purple (всего исправлений: 1)

Тянуть в систему Электрон или тяжёлые браузерные движки изи Qt не хочу.

Для этого Qt WebEngine тянуть и не нужно. Есть QML.

Хочется интерфейс на HTML/CSS/JS и без всяких «Electron» - делай серверное приложение на том же C++ или Rust или общайся с приложением-сервером по удобному тебе протоколу, а интерфейс будет на HTML/CSS в любом браузере удаленно или на локалхост.

Stack77 ()
Ответ на: комментарий от Stack77

Сама идеология не очень нравится: приложение - высоконагруженное десктопное приложение, браузер тут будет только вносить задержку.

meliafaro ★★★★★ ()
Последнее исправление: meliafaro (всего исправлений: 1)
Ответ на: комментарий от meliafaro

высоконагруженое

ну вот, а ты стремишься еще браузер впилить в это приложение.

забудь тогда вообще про хтмл гуй и делай на нативе.

это в браузерах актуально и внутренние спец страницы на хтмл, ксс, жс и ксулах напилить, чтобы через единый рендер пропустить.

а у тебя это каким боком? только от желания скостить кодострадания? лучше уж сразу сделай нормально.

deep-purple ★★★★★ ()
Ответ на: комментарий от meliafaro

Тогда неизвестно, что под твои запросы порекомендовать можно. Посмотри https://ultralig.ht - API под множество языков есть, включая Rust. Значительно легче хромого, но все равно браузер (на базе webkit). А иначе как HTML/CSS/JS рендерить?! Сам не ковырял, ничего о плюсах и минусах сказать не могу.

Stack77 ()
Последнее исправление: Stack77 (всего исправлений: 1)
Ответ на: комментарий от deep-purple

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

ну вот, а ты стремишься еще браузер впилить в это приложение.

Поэтому и ищу что-то лёгкое, в идеале вообще без js-движка, чтобы прямо из хтмл вызывать хендлеры на Раст или чём там. Пока нашёл web-view для Руст, но там слишком мало доков, а чисто экземплам не всё понятно.

meliafaro ★★★★★ ()
Ответ на: комментарий от meliafaro

ну если поиграться, то бери что заходит.

я так перепробовал (реально накидывал кейсы, потратил время на каждый) для своей поделки: гтк, вхвиджетс, блендиш, кути и еще несколько низкоуровневых, в итоге остановился на кутях, да, там не без проблем, но оно вьехало по задаче почти идеально.

deep-purple ★★★★★ ()
Ответ на: комментарий от hbee

Да, что-то такое и искал, но по лицензии не подходит.

meliafaro ★★★★★ ()
Ответ на: комментарий от meliafaro

Так а что ужас. В принципе, идея очевидная: взять легковесный движок и допилить до встраиваемой библиотеки UI самому. Нам же не нужна полная поддержка html5 и всяких ништяков. Нужна простота сборки и впиливания в проект.

Но правда в случае с netsurf начальные трудозатраты на такую переделку могут быть достаточно велики.

wandrien ()
Ответ на: комментарий от meliafaro

Зато будете героем, если выложите в паблик. ;)

Вместо проприетарного Sciter, на открытие сорцов которого автор пытался собрать себе денег.

wandrien ()
Ответ на: комментарий от meliafaro

дальше нативные тулкиты будут отмиратб, а вёбщина главенствовать даже на десктопе

Тогда только электрон + ionic
Остальное под веб в разы сложнее использовать, чем wx или Tk

Shadow ★★★★★ ()
Последнее исправление: Shadow (всего исправлений: 1)
Ответ на: комментарий от Sorcus

Выглядит неплохо, но опять же там js во главу угла. Я-то пишу на низкоуровнеывх языках.

meliafaro ★★★★★ ()
Ответ на: комментарий от meliafaro

Но я тут хочу провернуть вообще финт ушами - сделать весь гуй вёб-страницей, а обработка будет на низкоуровневом языке вместо ДжаваСкрипа

Во-первых, нахрена? :)

Во-вторых, можешь глянуть netserf там кода три строчки, а уж хтмл и ксс он умеет. Вроде, через sdl рисует

pihter ★★★★ ()

В каждой ОС есть встроенный веб-движок, который, как правило, базируется на webkit. Без JS ты не найдешь рендеринг HTML/CSS. Если не хочешь пилить собственную обвязку к встроенному движку в ОС, то можно использовать либы типа этой https://github.com/tauri-apps/tauri

foror ★★★★ ()
Ограничение на отправку комментариев: только для зарегистрированных пользователей