qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [PATCH] Update cocoa.m to match new DisplayState code


From: Samuel Benson
Subject: [Qemu-devel] [PATCH] Update cocoa.m to match new DisplayState code
Date: Fri, 23 Jan 2009 16:41:49 -0600

Hello all,

Attached patch is an attempt to update cocoa.m to be in sync with the new
displaystate changes committed a few weeks back.

Tested working on OS X 10.5.6 on G4 and G5 PPC machines.

Tests and comments welcome.

---

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);




reply via email to

[Prev in Thread] Current Thread [Next in Thread]