mfreerdp-server: fixed geometry
authorC-o-r-E <can.of.tuna@gmail.com>
Fri, 16 Nov 2012 01:07:28 +0000 (20:07 -0500)
committerC-o-r-E <can.of.tuna@gmail.com>
Fri, 16 Nov 2012 01:07:28 +0000 (20:07 -0500)
server/Mac/mf_peer.c

index 4492a1e..70096c8 100644 (file)
@@ -118,27 +118,38 @@ void mf_peer_rfx_update(freerdp_peer* client)
 {\r
     \r
     //check\r
-    \r
     mfInfo* mfi = mf_info_get_instance();\r
     \r
     mf_info_find_invalid_region(mfi);\r
     \r
+    if (mf_info_have_invalid_region(mfi) == false) {\r
+        return;\r
+    }\r
+    \r
     printf("\tinvalid -> (%d,%d), (%d,%d)\n",\r
            mfi->invalid.x,\r
            mfi->invalid.y,\r
            mfi->invalid.x + mfi->invalid.width,\r
            mfi->invalid.y + mfi->invalid.height);\r
-    \r
-    mf_info_clear_invalid_region(mfi);\r
-    \r
+        \r
     //capture entire screen\r
     \r
     int bytewidth;\r
     \r
-    CGImageRef image = CGDisplayCreateImage(kCGDirectMainDisplay);    // Main screenshot capture call\r
+    CGRect invRect;\r
     \r
-    CGSize frameSize = CGSizeMake(CGImageGetWidth(image), CGImageGetHeight(image));    // Get screenshot bounds\r
+    invRect.origin.x = mfi->invalid.x;\r
+    invRect.origin.y = mfi->invalid.y;\r
+    invRect.size.height = mfi->invalid.height;\r
+    invRect.size.width = mfi->invalid.width;\r
     \r
+    //CGImageRef image = CGDisplayCreateImage(kCGDirectMainDisplay);    // Main screenshot capture call\r
+    CGImageRef image = CGDisplayCreateImageForRect(kCGDirectMainDisplay, invRect);\r
+    //CGSize frameSize = CGSizeMake(CGImageGetWidth(image), CGImageGetHeight(image));    // Get screenshot bounds\r
+    \r
+    CGSize frameSize;\r
+    frameSize.width = 2880;\r
+    frameSize.height = 1800;\r
     \r
     CFDictionaryRef opts;\r
     \r
@@ -184,8 +195,9 @@ void mf_peer_rfx_update(freerdp_peer* client)
                                                  frameSize.height, 8, 4*frameSize.width, rgbColorSpace,\r
                                                  kCGImageAlphaNoneSkipLast);\r
     \r
-    CGContextDrawImage(context, CGRectMake(0, 0, CGImageGetWidth(image),\r
-                                           CGImageGetHeight(image)), image);\r
+    CGContextDrawImage(context,\r
+                       CGRectMake(0, 0, frameSize.width, frameSize.height),\r
+                       image);\r
     \r
     bytewidth = frameSize.width * 4; // Assume 4 bytes/pixel for now\r
     bytewidth = (bytewidth + 3) & ~3; // Align to 4 bytes\r
@@ -210,25 +222,25 @@ void mf_peer_rfx_update(freerdp_peer* client)
     \r
     rect.x = 0;\r
     rect.y = 0;\r
-    rect.width = frameSize.width;\r
-    rect.height = frameSize.height;\r
+    rect.width = mfi->invalid.width;\r
+    rect.height = mfi->invalid.height;\r
     \r
     rfx_compose_message(mfp->rfx_context, s, &rect, 1,\r
-                        (BYTE*) pxdata, frameSize.width, frameSize.height, frameSize.width * 4);\r
+                        (BYTE*) pxdata, rect.width, rect.height, frameSize.width * 4);\r
     \r
-    UINT32 x = 0;\r
-    UINT32 y = 0;\r
+    UINT32 x = mfi->invalid.x;\r
+    UINT32 y = mfi->invalid.y;\r
     \r
     cmd->destLeft = x;\r
     cmd->destTop = y;\r
-    cmd->destRight = x + frameSize.width;\r
-    cmd->destBottom = y + frameSize.height;\r
+    cmd->destRight = x + rect.width;\r
+    cmd->destBottom = y + rect.height;\r
     \r
     \r
        cmd->bpp = 32;\r
        cmd->codecID = 3;\r
-       cmd->width = frameSize.width;\r
-       cmd->height = frameSize.height;\r
+       cmd->width = rect.width;\r
+       cmd->height = rect.height;\r
        cmd->bitmapDataLength = stream_get_length(s);\r
        cmd->bitmapData = stream_get_head(s);\r
     \r
@@ -239,6 +251,8 @@ void mf_peer_rfx_update(freerdp_peer* client)
     \r
     //clean up\r
     \r
+    mf_info_clear_invalid_region(mfi);\r
+    // note: need to stop getting new dirty rects until here\r
     \r
     CGColorSpaceRelease(rgbColorSpace);\r
     CGImageRelease(image);\r