ector: add bounding box info in RLE data for software backend.
Signed-off-by: Cedric BAIL <cedric@osg.samsung.com>
This commit is contained in:
parent
146f3c52b5
commit
f1a4f461c2
|
@ -56,6 +56,7 @@ typedef struct _Raster_Buffer
|
||||||
|
|
||||||
typedef struct _Shape_Rle_Data
|
typedef struct _Shape_Rle_Data
|
||||||
{
|
{
|
||||||
|
Eina_Rectangle bbox;
|
||||||
unsigned short alloc;
|
unsigned short alloc;
|
||||||
unsigned short size;
|
unsigned short size;
|
||||||
SW_FT_Span *spans;// array of Scanlines.
|
SW_FT_Span *spans;// array of Scanlines.
|
||||||
|
|
|
@ -388,8 +388,11 @@ _rle_generation_cb( int count, const SW_FT_Span* spans,void *user)
|
||||||
Shape_Rle_Data *
|
Shape_Rle_Data *
|
||||||
ector_software_rasterizer_generate_rle_data(Software_Rasterizer *rasterizer, SW_FT_Outline *outline)
|
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));
|
Shape_Rle_Data *rle_data = (Shape_Rle_Data *) calloc(1, sizeof(Shape_Rle_Data));
|
||||||
SW_FT_Raster_Params params;
|
SW_FT_Raster_Params params;
|
||||||
|
SW_FT_Span* span;
|
||||||
|
|
||||||
params.flags = SW_FT_RASTER_FLAG_DIRECT | SW_FT_RASTER_FLAG_AA ;
|
params.flags = SW_FT_RASTER_FLAG_DIRECT | SW_FT_RASTER_FLAG_AA ;
|
||||||
params.gray_spans = &_rle_generation_cb;
|
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, ¶ms);
|
sw_ft_grays_raster.raster_render(rasterizer->raster, ¶ms);
|
||||||
|
|
||||||
|
// 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;
|
return rle_data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue