[evolution-data-server/wip/mcrha/gtk4] Cover ECellRendererColor
- From: Milan Crha <mcrha src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution-data-server/wip/mcrha/gtk4] Cover ECellRendererColor
- Date: Fri, 15 Oct 2021 08:49:27 +0000 (UTC)
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]