[Libreoffice-commits] core.git: vcl/Library_vclplug_gtk4.mk vcl/unx
Caolán McNamara (via logerrit)
logerrit at kemper.freedesktop.org
Thu Jun 17 12:59:08 UTC 2021
vcl/Library_vclplug_gtk4.mk | 1
vcl/unx/gtk3/gtkinst.cxx | 83 ---------------------------------
vcl/unx/gtk4/gtkinst.cxx | 1
vcl/unx/gtk4/surfacepaintable.cxx | 93 ++++++++++++++++++++++++++++++++++++++
vcl/unx/gtk4/surfacepaintable.hxx | 32 +++++++++++++
5 files changed, 128 insertions(+), 82 deletions(-)
New commits:
commit 5383f219253eb5d7c0eeee2570187e4369987d23
Author: Caolán McNamara <caolanm at redhat.com>
AuthorDate: Thu Jun 17 10:27:12 2021 +0100
Commit: Caolán McNamara <caolanm at redhat.com>
CommitDate: Thu Jun 17 14:58:26 2021 +0200
split SurfacePaintable out
Change-Id: I07d2109080f19fb7cf95bc439e5d99ba3247c2bc
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/117371
Tested-by: Caolán McNamara <caolanm at redhat.com>
Reviewed-by: Caolán McNamara <caolanm at redhat.com>
diff --git a/vcl/Library_vclplug_gtk4.mk b/vcl/Library_vclplug_gtk4.mk
index 93f8d8c90673..98349413a1d3 100644
--- a/vcl/Library_vclplug_gtk4.mk
+++ b/vcl/Library_vclplug_gtk4.mk
@@ -97,6 +97,7 @@ $(eval $(call gb_Library_add_exception_objects,vclplug_gtk4,\
vcl/unx/gtk4/gloactiongroup \
vcl/unx/gtk4/hudawareness \
vcl/unx/gtk4/notifyinglayout \
+ vcl/unx/gtk4/surfacepaintable \
))
ifeq ($(OS),LINUX)
diff --git a/vcl/unx/gtk3/gtkinst.cxx b/vcl/unx/gtk3/gtkinst.cxx
index 3aec591a6a7a..b7c315e84abd 100644
--- a/vcl/unx/gtk3/gtkinst.cxx
+++ b/vcl/unx/gtk3/gtkinst.cxx
@@ -4468,85 +4468,6 @@ namespace
}
}
-#if GTK_CHECK_VERSION(4, 0, 0)
-
-G_BEGIN_DECLS
-
-G_DECLARE_FINAL_TYPE(SurfacePaintable, surface_paintable, SURFACE, PAINTABLE, GObject)
-
-struct _SurfacePaintable
-{
- GObject parent_instance;
- int width;
- int height;
- cairo_surface_t* surface;
-};
-
-struct _SurfacePaintableClass
-{
- GObjectClass parent_class;
-};
-
-static void surface_paintable_snapshot(GdkPaintable *paintable, GdkSnapshot *snapshot,
- double width, double height)
-{
- graphene_rect_t rect = GRAPHENE_RECT_INIT(0.0f, 0.0f,
- static_cast<float>(width),
- static_cast<float>(height));
- SurfacePaintable *self = SURFACE_PAINTABLE(paintable);
- cairo_t* cr = gtk_snapshot_append_cairo(GTK_SNAPSHOT(snapshot), &rect);
- cairo_set_source_surface(cr, self->surface, 0, 0);
- cairo_paint(cr);
- cairo_destroy(cr);
-}
-
-static int surface_paintable_get_intrinsic_width(GdkPaintable *paintable)
-{
- SurfacePaintable *self = SURFACE_PAINTABLE(paintable);
- return self->width;
-}
-
-static int surface_paintable_get_intrinsic_height(GdkPaintable *paintable)
-{
- SurfacePaintable *self = SURFACE_PAINTABLE(paintable);
- return self->height;
-}
-
-static void surface_paintable_init_interface(GdkPaintableInterface *iface)
-{
- iface->snapshot = surface_paintable_snapshot;
- iface->get_intrinsic_width = surface_paintable_get_intrinsic_width;
- iface->get_intrinsic_height = surface_paintable_get_intrinsic_height;
-}
-
-G_DEFINE_TYPE_WITH_CODE(SurfacePaintable, surface_paintable, G_TYPE_OBJECT,
- G_IMPLEMENT_INTERFACE(GDK_TYPE_PAINTABLE,
- surface_paintable_init_interface));
-
-static void surface_paintable_init(SurfacePaintable *self)
-{
- self->width = 0;
- self->height = 0;
- self->surface = nullptr;
-}
-
-static void surface_paintable_dispose(GObject *object)
-{
- SurfacePaintable* self = SURFACE_PAINTABLE(object);
- cairo_surface_destroy(self->surface);
- G_OBJECT_CLASS(surface_paintable_parent_class)->dispose(object);
-}
-
-static void surface_paintable_class_init(SurfacePaintableClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS(klass);
- object_class->dispose = surface_paintable_dispose;
-}
-
-G_END_DECLS
-
-#endif
-
namespace
{
#if GTK_CHECK_VERSION(4, 0, 0)
@@ -4565,9 +4486,7 @@ namespace
cairo_destroy(cr);
SurfacePaintable* pPaintable = SURFACE_PAINTABLE(g_object_new(surface_paintable_get_type(), nullptr));
- pPaintable->surface = target;
- pPaintable->width = aSize.Width();
- pPaintable->height = aSize.Height();
+ surface_paintable_set_source(pPaintable, target, aSize.Width(), aSize.Height());
return pPaintable;
}
diff --git a/vcl/unx/gtk4/gtkinst.cxx b/vcl/unx/gtk4/gtkinst.cxx
index 4dc435a2bbf4..2bc0bc1c5e0a 100644
--- a/vcl/unx/gtk4/gtkinst.cxx
+++ b/vcl/unx/gtk4/gtkinst.cxx
@@ -12,6 +12,7 @@
#include "convert3to4.hxx"
#include "notifyinglayout.hxx"
+#include "surfacepaintable.hxx"
#include "../gtk3/gtkinst.cxx"
diff --git a/vcl/unx/gtk4/surfacepaintable.cxx b/vcl/unx/gtk4/surfacepaintable.cxx
new file mode 100644
index 000000000000..052b2fbacdef
--- /dev/null
+++ b/vcl/unx/gtk4/surfacepaintable.cxx
@@ -0,0 +1,93 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include "surfacepaintable.hxx"
+
+struct _SurfacePaintable
+{
+ GObject parent_instance;
+ int width;
+ int height;
+ cairo_surface_t* surface;
+};
+
+namespace
+{
+struct _SurfacePaintableClass : public GObjectClass
+{
+};
+}
+
+static void surface_paintable_snapshot(GdkPaintable* paintable, GdkSnapshot* snapshot, double width,
+ double height)
+{
+ graphene_rect_t rect
+ = GRAPHENE_RECT_INIT(0.0f, 0.0f, static_cast<float>(width), static_cast<float>(height));
+ SurfacePaintable* self = SURFACE_PAINTABLE(paintable);
+ cairo_t* cr = gtk_snapshot_append_cairo(GTK_SNAPSHOT(snapshot), &rect);
+ cairo_set_source_surface(cr, self->surface, 0, 0);
+ cairo_paint(cr);
+ cairo_destroy(cr);
+}
+
+static int surface_paintable_get_intrinsic_width(GdkPaintable* paintable)
+{
+ SurfacePaintable* self = SURFACE_PAINTABLE(paintable);
+ return self->width;
+}
+
+static int surface_paintable_get_intrinsic_height(GdkPaintable* paintable)
+{
+ SurfacePaintable* self = SURFACE_PAINTABLE(paintable);
+ return self->height;
+}
+
+static void surface_paintable_init_interface(GdkPaintableInterface* iface)
+{
+ iface->snapshot = surface_paintable_snapshot;
+ iface->get_intrinsic_width = surface_paintable_get_intrinsic_width;
+ iface->get_intrinsic_height = surface_paintable_get_intrinsic_height;
+}
+
+G_DEFINE_TYPE_WITH_CODE(SurfacePaintable, surface_paintable, G_TYPE_OBJECT,
+ G_IMPLEMENT_INTERFACE(GDK_TYPE_PAINTABLE,
+ surface_paintable_init_interface));
+
+static void surface_paintable_init(SurfacePaintable* self)
+{
+ self->width = 0;
+ self->height = 0;
+ self->surface = nullptr;
+
+ // prevent loplugin:unreffun firing on macro generated function
+ (void)surface_paintable_get_instance_private(self);
+}
+
+static void surface_paintable_dispose(GObject* object)
+{
+ SurfacePaintable* self = SURFACE_PAINTABLE(object);
+ cairo_surface_destroy(self->surface);
+ G_OBJECT_CLASS(surface_paintable_parent_class)->dispose(object);
+}
+
+static void surface_paintable_class_init(SurfacePaintableClass* klass)
+{
+ GObjectClass* object_class = G_OBJECT_CLASS(klass);
+ object_class->dispose = surface_paintable_dispose;
+}
+
+void surface_paintable_set_source(SurfacePaintable* pPaintable, cairo_surface_t* pSource,
+ int nWidth, int nHeight)
+{
+ pPaintable->surface = pSource;
+ pPaintable->width = nWidth;
+ pPaintable->height = nHeight;
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/vcl/unx/gtk4/surfacepaintable.hxx b/vcl/unx/gtk4/surfacepaintable.hxx
new file mode 100644
index 000000000000..3e8c79f8ac1a
--- /dev/null
+++ b/vcl/unx/gtk4/surfacepaintable.hxx
@@ -0,0 +1,32 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#pragma once
+
+#include <gtk/gtk.h>
+#include <cairo.h>
+
+G_BEGIN_DECLS
+
+/*
+ Provide a mechanism to allow continuing to use cairo surface where a GdkPaintable
+ is required
+*/
+
+G_DECLARE_FINAL_TYPE(SurfacePaintable, surface_paintable, SURFACE, PAINTABLE, GObject)
+
+/*
+ Set the surface to paint, takes ownership of pSource
+*/
+void surface_paintable_set_source(SurfacePaintable* pPaintable, cairo_surface_t* pSource,
+ int nWidth, int nHeight);
+
+G_END_DECLS
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
More information about the Libreoffice-commits
mailing list