[ros-diffs] [fireball] 44108: - Move region structure definition to user.h. - Implement creating a region from RECTL array.

fireball at svn.reactos.org fireball at svn.reactos.org
Wed Nov 11 20:23:49 CET 2009


Author: fireball
Date: Wed Nov 11 20:23:49 2009
New Revision: 44108

URL: http://svn.reactos.org/svn/reactos?rev=44108&view=rev
Log:
- Move region structure definition to user.h.
- Implement creating a region from RECTL array.

Modified:
    branches/arwinss/reactos/subsystems/win32/win32k/include/user.h
    branches/arwinss/reactos/subsystems/win32/win32k/wine/region.c

Modified: branches/arwinss/reactos/subsystems/win32/win32k/include/user.h
URL: http://svn.reactos.org/svn/reactos/branches/arwinss/reactos/subsystems/win32/win32k/include/user.h?rev=44108&r1=44107&r2=44108&view=diff
==============================================================================
--- branches/arwinss/reactos/subsystems/win32/win32k/include/user.h [iso-8859-1] (original)
+++ branches/arwinss/reactos/subsystems/win32/win32k/include/user.h [iso-8859-1] Wed Nov 11 20:23:49 2009
@@ -64,6 +64,14 @@
     unsigned int         users;          /* processes and threads using this desktop */
 };
 
+struct region
+{
+    int size;
+    int num_rects;
+    rectangle_t *rects;
+    rectangle_t extents;
+};
+
 /* user handles functions */
 
 extern user_handle_t alloc_user_handle( void *ptr, enum user_object type );
@@ -105,6 +113,7 @@
 
 extern struct region *create_empty_region(void);
 extern struct region *create_region_from_req_data( const void *data, data_size_t size );
+extern struct region *create_region_from_rects( const void *data, unsigned long count );
 extern void free_region( struct region *region );
 extern void set_region_rect( struct region *region, const rectangle_t *rect );
 extern rectangle_t *get_region_data( const struct region *region, data_size_t max_size,

Modified: branches/arwinss/reactos/subsystems/win32/win32k/wine/region.c
URL: http://svn.reactos.org/svn/reactos/branches/arwinss/reactos/subsystems/win32/win32k/wine/region.c?rev=44108&r1=44107&r2=44108&view=diff
==============================================================================
--- branches/arwinss/reactos/subsystems/win32/win32k/wine/region.c [iso-8859-1] (original)
+++ branches/arwinss/reactos/subsystems/win32/win32k/wine/region.c [iso-8859-1] Wed Nov 11 20:23:49 2009
@@ -84,14 +84,6 @@
 #define NDEBUG
 #include <debug.h>
 
-struct region
-{
-    int size;
-    int num_rects;
-    rectangle_t *rects;
-    rectangle_t extents;
-};
-
 
 #define RGN_DEFAULT_RECTS 2
 
@@ -615,6 +607,39 @@
     return region;
 }
 
+/* create a region from request data */
+struct region *create_region_from_rects( const void *data, unsigned long nb_rects )
+{
+    unsigned int alloc_rects;
+    struct region *region;
+    const RECTL *rects = data;
+    int i;
+
+    /* special case: empty region can be specified by a single all-zero rectangle */
+    if (nb_rects == 1 && rects->left == 0 && rects->top == 0 &&
+        rects->right == 0 && rects->bottom == 0) nb_rects = 0;
+
+    if (!(region = mem_alloc( sizeof(*region) ))) return NULL;
+
+    alloc_rects = max( nb_rects, RGN_DEFAULT_RECTS );
+    if (!(region->rects = mem_alloc( alloc_rects * sizeof(*region->rects) )))
+    {
+        ExFreePool( region );
+        return NULL;
+    }
+    region->size = alloc_rects;
+    region->num_rects = nb_rects;
+    for (i=0; i<region->num_rects; i++)
+    {
+        region->rects[i].left = rects[i].left;
+        region->rects[i].top = rects[i].top;
+        region->rects[i].right = rects[i].right;
+        region->rects[i].bottom = rects[i].bottom;
+    }
+    set_region_extents( region );
+    return region;
+}
+
 /* free a region */
 void free_region( struct region *region )
 {




More information about the Ros-diffs mailing list