mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2024-12-26 21:51:08 +00:00
4aac0760b3
Also, split it into its own file - which was the original reason for looking at this code, the rewrite was an unintentional side effect. This changes the context to create surfaces on demand. So whenever the compositor holds onto a surface while GDK wants to render, it just creates a new surface. If the compositor releases surfaces, we will retain one for the next frame to be rendered, but free all extra ones. This way, we should get to a stage where we have exactly as many surfaces as needed and never allocate/free any.
58 lines
2.1 KiB
C
58 lines
2.1 KiB
C
/* GDK - The GIMP Drawing Kit
|
|
*
|
|
* Copyright © 2018 Benjamin Otte
|
|
*
|
|
* This library is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Library General Public
|
|
* License as published by the Free Software Foundation; either
|
|
* version 2 of the License, or (at your option) any later version.
|
|
*
|
|
* This library is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* Library General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Library General Public
|
|
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#ifndef __GDK_WAYLAND_CAIRO_CONTEXT__
|
|
#define __GDK_WAYLAND_CAIRO_CONTEXT__
|
|
|
|
#include "gdkconfig.h"
|
|
|
|
#include "gdkcairocontextprivate.h"
|
|
|
|
G_BEGIN_DECLS
|
|
|
|
#define GDK_TYPE_WAYLAND_CAIRO_CONTEXT (gdk_wayland_cairo_context_get_type ())
|
|
#define GDK_WAYLAND_CAIRO_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GDK_TYPE_WAYLAND_CAIRO_CONTEXT, GdkWaylandCairoContext))
|
|
#define GDK_IS_WAYLAND_CAIRO_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GDK_TYPE_WAYLAND_CAIRO_CONTEXT))
|
|
#define GDK_WAYLAND_CAIRO_CONTEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GDK_TYPE_WAYLAND_CAIRO_CONTEXT, GdkWaylandCairoContextClass))
|
|
#define GDK_IS_WAYLAND_CAIRO_CONTEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GDK_TYPE_WAYLAND_CAIRO_CONTEXT))
|
|
#define GDK_WAYLAND_CAIRO_CONTEXT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GDK_TYPE_WAYLAND_CAIRO_CONTEXT, GdkWaylandCairoContextClass))
|
|
|
|
typedef struct _GdkWaylandCairoContext GdkWaylandCairoContext;
|
|
typedef struct _GdkWaylandCairoContextClass GdkWaylandCairoContextClass;
|
|
|
|
struct _GdkWaylandCairoContext
|
|
{
|
|
GdkCairoContext parent_instance;
|
|
|
|
GSList *surfaces;
|
|
cairo_surface_t *cached_surface;
|
|
cairo_surface_t *paint_surface;
|
|
};
|
|
|
|
struct _GdkWaylandCairoContextClass
|
|
{
|
|
GdkCairoContextClass parent_class;
|
|
};
|
|
|
|
GDK_AVAILABLE_IN_ALL
|
|
GType gdk_wayland_cairo_context_get_type (void) G_GNUC_CONST;
|
|
|
|
G_END_DECLS
|
|
|
|
#endif /* __GDK_WAYLAND_CAIRO_CONTEXT__ */
|