diff options
author | Benjamin Otte <otte@redhat.com> | 2018-04-12 16:48:31 +0200 |
---|---|---|
committer | Benjamin Otte <otte@redhat.com> | 2018-04-24 23:16:12 +0200 |
commit | 813e9c95fb6b01fda416701bf4235e8518cf207c (patch) | |
tree | 71a0d0747961079ad18c30d75e90b6f6e9f30153 /gdk/x11/gdkcairocontext-x11.h | |
parent | a83487a0c4e57063f02f7e3edecb2af9194d6c29 (diff) | |
download | gtk+-813e9c95fb6b01fda416701bf4235e8518cf207c.tar.gz |
gdk: Add Cairo context implementations for all backends
And make the GdkCairoContext as abstract.
The idea of this and thje following commits is to get rid of all
Cairo code in gdksurface.c (and $backend/gdksurface-$backend.c)
by moving that code into the Cairo context files.
In particular, the GdkSurfaceClass.begin_frame/end_frame()
functions (which are currently exclusively used by the Cairo code
should end up being moved to GdkDrawContextClass.begin/end_frame().
This has multiple benefits:
1. It unifies code between the different drawing contexts.
GL lives in GLContext, Vulkan in VulkanContext and Cairo in
CairoContext. In turn, this makes it way easier to reason about
what's going on in surface-specific code. Currently pretty much
all backends do things wrong when they want to sync to drawing
or to the frame clock.
2. It makes the API of GdkSurface smaller. No drawing code (apart
from creating the contexts) needs to remain.
3. It confines Cairo to the Drawcontext, thereby making it way
more obvious when backends are still using it in situations
where it may now conflict with OpenGL (like when doing the dnd
failed animation or in the APIs that I'm removing in this
branch).
4. We have 2 very different types of Cairo contexts: The X/win32
model, where we have a natively supported Cairo backend but do
double buffering ourselves and use similar surfaces and the
Wayland/Broadway model where we use image surfaces without any
Cairo backend support and have to submit the buffers manually.
By not sharing code between those 2 versions, we can make the
actual code way smaller. We also get around the need to create
1x1 image surfaces in the Wayland backend where we pretend
there's a native Cairo surface.
Diffstat (limited to 'gdk/x11/gdkcairocontext-x11.h')
-rw-r--r-- | gdk/x11/gdkcairocontext-x11.h | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/gdk/x11/gdkcairocontext-x11.h b/gdk/x11/gdkcairocontext-x11.h new file mode 100644 index 0000000000..2fb4d8d323 --- /dev/null +++ b/gdk/x11/gdkcairocontext-x11.h @@ -0,0 +1,55 @@ +/* GDK - The GIMP Drawing Kit + * + * gdkcairocontext-x11.h: X11 specific Cairo wrappers + * + * Copyright © 2016 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_X11_CAIRO_CONTEXT__ +#define __GDK_X11_CAIRO_CONTEXT__ + +#include "gdkconfig.h" + +#include "gdkcairocontextprivate.h" + +G_BEGIN_DECLS + +#define GDK_TYPE_X11_CAIRO_CONTEXT (gdk_x11_cairo_context_get_type ()) +#define GDK_X11_CAIRO_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GDK_TYPE_X11_CAIRO_CONTEXT, GdkX11CairoContext)) +#define GDK_IS_X11_CAIRO_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GDK_TYPE_X11_CAIRO_CONTEXT)) +#define GDK_X11_CAIRO_CONTEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GDK_TYPE_X11_CAIRO_CONTEXT, GdkX11CairoContextClass)) +#define GDK_IS_X11_CAIRO_CONTEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GDK_TYPE_X11_CAIRO_CONTEXT)) +#define GDK_X11_CAIRO_CONTEXT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GDK_TYPE_X11_CAIRO_CONTEXT, GdkX11CairoContextClass)) + +typedef struct _GdkX11CairoContext GdkX11CairoContext; +typedef struct _GdkX11CairoContextClass GdkX11CairoContextClass; + +struct _GdkX11CairoContext +{ + GdkCairoContext parent_instance; +}; + +struct _GdkX11CairoContextClass +{ + GdkCairoContextClass parent_class; +}; + +GDK_AVAILABLE_IN_ALL +GType gdk_x11_cairo_context_get_type (void) G_GNUC_CONST; + +G_END_DECLS + +#endif /* __GDK_X11_CAIRO_CONTEXT__ */ |