Grafická knižnica "OpenGUI" - okenný ošiaľ

História


Ako to celé začalo? Bolo nás tam strašne veľa, bola tam strašná tma, vlhko a všetci sme mali bičíky ... No dobre tak naozaj. Kedysi v dobách 8-bit. počítačového dávnoveku na počítači SAM Coupe (nasledovník ZX-Spectra) chýbalo takmer všetko a tak sme si to všetko na kolene dorábali. V určitom bode som si uvedomil že by bodlo mať možnosť používať aj iné jazyky než je assembler (ktorý sme si už stihli napísať, taký ten pre Zilog-80) a tak som sa vrhol na kompilátor jazyka C, vzápäti vyvstal problém niečoho čo by to celé zastrešilo. Niečo na spôsob pokročilejšieho IDE, t.j. editor, debugger atď. No a tak som si napísal čosi ako univerzálny okenný manažér. Myška & klávesnica=> kurzor =>okienka =>menu a tak. Keď mi  vďaka blesku komplet vyhorelo "výpočtové stredisko", kúpil som si PC486 a tam už všetko bolo. Až na tie okienka - tie od M$ s číslo 3.11 mi akosi moc nechodili, a tak som sa pobral týmto smerom. Veľmi veľa tomu pomohlo aj moje súčasné zamestnanie, kde práve niečo podobné zháňali pod UNIX. Proste malo to behať skoro všade, malo to byť véééľmi rýchle a malo sa to dať pohodlne programovať, rýchlo naučiť. Proste okienka a menu ako Windowsoch, ale bez všetkých tých cavykov a tak vzniklo OpenGUI. Ba nie. Najprv sa to volalo FASTGL, ale tento názov som musel zmeniť na terajší pretože sa firme FastGraph zdalo, že to koliduje s ich záujmami. A tak je tu teraz grafická knižnica OpenGUI vo verzii 2.94 k dnešnému dňu. Narodilo sa to približne v novembri (listopad?) 1997.

O čom to celé je?


Knižníc ktoré ponúkajú okienka v rôznych podobách je na Internete pomerne dosť. Za všetky menujem aspoň MicroGUI, MiniGUI, slovenské UNIFORMS, ale napríklad aj eXtended OS Loader má v sebe niečo na tento spôsob (dokonca si myslím že má o niečo lepší dyzajn, čo sa týka  implementácie). OpenGUI medzi nimi vyniká hlavne rýchlosťou, objektovým návrhom a jednoduchosťou použitia. Pre niekoho to bude asi nevýhoda, ale tento typ softwéru je priam predurčený na objektovú implementáciu. Stačí aby ste si porovnali napríklad grafický toolkit GTK+ a jeho C++ nadstavbu GTK-- a pochopíte o čo je to v C++ prirodzenejšie (pozor nepatrím medzi ortodoxných vyznávačov C++, mám rád aj C a Assembler!). Oponenti budú tvrdiť že v C++ by sa nemali písať programy u ktorých je dôležitá rýchlosť. Že to ide dokonca i s niekoľko násobnou dedičnosťou a virtuálnymi metodami sa možete presvedčiť na našom prípade. No ale to sme už odbočili od témy. Čo teda dostanete s OpenGUI? Rýchlu grafickú knižnicu s prepracovanou okennou nadstavbou, ktorá vám umožní písať grafické aplikácie ľahšieho kalibru s pomerne vysokým komfortom pomocou komplexného API v jazyku C++. Knižnica umožňuje grafický prístup k CELEJ obrazovke s možnosťou použitia okien, menu, editboxov, tlačítiek, myšieho kurzora a všetkých tých bežných grafický "udělatek" z Windows. Vyznávači Jazyka C nezúfajte, knižnica je dvojvrstvová. Spodná vrstva má API v obyčajnom Céčku, samozrejme že tam nemáte prístup k oknám a ostatným chuťovkám vyššej objektovej vrstvy, ale je to rýchle 2D jadro asi tak na úrovni Borland BGI a lepšej (čiary, polygony, elipsy, oblúky, texty atď.), ktoré vám umožní písať a používať jednotné aplikácie pod MSDOS (GCC, Watcom), QNX. (GCC, Watcom) a LINUX do rozlíšenie 1600x1200 bodov a 8,15,16 a 24 bitových farbách. Áno, na týchto všetkých operačných systémoch to pobeží. Ako spodná vrstva je INT10 (ROM grafickej karty), SVGAlib a Linux FBDEV (pracuje sa na X-Windows 4.0 DGA 2 a DirectX backends). Súčasťou je aj tzv. OpenGUI Sourcer, program ktorý vám umožní si pomerne jednoducho naklikať okná a všetko čo do ních patrí a následne z toho vygenerovať zdrojový C++ kód ktorý stačí preložiť a zlonkovať s OpenGUI. Nečakajte žiadne Delphi ale základnú kostra sa s tým vygenerovať dá - pozor, ide o jednocestný návrh!

