raster pushed a commit to branch master.

http://git.enlightenment.org/core/enlightenment.git/commit/?id=be1db92dbbcbd85c3535215b0605bb64dfe0577b

commit be1db92dbbcbd85c3535215b0605bb64dfe0577b
Author: Carsten Haitzler (Rasterman) <[email protected]>
Date:   Sun Nov 22 13:53:29 2020 +0000

    e scaling - set xsettings scalign from core e scale if x xset dpi off
    
    if e' x applications setitnghs (xsettingvs) is off - then just
    calculate an xsettings dpi val from core scale. also use randr info
    for dpi if possible instead of "core x" and "core wl". wprkds around
    broken core dpi in x.
---
 src/bin/e_scale.c                           | 82 +++++++++++++++++++++--------
 src/bin/e_scale.h                           |  3 +-
 src/bin/e_xsettings.c                       |  9 ++--
 src/modules/conf_theme/e_int_config_scale.c | 24 ++-------
 4 files changed, 72 insertions(+), 46 deletions(-)

diff --git a/src/bin/e_scale.c b/src/bin/e_scale.c
index 7ddb21f89..15f10f278 100644
--- a/src/bin/e_scale.c
+++ b/src/bin/e_scale.c
@@ -15,39 +15,74 @@ e_scale_shutdown(void)
    return 1;
 }
 
-E_API void
-e_scale_update(void)
+E_API double
+e_scale_dpi_get(void)
 {
-   char buf[128];
-
-   if (e_config->scale.use_dpi)
+   // this is a general dpi across all screens thing
+   if ((e_randr2) && (e_randr2->screens))
      {
+        Eina_List *l;
+        E_Randr2_Screen *sc;
+        double total_dpi = 0.0;
+        int total_screens = 0;
+
+        EINA_LIST_FOREACH(e_randr2->screens, l, sc)
+          {
+             if ((sc->config.enabled) &&
+                 (sc->config.mode.w > 0) && (sc->config.mode.h > 0) &&
+                 (sc->info.size.w > 0) && (sc->info.size.h > 0))
+               {
+                  double dpi = ((((double)sc->config.mode.w * 25.4) /
+                                 (double)sc->info.size.w) +
+                                (((double)sc->config.mode.h * 25.4) /
+                                 (double)sc->info.size.h)) / 2.0;
+                  total_dpi += dpi;
+                  total_screens++;
+               }
+          }
+        if ((total_dpi > 0.0) && (total_screens > 0))
+          return total_dpi / (double)total_screens;
+     }
+   // fall back to old way
 #ifndef HAVE_WAYLAND_ONLY
-        if (e_comp->comp_type == E_PIXMAP_TYPE_X)
-          e_scale = (double)ecore_x_dpi_get() / 
(double)e_config->scale.base_dpi;
+   if (e_comp->comp_type == E_PIXMAP_TYPE_X)
+     {
+        int x_core_dpi = ecore_x_dpi_get();
+        return x_core_dpi;
+     }
 #endif
 #ifdef HAVE_WAYLAND
-        if (e_comp->comp_type == E_PIXMAP_TYPE_WL)
-          {
-             int xdpi = 0, ydpi = 0;
+   if (e_comp->comp_type == E_PIXMAP_TYPE_WL)
+     {
+        double dpi;
+        int xdpi = 0, ydpi = 0;
 
-             ecore_evas_screen_dpi_get(e_comp->ee, &xdpi, &ydpi);
-             if (xdpi == 0) xdpi = 75;
-             if (ydpi == 0) ydpi = 75;
-             e_scale = ((double)(xdpi + ydpi) / 2.0) /
-               (double)e_config->scale.base_dpi;
-          }
+        ecore_evas_screen_dpi_get(e_comp->ee, &xdpi, &ydpi);
+        if (xdpi == 0) xdpi = 75;
+        if (ydpi == 0) ydpi = 75;
+        dpi = ((double)(xdpi + ydpi) / 2.0);
+        return dpi;
+     }
 #endif
-        if (e_scale > e_config->scale.max) e_scale = e_config->scale.max;
-        else if (e_scale < e_config->scale.min)
-          e_scale = e_config->scale.min;
+   return 75.0;
+}
+
+E_API void
+e_scale_update(void)
+{
+   char buf[128];
+
+   if (e_config->scale.use_dpi)
+     {
+        e_scale = e_scale_dpi_get() / (double)e_config->scale.base_dpi;
+        if      (e_scale > e_config->scale.max) e_scale = e_config->scale.max;
+        else if (e_scale < e_config->scale.min) e_scale = e_config->scale.min;
      }
    else if (e_config->scale.use_custom)
      {
         e_scale = e_config->scale.factor;
-        if (e_scale > e_config->scale.max) e_scale = e_config->scale.max;
-        else if (e_scale < e_config->scale.min)
-          e_scale = e_config->scale.min;
+        if      (e_scale > e_config->scale.max) e_scale = e_config->scale.max;
+        else if (e_scale < e_config->scale.min) e_scale = e_config->scale.min;
      }
    elm_config_scale_set(e_scale);
    elm_config_all_flush();
@@ -56,5 +91,8 @@ e_scale_update(void)
    e_util_env_set("E_SCALE", buf);
    e_hints_scale_update();
    e_pointers_size_set(e_config->cursor_size);
+#ifndef HAVE_WAYLAND_ONLY
+   e_xsettings_config_update();
+#endif
 }
 
