]> git.eshelyaron.com Git - emacs.git/commitdiff
Support frame-scale-factor on pgtk frames
authorYuuki Harano <masm+github@masm11.me>
Sat, 5 Jun 2021 11:53:31 +0000 (20:53 +0900)
committerYuuki Harano <masm+github@masm11.me>
Sat, 5 Jun 2021 11:53:31 +0000 (20:53 +0900)
* src/pgtkfns.c (pgtk_frame_scale_factor): New function to get frame
scale factor.
* src/frame.h: Call it when a pgtk frame.
* src/pgtkterm.h: Add the declaration.

src/frame.h
src/pgtkfns.c
src/pgtkterm.h

index 1aba1e3bc479ae76edd92d36851e10c61941dfc4..b1ad525779ceab6ff8285e37c4f14dd4291cbafa 100644 (file)
@@ -920,6 +920,8 @@ default_pixels_per_inch_y (void)
 /* Scale factor of frame F.  */
 #if defined HAVE_NS
 # define FRAME_SCALE_FACTOR(f) (FRAME_NS_P (f) ? ns_frame_scale_factor (f) : 1)
+#elif defined HAVE_PGTK
+# define FRAME_SCALE_FACTOR(f) (FRAME_PGTK_P (f) ? pgtk_frame_scale_factor (f) : 1)
 #else
 # define FRAME_SCALE_FACTOR(f) 1
 #endif
index 5f114515c92323efb52a5454e92d762b18ea8bac..ceff279ad02d51897896a2c358c187b862aaf303 100644 (file)
@@ -2728,6 +2728,26 @@ Internal use only, use `display-monitor-attributes-list' instead.  */)
   return attributes_list;
 }
 
+double
+pgtk_frame_scale_factor (struct frame *f)
+{
+  struct pgtk_display_info *dpyinfo = FRAME_DISPLAY_INFO (f);
+  GdkDisplay *gdpy = dpyinfo->gdpy;
+
+  block_input ();
+
+  GdkWindow *gwin = gtk_widget_get_window (FRAME_GTK_WIDGET (f));
+  GdkMonitor *gmon = gdk_display_get_monitor_at_window (gdpy, gwin);
+
+  /* GTK returns scaled sizes for the workareas.  */
+  double scale = pgtk_get_monitor_scale_factor (gdk_monitor_get_model (gmon));
+  if (scale == 0.0)
+    scale = gdk_monitor_get_scale_factor (gmon);
+
+  unblock_input ();
+
+  return scale;
+}
 
 DEFUN ("x-display-planes", Fx_display_planes, Sx_display_planes, 0, 1, 0,
        doc: /* Return the number of bitplanes of the display TERMINAL.
index 07d7fc10c65862aa45ea8a3094a3577e937ad822..c87a5e13ec0e8ff1bba68c22498ba7b8fd6c7e7c 100644 (file)
@@ -663,4 +663,6 @@ extern bool xg_set_icon_from_xpm_data (struct frame *f, const char **data);
 
 extern bool pgtk_text_icon (struct frame *f, const char *icon_name);
 
+extern double pgtk_frame_scale_factor (struct frame *);
+
 #endif /* HAVE_PGTK */