O čom to nieje


Ak potrebujete predovšetkým prenositeľnosť, bude pre vás lepšie siahnuť po GTK+ alebo wxWindows, ktoré bežia pod X-Windows aj pod WIN32. Určite ešte existuje kopec dôvodov prečo OpenGUI nepoužiť, akurát ma žiadny rozumný nenapadol.

Načo sa to dá použiť


No v praxi sa to napríklad používa (osobne overené) v aplikáciách pre vizualizáciu dát z radiolokátorov (a že tam treba rýchlosť!), digitálnych osciloskopov, zobrazovanie digitálneho modelu reliefu proste všade tam kde je potreba zobrazovať veľa a okamžite v reálnom čase a nieje to pod Windowsami. Aj podľa ohlasov zo sveta sa to používa na podobné účely. Teraz som som si spomenul, že niekto v tom písal univerzálny grafický "inštalatér" pre programy. Dokonca som videl už aj obrázky simulujúce palubný panel lietadla - vraj pre výuku na univerzite(?). Holt asi sa budem viac pýtať užívateľov a nabudúce napíšem viac. Ak sa vám po prečítaní tohto článku zachce sa na to pozrieť bližšie a zistíte že je to to čo ste zháňali, kľudne mi napíšte mejla s dojmami a hlavne návrhmi na ďaľšie vylepšenia.

Teória & Prax


Teoria je jednoduchá. Jednoduché "Hello, World!" v šedom okienku s čiernym písmom a tlačítkom pre ukončenie programu.

#include <fastgl/fastgl.h>

void myex(Control *)
{
    App::AppDone();
}

int main(int argc, char **argv)
{
    App MyApp(3, argc, argv, CDARK);
    Window okno(0, X_width / 2 - 200, Y_width / 2 - 100, 400, 200, " Your  Pretty Window", GuiHwnd(NULL), CBLACK, CGRAY2, WFRAMED | WTITLED|MINIMIZE);
    Bitmap icon("opengl");
    okno.WindowAttachIcon(&icon);
    set_colors(CGRAYED, CGRAY2);
    okno.printf(54, 75, "Hello from FastGL world !\n");
    okno.AddPushButton(275, 120, 80, 24, "Quit", 'Q', myex);
    MyApp.Run(0);
    return 0;
}

Načítanie bitmapy zo súbory "logo256.gif" a zobrazenie ako podkladu (celá obrazovka je tiež chápaná ako ROOT okno). Ukončenie defaultne - cez kláves <ALT+X>

#include <fastgl/fastgl.h>

int main(int argc, char **argv)
{
    App MyApp(3, argc, argv, CDARK,APP_ROOTWINDOW|APP_ENABLEALTX);
    Bitmap background("logo256.gif");
    App::GetRootWindow()->WindowPutBitmap(0, 0, 0,0,X_width, Y_width, &bg);
    MyApp.Run(0);
    return 0;
}

Kam si po to kliknuť


Domovská stránka je adrese www.tutok.sk/fastgl , tu je možné vidieť vždy dátum poslednej aktualizácie, aktuálnu verziu, nejaké tie "skrínšoty", diagram odvodených tried ale hlavne kopec niekoľko pomerne zaujimavých liniek na podobné projekty po celom svete. Download je celkom nepochopiteľne z adresára www.tutok.sk/fastgl/download .

 

2.11.2000  - nezmar@internet.alcatel.sk