diff --git a/src/bin/e_scale.h b/src/bin/e_scale.h
index 8a2591ca7..bf8d58161 100644
--- a/src/bin/e_scale.h
+++ b/src/bin/e_scale.h
@@ -5,7 +5,8 @@
 
 EINTERN int  e_scale_init(void);
 EINTERN int  e_scale_shutdown(void);
-E_API void e_scale_update(void);
+E_API double e_scale_dpi_get(void);
+E_API void   e_scale_update(void);
 
 extern E_API double e_scale;
 
diff --git a/src/bin/e_xsettings.c b/src/bin/e_xsettings.c
index 3a379f70b..677d81416 100644
--- a/src/bin/e_xsettings.c
+++ b/src/bin/e_xsettings.c
@@ -595,10 +595,11 @@ _e_xsettings_font_set(void)
 static void
 _e_xsettings_dpi_set(void)
 {
-   if ((e_config->xsettings.xft_dpi.enabled) && 
(e_config->xsettings.xft_dpi.value > 0))
+   if ((e_config->xsettings.xft_dpi.enabled) &&
+       (e_config->xsettings.xft_dpi.value > 0))
      _e_xsettings_int_set(_setting_xft_dpi, e_config->xsettings.xft_dpi.value 
* 1024, EINA_TRUE);
    else
-     _e_xsettings_int_set(_setting_xft_dpi, 0, EINA_FALSE);
+     _e_xsettings_int_set(_setting_xft_dpi, 75.0 * e_scale * 1024, EINA_TRUE);
 }
 
 #if 0
@@ -607,9 +608,9 @@ _e_xsettings_xft_set(void)
 {
    if (e_config->scale.use_dpi)
      _e_xsettings_int_set(_setting_xft_dpi,
-                          e_config->scale.base_dpi, EINA_TRUE);
+                          e_config->scale.base_dpi, EINA_TRUE); // set
    else
-     _e_xsettings_int_set(_setting_xft_dpi, 0, EINA_FALSE);
+     _e_xsettings_int_set(_setting_xft_dpi, 0, EINA_FALSE); // remove
 }
 
 #endif
diff --git a/src/modules/conf_theme/e_int_config_scale.c 
b/src/modules/conf_theme/e_int_config_scale.c
index 77c4093a9..b0d572864 100644
--- a/src/modules/conf_theme/e_int_config_scale.c
+++ b/src/modules/conf_theme/e_int_config_scale.c
@@ -219,30 +219,16 @@ static Evas_Object *
 _basic_create(E_Config_Dialog *cfd EINA_UNUSED, Evas *evas, 
E_Config_Dialog_Data *cfdata)
 {
    Evas_Object *o, *ob;
-   double sc = 1.0;
-   int dpi = 0, x = 0, y = 0;
+   double sc = 1.0, dpi;
+   int x = 0, y = 0;
 
    _fill_data(cfdata);
    o = e_widget_table_add(e_win_evas_win_get(evas), 1);
 
-#ifndef HAVE_WAYLAND_ONLY
-   if (e_comp->comp_type == E_PIXMAP_TYPE_X)
-     dpi = ecore_x_dpi_get();
-#endif
-#ifdef HAVE_WAYLAND
-   if (e_comp->comp_type == E_PIXMAP_TYPE_WL)
-     {
-        int xdpi = 0, ydpi = 0;
-
-        ecore_evas_screen_dpi_get(e_comp->ee, &xdpi, &ydpi);
-        if (xdpi == 0) xdpi = 75;
-        if (ydpi == 0) ydpi = 75;
-        dpi = ((xdpi + ydpi) / 2);
-     }
-#endif
+   dpi = e_scale_dpi_get();
 
-   if ((dpi > 0) && (cfdata->base_dpi > 0))
-     sc = (double)dpi / (double)cfdata->base_dpi;
+   if ((dpi > 0.0) && (cfdata->base_dpi > 0))
+     sc = dpi / (double)cfdata->base_dpi;
 
    ob = _scale_preview_new(cfdata, evas, sc, &(cfdata->factor), _("DPI 
Scaling"), EINA_TRUE);
    e_widget_table_object_align_append(o, ob, 0, 0, 1, 1, 0, 0, 0, 0, 0.5, 0.5);

-- 


Reply via email to