summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenjamin Otte <otte@redhat.com>2018-03-18 05:14:52 +0100
committerBenjamin Otte <otte@redhat.com>2018-03-18 05:57:07 +0100
commit82a99a3643f49632e9c633c294ab47044daab3c5 (patch)
tree78b92f398ac18ccfa37062d4de0b9ba05cdd1cbd
parentd54ca3c74f360c36810ec21ecac5d7f5065bba9f (diff)
downloadgtk+-82a99a3643f49632e9c633c294ab47044daab3c5.tar.gz
texture: Expose subclasses as subclasses
This is necessary so that bidnings work properly and don't make gdk_gl_texture_release() a function on GdkTexture. It also allows code to identify what type of texture they are dealing with. Finally, we can now decide to add getters later without screwing anything up, if we want to allow people to access GL textures directly.
-rw-r--r--docs/reference/gdk/gdk4-sections.txt10
-rw-r--r--gdk/gdkgltexture.c18
-rw-r--r--gdk/gdkgltexture.h16
-rw-r--r--gdk/gdkgltextureprivate.h4
-rw-r--r--gdk/gdkmemorytexture.h14
-rw-r--r--gdk/gdkmemorytextureprivate.h4
-rw-r--r--gtk/gtkglarea.c2
7 files changed, 47 insertions, 21 deletions
diff --git a/docs/reference/gdk/gdk4-sections.txt b/docs/reference/gdk/gdk4-sections.txt
index 989c0feae1..c63a170560 100644
--- a/docs/reference/gdk/gdk4-sections.txt
+++ b/docs/reference/gdk/gdk4-sections.txt
@@ -751,6 +751,16 @@ gdk_texture_get_type
GDK_TYPE_TEXTURE
GDK_IS_TEXTURE
GDK_TEXTURE
+GdkGLTextureClass
+gdk_gl_texture_get_type
+GDK_TYPE_GL_TEXTURE
+GDK_IS_GL_TEXTURE
+GDK_GL_TEXTURE
+GdkMemoryTextureClass
+gdk_memory_texture_get_type
+GDK_TYPE_MEMORY_TEXTURE
+GDK_IS_MEMORY_TEXTURE
+GDK_MEMORY_TEXTURE
</SECTION>
<SECTION>
diff --git a/gdk/gdkgltexture.c b/gdk/gdkgltexture.c
index 8f93dcb879..8d97c316a6 100644
--- a/gdk/gdkgltexture.c
+++ b/gdk/gdkgltexture.c
@@ -133,28 +133,26 @@ gdk_gl_texture_get_id (GdkGLTexture *self)
/**
* gdk_gl_texture_release:
- * @texture: a #GdkTexture wrapping a GL texture
+ * @self: a #GdkTexture wrapping a GL texture
*
- * Releases the GL resources held by a #GdkTexture that
- * was created with gdk_texture_new_for_gl().
+ * Releases the GL resources held by a #GdkGLTexture that
+ * was created with gdk_gl_texture_new().
*
* The texture contents are still available via the
* gdk_texture_download() function, after this function
* has been called.
*/
void
-gdk_gl_texture_release (GdkTexture *texture)
+gdk_gl_texture_release (GdkGLTexture *self)
{
- GdkGLTexture *self;
GdkWindow *window;
+ GdkTexture *texture;
cairo_t *cr;
- g_return_if_fail (GDK_IS_GL_TEXTURE (texture));
-
- self = GDK_GL_TEXTURE (texture);
-
+ g_return_if_fail (GDK_IS_GL_TEXTURE (self));
g_return_if_fail (self->saved == NULL);
+ texture = GDK_TEXTURE (self);
self->saved = cairo_image_surface_create (CAIRO_FORMAT_ARGB32,
texture->width, texture->height);
@@ -178,7 +176,7 @@ gdk_gl_texture_release (GdkTexture *texture)
}
/**
- * gdk_gl_texture_new: (constructor)
+ * gdk_gl_texture_new:
* @context: a #GdkGLContext
* @id: the ID of a texture that was created with @context
* @width: the nominal width of the texture
diff --git a/gdk/gdkgltexture.h b/gdk/gdkgltexture.h
index e5d24bd605..82dae098e1 100644
--- a/gdk/gdkgltexture.h
+++ b/gdk/gdkgltexture.h
@@ -23,11 +23,23 @@
#error "Only <gdk/gdk.h> can be included directly."
#endif
-#include <gdk/gdktypes.h>
#include <gdk/gdkglcontext.h>
+#include <gdk/gdktexture.h>
G_BEGIN_DECLS
+#define GDK_TYPE_GL_TEXTURE (gdk_gl_texture_get_type ())
+
+#define GDK_GL_TEXTURE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GDK_TYPE_GL_TEXTURE, GdkGLTexture))
+#define GDK_IS_GL_TEXTURE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GDK_TYPE_GL_TEXTURE))
+
+typedef struct _GdkGLTexture GdkGLTexture;
+typedef struct _GdkGLTextureClass GdkGLTextureClass;
+
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GdkGLTexture, g_object_unref)
+
+GDK_AVAILABLE_IN_ALL
+GType gdk_gl_texture_get_type (void) G_GNUC_CONST;
GDK_AVAILABLE_IN_ALL
GdkTexture * gdk_gl_texture_new (GdkGLContext *context,
@@ -38,7 +50,7 @@ GdkTexture * gdk_gl_texture_new (GdkGLContext
gpointer data);
GDK_AVAILABLE_IN_ALL
-void gdk_gl_texture_release (GdkTexture *texture);
+void gdk_gl_texture_release (GdkGLTexture *texture);
G_END_DECLS
diff --git a/gdk/gdkgltextureprivate.h b/gdk/gdkgltextureprivate.h
index 180a99d064..06035eea07 100644
--- a/gdk/gdkgltextureprivate.h
+++ b/gdk/gdkgltextureprivate.h
@@ -7,10 +7,6 @@
G_BEGIN_DECLS
-#define GDK_TYPE_GL_TEXTURE (gdk_gl_texture_get_type ())
-
-G_DECLARE_FINAL_TYPE (GdkGLTexture, gdk_gl_texture, GDK, GL_TEXTURE, GdkTexture)
-
GdkGLContext * gdk_gl_texture_get_context (GdkGLTexture *self);
guint gdk_gl_texture_get_id (GdkGLTexture *self);
diff --git a/gdk/gdkmemorytexture.h b/gdk/gdkmemorytexture.h
index 31d30fbd7f..c02fc784d4 100644
--- a/gdk/gdkmemorytexture.h
+++ b/gdk/gdkmemorytexture.h
@@ -86,6 +86,20 @@ typedef enum {
#error "Unknown byte order for GDK_MEMORY_DEFAULT"
#endif
+#define GDK_TYPE_MEMORY_TEXTURE (gdk_memory_texture_get_type ())
+
+#define GDK_MEMORY_TEXTURE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GDK_TYPE_MEMORY_TEXTURE, GdkMemoryTexture))
+#define GDK_IS_MEMORY_TEXTURE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GDK_TYPE_MEMORY_TEXTURE))
+
+typedef struct _GdkMemoryTexture GdkMemoryTexture;
+typedef struct _GdkMemoryTextureClass GdkMemoryTextureClass;
+
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GdkMemoryTexture, g_object_unref)
+
+
+GDK_AVAILABLE_IN_ALL
+GType gdk_memory_texture_get_type (void) G_GNUC_CONST;
+
GDK_AVAILABLE_IN_ALL
GdkTexture * gdk_memory_texture_new (int width,
int height,
diff --git a/gdk/gdkmemorytextureprivate.h b/gdk/gdkmemorytextureprivate.h
index 9634b1ccf3..caa4b2014c 100644
--- a/gdk/gdkmemorytextureprivate.h
+++ b/gdk/gdkmemorytextureprivate.h
@@ -31,10 +31,6 @@ G_BEGIN_DECLS
#define GDK_MEMORY_CAIRO_FORMAT_ARGB32 GDK_MEMORY_DEFAULT
-#define GDK_TYPE_MEMORY_TEXTURE (gdk_memory_texture_get_type ())
-
-G_DECLARE_FINAL_TYPE (GdkMemoryTexture, gdk_memory_texture, GDK, MEMORY_TEXTURE, GdkTexture)
-
GdkMemoryFormat gdk_memory_texture_get_format (GdkMemoryTexture *self);
const guchar * gdk_memory_texture_get_data (GdkMemoryTexture *self);
gsize gdk_memory_texture_get_stride (GdkMemoryTexture *self);
diff --git a/gtk/gtkglarea.c b/gtk/gtkglarea.c
index e44c68ef66..85b3cb9906 100644
--- a/gtk/gtkglarea.c
+++ b/gtk/gtkglarea.c
@@ -386,7 +386,7 @@ delete_one_texture (gpointer data)
Texture *texture = data;
if (texture->holder)
- gdk_gl_texture_release (texture->holder);
+ gdk_gl_texture_release (GDK_GL_TEXTURE (texture->holder));
if (texture->id != 0)
{