Vlákno názorů k článku Psaní aplikací pro terminál: jak funguje knihovna ncurses od nosofting - [...] Ani ve snu by mne nenapadlo, že...

  • Článek je starý, nové názory již nelze přidávat.
  • 9. 4. 2021 9:39

    nosofting

    [...] Ani ve snu by mne nenapadlo, že okna se (v ncurses) nesmí překrývat (jinak dochází k vizuálním defektům). [...]

    mohl byste to vysvetlit. Co to znamena 'prekryvat'. Pouzivam aplikaci, kde se pres zakladni obrazovku (to je take okno) nakresli mensi okno - to funguje uplne bezproblemove. Videl jsemv 90.letech i hardcopy obrazovek, kde se prekryvala i ta mensi okna. Myslite, ze to byly nejake jine ncurses verze?

    Tool 'dialog' pouziva ncurses a na stackoverflow je obrazek s overlapping windows. (viz: 'Using ncurses in c language')

  • 9. 4. 2021 10:36

    Pavel Stěhule

    Pokud se okna překrývají, tak si musíte sám řídit v jakém pořadí je budete refreshovat - a musíte si dávat pozor, jestli použijete refresh nebo wrefresh. ncurses si pro strukturu WINDOW neudržují Z souřadnici. Pokud máte komplexní aplikaci řízenou událostmi tak volání wrefresh nemusí být úplně totožné s tím, v jakém pořadí by se měl obsah zobrazit. Pokud například udělám refresh dialogu a poté refresh pozadí, např. kvuli hodinám v rohu, tak i když jsem dialogové okno vytvořil později, a očekávám, že bude mít vyšší Z souřadnici, tak ho neuvidím, a pozadí mi úplně překryje dialogové okno.

    Pokud chcete používat překrývající okna, tak musíte použít něco, co ncurses označuje jako PANEL, což je struktura, která wrapuje WINDOW, a udržuje si Z souřadnice. Je dobré číst pozorně dokumentaci, kde se píše, že byste neměli pak refreshovat skrz wrefresh - ale je nutné použít funkci update_panels a pak funkci doupdate. A pak to funguje. Já v pspg používám panely pro implementaci menu - a funguje to hezky.