---
cocoa.m | 44 +++++++++++++++++++++++++-------------------
1 files changed, 25 insertions(+), 19 deletions(-)
diff --git a/cocoa.m b/cocoa.m
index fe13952..d4b3df0 100644
--- a/cocoa.m
+++ b/cocoa.m
@@ -58,6 +58,7 @@ int qemu_main(int argc, char **argv); // main
defined in qemu/vl.c
NSWindow *normalWindow;
id cocoaView;
static void *screenBuffer;
+static DisplayChangeListener *dcl;
int gArgc;
char **gArgv;
@@ -293,7 +294,7 @@ int cocoa_keycode_to_qemu(int keycode)
COCOA_DEBUG("QemuCocoaView: dealloc\n");
if (screenBuffer)
- free(screenBuffer);
+ qemu_free(screenBuffer);
if (dataProviderRef)
CGDataProviderRelease(dataProviderRef);
@@ -396,18 +397,18 @@ int cocoa_keycode_to_qemu(int keycode)
if (dataProviderRef)
CGDataProviderRelease(dataProviderRef);
if (screenBuffer)
- free(screenBuffer);
- screenBuffer = malloc( w * 4 * h );
-
- ds->data = screenBuffer;
- ds->linesize = (w * 4);
- ds->depth = 32;
- ds->width = w;
- ds->height = h;
+ qemu_free(screenBuffer);
+ screenBuffer = qemu_mallocz( w * 4 * h );
+
+ ds->surface->data = screenBuffer;
+ ds->surface->linesize = (w * 4);
+ ds->surface->pf.depth = 32;
+ ds->surface->width = w;
+ ds->surface->height = h;
#ifdef __LITTLE_ENDIAN__
- ds->bgr = 1;
+ ds->surface->flags = 0x00;
#else
- ds->bgr = 0;
+ ds->surface->flags = QEMU_BIG_ENDIAN_FLAG;
#endif
dataProviderRef = CGDataProviderCreateWithData(NULL,
screenBuffer, w * 4 * h, NULL);
@@ -939,11 +940,11 @@ static void cocoa_update(DisplayState *ds, int
x, int y, int w, int h)
[cocoaView displayRect:rect];
}
-static void cocoa_resize(DisplayState *ds, int w, int h)
+static void cocoa_resize(DisplayState *ds)
{
COCOA_DEBUG("qemu_cocoa: cocoa_resize\n");
- [cocoaView resizeContentToWidth:w height:h displayState:ds];
+ [cocoaView resizeContentToWidth:(ds_get_width(ds))
height:(ds_get_height(ds)) displayState:ds];
}
static void cocoa_refresh(DisplayState *ds)
@@ -969,26 +970,31 @@ static void cocoa_refresh(DisplayState *ds)
[cocoaView handleEvent:event];
}
} while(event != nil);
+ COCOA_DEBUG("qemu_cocoa: vga_hw_update()\n");
vga_hw_update();
}
static void cocoa_cleanup(void)
{
COCOA_DEBUG("qemu_cocoa: cocoa_cleanup\n");
-
+ qemu_free(dcl);
}
void cocoa_display_init(DisplayState *ds, int full_screen)
{
COCOA_DEBUG("qemu_cocoa: cocoa_display_init\n");
- // register vga outpu callbacks
- ds->dpy_update = cocoa_update;
- ds->dpy_resize = cocoa_resize;
- ds->dpy_refresh = cocoa_refresh;
+ dcl = qemu_mallocz(sizeof(DisplayChangeListener));
+
+ // register vga output callbacks
+ dcl->dpy_update = cocoa_update;
+ dcl->dpy_resize = cocoa_resize;
+ dcl->dpy_refresh = cocoa_refresh;
+ register_displaychangelistener(ds, dcl);
+
// give window a initial Size
- cocoa_resize(ds, 640, 400);
+ cocoa_resize(ds);
// register cleanup function
atexit(cocoa_cleanup);