discomfitor pushed a commit to branch master.
commit 5654d4ea4ba5cc044488a272770c292bf793a560
Author: Mike Blumenkrantz <[email protected]>
Date: Fri Apr 19 09:59:39 2013 +0100
simplify comp mirror creation, update related fixme
---
src/bin/e_comp.c | 43 ++++++++++++++++---------------------------
1 file changed, 16 insertions(+), 27 deletions(-)
diff --git a/src/bin/e_comp.c b/src/bin/e_comp.c
index 5038a3a..97d481f 100644
--- a/src/bin/e_comp.c
+++ b/src/bin/e_comp.c
@@ -1907,6 +1907,7 @@ static Evas_Object *
_e_comp_win_mirror_add(E_Comp_Win *cw)
{
Evas_Object *o;
+ int w, h;
if (!cw->c) return NULL;
@@ -1919,9 +1920,8 @@ _e_comp_win_mirror_add(E_Comp_Win *cw)
if ((cw->pixmap) && (cw->pw > 0) && (cw->ph > 0))
{
- unsigned int *pix;
- Eina_Bool alpha;
- int w, h;
+ unsigned int *pix = NULL;
+ Eina_Bool alpha, argb = EINA_FALSE;
alpha = evas_object_image_alpha_get(cw->obj);
evas_object_image_size_get(cw->obj, &w, &h);
@@ -1929,13 +1929,7 @@ _e_comp_win_mirror_add(E_Comp_Win *cw)
evas_object_image_alpha_set(o, alpha);
if (cw->shaped)
- {
- pix = evas_object_image_data_get(cw->obj, 0);
- evas_object_image_data_set(o, pix);
- evas_object_image_size_set(o, w, h);
- evas_object_image_data_set(o, pix);
- evas_object_image_data_update_add(o, 0, 0, w, h);
- }
+ pix = evas_object_image_data_get(cw->obj, 0);
else
{
if (cw->native)
@@ -1946,37 +1940,32 @@ _e_comp_win_mirror_add(E_Comp_Win *cw)
ns.type = EVAS_NATIVE_SURFACE_X11;
ns.data.x11.visual = cw->vis;
ns.data.x11.pixmap = cw->pixmap;
- evas_object_image_size_set(o, w, h);
evas_object_image_native_surface_set(o, &ns);
- evas_object_image_data_update_add(o, 0, 0, w, h);
}
else if (cw->xim)
{
- if (ecore_x_image_is_argb32_get(cw->xim))
- {
- pix = ecore_x_image_data_get(cw->xim, NULL, NULL, NULL);
- evas_object_image_data_set(o, pix);
- evas_object_image_size_set(o, w, h);
- }
+ argb = ecore_x_image_is_argb32_get(cw->xim);
+ if (argb)
+ pix = ecore_x_image_data_get(cw->xim, NULL, NULL, NULL);
else
- {
- pix = evas_object_image_data_get(cw->obj, EINA_TRUE);
- evas_object_image_data_set(o, pix);
- evas_object_image_size_set(o, w, h);
- evas_object_image_data_set(cw->obj, pix);
- }
- evas_object_image_data_update_add(o, 0, 0, w, h);
+ pix = evas_object_image_data_get(cw->obj, EINA_FALSE);
}
}
+ if (pix && (!argb))
+ {
+ evas_object_image_data_set(o, pix);
+ evas_object_image_data_set(cw->obj, pix);
+ }
evas_object_image_size_set(o, w, h);
- evas_object_image_data_update_add(o, 0, 0, w, h);
}
else if (cw->real_obj)
{
- /* FIXME!!! */
+ /* FIXME: the first mirror shown with vsync enabled won't render
immediately */
evas_object_image_alpha_set(o, 1);
+ evas_object_geometry_get(cw->zoomobj, NULL, NULL, &w, &h);
evas_object_image_source_set(o, cw->zoomobj);
}
+ evas_object_image_data_update_add(o, 0, 0, w, h);
return o;
}
--
------------------------------------------------------------------------------
Precog is a next-generation analytics platform capable of advanced
analytics on semi-structured data. The platform includes APIs for building
apps and a phenomenal toolset for data science. Developers can use
our toolset for easy data analysis & visualization. Get a free account!
http://www2.precog.com/precogplatform/slashdotnewsletter