Modifikovatelné UI/GUI - c++

Modifikovatelné UI/GUI - c++
« kdy: 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


BoneFlute

  • *****
  • 1 981
    • Zobrazit profil
Re:Modifikovatelné UI/GUI - c++
« Odpověď #1 kdy: 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!");

anonacct

Re:Modifikovatelné UI/GUI - c++
« Odpověď #2 kdy: 09. 09. 2020, 09:35:46 »

Re:Modifikovatelné UI/GUI - c++
« Odpověď #3 kdy: 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ů.

Mlocik97

  • *****
  • 830
  • Ubunťák, JS dev.
    • Zobrazit profil
    • E-mail
Re:Modifikovatelné UI/GUI - c++
« Odpověď #4 kdy: 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.


Re:Modifikovatelné UI/GUI - c++
« Odpověď #5 kdy: 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.


Re:Modifikovatelné UI/GUI - c++
« Odpověď #6 kdy: 09. 09. 2020, 14:28: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í.

anonacct

Re:Modifikovatelné UI/GUI - c++
« Odpověď #7 kdy: 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 :)

Re:Modifikovatelné UI/GUI - c++
« Odpověď #8 kdy: 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).

Re:Modifikovatelné UI/GUI - c++
« Odpověď #9 kdy: 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.

Re:Modifikovatelné UI/GUI - c++
« Odpověď #10 kdy: 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ň...  :)

BoneFlute

  • *****
  • 1 981
    • Zobrazit profil
Re:Modifikovatelné UI/GUI - c++
« Odpověď #11 kdy: 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í.

BoneFlute

  • *****
  • 1 981
    • Zobrazit profil
Re:Modifikovatelné UI/GUI - c++
« Odpověď #12 kdy: 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é.

Re:Modifikovatelné UI/GUI - c++
« Odpověď #13 kdy: 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.


Re:Modifikovatelné UI/GUI - c++
« Odpověď #14 kdy: 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.