Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: dext0r 08. 09. 2020, 18:38:34

Název: Modifikovatelné UI/GUI - c++
Přispěvatel: dext0r 08. 09. 2020, 18:38:34
Ahojte kolegovia,

Natrafil som na toto fórum, tak Vás zdravím a rovno hodím do pléna aj otázku nad ktorou dlhšiu dobu premýšlam.

Mam v c++ napísaný "herný" back-end (core), na testovanie som si napisal jednoduché CLI a v pláne mám doladiť hernú logiku a GUI/UI, t.j. dve otázky ktoré spolu súvisia.

1) Chcem na core napojiť GUI, premýšlal som nad Qt (menej skúseností) a gtkmm (viac skuseností), ale, rád by som aby bolo GUI modifikovatelné ,t.j. end-user by mohol byť schopný v istých mantineloch modifikovať GUI (pozadie, rozloženie tlačítok, pridávať animované efekty (napr gif)...), bez toho aby som neskôr rekompiloval "aplikáciu", prípadne user by si musel naštudovať 30 stranový manuál, a tu mi napádajú dve možnosti:
   a) spraviť UI/GUI v gtkmm a "modifikovateľnú" čast v GLADE
   b) spraviť UI/GUI v html5/css/js  t.j. plne modifikovateľné
   c) použiť Qt/QML
   d) použiť gtkmm/css alebo Qt/css
   e)  + další návrh

a teraz ta druhá otázka :
2) Ak by som použil a), c), d) hernú logiku by som vedel/mohol aplikovať priamo v Core a napojiť na dané GUI
Ak by som použil b), získal by som silne modifikovatelné UI/GUI ale s tým že hernú logiku by som držal v Core ale v istom zmysle by musela byť implementovaná aj v b), komunikácia cez REST API, prípadne websockets/js

T.j. ake GUI/UI (c++) použiť aby bolo dobre modifikovatelné a nestrávil by som pri návrhu a implementácii stovky hodín, prípadne ak si vyberiem b) nejaký návrh na browser pre ARM@1.2GHz single core, 1GB RAM, čo tak konqueror (asi cez víkend odskušam performance vs chromium.)

Diky dext0r
Název: Re:Modifikovatelné UI/GUI - c++
Přispěvatel: BoneFlute 08. 09. 2020, 23:08:18
Největší zkušenosti mám s GTK. IMHO to není problém. Prostě vezmeš odkaz na ten uzel, a nastavíš mu vlastnosti jaké potřebuješ, za běhu. Ten větší problém je v tom, postavit nad tím nějakou fasádu.

On sice můžeš vytvořit tlačítko takto:
Kód: [Vybrat]
GtkWidget *button = gtk_button_new_with_label ("Hello, World!");ale i takto:
Kód: [Vybrat]
GtkWidget *button = gtk_button_new();
gtk_button_set_label (button, "Hello, World!");
Název: Re:Modifikovatelné UI/GUI - c++
Přispěvatel: anonacct 09. 09. 2020, 09:35:46
Hoď tam HTML+CSS:

https://sciter.com/
https://ultralig.ht/
Název: Re:Modifikovatelné UI/GUI - c++
Přispěvatel: Michael Kalouš 09. 09. 2020, 10:38:17
Já bych se taky přikláněl k HTML/CSS/JS.

S pomocí tradičních toolkitů jako Qt a GTK+ jde samozřejmě dynamické rozhraní udělat, ale obecně se to moc často nedělá (pomineme-li třeba nastavování tlačítek na nástrojových lištách), protože je to těžkopádné. A vůbec to nejsou primárně toolkity na tvorbu rozhraní pro hry. To je třeba knihovna Clutter.

Na druhou stranu s HTML rozhraním bude možné vystačit si jenom s úpravou CSS souboru a to i včetně pozic tlačítek nebo jiných ovládacích prvků.
Název: Re:Modifikovatelné UI/GUI - c++
Přispěvatel: Mlocik97 09. 09. 2020, 11:45:45
Ja celkom rozmýšľam že jak sa mení situácia a vo všetkých progr. jazykoch sa tvorí GUI už pomoci CSS. A to pri tom toľký na CSS nadávali.

