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