Ako embed X11 okno a následne po ňom kresliť v QT?

Sekcia: Programovanie 14.05.2011 | 16:29
Avatar Grawp   Používateľ
Chcem cez X11 okno (napr. mplayer) kresliť vlastné OSD v QT. Zatiaľ som skúšal QX11EmbedContainer, ale nedalo sa mi cezeň kresliť, ako cez ostatné QWidget, tým, že ho prekryjem priehladným QWidget s kresbou. Asi to bude tým, že po X11 okne napriek tomu, že sa oň stará QX11EmbedContainer, nenakreslím bez composite efectov aj tak nič.

Ako to riešiť? Nejde tu len o video, ide mi o lubovoľné X11 okno. Potrebujem proste zobrať to okno, dosadiť ho na presne určené miesto v mojej aplikácii a kresliť po ňom... realtime.
    • Re: Ako embed X11 okno a následne po ňom kresliť v QT? 15.05.2011 | 00:00
      Avatar Grawp   Používateľ
      OK. Problém je trochu obsiahlejší, ide o to, že transparency v QT je vlastne semi-transparency, kedy sa pravidelne aktualizuje pozadie widgetu, podla vzhladu widgetu pod ním, ale nie podľa vzhladu non-QT okna.

      Riešenie:
      1. Very ugly dirty hack: http://forum.videolan.org/viewtopic.php?f=32&t=68816 2. http://doc.trolltech.com/4.7/widgets-shapedclock.html (Toto riešenie ešte len študujem, možno riešením nebude.)
    • Re: Ako embed X11 okno a následne po ňom kresliť v QT? 23.05.2011 | 10:29
      Avatar Miroslav Bendík Gentoo  Administrátor
      Ono to nie je tak jednoduchá úloha ako sa zdá. Qt samo o sebe toto nrpodporuje (pokiaľ viem ani celkovo X11 protokol na toto nebol stqvaný). Extrémne pomalým ale všeobecným riešením by bolo zachytávať okno do pixmapy (QPixmap::grabWindow), vykreslenie widgetu do pixmapy a zobrazenie pixmapy. Ak by ale išlo o mplayer, ten má krásny vstup - bmovl. Výsledok kreslenia OSD cez bmovl vyzerá takto. Princíp je jednoduchý, stačí vytvoriť rúru a cez ňu posielať mplayeru bitmapu.
      • Re: Ako embed X11 okno a následne po ňom kresliť v QT? 24.05.2011 | 23:43
        Avatar Grawp   Používateľ
        Ak si si nevšimol, už som si stihol odpovedať sám. Btw, jedná sa o linphone, ale zmienka o bmovl bola dobrá, pekné vedieť, že niečo také existuje.