[evolution-data-server/wip/mcrha/gtk4] Cover ECellRendererColor



commit f0723060bbe028e26a7f70425db4c7b856b9cca6
Author: Milan Crha <mcrha redhat com>
Date:   Fri Oct 15 10:48:52 2021 +0200

    Cover ECellRendererColor

 src/libedataserverui/e-cell-renderer-color.c | 85 ++++++++++++++++++++++------
 1 file changed, 67 insertions(+), 18 deletions(-)
---
diff --git a/src/libedataserverui/e-cell-renderer-color.c b/src/libedataserverui/e-cell-renderer-color.c
index 3dafaffaf..9e2191e0c 100644
--- a/src/libedataserverui/e-cell-renderer-color.c
+++ b/src/libedataserverui/e-cell-renderer-color.c
@@ -18,10 +18,10 @@
 
 #include "evolution-data-server-config.h"
 
-#include "e-cell-renderer-color.h"
-
 #include <string.h>
-#include <glib/gi18n-lib.h>
+#include <gtk/gtk.h>
+
+#include "e-cell-renderer-color.h"
 
 enum {
        PROP_0,
@@ -38,6 +38,13 @@ G_DEFINE_TYPE_WITH_PRIVATE (
        GTK_TYPE_CELL_RENDERER)
 
 static void
+#if GTK_CHECK_VERSION(4, 0, 0)
+cell_renderer_color_get_aligned_area (GtkCellRenderer *cell,
+                                     GtkWidget *widget,
+                                     GtkCellRendererState flags,
+                                     const GdkRectangle *cell_area,
+                                     GdkRectangle *aligned_area)
+#else
 cell_renderer_color_get_size (GtkCellRenderer *cell,
                               GtkWidget *widget,
                               const GdkRectangle *cell_area,
@@ -45,16 +52,23 @@ cell_renderer_color_get_size (GtkCellRenderer *cell,
                               gint *y_offset,
                               gint *width,
                               gint *height)
+#endif
 {
        gint color_width = 16;
        gint color_height = 16;
        gint calc_width;
        gint calc_height;
+       gint xx, yy;
        gfloat xalign;
        gfloat yalign;
        guint xpad;
        guint ypad;
 
+#if GTK_CHECK_VERSION(4, 0, 0)
+       if (!aligned_area)
+               return;
+#endif
+
        g_object_get (
                cell, "xalign", &xalign, "yalign", &yalign,
                "xpad", &xpad, "ypad", &ypad, NULL);
@@ -63,38 +77,55 @@ cell_renderer_color_get_size (GtkCellRenderer *cell,
        calc_height = (gint) ypad * 2 + color_height;
 
        if (cell_area && color_width > 0 && color_height > 0) {
-               if (x_offset) {
-                       *x_offset = (((gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL) ?
-                                       (1.0 - xalign) : xalign) *
-                                       (cell_area->width - calc_width));
-                       *x_offset = MAX (*x_offset, 0);
-               }
-
-               if (y_offset) {
-                       *y_offset =(yalign *
-                               (cell_area->height - calc_height));
-                       *y_offset = MAX (*y_offset, 0);
-               }
+               xx = (((gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL) ?
+                               (1.0 - xalign) : xalign) *
+                               (cell_area->width - calc_width));
+               xx = MAX (xx, 0);
+
+               yy = yalign * (cell_area->height - calc_height);
+               yy = MAX (yy, 0);
        } else {
-               if (x_offset) *x_offset = 0;
-               if (y_offset) *y_offset = 0;
+               xx = 0;
+               yy = 0;
        }
 
+#if GTK_CHECK_VERSION(4, 0, 0)
+       aligned_area->x = xx;
+       aligned_area->y = yy;
+       aligned_area->width = calc_width;
+       aligned_area->height = calc_height;
+#else
+       if (x_offset)
+               *x_offset = xx;
+       if (y_offset)
+               *y_offset = yy;
        if (width)
                *width = calc_width;
-
        if (height)
                *height = calc_height;
+#endif
 }
 
 static void
+#if GTK_CHECK_VERSION(4, 0, 0)
+cell_renderer_color_snapshot (GtkCellRenderer *cell,
+                             GtkSnapshot *snapshot,
+                             GtkWidget *widget,
+                             const GdkRectangle *background_area,
+                             const GdkRectangle *cell_area,
+                             GtkCellRendererState flags)
+#else
 cell_renderer_color_render (GtkCellRenderer *cell,
                             cairo_t *cr,
                             GtkWidget *widget,
                             const GdkRectangle *background_area,
                             const GdkRectangle *cell_area,
                             GtkCellRendererState flags)
+#endif
 {
+#if GTK_CHECK_VERSION(4, 0, 0)
+       graphene_rect_t rect;
+#endif
        ECellRendererColorPrivate *priv;
        GdkRectangle pix_rect;
        GdkRectangle draw_rect;
@@ -103,10 +134,14 @@ cell_renderer_color_render (GtkCellRenderer *cell,
 
        priv = E_CELL_RENDERER_COLOR (cell)->priv;
 
+#if GTK_CHECK_VERSION(4, 0, 0)
+       cell_renderer_color_get_aligned_area (cell, widget, 0, cell_area, &pix_rect);
+#else
        cell_renderer_color_get_size (
                cell, widget, cell_area,
                &pix_rect.x, &pix_rect.y,
                &pix_rect.width, &pix_rect.height);
+#endif
 
        g_object_get (cell, "xpad", &xpad, "ypad", &ypad, NULL);
 
@@ -118,10 +153,19 @@ cell_renderer_color_render (GtkCellRenderer *cell,
        if (!gdk_rectangle_intersect (cell_area, &pix_rect, &draw_rect))
                return;
 
+#if GTK_CHECK_VERSION(4, 0, 0)
+       rect.origin.x = pix_rect.x;
+       rect.origin.y = pix_rect.y;
+       rect.size.width = draw_rect.width;
+       rect.size.height = draw_rect.height;
+
+       gtk_snapshot_append_color (snapshot, &priv->rgba, &rect);
+#else
        gdk_cairo_set_source_rgba (cr, &priv->rgba);
        cairo_rectangle (cr, pix_rect.x, pix_rect.y, draw_rect.width, draw_rect.height);
 
        cairo_fill (cr);
+#endif
 }
 
 static void
@@ -183,8 +227,13 @@ e_cell_renderer_color_class_init (ECellRendererColorClass *class)
        object_class->get_property = cell_renderer_color_get_property;
 
        cell_class = GTK_CELL_RENDERER_CLASS (class);
+#if GTK_CHECK_VERSION(4, 0, 0)
+       cell_class->get_aligned_area = cell_renderer_color_get_aligned_area;
+       cell_class->snapshot = cell_renderer_color_snapshot;
+#else
        cell_class->get_size = cell_renderer_color_get_size;
        cell_class->render = cell_renderer_color_render;
+#endif
 
        g_object_class_install_property (
                object_class,


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]