aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/libraries/evas/src/lib/canvas/evas_render.c
diff options
context:
space:
mode:
Diffstat (limited to 'libraries/evas/src/lib/canvas/evas_render.c')
-rw-r--r--libraries/evas/src/lib/canvas/evas_render.c63
1 files changed, 49 insertions, 14 deletions
diff --git a/libraries/evas/src/lib/canvas/evas_render.c b/libraries/evas/src/lib/canvas/evas_render.c
index cdedaec..32ce988 100644
--- a/libraries/evas/src/lib/canvas/evas_render.c
+++ b/libraries/evas/src/lib/canvas/evas_render.c
@@ -612,6 +612,8 @@ pending_change(void *data, void *gdata __UNUSED__)
612 obj->changed_move_only = 0; 612 obj->changed_move_only = 0;
613 obj->changed_nomove = 0; 613 obj->changed_nomove = 0;
614 obj->changed_move = 0; 614 obj->changed_move = 0;
615 obj->changed_map = 0;
616 obj->changed_pchange = 0;
615 } 617 }
616 return obj->changed ? EINA_TRUE : EINA_FALSE; 618 return obj->changed ? EINA_TRUE : EINA_FALSE;
617} 619}
@@ -984,6 +986,8 @@ evas_render_mapped(Evas *e, Evas_Object *obj, void *context, void *surface,
984 o2->changed_move_only = 0; 986 o2->changed_move_only = 0;
985 o2->changed_nomove = 0; 987 o2->changed_nomove = 0;
986 o2->changed_move = 0; 988 o2->changed_move = 0;
989 o2->changed_map = 0;
990 o2->changed_pchange = 0;
987 continue; 991 continue;
988 } 992 }
989 if (o2->changed) 993 if (o2->changed)
@@ -994,6 +998,8 @@ evas_render_mapped(Evas *e, Evas_Object *obj, void *context, void *surface,
994 o2->changed_move_only = 0; 998 o2->changed_move_only = 0;
995 o2->changed_nomove = 0; 999 o2->changed_nomove = 0;
996 o2->changed_move = 0; 1000 o2->changed_move = 0;
1001 o2->changed_map = 0;
1002 o2->changed_pchange = 0;
997 break; 1003 break;
998 } 1004 }
999 } 1005 }
@@ -1002,16 +1008,21 @@ evas_render_mapped(Evas *e, Evas_Object *obj, void *context, void *surface,
1002 obj->changed_move_only = 0; 1008 obj->changed_move_only = 0;
1003 obj->changed_nomove = 0; 1009 obj->changed_nomove = 0;
1004 obj->changed_move = 0; 1010 obj->changed_move = 0;
1011 obj->changed_map = 0;
1012 obj->changed_pchange = 0;
1005 } 1013 }
1006 else 1014 else
1007 { 1015 {
1008 if (obj->changed) 1016 if (obj->changed)
1009 { 1017 {
1010 changed = 1; 1018 if ((obj->changed_pchange) && (obj->changed_map))
1019 changed = 1;
1011 obj->changed = 0; 1020 obj->changed = 0;
1012 obj->changed_move_only = 0; 1021 obj->changed_move_only = 0;
1013 obj->changed_nomove = 0; 1022 obj->changed_nomove = 0;
1014 obj->changed_move = 0; 1023 obj->changed_move = 0;
1024 obj->changed_map = 0;
1025 obj->changed_pchange = 0;
1015 } 1026 }
1016 } 1027 }
1017 1028
@@ -1144,10 +1155,12 @@ evas_render_mapped(Evas *e, Evas_Object *obj, void *context, void *surface,
1144 e->engine.data.context, 1155 e->engine.data.context,
1145 ecx, ecy, ecw, ech); 1156 ecx, ecy, ecw, ech);
1146 if (obj->cur.cache.clip.visible) 1157 if (obj->cur.cache.clip.visible)
1147 obj->layer->evas->engine.func->image_map_draw 1158 {
1148 (e->engine.data.output, e->engine.data.context, surface, 1159 obj->layer->evas->engine.func->image_map_draw
1149 obj->cur.map->surface, obj->cur.map->count, pts, 1160 (e->engine.data.output, e->engine.data.context, surface,
1150 obj->cur.map->smooth, 0); 1161 obj->cur.map->surface, obj->cur.map->count, pts,
1162 obj->cur.map->smooth, 0);
1163 }
1151 // FIXME: needs to cache these maps and 1164 // FIXME: needs to cache these maps and
1152 // keep them only rendering updates 1165 // keep them only rendering updates
1153 // obj->layer->evas->engine.func->image_map_surface_free 1166 // obj->layer->evas->engine.func->image_map_surface_free
@@ -1500,6 +1513,12 @@ evas_render_updates_internal(Evas *e,
1500 off_x = cx - ux; 1513 off_x = cx - ux;
1501 off_y = cy - uy; 1514 off_y = cy - uy;
1502 /* build obscuring objects list (in order from bottom to top) */ 1515 /* build obscuring objects list (in order from bottom to top) */
1516 if (alpha)
1517 {
1518 e->engine.func->context_clip_set(e->engine.data.output,
1519 e->engine.data.context,
1520 ux + off_x, uy + off_y, uw, uh);
1521 }
1503 for (i = 0; i < e->obscuring_objects.count; ++i) 1522 for (i = 0; i < e->obscuring_objects.count; ++i)
1504 { 1523 {
1505 obj = (Evas_Object *)eina_array_data_get 1524 obj = (Evas_Object *)eina_array_data_get
@@ -1515,9 +1534,6 @@ evas_render_updates_internal(Evas *e,
1515 } 1534 }
1516 if (alpha) 1535 if (alpha)
1517 { 1536 {
1518 e->engine.func->context_clip_set(e->engine.data.output,
1519 e->engine.data.context,
1520 ux + off_x, uy + off_y, uw, uh);
1521 e->engine.func->context_color_set(e->engine.data.output, 1537 e->engine.func->context_color_set(e->engine.data.output,
1522 e->engine.data.context, 1538 e->engine.data.context,
1523 0, 0, 0, 0); 1539 0, 0, 0, 0);
@@ -1548,7 +1564,7 @@ evas_render_updates_internal(Evas *e,
1548 (obj->cur.visible) && 1564 (obj->cur.visible) &&
1549 (!obj->delete_me) && 1565 (!obj->delete_me) &&
1550 (obj->cur.cache.clip.visible) && 1566 (obj->cur.cache.clip.visible) &&
1551 // (!obj->smart.smart) && 1567// (!obj->smart.smart) &&
1552 ((obj->cur.color.a > 0 || obj->cur.render_op != EVAS_RENDER_BLEND))) 1568 ((obj->cur.color.a > 0 || obj->cur.render_op != EVAS_RENDER_BLEND)))
1553 { 1569 {
1554 int x, y, w, h; 1570 int x, y, w, h;
@@ -1579,6 +1595,9 @@ evas_render_updates_internal(Evas *e,
1579 else 1595 else
1580 e->engine.func->context_mask_unset(e->engine.data.output, 1596 e->engine.func->context_mask_unset(e->engine.data.output,
1581 e->engine.data.context); 1597 e->engine.data.context);
1598 e->engine.func->context_clip_set(e->engine.data.output,
1599 e->engine.data.context,
1600 x, y, w, h);
1582#if 1 /* FIXME: this can slow things down... figure out optimum... coverage */ 1601#if 1 /* FIXME: this can slow things down... figure out optimum... coverage */
1583 for (j = offset; j < e->temporary_objects.count; ++j) 1602 for (j = offset; j < e->temporary_objects.count; ++j)
1584 { 1603 {
@@ -1589,9 +1608,6 @@ evas_render_updates_internal(Evas *e,
1589 _evas_render_cutout_add(e, obj2, off_x, off_y); 1608 _evas_render_cutout_add(e, obj2, off_x, off_y);
1590 } 1609 }
1591#endif 1610#endif
1592 e->engine.func->context_clip_set(e->engine.data.output,
1593 e->engine.data.context,
1594 x, y, w, h);
1595 clean_them |= evas_render_mapped(e, obj, e->engine.data.context, 1611 clean_them |= evas_render_mapped(e, obj, e->engine.data.context,
1596 surface, off_x, off_y, 0, 1612 surface, off_x, off_y, 0,
1597 cx, cy, cw, ch 1613 cx, cy, cw, ch
@@ -1637,6 +1653,8 @@ evas_render_updates_internal(Evas *e,
1637 obj->changed_move_only = 0; 1653 obj->changed_move_only = 0;
1638 obj->changed_nomove = 0; 1654 obj->changed_nomove = 0;
1639 obj->changed_move = 0; 1655 obj->changed_move = 0;
1656 obj->changed_map = 0;
1657 obj->changed_pchange = 0;
1640 } 1658 }
1641 else if ((obj->cur.map != obj->prev.map) || 1659 else if ((obj->cur.map != obj->prev.map) ||
1642 (obj->cur.usemap != obj->prev.usemap)) 1660 (obj->cur.usemap != obj->prev.usemap))
@@ -1648,6 +1666,8 @@ evas_render_updates_internal(Evas *e,
1648 obj->changed_move_only = 0; 1666 obj->changed_move_only = 0;
1649 obj->changed_nomove = 0; 1667 obj->changed_nomove = 0;
1650 obj->changed_move = 0; 1668 obj->changed_move = 0;
1669 obj->changed_map = 0;
1670 obj->changed_pchange = 0;
1651 } 1671 }
1652 /* moved to other pre-process phase 1 1672 /* moved to other pre-process phase 1
1653 if (obj->delete_me == 2) 1673 if (obj->delete_me == 2)
@@ -1684,6 +1704,7 @@ evas_render_updates_internal(Evas *e,
1684 e->framespace.changed = 0; 1704 e->framespace.changed = 0;
1685 e->invalidate = 0; 1705 e->invalidate = 0;
1686 1706
1707 // always clean... lots of mem waste!
1687 /* If their are some object to restack or some object to delete, 1708 /* If their are some object to restack or some object to delete,
1688 * it's useless to keep the render object list around. */ 1709 * it's useless to keep the render object list around. */
1689 if (clean_them) 1710 if (clean_them)
@@ -1693,6 +1714,17 @@ evas_render_updates_internal(Evas *e,
1693 eina_array_clean(&e->restack_objects); 1714 eina_array_clean(&e->restack_objects);
1694 eina_array_clean(&e->delete_objects); 1715 eina_array_clean(&e->delete_objects);
1695 eina_array_clean(&e->obscuring_objects); 1716 eina_array_clean(&e->obscuring_objects);
1717 eina_array_clean(&e->temporary_objects);
1718 eina_array_clean(&e->clip_changes);
1719/* we should flush here and have a mempool system for this
1720 eina_array_flush(&e->active_objects);
1721 eina_array_flush(&e->render_objects);
1722 eina_array_flush(&e->restack_objects);
1723 eina_array_flush(&e->delete_objects);
1724 eina_array_flush(&e->obscuring_objects);
1725 eina_array_flush(&e->temporary_objects);
1726 eina_array_flush(&e->clip_changes);
1727 */
1696 e->invalidate = 1; 1728 e->invalidate = 1;
1697 } 1729 }
1698 1730
@@ -1768,11 +1800,14 @@ evas_render_idle_flush(Evas *e)
1768 (e->engine.data.output)) 1800 (e->engine.data.output))
1769 e->engine.func->output_idle_flush(e->engine.data.output); 1801 e->engine.func->output_idle_flush(e->engine.data.output);
1770 1802
1771 eina_array_flush(&e->delete_objects);
1772 eina_array_flush(&e->active_objects); 1803 eina_array_flush(&e->active_objects);
1773 eina_array_flush(&e->restack_objects);
1774 eina_array_flush(&e->render_objects); 1804 eina_array_flush(&e->render_objects);
1805 eina_array_flush(&e->restack_objects);
1806 eina_array_flush(&e->delete_objects);
1807 eina_array_flush(&e->obscuring_objects);
1808 eina_array_flush(&e->temporary_objects);
1775 eina_array_flush(&e->clip_changes); 1809 eina_array_flush(&e->clip_changes);
1810 eina_array_flush(&e->temporary_objects);
1776 1811
1777 e->invalidate = 1; 1812 e->invalidate = 1;
1778} 1813}