Exemple #1
0
static void *
_canvas_bmp_get(Ecore_Evas *ee, Evas_Coord *w_out, Evas_Coord *h_out)
{
   Ecore_X_Image *img;
   Ecore_X_Window_Attributes att;
   unsigned char *src;
   unsigned int *dst;
   int bpl = 0, rows = 0, bpp = 0;
   Evas_Coord w, h;

   /* Check that this window still exists */
   Eina_List *eeitr, *ees = ecore_evas_ecore_evas_list_get();
   Ecore_Evas *eel;
   Eina_Bool found_evas = EINA_FALSE;

   EINA_LIST_FOREACH(ees, eeitr, eel)
      if (eel == ee)
        {
           found_evas = EINA_TRUE;
           break;
        }

   Ecore_X_Window xwin = (found_evas) ?
      (Ecore_X_Window) ecore_evas_window_get(ee) : 0;

   if (!xwin)
     {
        printf("Can't grab X window.\n");
        *w_out = *h_out = 0;
        return NULL;
     }

   Evas *e = ecore_evas_get(ee);
   evas_output_size_get(e, &w, &h);
   memset(&att, 0, sizeof(Ecore_X_Window_Attributes));
   ecore_x_window_attributes_get(xwin, &att);
   img = ecore_x_image_new(w, h, att.visual, att.depth);
   ecore_x_image_get(img, xwin, 0, 0, 0, 0, w, h);
   src = ecore_x_image_data_get(img, &bpl, &rows, &bpp);
   dst = malloc(w * h * sizeof(int));  /* Will be freed by the user */
   if (!ecore_x_image_is_argb32_get(img))
     {  /* Fill dst buffer with image convert */
        ecore_x_image_to_argb_convert(src, bpp, bpl,
              att.colormap, att.visual,
              0, 0, w, h,
              dst, (w * sizeof(int)), 0, 0);
     }
   else
     {  /* Fill dst buffer by copy */
        memcpy(dst, src, (w * h * sizeof(int)));
     }

   /* dst now holds window bitmap */
   ecore_x_image_free(img);
   *w_out = w;
   *h_out = h;
   return (void *) dst;
}
EAPI int
wizard_page_show(E_Wizard_Page *pg)
{
   Evas_Object *o, *of, *ob;
   Ecore_Evas *ee;

#ifndef HAVE_WAYLAND_ONLY
   Ecore_X_Window_Attributes att;

   if (!ecore_x_composite_query()) return 0;
   if (!ecore_x_damage_query()) return 0;

   memset((&att), 0, sizeof(Ecore_X_Window_Attributes));
   ecore_x_window_attributes_get(ecore_x_window_root_first_get(), &att);
   if ((att.depth <= 8)) return 0;

   gl_avail = ecore_evas_engine_type_supported_get(ECORE_EVAS_ENGINE_OPENGL_X11);
#endif

   o = e_widget_list_add(pg->evas, 1, 0);
   e_wizard_title_set(_("Compositing"));


   of = e_widget_framelist_add(pg->evas, _("Settings"), 0);
   if (gl_avail)
     {
        ee = ecore_evas_gl_x11_new(NULL, 0, 0, 0, 320, 240);
        if (ee)
          {
             ecore_evas_free(ee);
             if (
               (match_xorg_log("*(II)*NVIDIA*: Creating default Display*")) ||
               (match_xorg_log("*(II)*intel*: Creating default Display*")) ||
               (match_xorg_log("*(II)*NOUVEAU*: Creating default Display*")) ||
               (match_xorg_log("*(II)*RADEON*: Creating default Display*"))
               )
               {
                  do_gl = 1;
                  do_vsync = 1;
               }
          }
        ob = e_widget_check_add(pg->evas, _("Hardware Accelerated (OpenGL)"), &(do_gl));
        e_widget_framelist_object_append(of, ob);

        ob = e_widget_check_add(pg->evas, _("Tear-free Rendering (OpenGL only)"), &(do_vsync));
        e_widget_framelist_object_append(of, ob);
     }
   ob = e_widget_check_add(pg->evas, _("Disable composite effects"), &(disable_effects));
   e_widget_framelist_object_append(of, ob);

   e_widget_list_object_append(o, of, 0, 0, 0.5);
   evas_object_show(of);
   e_wizard_page_show(o);

   return 0; /* 1 == show ui, and wait for user, 0 == just continue */
}
/*
EAPI int
wizard_page_init(E_Wizard_Page *pg __UNUSED__, Eina_Bool *need_xdg_desktops __UNUSED__, Eina_Bool *need_xdg_icons __UNUSED__)
{
   return 1;
}

EAPI int
wizard_page_shutdown(E_Wizard_Page *pg __UNUSED__)
{
   return 1;
}
*/
EAPI int
wizard_page_show(E_Wizard_Page *pg)
{
    Evas_Object *o, *of, *ob;
    Ecore_Evas *ee;
    Ecore_X_Window_Attributes att;

    if (!ecore_x_composite_query()) return 0;
    if (!ecore_x_damage_query()) return 0;

    memset((&att), 0, sizeof(Ecore_X_Window_Attributes));
    ecore_x_window_attributes_get(ecore_x_window_root_first_get(), &att);
    if ((att.depth <= 8)) return 0;

    ee = ecore_evas_gl_x11_new(NULL, 0, 0, 0, 320, 240);
    if (ee)
    {
        ecore_evas_free(ee);
        if (
            (match_xorg_log("*(II)*NVIDIA*: Creating default Display*")) ||
            (match_xorg_log("*(II)*intel*: Creating default Display*")) ||
            (match_xorg_log("*(II)*NOUVEAU*: Creating default Display*")) ||
            (match_xorg_log("*(II)*RADEON*: Creating default Display*"))
        )
        {
            do_gl = 1;
            do_vsync = 1;
        }
    }

    o = e_widget_list_add(pg->evas, 1, 0);
    e_wizard_title_set(_("Compositing"));

    of = e_widget_framelist_add(pg->evas, _("Transparent windows and effects"), 0);

    ob = e_widget_textblock_add(pg->evas);
    e_widget_size_min_set(ob, 260 * e_scale, 200 * e_scale);
    e_widget_textblock_markup_set
    (ob,
     _("Compositing provides translucency<br>"
       "for windows, window effects like<br>"
       "fading in and out and zooming<br>"
       "when they appear and dissapear.<br>"
       "It is highly recommended to<br>"
       "enable this for a better<br>"
       "experience, but it comes at a<br>"
       "cost. It requires extra CPU<br>"
       "or a GLSL Shader capable GPU<br>"
       "with well written drivers.<br>"
       "It also will add between 10 to<br>"
       "100 MB to the memory needed<br>"
       "for Enlightenment."
      )
    );
    e_widget_framelist_object_append(of, ob);

    ob = e_widget_check_add(pg->evas, _("Enable Compositing"), &(do_comp));
    e_widget_framelist_object_append(of, ob);

    if (ecore_evas_engine_type_supported_get(ECORE_EVAS_ENGINE_OPENGL_X11))
    {
        ob = e_widget_check_add(pg->evas, _("Hardware Accelerated (OpenGL)"), &(do_gl));
        e_widget_framelist_object_append(of, ob);

        ob = e_widget_check_add(pg->evas, _("Tear-free Rendering (OpenGL only)"), &(do_vsync));
        e_widget_framelist_object_append(of, ob);
    }

    e_widget_list_object_append(o, of, 0, 0, 0.5);

    evas_object_show(of);

    e_wizard_page_show(o);
//   pg->data = o;
    return 1; /* 1 == show ui, and wait for user, 0 == just continue */
}