EINTERN Eina_Bool
e_mod_comp_pixmap_rotation_handler_configure(E_Comp_Win *cw,
                                             int w, int h)
{
   Ecore_X_Window win;
   E_CHECK_RETURN(cw, 0);
   E_CHECK_RETURN(cw->pixrot, 0);
   E_CHECK_RETURN(((w == cw->w) && (h == cw->h)), 0);

   win = e_mod_comp_util_client_xid_get(cw);

   /* backup below obj */
   Eina_Bool bottom = EINA_FALSE;

   Evas_Object *below_obj = evas_object_below_get(cw->shobj);
   if (!below_obj)
     {
        if (evas_object_bottom_get(cw->c->evas) == cw->shobj)
          {
             L(LT_EVENT_X,
               "[COMP] %31s w:0x%08x bd:%s shobj is bottom.\n",
               "PIX_ROT", e_mod_comp_util_client_xid_get(cw),
               cw->bd ? "O" : "X");
             bottom = EINA_TRUE;
          }
     }

   if (cw->obj)
     {
        evas_object_hide(cw->obj);
        evas_object_del(cw->obj);
        cw->obj = NULL;
     }
   if (cw->shobj)
     {
        evas_object_hide(cw->obj);
        evas_object_del(cw->shobj);
        cw->shobj = NULL;
     }

   cw->shobj = edje_object_add(cw->c->evas);
   cw->obj = evas_object_image_filled_add(cw->c->evas);
   evas_object_image_colorspace_set(cw->obj, EVAS_COLORSPACE_ARGB8888);

   if (cw->argb)
     evas_object_image_alpha_set(cw->obj, 1);
   else
     evas_object_image_alpha_set(cw->obj, 0);

   e_mod_comp_win_type_setup(cw);
   e_mod_comp_win_shadow_setup(cw);
   e_mod_comp_win_cb_setup(cw);

   evas_object_show(cw->obj);
   evas_object_pass_events_set(cw->obj, 1);
   evas_object_pass_events_set(cw->shobj, 1);

   /* restore stack */
   if (bottom)
     below_obj = evas_object_below_get(cw->shobj);

   evas_object_stack_above(cw->shobj, below_obj);
   L(LT_EVENT_X,
     "[COMP] %31s w:0x%08x bd:%s shobj restore stack.\n",
     "PIX_ROT", e_mod_comp_util_client_xid_get(cw),
     cw->bd ? "O" : "X");

   e_mod_comp_pixmap_rotation_done_send
     (win, ATOM_CM_PIXMAP_ROTATION_RESIZE_PIXMAP);

   return EINA_TRUE;
}
Пример #2
0
//--// callbacks
static int
_dnd_sorter(const void *d1, const void *d2)
{
  Evas_Object *o1 = (Evas_Object *)d1;
  Evas_Object *o2 = (Evas_Object *)d2;
  Eina_List *o1l = NULL, *o2l = NULL, *l1, *l2, *list, *l;
  Evas_Object *common = NULL, *o;

  while (o1)
  {
    o1l = eina_list_prepend(o1l, o1);
    o1 = evas_object_smart_parent_get(o1);
  }
  while (o2)
  {
    o2l = eina_list_prepend(o2l, o2);
    o2 = evas_object_smart_parent_get(o2);
  }
  o1 = o1l->data;
  o2 = o2l->data;
  if (o1 != o2)
  {
    // different toplevels
    o = evas_object_bottom_get(evas_object_evas_get(o1));
    while (o)
    {
      if (o1 == o)
      {
	// o1 below o2
	eina_list_free(o1l);
	eina_list_free(o2l);
	return -1;
      }
      if (o2 == o)
      {
	// o2 below o1
	eina_list_free(o1l);
	eina_list_free(o2l);
	return 1;
      }
      o = evas_object_above_get(o);
    }
  }
  for (l1 = o1l, l2 = o2l;
       l1 && l2;
       l1 = l1->next, l2 = l2->next)
  {
    o1 = l1->data; o2 = l2->data;
    if (o1 != o2)
    {
      // children differ, thus parent is common
      list = evas_object_smart_members_get(common);
      for (l = list; l; l = l->next)
      {
	o = l->data;
	if (o1 == o)
	{
	  // o1 below o2
	  eina_list_free(list);
	  eina_list_free(o1l);
	  eina_list_free(o2l);
	  return -1;
	}
	if (o2 == o)
	{
	  // o2 below o1
	  eina_list_free(list);
	  eina_list_free(o1l);
	  eina_list_free(o2l);
	  return 1;
	}
      }
      eina_list_free(list);
      break;
    }
    common = o1;
  }
  eina_list_free(o1l);
  eina_list_free(o2l);
  return 0;
}
Пример #3
0
EvasObject* EvasCanvas::objectAtBottom() const
{
    return EvasObject::objectLink( evas_object_bottom_get( o ) );
}