Existujú samozrejme GTK, Qt, alebo staršie Tk. Ale všeobecne mi prijde že v žiadnom nejde rozumne robiť reálne GUI, ktoré by nebolo hardplaced. S GTK je docela zápas, čo som sa presvedčil aj v https://github.com/wwmm/pulseeffects/issues/774
Osobne s GTK ani Qt nemám žiadne skúsenosti (vlastne v GTK som skúšal 5 minút, ale vzdal som to), a GUI som vždycky zatiaľ tvoril v CSS. Aj keď desktopové aplikácie som zvyčajne vytváral v JavaScripte. Inak v C/C++ som zatiaľ tvoril bez GUI, alebo GUI robil niekto iný. Mám drobnú skúsenosť tvorby GUI pomocou Windows Forms, čož je tiež peklo.

Osobne poradiť ti neviem, ale byť to robiť ja, tak by som šiel do CSS.
Název: Re:Modifikovatelné UI/GUI - c++
Přispěvatel: Michael Kalouš 09. 09. 2020, 13:19:44
Jak Qt tak GTK+ samozřejmě umí poněkud "gumové rozhraní" pomocí správy rozvržení a zadávání proporcí v logických jednotkách. Použití pevných souřadnic a velikostí v pixelech je sice možné, ale málokdy se dělá (a je to špatně).

Samozřejmě při daném rozložení widgetů jsou dány jisté minimální rozměry od kterých už je uživatelské rozhraní nepoužitelné. Záleží také na tématu, kolik volného místa widgetům nadiktuje.

HTML/CSS to řeší přepnutím rozložení pro jisté intervaly velikosti obrazovky - třeba pro mobil, tablet a desktop. A někdo ta rozložení musí navrhnout. Nakonec jde tedy vlastně o tři různá GUI v jednom, ovšem s HTML/CSS je to s menší námahou než třeba v GTK+/Qt. Protože kód už je hotový ve vykreslovacím jádru prohlížeče.

Ovšem tazateli nejde ani tak o "gumovost" rozhraní, ale o možnost si prvky libovolně přeskládat.

Název: Re:Modifikovatelné UI/GUI - c++
Přispěvatel: Ondrej Nemecek 09. 09. 2020, 14:28:33
Většina současných toolkitů (Qt, GTK, JavaFX...):


IMHO rozhraní v html/css není v tomto ohledu není žádný zásadní krok kupředu. Použivá se to kvůli tomu, že znalost html/css je mezi vývojáři rozšířená (každý platlal webů spatlá i rozhraní aplikace). Ale udělat dobré UI z hlediska uživatele i programátora není nic snadného, na tom se IMHO nic nemění.
Název: Re:Modifikovatelné UI/GUI - c++
Přispěvatel: anonacct 09. 09. 2020, 15:13:20
Nemá cenu ztrácet čas s Gtk/Qt/JavaFX atd... V HTML+CSS jde udělat krásný layout, skinning, animace, atd... Dělat to v normálním toolkitu je opruz a výsledek bude vždycky nějaký kompromis. HTML umí každý, HTML markup bude fungovat i za 10 let, je to budoucnost ačkoliv někteří se s tím nechcou smířit :)
Název: Re:Modifikovatelné UI/GUI - c++
Přispěvatel: Ondrej Nemecek 09. 09. 2020, 19:15:40
Nemá cenu ztrácet čas s Gtk/Qt/JavaFX atd... V HTML+CSS jde udělat krásný layout, skinning, animace, atd... Dělat to v normálním toolkitu je opruz a výsledek bude vždycky nějaký kompromis. HTML umí každý, HTML markup bude fungovat i za 10 let, je to budoucnost ačkoliv někteří se s tím nechcou smířit :)

Za 10 let bude kyvadlo zase na druhé straně, to nejspíš neokecáte (historie to ukazuje se železnou jistotou).
Název: Re:Modifikovatelné UI/GUI - c++
Přispěvatel: MiKu 10. 09. 2020, 10:13:22
Pokud je to pro hru, tak bych možná zkusil spíš nějaké GUI, které se hodí primárně do her. Většinou to bývají UI knihovny, které obsahují nějaké základní UI prvky a jsou kreslené přímo do openGL, webGL, directx, dobře se pak dají s tou hrou integrovat, ale přesné tipy nemám.

