cedric pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=f1a4f461c2f90372035c59fc9cc376d25ad54c27

commit f1a4f461c2f90372035c59fc9cc376d25ad54c27
Author: Subhransu Mohanty <sub.moha...@samsung.com>
Date:   Mon Aug 17 13:45:42 2015 +0900

    ector: add bounding box info in RLE data for software backend.
    
    Signed-off-by: Cedric BAIL <ced...@osg.samsung.com>
---
 src/lib/ector/software/ector_software_private.h    |  1 +
 src/lib/ector/software/ector_software_rasterizer.c | 20 ++++++++++++++++++++
 2 files changed, 21 insertions(+)

diff --git a/src/lib/ector/software/ector_software_private.h 
b/src/lib/ector/software/ector_software_private.h
index c91d1d4..5fefe59 100644
--- a/src/lib/ector/software/ector_software_private.h
+++ b/src/lib/ector/software/ector_software_private.h
@@ -56,6 +56,7 @@ typedef struct _Raster_Buffer
 
 typedef struct _Shape_Rle_Data
 {
+   Eina_Rectangle   bbox;
    unsigned short   alloc;
    unsigned short   size;
    SW_FT_Span      *spans;// array of Scanlines.
diff --git a/src/lib/ector/software/ector_software_rasterizer.c 
b/src/lib/ector/software/ector_software_rasterizer.c
index 47a0cae..5afb1ca 100644
--- a/src/lib/ector/software/ector_software_rasterizer.c
+++ b/src/lib/ector/software/ector_software_rasterizer.c
@@ -388,8 +388,11 @@ _rle_generation_cb( int count, const SW_FT_Span*  
spans,void *user)
 Shape_Rle_Data *
 ector_software_rasterizer_generate_rle_data(Software_Rasterizer *rasterizer, 
SW_FT_Outline *outline)
 {
+   int i, rle_size;
+   int l = 0, t = 0, r = 0, b = 0;
    Shape_Rle_Data *rle_data = (Shape_Rle_Data *) calloc(1, 
sizeof(Shape_Rle_Data));
    SW_FT_Raster_Params params;
+   SW_FT_Span* span;
 
    params.flags = SW_FT_RASTER_FLAG_DIRECT | SW_FT_RASTER_FLAG_AA ;
    params.gray_spans = &_rle_generation_cb;
@@ -398,6 +401,23 @@ 
ector_software_rasterizer_generate_rle_data(Software_Rasterizer *rasterizer, SW_
 
    sw_ft_grays_raster.raster_render(rasterizer->raster, &params);
 
+   // update RLE bounding box.
+   span = rle_data->spans;
+   rle_size = rle_data->size;
+   if (rle_size)
+     {
+        t = span[0].y;
+        b = span[rle_size-1].y;
+        for (i = 0; i < rle_size; i++)
+          {
+             if (span[i].x < l) l = span[i].x;
+             if (span[i].x + span[i].len > r) r = span[i].x + span[i].len;
+          }
+        rle_data->bbox.x = l;
+        rle_data->bbox.y = t;
+        rle_data->bbox.w = r - l;
+        rle_data->bbox.h = b - t + 1;
+     }
    return rle_data;
 }
 

-- 


Reply via email to