2017-11-30 5 views
0

Ich mache gerade ein Projekt in meiner IT Schule und ich arbeite mit SDL (Das Projekt ist Bildverarbeitung und sowas), und momentan zeige ich nur das Bild mit SDL ohne Schnittstelle (Buttons etc.) ..). Ich weiß ein bisschen über GTK, also möchte ich wissen, ob ich ein Bild (hier eine SDL_Surface) in einem GTK-Fenster anzeigen kann Ich habe etwas Recherche gemacht, aber nichts war sehr klar ... Danke!SDL_Surface in GTK Window

+0

GTK wird typischerweise mit [cairo] (http://zetcode.com/gfx/cairo/cairobackends/) verwendet, nicht mit SDL, aber es ist trivial, mit den Mausbewegungsereignissen von SDL eigene Schaltflächen zu erstellen. –

+0

Ja, aber das Fenster wäre nicht so gut wie ein GTK-Fenster:/ – Zenor27

+0

@ Zenor27 Der wahrscheinlich stabilste Weg ist das Verwenden der Offscreen-Rendering-Oberfläche und das Kopieren von Pixeln auf GTK-Canvas. Nicht sehr schnell. Andere Wege sind plattformspezifisch, z.B. Sehen Sie sich https://stackoverflow.com/questions/47284284/how-to-render-sdl2-texture-into-gtk3-window an – keltar

Antwort

-1

Zeichnung Widgets SDL

Zeichnung Widgets (Menü, Buttons etc.) mit SDL Zeichenfunktionen und Handhabungs Aktionen durch die Cursor-Position während des Auftretens von Ereignisverfolgungs (auf dem Punkt war die Cursor während der Veranstaltung war durchgeführt). Dies wird sehr kompliziert und wäre besser, eine vorhandene GUI-Bibliothek mit einigen einfachen Hacks zu verwenden. Sie finden ein Codebeispiel zum Zeichnen einer Schaltfläche here.

Kopieren SDL Oberfläche in Ziel GUI Widget

Dieses Pixel der Kopie von Pixel beinhaltet (vordefinierte Funktionen verfügbar sein könnten, die gleichen, gdk_draw_rgb_image im Fall von GTK zu tun) der SDL Oberfläche in Ziel gui Widget (kann im Falle von GTK ein drawingArea sein).

Merging SDL Fenster in einen GUI-Widget

In X11 und win32-Systemen jeweils Fenster mit einem Fenster-ID angegeben werden und standardmäßig sdl und gtk würden eigenes Fenster ID resultierende zwei verschiedene Fenster können wir ausnutzen SDL_CreateWindowFrom Funktion zur Verwendung einzelner Fenster für SDL und GTK, in denen wir beide Bibliotheken zwingen, eine einzelne Fenster-ID zu verwenden. Sie können ähnliche Frage here finden.

GTK Stecker und Steckdose

Plug-and-Buchse ermöglicht Widget von einem Prozess zum anderen embeeding. GTK erstellt einen Socket und übergibt die Socket-ID an SDL, und SDL erstellt ein Fenster aus dieser Socket-ID.

Ereignisschleife Handhabung: Nach SDL mit GTK verschmelzenden Sie gtk finden könnten und sdl haben ihre eigenen Ereignisschleifen könnten daher Umgang Ereignisse nicht wie erwartet werden. Um dieses Problem zu lösen, können Sie Ereignisse in GTK verarbeiten und das Ereignis an SDL weitergeben, indem Sie die Funktion SDL_PushEvent verwenden und umgekehrt, falls Sie benutzerdefinierte Ereignisse verwenden.

. 
. 
static SDL_Event SDLevent; 
switch(event->keyval) 
{ 
    case GDK_KEY_m: 
     SDLevent.type = SDL_KEYUP; 
     SDLevent.key.keysym.sym = SDLK_m; 
     SDL_PushEvent(&SDLevent); 
     break; 
     . 
     . 
     . 

Diese link hat eine schöne Erklärung für die oben genannten Methoden.