P.S. Je sranda, jak se diskuse pokaždé někam přehoupne, už jsme u kyvadla dějin za 10 let a železných jistot. Což je vám pro vaše účely tipuji totálně k prdu.
Název: Re:Modifikovatelné UI/GUI - c++
Přispěvatel: Ondrej Nemecek 10. 09. 2020, 15:06:28
Tomu se říká kontext diskuze a nemusí to být zas tak na závadu.

Jinak souhlasím, že bych použil UI které je určené do her, akorát nevím jak silně tam bude podporovaná ta modifikovatelnost. Řada her v sobě má editor úrovní, tak mě napadá, zda by to nešlo pro úpravy UI nějak využít... člověk by si postavil to UI jako úroveň...  :)
Název: Re:Modifikovatelné UI/GUI - c++
Přispěvatel: BoneFlute 10. 09. 2020, 23:51:24
Většina současných toolkitů (Qt, GTK, JavaFX...):

  • umožňuje definovat UI deklarativně a pak jej kódu jen oživit (QML, Glade, FXML = analogie html/css+js, často existuje i přímá podpora styleshteetů)
  • umožňuje uživateli, aby si rozhraní přeskupil (prvky jsou v kontejnerech s automatickým layoutem = uživatel si ovládací prvky natahá tam, kam potřebuje)

Souhlas. Třeba GTK má css, flex. Samozřejmě ne jedna ku jedné, ale principy i výhody jsou stejné.
IMHO rozhraní v html/css není v tomto ohledu není žádný zásadní krok kupředu. Použivá se to kvůli tomu, že znalost html/css je mezi vývojáři rozšířená (každý platlal webů spatlá i rozhraní aplikace). Ale udělat dobré UI z hlediska uživatele i programátora není nic snadného, na tom se IMHO nic nemění.
Název: Re:Modifikovatelné UI/GUI - c++
Přispěvatel: BoneFlute 10. 09. 2020, 23:59:33
Většina současných toolkitů (Qt, GTK, JavaFX...):

  • umožňuje definovat UI deklarativně a pak jej kódu jen oživit (QML, Glade, FXML = analogie html/css+js, často existuje i přímá podpora styleshteetů)
  • umožňuje uživateli, aby si rozhraní přeskupil (prvky jsou v kontejnerech s automatickým layoutem = uživatel si ovládací prvky natahá tam, kam potřebuje)

IMHO rozhraní v html/css není v tomto ohledu není žádný zásadní krok kupředu. Použivá se to kvůli tomu, že znalost html/css je mezi vývojáři rozšířená (každý platlal webů spatlá i rozhraní aplikace). Ale udělat dobré UI z hlediska uživatele i programátora není nic snadného, na tom se IMHO nic nemění.

Souhlas. Třeba GTK má css, flex. Samozřejmě ne jedna ku jedné, ale principy i výhody jsou stejné.
Název: Re:Modifikovatelné UI/GUI - c++
Přispěvatel: martinus26 12. 09. 2020, 08:47:54
Čoo tak skúsiť Pharo Smalltalk pre vytvorenie plne užívateľsky modifikovatelneho GUI ? Na jednoduche upravy GUI je tam Morphic Halo, Ked uživatelovi to nebude stačiť, môže si v relatívne jednoduchom jazyku doprogramovať niečo dalšie.

Název: Re:Modifikovatelné UI/GUI - c++
Přispěvatel: okalousek 12. 09. 2020, 18:06:35
Čoo tak skúsiť Pharo Smalltalk pre vytvorenie plne užívateľsky modifikovatelneho GUI ? Na jednoduche upravy GUI je tam Morphic Halo, Ked uživatelovi to nebude stačiť, môže si v relatívne jednoduchom jazyku doprogramovať niečo dalšie.
Ale komu by se chtělo tahat celou VM a Image. Navíc smalltalk je něco jako OS v OS, takže uvnitř je i vlastní rozhraní, panely, to by mohlo uživatele mást. Jinak je to dobrý nápad.
Název: Re:Modifikovatelné UI/GUI - c++
Přispěvatel: martinus26 12. 09. 2020, 19:49:04
čistá VM Image ma 200MB, takze zavisi len na programatorovi koľko do toho naprogramuje :)

