GTK+ Integration

If you are building a Gtk application, you might want to have a look at the code inside the frontend package. It contains a sample Gtk+ app to embed the emulator.

Rendering

A renderer for Gtk.DrawingArea is available, using software rendering. A hardware accelerated renderer is planned.

To use it:

import cairo
from gi.repository import Gtk
from desmume.emulator import DeSmuME
from desmume.frontend.gtk_drawing_area_desmume import AbstractRenderer

emu = DeSmuME()

renderer = AbstractRenderer.impl(emu)
renderer.init()

# Example signal handlers:
def on_wDrawScreen_main_draw_event(self, widget: Gtk.DrawingArea, ctx: cairo.Context, *args):
    return renderer.screen(screen_width, screen_height, ctx, 1)

def on_wDrawScreen_main_configure_event(self, widget: Gtk.DrawingArea, *args):
    renderer.reshape(widget, 0)
    return True

def on_wDrawScreen_sub_draw_event(self, widget: Gtk.DrawingArea, ctx: cairo.Context, *args):
    return renderer.screen(screen_width, screen_height, ctx, 1)

def on_wDrawScreen_sub_configure_event(self, widget: Gtk.DrawingArea, *args):
    renderer.reshape(widget, 1)
    return True