qemu-devel
[Top][All Lists]
Advanced

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

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


From: Anthony Liguori
Subject: Re: [Qemu-devel] [PATCH] Update cocoa.m to match new DisplayState code
Date: Sat, 24 Jan 2009 11:41:59 -0600
User-agent: Thunderbird 2.0.0.19 (X11/20090105)

Samuel Benson wrote:
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.

Can you add a signed-off-by?

Regards,

Anthony Liguori

---

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]