wayland: Introduce GdkFractionalScale type
authorBenjamin Otte <otte@redhat.com>
Sat, 1 Apr 2023 15:31:47 +0000 (17:31 +0200)
committerBenjamin Otte <otte@redhat.com>
Sat, 1 Apr 2023 16:23:38 +0000 (18:23 +0200)
We want to use it later for various things, this just adds the
infrastructure we will need.

gdk/wayland/gdkprivate-wayland.h

index 73b934d37119e841b4cd8d160045fc1cedb2a21c..0276d4c70d2b41995c2c6700ad4d757dd7c01e73 100644 (file)
  */
 #define GDK_WAYLAND_LOCAL_DND_MIME_TYPE "application/x-gtk-local-dnd"
 
+#define GDK_FRACTIONAL_SCALE_FACTOR 120
+
+typedef struct _GdkFractionalScale GdkFractionalScale;
+
+struct _GdkFractionalScale
+{
+  guint32 scale;
+};
+
+#define GDK_FRACTIONAL_SCALE_INIT(fractional_scale) (GdkFractionalScale) { fractional_scale }
+#define GDK_FRACTIONAL_SCALE_INIT_INT(scale) GDK_FRACTIONAL_SCALE_INIT (scale * GDK_FRACTIONAL_SCALE_FACTOR)
+
+static inline int
+gdk_fractional_scale_to_int (const GdkFractionalScale *self)
+{
+  /* ceil() */
+  return (self->scale + GDK_FRACTIONAL_SCALE_FACTOR - 1) / GDK_FRACTIONAL_SCALE_FACTOR;
+}
+
+static inline double
+gdk_fractional_scale_to_double (const GdkFractionalScale *self)
+{
+  return (double) self->scale / GDK_FRACTIONAL_SCALE_FACTOR;
+}
+
+static inline int
+gdk_fractional_scale_scale (const GdkFractionalScale *self,
+                            int                       value)
+{
+  return (value * self->scale + GDK_FRACTIONAL_SCALE_FACTOR / 2) / GDK_FRACTIONAL_SCALE_FACTOR;
+}
+
+static inline gboolean
+gdk_fractional_scale_equal (const GdkFractionalScale *a,
+                            const GdkFractionalScale *b)
+{
+  return a->scale == b->scale;
+}
+
 GdkKeymap *_gdk_wayland_keymap_new (GdkDisplay *display);
 void       _gdk_wayland_keymap_update_from_fd (GdkKeymap *keymap,
                                                uint32_t   format,