Pharo Smalltalk je aj OS, time sharing multitasking na jednom CPU vlákne. Nevie to priamo ovládať hw, ale vie to volat C čkové funkcie.  Ale najme je to IDE - doslova je to stavané na rýchle prototypovanie,skúšanie,debugovanie, JIT kompilator.  Maju aj web framework Seaside (pozri Git), takže by to modifikovatelné GUI mohlo bežať aj v prehliadači. Treba ale prežiť ten kultúrny šok, potom si to človek zamiluje.  :)

Videl som ako sa niekto snažil napodobniť "užívateľsky modifikovateľné" GUI z pharo smalltalku pomocou Qt a Cling (C++ interpreter). Slabý odvar. Vrcholom v Qt su asi KDE plasmoidy.

Pravdepodobne je pre tvorcov GUI toolkitov nestráviteľná myšlienka že by si user mohol aspoň popresúvať GUI tlačidlá. Ale videl som CAD program ktorý to v obmedzenej miere dovoloval.
Název: Re:Modifikovatelné UI/GUI - c++
Přispěvatel: anonacct 12. 09. 2020, 20:44:36
Tak záleží co autor dotazu plánuje budoucí rok dělat - jestli implementovat nějakou vlastní vrstvu nad Qt/Gtk/JavaFX/Pharo/(cokoliv dalšího co tu někdo zmíní), která by mu umožnila to co chce (tedy vytvoření UI uživatelem pro nějaký plugin/mod system) a nebo prostě sáhnout po něčem hotovém a řešit tu samotnou hru :) Opravdu mi přijde nejjednodušší to HTML - nedokážu si představit use-case, na který by to nestačilo, a zkušenosti tím získané pak může aplikovat u dalších projektů.
Název: Re:Modifikovatelné UI/GUI - c++
Přispěvatel: BoneFlute 12. 09. 2020, 20:59:37
Tak záleží co autor dotazu plánuje budoucí rok dělat - jestli implementovat nějakou vlastní vrstvu nad Qt/Gtk/JavaFX/Pharo/(cokoliv dalšího co tu někdo zmíní), která by mu umožnila to co chce (tedy vytvoření UI uživatelem pro nějaký plugin/mod system) a nebo prostě sáhnout po něčem hotovém a řešit tu samotnou hru :) Opravdu mi přijde nejjednodušší to HTML - nedokážu si představit use-case, na který by to nestačilo, a zkušenosti tím získané pak může aplikovat u dalších projektů.

S tou první myšlenkou určitě souhlasím - rozhodně je lepší, když zvolí už nějakou hotovou platformu na hry (třeba Unity, nebo tak, bohužel nemám v tom přehled), než si to dělat sám.

Ale proč by měl použít zrovna HTML, to mi tak nějak nedochází, a už vůbec ne proč by to měla být platforma na hry.
Název: Re:Modifikovatelné UI/GUI - c++
Přispěvatel: Ondrej Nemecek 12. 09. 2020, 21:34:45
Pravdepodobne je pre tvorcov GUI toolkitov nestráviteľná myšlienka že by si user mohol aspoň popresúvať GUI tlačidlá. Ale videl som CAD program ktorý to v obmedzenej miere dovoloval.

Jak to? Různé odtrhávací panely a konfigurovatelné tlačítka má snad každý toolkit. Ty prvky jsou uloženy v kontejneru a lze je tam dynamicky přidávat nebo odebírat, layout je automatický. Pokud koukáte na tenhle web ve Firefoxu, tak tam to zrovna funguje - nastavení lišty (která tlačítka tam chcete mít). Scribus/Inkscape má přesunovatelné a dokovatelné panely, Gimp také. Některé toolkity umí i automatickou responsibilitu. Možnosti ke zlepšení se určitě najdou, ale rozhodně to není nic exotického.
Název: Re:Modifikovatelné UI/GUI - c++
Přispěvatel: anonacct 12. 09. 2020, 22:01:31
Ještě toto je super:

