On Wed, Apr 28, 2010 at 5:26 PM, Enlightenment SVN
<no-re...@enlightenment.org> wrote:
> Log:
>  Load Xft.dpi from ~/.Xdefaults as well.
>
>  Do this for consistency with other applications, some people just set
>  .Xdefaults but do not have xrdb to load it to screen. This works with
>  most of the systems, like Gtk and Qt, but not in Evas, so we get
>  different font sizes as they calculate based on DPI.
>
>  HOWEVER, and this may be a big thing, so RASTERMAN take a look, this
>  might impose a performance hit on window creation... remember that
>  every E17 popup/tooltip will hit this process of reading the file (if
>  exists) and then query X server (round trip).
>      I'd rather make this a global resource, loaded just once for all
>  created windows, we can store the mtime to know when it changed and
>  invalidate the pointer... but as Raster did not keep the
>  XrmGetDatabase() result as global, I'm not doing it here either.

EXTRA NOTE: it also leaks the resources, as was being done with the
screen resources. I guess this is not good, but I kept code commented
following previous implementation, maybe Raster can give some advice
here, or just uncomment the lines.


>
>
> Author:       barbieri
> Date:         2010-04-28 13:26:04 -0700 (Wed, 28 Apr 2010)
> New Revision: 48403
>
> Modified:
>  trunk/evas/src/modules/engines/gl_x11/evas_engine.c 
> trunk/evas/src/modules/engines/software_16_x11/evas_engine.c 
> trunk/evas/src/modules/engines/software_x11/evas_engine.c 
> trunk/evas/src/modules/engines/xrender_x11/evas_engine.c
>
> Modified: trunk/evas/src/modules/engines/gl_x11/evas_engine.c
> ===================================================================
> --- trunk/evas/src/modules/engines/gl_x11/evas_engine.c 2010-04-28 19:53:13 
> UTC (rev 48402)
> +++ trunk/evas/src/modules/engines/gl_x11/evas_engine.c 2010-04-28 20:26:04 
> UTC (rev 48403)
> @@ -123,7 +123,9 @@
>    Evas                    *evas;
>    int                      end;
>
> -   XrmDatabase   xrdb; // xres - dpi
> +   // TODO: maybe use these as shared global resources, acquired only once?
> +   XrmDatabase   xrdb_dpy; // xres - dpi
> +   XrmDatabase   xrdb_user;
>    struct { // xres - dpi
>       int        dpi; // xres - dpi
>    } xr; // xres - dpi
> @@ -193,11 +195,29 @@
>           {
>              int status;
>              char *type = NULL;
> +            const char *home;
>              XrmValue val;
>
>              re->xr.dpi = 75000; // dpy * 1000
> -             re->xrdb = XrmGetDatabase(info->info.display);
> -             status = XrmGetResource(re->xrdb, "Xft.dpi", "Xft.Dpi", &type, 
> &val);
> +
> +            if ((home = getenv("HOME")))
> +              {
> +                 char tmp[PATH_MAX];
> +                 snprintf(tmp, sizeof(tmp), "%s/.Xdefaults", home);
> +                 re->xrdb_user = XrmGetFileDatabase(tmp);
> +                 if (re->xrdb_user)
> +                   status = XrmGetResource(re->xrdb_user,
> +                                           "Xft.dpi", "Xft.Dpi", &type, 
> &val);
> +              }
> +
> +            if ((!status) || (!type))
> +              {
> +                 re->xrdb_dpy = XrmGetDatabase(info->info.display);
> +                 if (re->xrdb_dpy)
> +                   status = XrmGetResource(re->xrdb_dpy,
> +                                           "Xft.dpi", "Xft.Dpi", &type, 
> &val);
> +              }
> +
>              if ((status) && (type))
>                {
>                   if (!strcmp(type, "String"))
> @@ -307,7 +327,8 @@
>
>    re = (Render_Engine *)data;
>
> -//   if (re->xrdb) XrmDestroyDatabase(re->xrdb);
> +//   if (re->xrdb_user) XrmDestroyDatabase(re->xrdb_user);
> +//   if (re->xrdb_dpy) XrmDestroyDatabase(re->xrdb_dpy);
>    eng_window_free(re->win);
>    free(re);
>
>
> Modified: trunk/evas/src/modules/engines/software_16_x11/evas_engine.c
> ===================================================================
> --- trunk/evas/src/modules/engines/software_16_x11/evas_engine.c        
> 2010-04-28 19:53:13 UTC (rev 48402)
> +++ trunk/evas/src/modules/engines/software_16_x11/evas_engine.c        
> 2010-04-28 20:26:04 UTC (rev 48403)
> @@ -21,7 +21,9 @@
>    Tilebuf_Rect     *rects;
>    Tilebuf_Rect     *cur_rect;
>
> -   XrmDatabase   xrdb; // xres - dpi
> +   // TODO: maybe use these as shared global resources, acquired only once?
> +   XrmDatabase   xrdb_dpy; // xres - dpi
> +   XrmDatabase   xrdb_user;
>    struct { // xres - dpi
>       int        dpi; // xres - dpi
>    } xr; // xres - dpi
> @@ -186,11 +188,29 @@
>      {
>         int status;
>         char *type = NULL;
> +       const char *home;
>         XrmValue val;
>
>         re->xr.dpi = 75000; // dpy * 1000
> -        re->xrdb = XrmGetDatabase(re->disp);
> -        status = XrmGetResource(re->xrdb, "Xft.dpi", "Xft.Dpi", &type, &val);
> +
> +       if ((home = getenv("HOME")))
> +         {
> +            char tmp[PATH_MAX];
> +            snprintf(tmp, sizeof(tmp), "%s/.Xdefaults", home);
> +            re->xrdb_user = XrmGetFileDatabase(tmp);
> +            if (re->xrdb_user)
> +              status = XrmGetResource(re->xrdb_user,
> +                                      "Xft.dpi", "Xft.Dpi", &type, &val);
> +         }
> +
> +       if ((!status) || (!type))
> +         {
> +            re->xrdb_dpy = XrmGetDatabase(re->disp);
> +            if (re->xrdb_dpy)
> +              status = XrmGetResource(re->xrdb_dpy,
> +                                      "Xft.dpi", "Xft.Dpi", &type, &val);
> +         }
> +
>         if ((status) && (type))
>           {
>              if (!strcmp(type, "String"))
> @@ -246,7 +266,8 @@
>
>    re = (Render_Engine *)data;
>
> -//   if (re->xrdb) XrmDestroyDatabase(re->xrdb);
> +//   if (re->xrdb_user) XrmDestroyDatabase(re->xrdb_user);
> +//   if (re->xrdb_dpy) XrmDestroyDatabase(re->xrdb_dpy);
>
>    if (re->shbuf) evas_software_x11_x_output_buffer_free(re->shbuf, 0);
>    if (re->clip_rects) XDestroyRegion(re->clip_rects);
>
> Modified: trunk/evas/src/modules/engines/software_x11/evas_engine.c
> ===================================================================
> --- trunk/evas/src/modules/engines/software_x11/evas_engine.c   2010-04-28 
> 19:53:13 UTC (rev 48402)
> +++ trunk/evas/src/modules/engines/software_x11/evas_engine.c   2010-04-28 
> 20:26:04 UTC (rev 48403)
> @@ -32,7 +32,9 @@
>    int           end : 1;
>
>  #ifdef BUILD_ENGINE_SOFTWARE_XLIB
> -   XrmDatabase   xrdb; // xres - dpi
> +   // TODO: maybe use these as shared global resources, acquired only once?
> +   XrmDatabase   xrdb_dpy; // xres - dpi
> +   XrmDatabase   xrdb_user;
>    struct { // xres - dpi
>       int        dpi; // xres - dpi
>    } xr; // xres - dpi
> @@ -99,13 +101,31 @@
>    evas_software_xlib_outbuf_init();
>
>      {
> -        int status;
> +        int status = 0;
>         char *type = NULL;
> +       const char *home;
>         XrmValue val;
>
>         re->xr.dpi = 75000; // dpy * 1000
> -        re->xrdb = XrmGetDatabase(disp);
> -        status = XrmGetResource(re->xrdb, "Xft.dpi", "Xft.Dpi", &type, &val);
> +
> +       if ((home = getenv("HOME")))
> +         {
> +            char tmp[PATH_MAX];
> +            snprintf(tmp, sizeof(tmp), "%s/.Xdefaults", home);
> +            re->xrdb_user = XrmGetFileDatabase(tmp);
> +            if (re->xrdb_user)
> +              status = XrmGetResource(re->xrdb_user,
> +                                      "Xft.dpi", "Xft.Dpi", &type, &val);
> +         }
> +
> +       if ((!status) || (!type))
> +         {
> +            re->xrdb_dpy = XrmGetDatabase(disp);
> +            if (re->xrdb_dpy)
> +              status = XrmGetResource(re->xrdb_dpy,
> +                                      "Xft.dpi", "Xft.Dpi", &type, &val);
> +         }
> +
>         if ((status) && (type))
>           {
>              if (!strcmp(type, "String"))
> @@ -215,7 +235,7 @@
>    evas_software_xcb_x_color_init();
>    evas_software_xcb_outbuf_init();
>
> -   // FIXME: re->xrdb
> +   // FIXME: re->xrdb_user, re->xrdb_dpy
>
>    re->ob = evas_software_xcb_outbuf_setup_x(w,
>                                              h,
> @@ -556,7 +576,8 @@
>    re = (Render_Engine *)data;
>
>  #ifdef BUILD_ENGINE_SOFTWARE_XLIB
> -//   if (re->xrdb) XrmDestroyDatabase(re->xrdb);
> +//   if (re->xrdb_user) XrmDestroyDatabase(re->xrdb_user);
> +//   if (re->xrdb_dpy) XrmDestroyDatabase(re->xrdb_dpy);
>  #endif
>
>    re->outbuf_free(re->ob);
>
> Modified: trunk/evas/src/modules/engines/xrender_x11/evas_engine.c
> ===================================================================
> --- trunk/evas/src/modules/engines/xrender_x11/evas_engine.c    2010-04-28 
> 19:53:13 UTC (rev 48402)
> +++ trunk/evas/src/modules/engines/xrender_x11/evas_engine.c    2010-04-28 
> 20:26:04 UTC (rev 48403)
> @@ -31,7 +31,9 @@
>    unsigned char    destination_alpha : 1;
>
>  #ifdef BUILD_ENGINE_XRENDER_X11
> -   XrmDatabase   xrdb; // xres - dpi
> +   // TODO: maybe use these as shared global resources, acquired only once?
> +   XrmDatabase   xrdb_dpy; // xres - dpi
> +   XrmDatabase   xrdb_user;
>    struct { // xres - dpi
>       int        dpi; // xres - dpi
>    } xr; // xres - dpi
> @@ -227,11 +229,29 @@
>      {
>         int status;
>         char *type = NULL;
> +       const char *home;
>         XrmValue val;
>
>         re->xr.dpi = 75000; // dpy * 1000
> -        re->xrdb = XrmGetDatabase((Display *)re->x11.connection);
> -        status = XrmGetResource(re->xrdb, "Xft.dpi", "Xft.Dpi", &type, &val);
> +
> +       if ((home = getenv("HOME")))
> +         {
> +            char tmp[PATH_MAX];
> +            snprintf(tmp, sizeof(tmp), "%s/.Xdefaults", home);
> +            re->xrdb_user = XrmGetFileDatabase(tmp);
> +            if (re->xrdb_user)
> +              status = XrmGetResource(re->xrdb_user,
> +                                      "Xft.dpi", "Xft.Dpi", &type, &val);
> +         }
> +
> +       if ((!status) || (!type))
> +         {
> +            re->xrdb_dpy = XrmGetDatabase((Display *)re->x11.connection);
> +            if (re->xrdb_dpy)
> +              status = XrmGetResource(re->xrdb_dpy,
> +                                      "Xft.dpi", "Xft.Dpi", &type, &val);
> +         }
> +
>         if ((status) && (type))
>           {
>              if (!strcmp(type, "String"))
> @@ -501,7 +521,8 @@
>    re = (Render_Engine *)data;
>
>  #ifdef BUILD_ENGINE_XRENDER_X11
> -//   if (re->xrdb) XrmDestroyDatabase(re->xrdb);
> +//   if (re->xrdb_user) XrmDestroyDatabase(re->xrdb_user);
> +//   if (re->xrdb_dpy) XrmDestroyDatabase(re->xrdb_dpy);
>  #endif
>
>    evas_common_font_shutdown();
>
>
> ------------------------------------------------------------------------------
> _______________________________________________
> enlightenment-svn mailing list
> enlightenment-...@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/enlightenment-svn
>



-- 
Gustavo Sverzut Barbieri
http://profusion.mobi embedded systems
--------------------------------------
MSN: barbi...@gmail.com
Skype: gsbarbieri
Mobile: +55 (19) 9225-2202

------------------------------------------------------------------------------
_______________________________________________
enlightenment-devel mailing list
enlightenment-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to