forked from enlightenment/efl
evas/common - scale sample code refactoring. simpler and more effcient.
This commit is contained in:
parent
029d539a85
commit
53fa4cd2d8
|
@ -78,112 +78,118 @@ evas_common_scale_rgba_sample_draw(RGBA_Image *src, RGBA_Image *dst, int dst_cli
|
||||||
(dst_region_w <= 0) || (dst_region_h <= 0)) return;
|
(dst_region_w <= 0) || (dst_region_h <= 0)) return;
|
||||||
|
|
||||||
src_w = src->cache_entry.w;
|
src_w = src->cache_entry.w;
|
||||||
|
if (src_region_x >= src_w) return;
|
||||||
|
|
||||||
src_h = src->cache_entry.h;
|
src_h = src->cache_entry.h;
|
||||||
|
if (src_region_y >= src_h) return;
|
||||||
|
|
||||||
dst_w = dst->cache_entry.w;
|
dst_w = dst->cache_entry.w;
|
||||||
dst_h = dst->cache_entry.h;
|
dst_h = dst->cache_entry.h;
|
||||||
|
|
||||||
src_data = src->image.data;
|
src_data = src->image.data;
|
||||||
dst_data = dst->image.data;
|
dst_data = dst->image.data;
|
||||||
|
|
||||||
|
/* sanitise clip x */
|
||||||
if (dst_clip_x < 0)
|
if (dst_clip_x < 0)
|
||||||
{
|
{
|
||||||
dst_clip_w += dst_clip_x;
|
dst_clip_w += dst_clip_x;
|
||||||
dst_clip_x = 0;
|
dst_clip_x = 0;
|
||||||
}
|
}
|
||||||
if (dst_clip_y < 0)
|
|
||||||
{
|
|
||||||
dst_clip_h += dst_clip_y;
|
|
||||||
dst_clip_y = 0;
|
|
||||||
}
|
|
||||||
if ((dst_clip_x + dst_clip_w) > dst_w)
|
if ((dst_clip_x + dst_clip_w) > dst_w)
|
||||||
dst_clip_w = dst_w - dst_clip_x;
|
dst_clip_w = dst_w - dst_clip_x;
|
||||||
if ((dst_clip_y + dst_clip_h) > dst_h)
|
|
||||||
dst_clip_h = dst_h - dst_clip_y;
|
|
||||||
|
|
||||||
if (dst_clip_x < dst_region_x)
|
if (dst_clip_x < dst_region_x)
|
||||||
{
|
{
|
||||||
dst_clip_w += dst_clip_x - dst_region_x;
|
dst_clip_w += dst_clip_x - dst_region_x;
|
||||||
dst_clip_x = dst_region_x;
|
dst_clip_x = dst_region_x;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (dst_clip_x >= dst_w) return;
|
||||||
|
|
||||||
if ((dst_clip_x + dst_clip_w) > (dst_region_x + dst_region_w))
|
if ((dst_clip_x + dst_clip_w) > (dst_region_x + dst_region_w))
|
||||||
dst_clip_w = dst_region_x + dst_region_w - dst_clip_x;
|
dst_clip_w = dst_region_x + dst_region_w - dst_clip_x;
|
||||||
|
|
||||||
|
if (dst_clip_w <= 0) return;
|
||||||
|
|
||||||
|
/* sanitise clip y */
|
||||||
|
if (dst_clip_y < 0)
|
||||||
|
{
|
||||||
|
dst_clip_h += dst_clip_y;
|
||||||
|
dst_clip_y = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((dst_clip_y + dst_clip_h) > dst_h)
|
||||||
|
dst_clip_h = dst_h - dst_clip_y;
|
||||||
|
|
||||||
if (dst_clip_y < dst_region_y)
|
if (dst_clip_y < dst_region_y)
|
||||||
{
|
{
|
||||||
dst_clip_h += dst_clip_y - dst_region_y;
|
dst_clip_h += dst_clip_y - dst_region_y;
|
||||||
dst_clip_y = dst_region_y;
|
dst_clip_y = dst_region_y;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (dst_clip_y >= dst_h) return;
|
||||||
|
|
||||||
if ((dst_clip_y + dst_clip_h) > (dst_region_y + dst_region_h))
|
if ((dst_clip_y + dst_clip_h) > (dst_region_y + dst_region_h))
|
||||||
dst_clip_h = dst_region_y + dst_region_h - dst_clip_y;
|
dst_clip_h = dst_region_y + dst_region_h - dst_clip_y;
|
||||||
|
|
||||||
if ((dst_clip_w <= 0) || (dst_clip_h <= 0)) return;
|
if (dst_clip_h <= 0) return;
|
||||||
|
|
||||||
/* sanitise x */
|
/* sanitise region x */
|
||||||
if (src_region_x < 0)
|
if (src_region_x < 0)
|
||||||
{
|
{
|
||||||
dst_region_x -= (src_region_x * dst_region_w) / src_region_w;
|
dst_region_x -= (src_region_x * dst_region_w) / src_region_w;
|
||||||
dst_region_w += (src_region_x * dst_region_w) / src_region_w;
|
dst_region_w += (src_region_x * dst_region_w) / src_region_w;
|
||||||
src_region_w += src_region_x;
|
src_region_w += src_region_x;
|
||||||
src_region_x = 0;
|
src_region_x = 0;
|
||||||
|
|
||||||
|
if (dst_clip_x < dst_region_x)
|
||||||
|
{
|
||||||
|
dst_clip_w += (dst_clip_x - dst_region_x);
|
||||||
|
dst_clip_x = dst_region_x;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (src_region_x >= src_w) return;
|
|
||||||
|
if ((dst_clip_x + dst_clip_w) > dst_w)
|
||||||
|
dst_clip_w = dst_w - dst_clip_x;
|
||||||
|
|
||||||
|
if (dst_clip_w <= 0) return;
|
||||||
|
|
||||||
if ((src_region_x + src_region_w) > src_w)
|
if ((src_region_x + src_region_w) > src_w)
|
||||||
{
|
{
|
||||||
dst_region_w = (dst_region_w * (src_w - src_region_x)) / (src_region_w);
|
dst_region_w = (dst_region_w * (src_w - src_region_x)) / (src_region_w);
|
||||||
src_region_w = src_w - src_region_x;
|
src_region_w = src_w - src_region_x;
|
||||||
}
|
}
|
||||||
if (dst_region_w <= 0) return;
|
|
||||||
if (src_region_w <= 0) return;
|
|
||||||
if (dst_clip_x < 0)
|
|
||||||
{
|
|
||||||
dst_clip_w += dst_clip_x;
|
|
||||||
dst_clip_x = 0;
|
|
||||||
}
|
|
||||||
if (dst_clip_w <= 0) return;
|
|
||||||
if (dst_clip_x >= dst_w) return;
|
|
||||||
if (dst_clip_x < dst_region_x)
|
|
||||||
{
|
|
||||||
dst_clip_w += (dst_clip_x - dst_region_x);
|
|
||||||
dst_clip_x = dst_region_x;
|
|
||||||
}
|
|
||||||
if ((dst_clip_x + dst_clip_w) > dst_w)
|
|
||||||
{
|
|
||||||
dst_clip_w = dst_w - dst_clip_x;
|
|
||||||
}
|
|
||||||
if (dst_clip_w <= 0) return;
|
|
||||||
|
|
||||||
/* sanitise y */
|
if ((dst_region_w <= 0) || (src_region_w <= 0)) return;
|
||||||
|
|
||||||
|
/* sanitise region y */
|
||||||
if (src_region_y < 0)
|
if (src_region_y < 0)
|
||||||
{
|
{
|
||||||
dst_region_y -= (src_region_y * dst_region_h) / src_region_h;
|
dst_region_y -= (src_region_y * dst_region_h) / src_region_h;
|
||||||
dst_region_h += (src_region_y * dst_region_h) / src_region_h;
|
dst_region_h += (src_region_y * dst_region_h) / src_region_h;
|
||||||
src_region_h += src_region_y;
|
src_region_h += src_region_y;
|
||||||
src_region_y = 0;
|
src_region_y = 0;
|
||||||
|
|
||||||
|
if (dst_clip_y < dst_region_y)
|
||||||
|
{
|
||||||
|
dst_clip_h += (dst_clip_y - dst_region_y);
|
||||||
|
dst_clip_y = dst_region_y;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (src_region_y >= src_h) return;
|
|
||||||
|
if ((dst_clip_y + dst_clip_h) > dst_h)
|
||||||
|
dst_clip_h = dst_h - dst_clip_y;
|
||||||
|
|
||||||
|
if (dst_clip_h <= 0) return;
|
||||||
|
|
||||||
if ((src_region_y + src_region_h) > src_h)
|
if ((src_region_y + src_region_h) > src_h)
|
||||||
{
|
{
|
||||||
dst_region_h = (dst_region_h * (src_h - src_region_y)) / (src_region_h);
|
dst_region_h = (dst_region_h * (src_h - src_region_y)) / (src_region_h);
|
||||||
src_region_h = src_h - src_region_y;
|
src_region_h = src_h - src_region_y;
|
||||||
}
|
}
|
||||||
if (dst_region_h <= 0) return;
|
|
||||||
if (src_region_h <= 0) return;
|
if ((dst_region_h <= 0) || (src_region_h <= 0)) return;
|
||||||
if (dst_clip_y < 0)
|
|
||||||
{
|
|
||||||
dst_clip_h += dst_clip_y;
|
|
||||||
dst_clip_y = 0;
|
|
||||||
}
|
|
||||||
if (dst_clip_h <= 0) return;
|
|
||||||
if (dst_clip_y >= dst_h) return;
|
|
||||||
if (dst_clip_y < dst_region_y)
|
|
||||||
{
|
|
||||||
dst_clip_h += (dst_clip_y - dst_region_y);
|
|
||||||
dst_clip_y = dst_region_y;
|
|
||||||
}
|
|
||||||
if ((dst_clip_y + dst_clip_h) > dst_h)
|
|
||||||
{
|
|
||||||
dst_clip_h = dst_h - dst_clip_y;
|
|
||||||
}
|
|
||||||
if (dst_clip_h <= 0) return;
|
|
||||||
|
|
||||||
/* allocate scale lookup tables */
|
/* allocate scale lookup tables */
|
||||||
lin_ptr = alloca(dst_clip_w * sizeof(int));
|
lin_ptr = alloca(dst_clip_w * sizeof(int));
|
||||||
|
|
Loading…
Reference in New Issue