https://coherent-labs.com/products/coherent-gameface/

EA má vlastní fork webkitu (EAWebKit): https://gpl.ea.com/eawebkit.html

Nemám potřebu tu nějak argumentovat. HTML UI je ale určitě trend a člověk ani netuší do kolika her se tato techonologie už dostala.
Název: Re:Modifikovatelné UI/GUI - c++
Přispěvatel: Ondrej Nemecek 13. 09. 2020, 14:54:10
Trend to je, i spousta desktop aplikací se dnes dělá na technologii html/css/js.

Když se s tím ale člověk podobněji seznámí, zjistí, že technologicky to tak velká výhra není.

Musí řešit stejné problémy a k tomu i nějaké nové.

Killer feature je možnost běhu aplikace v prohlížeči a množství dostupných vývojářů.
Název: Re:Modifikovatelné UI/GUI - c++
Přispěvatel: Google CTCCTCGGCGGGCACGTAG 13. 09. 2020, 15:59:36
Co konkretne HTML neumi oproti tem alternativam, ktere tu navrhujete? Pro pouziti nejake malo rozsirene technologie by mel existovat dobry duvod, protoze si tim v kazdem pripade pridelate spoustu problemu.
Název: Re:Modifikovatelné UI/GUI - c++
Přispěvatel: BoneFlute 13. 09. 2020, 16:32:40
Co konkretne HTML neumi oproti tem alternativam, ktere tu navrhujete? Pro pouziti nejake malo rozsirene technologie by mel existovat dobry duvod, protoze si tim v kazdem pripade pridelate spoustu problemu.

Nejde o to, že by HTML něco neumělo. Ta formulace je výstižná "zjistí, že technologicky to tak velká výhra není".

Stejně tak souhlasím s tím, že zásadní (a možná jediná) výhoda HTML je "možnost běhu aplikace v prohlížeči a množství dostupných vývojářů".
Název: Re:Modifikovatelné UI/GUI - c++
Přispěvatel: BoneFlute 13. 09. 2020, 16:39:06
Co konkretne HTML neumi oproti tem alternativam, ktere tu navrhujete?

1/ neumí nativní look&feel
2/ neumí lehké nenáročné aplikace nenáročné na zdroje paměti a procesoru
3/ neumí svižné aplikace, kde záleží na rychlosti odezvy UI
Název: Re:Modifikovatelné UI/GUI - c++
Přispěvatel: Google CTCCTCGGCGGGCACGTAG 13. 09. 2020, 17:39:09
Co konkretne HTML neumi oproti tem alternativam, ktere tu navrhujete?

1/ neumí nativní look&feel
podle me takova UI technologie neexistuje, ktera by vypadala nativne vsude, lepsi je ladit jeden vzhled pro konkretni aplikaci, nez X ruznych vzhledu pro ruzna prostredi
2/ neumí lehké nenáročné aplikace nenáročné na zdroje paměti a procesoru
no to je dan za flexibilitu, na dnesnich desktopovych pocitacich to neni problem, mozna na starsich mobilech
3/ neumí svižné aplikace, kde záleží na rychlosti odezvy UI
z me zkusenosti jdou problemy s vykonem weboveho frontendu vzdy vyresit, urcite neni treba psat celou aplikaci v nejake exoticke limitujici technologii, kvuli male vykonove kriticke casti.
Název: Re:Modifikovatelné UI/GUI - c++
Přispěvatel: BoneFlute 13. 09. 2020, 20:23:30
Co konkretne HTML neumi oproti tem alternativam, ktere tu navrhujete?

1/ neumí nativní look&feel
podle me takova UI technologie neexistuje, ktera by vypadala nativne vsude,
wxWidget, yue, jenom z těch co znám.

lepsi je ladit jeden vzhled pro konkretni aplikaci, nez X ruznych vzhledu pro ruzna prostredi

2/ neumí lehké nenáročné aplikace nenáročné na zdroje paměti a procesoru
no to je dan za flexibilitu, na dnesnich desktopovych pocitacich to neni problem, mozna na starsich mobilech
O tom nediskutuji. Já jsem jen odpovídal na otázku, co konkrétně HTML neumí. Zda to za to stojí je úplně jiná otázka.

3/ neumí svižné aplikace, kde záleží na rychlosti odezvy UI
z me zkusenosti jdou problemy s vykonem weboveho frontendu vzdy vyresit, urcite neni treba psat celou aplikaci v nejake exoticke limitujici technologii, kvuli male vykonove kriticke casti.
Já tu zkušenost nemám. Mě přijde, že všechny engine běžící na html jsou nenažraný bumbrlíci, a ta svižnost UI je prostě webová.
Název: Re:Modifikovatelné UI/GUI - c++
Přispěvatel: Google CTCCTCGGCGGGCACGTAG 13. 09. 2020, 20:51:01
3/ neumí svižné aplikace, kde záleží na rychlosti odezvy UI
z me zkusenosti jdou problemy s vykonem weboveho frontendu vzdy vyresit, urcite neni treba psat celou aplikaci v nejake exoticke limitujici technologii, kvuli male vykonove kriticke casti.
Já tu zkušenost nemám. Mě přijde, že všechny engine běžící na html jsou nenažraný bumbrlíci, a ta svižnost UI je prostě webová.

za to vetsinou muzou reklamy
Název: Re:Modifikovatelné UI/GUI - c++
Přispěvatel: Mlocik97 13. 09. 2020, 20:59:38
https://gitlab.gnome.org/GNOME/libhandy

celkom ma zaujal tento projekt
Název: Re:Modifikovatelné UI/GUI - c++
Přispěvatel: BoneFlute 13. 09. 2020, 23:13:23
3/ neumí svižné aplikace, kde záleží na rychlosti odezvy UI
z me zkusenosti jdou problemy s vykonem weboveho frontendu vzdy vyresit, urcite neni treba psat celou aplikaci v nejake exoticke limitujici technologii, kvuli male vykonove kriticke casti.
Já tu zkušenost nemám. Mě přijde, že všechny engine běžící na html jsou nenažraný bumbrlíci, a ta svižnost UI je prostě webová.

za to vetsinou muzou reklamy

Může být. Já jsem jen chtěl poukázat, a myslím, že se mi to celkem povedlo, že ta exotická limitující technologie je spíše HTML než co jiného.
Název: Re:Modifikovatelné UI/GUI - c++
Přispěvatel: dext0r 16. 09. 2020, 15:22:11
Ahojte,

Diky za prinosne navrhy, niektore technologie/navrhy a postupy som ani neuvazoval, zasa som sa posunul dalej.
Jemne sa priklanam k moznostiam:
1) GTK a css - myslim ze to vcelku vystihuje moj usercase
2) HTML/css/JS - dal by som to na druhe miesto

Asi to budem musiet prakticky overit, nakolko som/budem limitovany vykonom, 800MHz CPU, GPU Mali, 512 RAM.
Ohladom performance to bude asi lepsie na GTK/css, na modifikovatelnost zasa HTML/css.. asi sa pustim do testu 1) vs 2) (CEF, GNOME web)

Čoo tak skúsiť Pharo Smalltalk...

Vyzera to velmi zaujimavo, ale neviem ci mam este silu/odhodlanie ist do novej technologie.. budem nad tym premyslat, diky moc

Co konkretne HTML neumi oproti tem alternativam, ktere tu navrhujete?
1/ neumí nativní look&feel ..

Nativny look&feel v tomto pripade nehraje rolu, skor pouzita technologia (performance), a moznosti

https://gitlab.gnome.org/GNOME/libhandy

celkom ma zaujal tento projekt
Mna zaujal tiez, asi skusim poexperimentovat
Název: Re:Modifikovatelné UI/GUI - c++
Přispěvatel: Google CTCCTCGGCGGGCACGTAG 17. 09. 2020, 11:37:46
Může být. Já jsem jen chtěl poukázat, a myslím, že se mi to celkem povedlo, že ta exotická limitující technologie je spíše HTML než co jiného.

myslel jsem exoticky ve smyslu malo rozsireny